核心

維基百科,自由的百科全書
前往: 導覽搜尋

電腦科學中,核心英語Kernel),又稱核心,是作業系統最基本的部分,主要負責管理系統資源。它是為眾多應用程式提供對電腦硬體的安全存取的一部分軟體,這種存取是有限的,並由核心決定一個程式在什麼時候對某部分硬體操作多長時間。直接對硬體操作是非常複雜的。所以核心通常提供一種硬體抽象的方法,來完成這些操作。透過行程間通訊機制及系統呼叫,應用行程可間接控制所需的硬體資源(特別是處理器及IO裝置)。

嚴格地說,核心並不是電腦系統中必要的組成部分。程式可以直接地被調入電腦中執行;這樣的設計,說明了設計者不希望提供任何硬體抽象和作業系統的支援;它常見於早期電腦系統的設計中。最終,一些輔助性程式,例如程式載入器和偵錯程式,被設計到機器核心當中,或者寫入在唯讀記憶體里。這些變化發生時,作業系統核心的概念就漸漸明晰起來了。

核心可分為四大類:

  • 單核心: 它為潛在的硬體,提供了大量完善的硬體抽象操作。
  • 微核心 :只提供了很小一部分的硬體抽象,大部分功能由一種特殊的用戶態程式:服務來完成。
  • 混合核心 :它很像微核心結構,只不過它的元件更多的在核心態中執行,以獲得更快的執行速度。
  • 外核心 :這種核心不提供任何硬體抽象操作,但是允許為核心增加額外的執行庫,透過這些執行庫應用程式可以直接地或者接近直接地對硬體進行操作。

單核心[編輯]

單核心的示意圖

單核心結構在硬體之上,定義了一個高階的抽象介面,應用一組原語(或者叫系統呼叫(System call))來實現作業系統的功能,例如行程管理檔案系統,和儲存管理等等,這些功能由多個執行在核心態的模組來完成。

儘管每一個模組都是單獨地服務這些操作,核心代碼是高度整合的,而且難以編寫正確。因為所有的模組都在同一個核心空間上執行,一個很小的bug都會使整個系統崩潰。然而,如果開發順利,單核心結構就可以從執行效率上得到好處。

很多現代的單核心結構核心,如LinuxFreeBSD核心,能夠在執行時將模組調入執行,這就可以使擴充核心的功能變得更簡單,也可以使核心的核心部分變得更簡潔。

單核心結構的例子:

微核心[編輯]

微核心的示意圖

微核心結構由一個非常簡單的硬體抽象層和一組比較關鍵的原語或系統呼叫組成;這些原語,僅僅包括了建立一個系統必需的幾個部分;如 執行緒管理位址空間行程間通訊等。

微核的目標是將系統服務的實現和系統的基本操作規則分離開來。例如,行程的輸入/輸出鎖定服務可以由執行在微核之外的一個服務元件來提供。這些非常模組化的用戶態伺服器用於完成作業系統中比較高階的操作,這樣的設計使核心中最核心的部分的設計更簡單。一個服務元件的失效並不會導致整個系統的崩潰,核心需要做的,僅僅是重新啟動這個元件,而不必影響其它的部分

微核心將許多OS服務放入分離的行程,如檔案系統,裝置驅動程式,而行程透過訊息傳遞呼叫OS服務.微核心結構必然是多執行緒的,第一代微核心,在核心提供了較多的服務,因此被稱為'胖微核心',它的典型代表是MACH,它既是GNU HURD也是APPLE SERVER OS 的核心,可以說,蒸蒸日上.第二代微核心只提供最基本的OS服務,典型的OS是QNX,QNX在理論界很有名,被認為是一種先進的OS.

微核心結構的例子:

單核心與微核心的比較[編輯]

單核心結構是非常有吸引力的一種設計,由於在同一個位址空間上實現所有複雜的低階作業系統控制代碼的效率會比在不同位址空間上實現更高些。

