我以爲學習某樣知識的最大原動力在於,當你以爲現有知識不足以解決當前問題的時候的求知慾。爲了完全與系統底層作個了斷。今天開始全面複習系統底層知識,從操做系統開始吧,到UNIX,再到虛擬機。我但願本身能把一件事情的本質,用本身的話講出來。設計模式
計算機是什麼?說白了,硬件加軟件的集合。操做系統是什麼?是操做最底層硬件的那層軟件。有了操做系統,咱們就無需外部輸入1010這樣的二進制信息讓計算機處理了,這麼說吧,計算機硬件是一組資源,操做系統把這些資源都封裝了,讓你能夠更方便的使用它。服務器
對於計算機的資源,能夠分爲4類,按照教科書上的說法,就是處理器、存儲器、I/O設備以及信息(數據和程序),說白了,指的就是CPU、內存、輸入輸出設備(鼠標、鍵盤、顯示器等等)、硬盤和硬盤上的軟件。操做系統封裝了計算機硬件系統,而且管理計算機的4種資源,這就是操做系統的功能。很容易理解吧。網絡
操做系統的發展歷程很重要,它可讓咱們意識到,技術改進最重要的做用,就是改變目前最迫切須要改變的東西。分佈式
這裏三言兩語介紹一下操做系統的發展歷程。模塊化
傳說中的紙帶操做。把程序和數據用最簡單的紙帶記錄下來,而後經過紙帶輸入(I/O)進計算機(內存),而後計算機運行。這時候咱們能夠看到,計算機I/O和信息(硬盤程序、數據)都是經過簡單的紙帶來存儲並傳送的。速度固然慢。性能
這個跟紙帶也脫不了關係,不過是將紙帶信息預先裝進磁帶上,而後計算機運行的時候,程序和信息從磁帶調入內存。這樣的速度固然大大提高了。咱們能夠看到,這種方式,說白了就是給計算機增長了一個簡單的硬盤,程序和數據放在硬盤上,而不是紙帶上。學習
這是最先的操做系統了。CPU控制「監督程序」將磁帶上的一個做業(程序和數據)調入內存,而後運行它,而後調用下一個做業入內存,再運行它。這樣依次運行完磁帶上的全部做業。系統內存中一個時刻只有一道程序在運行,CPU也只是單線程的處理完IO再處理程序這樣循環。spa
這是效率很是高的一種操做系統。用戶提交的做業在硬盤上並排成一個隊列,而後調度程序把若干做業放進內存。某個做業執行的時候,遇到IO請求,不阻塞,不讓CPU空閒,而是讓CPU去執行內存中的另外一個做業。這樣各個做業輪流執行,CPU等系統資源儘量的保持佔用。操作系統
這是一種多用戶系統,主要特色就是多用戶同時使用,每一個用戶都有本身的終端對計算機進行操做。分時系統採用了很是經典的時間片,即每一個用戶、每一個做業在一個時間片內,都依次運行,並只運行一個很短的時間,這樣看上去好像每一個用戶都獨佔了整個計算機同樣。分時系統主要用於查詢系統。線程
實時系統能夠看做是一種面向內部的要求更高更精確的分時系統。不過這種「分時」不必定經過時間片來控制,也多是經過一個設定的截止時間來控制。系統內部是對多項實時任務的採集和控制。說白了,就是一種精確的多任務系統。
這個就很簡單啦,分別有單用戶單任務操做系統(CP/M、MS-DOS等)、單用戶多任務操做系統(Windows9五、XP等)、多用戶多任務操做系統(UNIX OS等)。
這是最先期的操做系統,僅僅追求功能和實現,無需深究。
將OS劃分爲若干各自獨立的模塊,如進程管理模塊、存儲器管理模塊、文件管理模塊等,並將各模塊劃分爲各自的子模塊,這樣不斷細分,系統就有比較清晰的模塊化結構。不過因爲模塊化結構設計中,各個模塊的設計齊頭並進,沒有可靠的「決定順序」,這種設計又被稱爲「無序模塊法」。這一代OS在第一代的基礎上加上了模塊的劃分,便前進了一大步。
自底向上的分層設計,最底層只面向硬件,功能單一而正確,此後每層看待下層都是透明的,功能不斷豐富、往高層不斷抽象,高層只依賴於它的底層。這也是面向對象思想的體現。這種結構與咱們熟知的網絡協議體系結構很是相似。這種結構在軟件設計上是很是常見的。簡單說就是按層劃分、不斷抽象,每層只操做下一層。
微內核結構的OS將系統劃分爲兩大部分:微內核和多個系統服務器。微內核指的是足夠小的、能實現現代OS最基本功能的部分。它負責於硬件最基本的聯繫、與外層系統服務器通訊這兩大基本功能。外層系統服務器指的是操做系統內部的,將各類系統服務都抽象爲一種模塊化的服務器結構,用一個進程來表示,如文件服務器、進程服務器等。咱們都知道,服務器的本質就是對消息的請求和響應,這十分適用於當今系統所要求的分佈式處理。用一個足夠簡單和高效率的微內核來對各個服務器進行實際的處理,各個服務器是整體而言是模塊化的,而服務器自己是創建在分層次的OS上的,這種設計模式不但可靠,並且擴展性和性能都很是優越。這種設計實在是優雅。