跳至內容

Minix 3/MINIX 3 架構與設計

來自 Wikibooks,開放世界中的開放書籍

核心是大多數計算機作業系統中的核心部分,它管理系統的資源以及硬體和軟體元件之間的通訊。 作為作業系統的基本元件,核心為硬體提供抽象層,特別是為記憶體、處理器和 I/O 提供抽象層,使硬體和軟體能夠通訊。 它還透過程序間通訊機制和系統呼叫,為使用者空間應用程式提供這些功能。

這些任務由不同的核心以不同的方式完成,具體取決於它們的設計和實現。 單核心將嘗試透過在同一個地址空間中執行所有程式碼來實現這些目標,從而提高系統的效能,而微核心將大多數服務執行在使用者空間,旨在提高程式碼庫的可維護性和模組化。

大多數(但並非全部)作業系統依賴於核心概念。 核心作為一個軟體,負責硬體和軟體之間的通訊,其存在是由於與效能、記憶體效率、安全性以及處理器架構相關問題的複雜折衷方案導致的。

在大多數情況下,引導載入程式以超級使用者模式啟動核心作為一個程序,但在初始化之後,它不會像我們所知的程序那樣保留,而是作為一組完整的函式,這些函式可以被使用者空間應用程式呼叫以執行需要更高許可權級別的操作,例如磁碟訪問。 核心執行流是使用者空間程序執行流的延續,當執行系統呼叫時,這些執行流會暫停,並在這些系統呼叫返回時恢復。 最初的主核心流保留為“空閒程序”,並“收集”未使用的處理器時間。

核心開發被認為是程式設計中最複雜、最困難的任務之一。 它在作業系統中的核心地位意味著需要良好的效能,這將核心定義為一項關鍵軟體,並使它的正確設計和實現變得困難。 核心甚至可能不被允許使用它為其他軟體提供的抽象機制。 許多原因阻止核心使用它提供的功能,例如:中斷管理、記憶體管理以及缺乏可重入性,從而使軟體工程師的開發變得更加困難。

不同的核心設計方法

[編輯 | 編輯原始碼]

當然,上面列出的任務和功能可以透過多種方式提供,這些方式在設計和實現上有所不同。 單核心在其所有程式碼在同一個地址空間(核心空間)中執行,以提高系統的效能,而微核心則嘗試將其大多數服務執行在使用者空間,旨在提高程式碼庫的可維護性和模組化。 大多數核心並不完全屬於其中任何一種類別,而是位於這兩種設計之間。 這些被稱為混合核心。 更奇特的方案,例如奈米核心和外核,主要由研究人員進行研究,並未得到廣泛使用。

單核心

[編輯 | 編輯原始碼]

在單核心中,所有作業系統服務都與主核心執行緒一起執行,因此也駐留在同一個記憶體區域。 這種方法提供了豐富而強大的硬體訪問許可權。 單核心系統比其他解決方案更容易設計和實現,而且如果編寫良好,效率極高。 單核心的主要缺點是系統元件之間的依賴關係——裝置驅動程式中的錯誤可能會導致整個系統崩潰——以及大型核心變得非常難以維護的事實。

微核心

[編輯 | 編輯原始碼]

微核心方法包括在硬體之上定義一個簡單的抽象層,使用一組原語或系統呼叫來實現最小的作業系統服務,例如記憶體管理、多工處理以及程序間通訊。 其他服務,包括通常由核心提供的服務,例如網路,都在使用者空間程式中實現,稱為伺服器。 微核心比單核心更容易維護,但大量的系統呼叫和上下文切換可能會減慢系統速度,因為它們通常比普通函式呼叫產生更多的開銷。

微核心通常比傳統設計效能差,有時甚至差很多。 這是因為進入和退出核心(上下文切換)以在各個應用程式和伺服器之間移動資料的開銷很大。 最初人們認為,仔細調整可以顯著減少這種開銷,但到 1990 年代中期,大多數研究人員放棄了這種方法。 最近,針對性能最佳化的較新微核心已經解決了這些問題。

單核心與微核心

[編輯 | 編輯原始碼]
單核心、微核心和混合核心的示例結構。

隨著計算機核心的增長,一些問題變得明顯。 最明顯的問題之一是記憶體佔用率增加。 這在一定程度上可以透過完善虛擬記憶體系統來緩解,但並非所有計算機架構都支援虛擬記憶體。 為了減小核心的佔用率,必須對核心進行大量的編輯以仔細刪除不需要的程式碼,對於具有數百萬行程式碼的核心來說,這可能是非常困難的,因為核心的各個部分之間存在非顯而易見的相互依賴關係。

由於單核心帶來的問題,它們在 1990 年代初被認為已經過時。 結果,Linux 使用單核心而不是微核心的設計成為了 Linus Torvalds 和 Andrew Tanenbaum 之間一場著名口水戰的主題。 在 Tanenbaum/Torvalds 辯論中提出的論點雙方都有一定的道理。

最常見的核心是單核心;Windows NT、Linux 和 Apple 的 XNU 核心(Mac OS X 背後的核心)只是一些例子,但還有更多。 大多數微核心要麼是研究核心,要麼是僅用於嵌入式系統以執行一項任務的核心。

單核心往往更容易設計正確,因此可能比基於微核心的系統增長得更快。 但是,單核心系統中的錯誤通常會導致整個系統崩潰;如果系統設計正確,那麼在微核心中,伺服器獨立於主執行緒執行,就不會出現這種情況。 單核心的支持者認為,不正確的程式碼不屬於核心,並且微核心在正確程式碼之上提供的優勢微乎其微。 這兩個陣營都有成功案例。 微核心通常用於嵌入式機器人或醫療計算機,在這些計算機中,容錯能力很重要,並且大多數作業系統元件都駐留在它們自己的專用、受保護的記憶體空間中。 對於單核心來說,即使是現代模組載入的單核心,這也是不可能的。 但是,單核心模型透過使用共享核心記憶體往往更加高效,而不是微核心設計中更慢的訊息傳遞系統。

華夏公益教科書