20世紀90年代初,單核心結構被認為是過時的。把Linux設計成為單核心結構而不是微核心,引起了無數的爭議(參見塔能鮑姆-林納斯辯論)。

現在,單核結構正傾向於設計不容易出錯,所以它的發展會比微核心結構更迅速些。兩個陣營中都有成功的案例。微核經常被用於機器人和醫療器械的嵌入式設計中,因為它的系統的關鍵部分都處在相互分開的,被保護的儲存空間中。這對於單核設計來說是不可能的,就算它採用了執行時載入模組的方式。

儘管Mach是眾所周知的多用途的微核心,人們還是開發了除此之外的幾個微核心。L3是一個演示性的核心,只是為了證明微核心設計並不總是低執行速度。它的後續版本L4,甚至可以將Linux核心作為它的一個行程,執行在單獨的位址空間。

QNX是一個從20世紀80年代,就開始設計的微核心系統。它比Mach更接近微核心的理念。它被用於一些特殊的領域;在這些情況下,由於軟體錯誤,導致系統失效是不允許的。例如太空梭上的機械手,還有研磨望遠鏡鏡片的機器,一點點失誤就會導致上千美元的損失。

很多人相信,由於Mach不能夠解決一些提出微核心理論時針對的問題,所以微核心技術毫無用處。Mach的愛好者表明這是非常狹隘的觀點,遺憾的是似乎所有人都開始接受這種觀點。

混合核心[編輯]

混合核心的示意圖

混合核心實質上是微核心,只不過它讓一些微核結構執行在用戶空間的代碼執行在核心空間,這樣讓核心的執行效率更高些。這是一種妥協做法,設計者參考了微核心結構的系統執行速度不佳的理論。然而後來的實驗證明,純微核心的系統實際上也可以是高效率的。大多數現代作業系統遵循這種設計範疇,微軟視窗就是一個典型的例子。另外還有XNU,執行在蘋果Mac OS X上的核心,也是一個混合核心。

混合核心的例子:

一些人認為可以在執行時載入模組的單核系統和混合核心系統沒有區別。這是不正確的。混合意味著它從單核和微核系統中都吸取了一定的設計模式,例如一些非關鍵的代碼在用戶空間執行,另一些在核心空間執行,單純是為了效率的原因。

林納斯·托瓦茲認為混合核心這種分類只是一種市場行銷手法,因為它的架構實作與運作方式與單核心並沒有什麼實質不同。

外核心[編輯]

外核心系統,也被稱為縱向結構作業系統,是一種比較極端的設計方法。

它的設計理念是讓用戶程式的設計者來決定硬體介面的設計。外核心本身非常的小,它通常只負責系統保護和系統資源復用相關的服務。

傳統的核心設計(包括單核和微核)都對硬體作了抽象,把硬體資源或裝置驅動程式都隱藏在硬體抽象層下。比方說,在這些系統中,如果分配一段物理儲存,應用程式並不知道它的實際位置。

而外核的目標就是讓應用程式直接請求一塊特定的物理空間,一塊特定的磁碟塊等等。系統本身只保證被請求的資源當前是空閒的,應用程式就允許直接存取它。既然外核系統只提供了比較低階的硬體操作,而沒有像其他系統一樣提供高階的硬體抽象,那麼就需要增加額外的執行庫支援。這些執行庫執行在外核之上,給用戶程式提供了完整的功能。

理論上,這種設計可以讓各種作業系統執行在一個外核之上,如Windows和Unix。並且設計人員可以根據執行效率調整系統的各部分功能。

現在,外核設計還停留在研究階段,沒有任何一個商業系統採用了這種設計。幾種概念上的作業系統正在被開發,如劍橋大學的Nemesis,格拉斯哥大學的Citrix系統和瑞士電腦科學院的一套系統。麻省理工學院也在進行著這類研究。

參考文獻[編輯]

參見[編輯]