計算機系統008 - 作業系統概況

SniperPan發表於2017-07-25

本篇開始,將介紹作業系統相關知識,這一部分的知識涵蓋作業系統通識到具體的平臺。和本系列前面所有文章一樣,力求精簡但有所突破。

1. 硬體使用回顧

如果已經閱讀過前面的文章,那麼應該對計算機硬體執行計算的概念有所瞭解,這裡做一下簡單回顧,也是作為作業系統必要性的基礎。
計算機硬體主要可以分為如下四大部分:

  • CPU,包括控制單元CU和執行單元EU,執行單元其實還是通過算術邏輯單元ALU來實現功能
  • 儲存器,包括記憶體、Cache,以及最貼近CPU的暫存器等
  • 輸入輸出裝置,包括鍵盤、滑鼠、顯示器、磁碟等等
  • 匯流排,連線上述三種元器件的電氣線纜,起到連通的作用

那麼典型的計算過程是:

  • 基於CPU支援的指令集ISA編寫任務描述
  • 通過輸入裝置輸入到儲存器中,注意這期間使用到了匯流排
  • CPU執行計算任務,期間同樣使用到了匯流排
  • 通過輸出裝置輸出結果,期間使用到了匯流排

看起來也沒什麼問題,程式設計師應該有能力獨立完成上述步驟,順利呼叫CPU進行計算。但有一個問題要先引起重視,那就是匯流排的使用時機。

1.1 匯流排使用

圖中可以看出,匯流排分為地址匯流排、資料匯流排、控制匯流排三種,這裡不去討論分類的細節,畢竟從名稱上所能觀察到的含義足夠使用。思考的問題是,為什麼匯流排要分類?

匯流排之所以要分類,首先是因為匯流排總數有限,就是說從硬體層面,不能將每兩個可能發生通訊的元件之間全部用匯流排相連。既然不能形成點對點專線,而元件之間又確實有通訊的需求,那就只能採取一個辦法,共用匯流排

共用匯流排是好事,畢竟遠離CPU的線纜大部分時候都是處於空閒狀態的,假如能夠共享硬體匯流排,無論是從經濟還是電路設計的角度來講,都是一件節約成本的事。簡單的共用無非就是大家約定俗成,分時段使用,不過這樣一點也不高效,畢竟使不使用匯流排要看任務描述中的指令順序,要看指令的操作物件是資料、地址還是需要控制。為了更加高效地利用線纜,那麼一定需要一個類似匯流排控制的單元。該單元管理並維護著所有匯流排的使用,擁有排程的能力,這樣才能夠及時填補空檔,並有效響應其他元件使用匯流排的需求。

到了這裡,就自然明白匯流排為什麼要分類了。分類是為了更好地管理匯流排,不僅要分,最好是能進一步細分,分類越細,越能在排程時提供更多資訊支援,越能物盡其用。

說了這麼些關於匯流排使用的問題,主要是引出一個概念:硬體資源獨佔時,可以隨意使用,但帶來問題是使用率低,不經濟。如果要共享,就必須有所謂的控制單元,建立規則,進行管理。否則各個使用者不僅無法正常完成自己的計算任務,而且還很有可能干擾其他人的計算需求。

1.2 資源管理

如上所述,當需要共享某一硬體資源來達到提高利用率並同時保持良好響應的目標時,就需要有控制單元進行管理。對於計算機硬體整體而言,如獨佔使用,每次只執行一個計算任務,那麼只要在匯流排這一層實現控制即可。然而如果要執行多個計算任務,或是多個使用者共享使用,那就需要一個控制單元來完成管理、排程的功能。而在計算機系統中,這個單元就叫做作業系統。

2. 作業系統

那麼不言而喻,作業系統最根本的工作是進行資源管理,確保計算任務可以正確執行。當然任何管理總是有管理理念的差異存在,對應的也就是作業系統排程演算法各有側重。對比作業系統發展史,主要有如下兩個方向:

  • 追求高CPU利用率,即儘可能填滿CPU指令週期。典型的有批處理作業系統、多道作業系統
  • 追求低響應時長,即有更好的互動體驗。典型的有分時作業系統

這兩個方向有各自相違背的點,因為所謂的低響應時長,就代表著必須能夠中斷執行中的任務,而每次中斷,實質上,對於單個任務來講,都是延長了總執行時長的因素。不過如果能因此服務於更多使用者、更多計算任務,甚至更好地將使用到不同元件的任務同時執行,一點點中斷開銷還是值得的。

2.1 作業系統的定義

道理講到這裡,也不能免俗,需要為作業系統下一個定義。作業系統是一種系統軟體,它管理計算機硬體和軟體資源,並向計算機應用程式提供通用服務。

換成圖示的話,它在整個計算任務中的位置如下所示:

貌似前文中我們只講到作業系統是管理計算機硬體的,但這裡的定義中還出現了軟體資源,那麼這些軟體資源指的又是什麼?

我們知道,所謂軟體、應用程式這些名詞代表的無非是計算任務描述,它從根本上是由CPU ISA中指令加上操作物件有序組合而成。既然核心元素是CPU ISA,而各廠家CPU又有所不同,那麼編寫程式時,一定需要根據具體ISA去編寫。這就帶來一個問題,每個軟體想要執行在某一CPU上,先要找到手冊,逐字逐句進行翻譯(指令對映),才能執行。但這些工作其實都是機械重複且低效的,也就意味著要重複地投入大量人力物力來完成這個步驟,然而有一個裝置很擅長幹這種髒活累活,那就是計算機。如果我們可以將指令對映的步驟自動化,讀取CPU ISA手冊,自動對映,就無需再手動處理。而這個過程,就是編譯器的雛形。

