操做系統核心原理-1.操做系統導論

PS:操做系統原理是大學計算機專業最爲重要的一門專業基礎課程之一,對於操做系統核心原理的理解對於一個合格的程序員來講十分重要,因而我繼續個人「三大原理,兩個協議,一種結構」複習,三大原理中操做系統原理首當其衝,這裏主要依靠閱讀《操做系統之哲學原理》來進行復習,將其中重要的部分記錄下來,與各位分享。固然,更推薦你們去讀讀這本書,相信都會有必定收穫。程序員

1、程序是如何運行的?

1.1 程序運行的四大要素

  (1)程序設計語言數據庫

  首先,咱們得使用一門程序設計語言進行編程,通常咱們使用的都是高級程序設計語言(如C、C++、Java、C#等)。編程

  (2)編譯系統緩存

  咱們寫好了代碼,可是因爲計算機不認識高級語言編寫的程序,須要編譯成計算機可以識別的機器語言,這就須要編譯器和彙編器的幫助。安全

  (3)操做系統數據結構

  機器語言程序須要加載到內存,才能造成一個運動中的程序(即進程),這就須要操做系統的幫助。架構

About:進程須要在計算機芯片即CPU上執行纔算是真正在執行,而將進程調度到CPU上運行也是由操做系統完成的,這裏也就不難理解爲何進程管理會在咱們的教科書中排在最重要的位置了。併發

  (4)指令集結構(計算機硬件系統)學習

  在CPU上執行的機器語言指令須要變成可以在一個個時鐘脈衝裏執行的基本操做,這就須要指令集結構和計算機硬件的支持。spa

1.2 程序運行的基本流程

  基於上面提到的四大要素,咱們能夠得出下面一幅圖,該圖從一個線性角度展現了程序的演變過程,可以幫助咱們理解整個程序是如何在計算機上執行的。

  事實上,程序能夠執行在機器語言或彙編語言上編寫,用這種被稱爲「低級」(我更願意稱其爲底層)的語言編寫出來的機器語言程序無需通過編譯器的翻譯就能夠在計算機指令集上執行。若是是在彙編語言上編寫的彙編程序,則只須要通過彙編器的翻譯便可加載執行。

2、操做系統是什麼?

2.1 兩個問題

  (1)操做系統究竟是什麼鬼?

  操做系統是介於計算機和應用軟件之間的一個軟件系統,操做系統的上層和下層都有其餘的對象存在:

  從上圖能夠看出,OS上邊是應用軟件,下邊是硬件平臺。

  (2)操做系統到底操控什麼事?

  最原始的計算機並無OS,直接由人來掌管事情。隨着計算機複雜性的增加,人已經不能勝任直接掌控計算機了。因而,OS這個軟件被編寫出來幫咱們掌控計算機,令人類從日益複雜的掌控任務中解脫出來。既然OS是專門掌控計算機的,那麼計算機上發生的全部事情都須要OS的知曉和承認,未經OS贊成的任何事情均被視爲非法的(想一想病毒和入侵攻擊者試圖作的事情)。

2.2 兩種角色

  (1)魔術家

  魔術家的目標是把差的東西變好,把少的東西變多,把複雜變簡單。一樣,OS將計算機以一個更加容易、更加方便、更增強大的方式呈現給用戶。

Example:OS經過進程抽象讓每個用戶感受有一臺本身獨享的CPU,經過虛擬內存抽象,讓用戶感受物理內存空間具備無限擴張性,這就是把少變多的一個實例。

  (2)管理者

  操做系統管理計算機上的軟硬件資源,如CPU、內存、磁盤等,使得不一樣用戶之間或者同一用戶的不一樣程序之間能夠安全有序地共享這些硬件資源。

  那麼,問題來了,如何讓用戶很好地利用這些硬件資源呢?這就是分塊(Parcel Out),把硬件分塊給應用程序使用。這就涉及到有效和公平的原則,這也是一個管理者的必備素質,更是設計操做系統時的不懈追求!

  操做系統的兩個角色之間既有區別又有聯繫,爲了完成不一樣的任務,OS有時須要扮演魔術師,有時有須要扮演管理者,還有時須要同時扮演兩個角色。

3、操做系統的範疇

3.1 CPU管理

  即如何分配CPU給不一樣應用和用戶,對於進程管理堅持三個目標:一是公平(每一個程序都有機會使用CPU),二是非阻塞(任何程序不能無休止地阻撓其餘程序的正常推動),三是優先級(優先級高的程序開始運行則優先級低的就須要讓出資源—>讓一部分人先富起來)。

3.2 內存管理

  即如何分配內存給不一樣應用和用戶,主要管理緩存、主存、磁盤、磁帶等存儲介質所造成的內存架構。其目的主要有二:一是將少變多(好比虛擬內存的使用可以使得運行程序的大小大大地增長),二是讓多個程序共享同一個物理內存(這就須要對物理內存進行分割和保護,不讓一個程序訪問另外一個程序所佔的內存空間,專業術語稱爲運行時不能越界訪問)。

3.3 外存管理

  即如何分配外存(磁盤)給不一樣應用和用戶,外存管理也稱存儲管理,也就是咱們所說的文件系統,其目的是將磁盤變爲一個很容易使用的存儲介質以提供給用戶使用。

3.4 I/O管理

  即如何分配輸入輸出設備給應用和用戶,也稱爲設備管理,也就是管理輸入輸出設備。其目的主要有兩個:一是屏蔽不一樣設備的差別性(用戶用一樣的方式訪問不一樣的設備,從而減低編程的難度),二是提供併發訪問(即將那些看上去並不具有共享特徵的設備如打印機變得能夠共享)。

  操做系統的四個核心功能以下圖所示:

4、小結

  操做系統的技巧也應用於不少領域,如抽象、緩存、併發等。操做系統簡單說來就是實現抽象:進程抽象、文件抽象、虛擬存儲抽象等。而不少領域都會使用抽象,例如數據結構和程序設計(抽象數據類型?抽象類?);不少地方也會用到緩存,例如開發Web應用程序時使用緩存下降數據庫訪問壓力,加快頁面響應速度等等。更爲重要的是,對於一個程序員來講,要想知道計算機在軟件層面是怎麼運轉的,就得學習操做系統。

參考資料

鄒恆明,《操做系統之哲學原理》,機械工業出版社

 

相關文章
相關標籤/搜索