所以軟體資源指的是一些基礎功能資源,提供一些基礎功能,以供編寫計算任務描述時使用,簡化任務描述的編寫時間。而也是因為這些基礎軟體資源,對底層硬體(如CPU)進行了封裝(wrap),才使得作業系統可以提供通用服務。

2.2 作業系統提供了哪些服務

由於個人無法給出準確定義,而又不能誤人誤己,只能選擇翻譯大牛書籍,書籍名稱為《Operating Systems Internals and Design Principles》 2.1.1小節內容。

通常,一個完整的作業系統需要提供以下幾個方面的服務:

  • 程式開發
    作業系統提供各式各樣的工具和服務,如編輯器、偵錯程式,用於幫助程式設計師開發程式。這些工具按照封裝程度可以進一步劃分為以下兩種:

    • Instruction Set Architecture
      指令系統體系結構ISA,定義了作業系統使用的機器語言指令系統。事實上,應用程式和作業系統均可以直接訪問ISA。

    • Applicaiton Binary Interface
      應用程式二進位制介面ABI,定義了作業系統的系統呼叫介面,以及在系統中通過ISA能夠使用的硬體資源和服務。每個作業系統或平臺會選擇使用一種二進位制格式作為可執行格式,同一程式如需在不同作業系統上實現可移植,就必須在ABI層進行適配。

    • Application Programming Interface
      應用程式程式設計介面API,API封裝了作業系統所提供的硬體資源和服務,使用API可以降低應用程式複雜度,移植時,也可以直接在API層進行對映。

  • 程式執行
    程式執行需要很多步驟,包括載入指令和資料、初始化I/O裝置和檔案,以及其他相關資源。有了作業系統,程式設計師只要在編寫程式是遵循所提供介面即可,而無需關心執行所需的具體細節。

  • I/O裝置訪問
    同樣的,作業系統中可能會同時執行多個程式,程式之間對I/O裝置的訪問需要管理以便順利協作。作業系統封裝I/O裝置的硬體細節,為程式提供統一介面,同時也管理、維護I/O裝置使用情況以便排程。

  • 檔案訪問控制
    檔案從作業系統的角度來看,是I/O裝置磁碟上的一種物件。通過物件的抽象,將一組二進位制值約束為檔案內容,同時通過額外的二進位制值來代表各種訪問屬性。所以檔案實際上可以成為磁碟類I/O裝置的訪問單元,因此,對於I/O裝置本身的管理自然包括了內部所有檔案情況的維護。

  • 系統訪問
    作業系統管理資源,也維護這大量有關資源的資訊。這些資訊的訪問必須有所保護,否則一旦被惡意修改,輕則系統資訊錯誤,重則直接崩潰。同時,對於同一資源的訪問,系統層也應當進行排程,以保證相互間互不衝突。

  • 錯誤檢測和響應
    計算機硬體終歸是電氣電路組成的,電氣電路在使用環境、壽命等因素的影響下,會出現潛在錯誤。同時,軟體編寫中也可能引入錯誤,如除零。作業系統會對這些潛在錯誤進行檢測,並嘗試修復。如無法修復,則提示使用者或最終關機。

  • 統計資訊
    對於所有資源的管理排程,需要基於對應的維護資訊,只有在各相關元件間共享這些內容,才能更加精確地達成提高CPU利用率或更低響應時長的目標。

3. 作業系統組織架構


上一節中給出了作業系統的定義,列出了需要提供的服務,這一節就從作業系統本身內部如何實現的角度,來談談作業系統組織架構。所謂組織架構,實際上就是作業系統中是如何提供各服務的,是每個服務作為一個程式,聚集而形成作業系統,還是走大而全的策略一個程式包含所有作業系統內容。這兩種方式,分別對應單核心和微核心兩種架構。

3.1 單核心

單核心中所有服務如檔案系統、儲存管理等都由多個執行在核心態(Kernel Mode)的模組來完成。雖然每個模組單獨服務,但由於高度整合,一旦某一模組產生bug,則會使整個核心崩潰。不過同樣因為整合度高,所有操作位於同一地址空間內,控制程式碼的執行效率會更高。

傳統UNIX、DOS以及早期的Mac OS系統均採用單核心形式。

3.2 微核心

微核心的原則是將服務的實現和基礎操作分離,如某些功能可以通過執行在微核心之外的服務元件來提供。對比單核心,一個模組的錯誤並不會引起整個核心的崩潰,而且服務的擴充套件也更加便捷。當然微核心在效率上就略有劣勢。

3.3 混合核心


既然單核心和微核心均有各自優缺點,那麼自然而然就能想象得到會有人將兩者混合使用。通過讓一些微核心結構程式碼執行在核心空間上,提高核心整體執行效率。典型混合核心例子有Windows NT及之後系列、Mac OS X等。

下圖是Windows和Linux作業系統結構圖,感興趣的話可以先有個概念,具體討論將放在後續文章中。

Windows
Windows

Linux
Linux

4. 總結

本篇定位於介紹作業系統的由來、必要性、所提供的服務,以及服務組織形式。掌握了這些概念,就應該要朝著提高CPU使用率、降低響應時長的目標去,進一步瞭解內部具體實現原理,而這些,均會在接下來幾篇中慢慢道來。

相關文章