基本概念之内核(Kernel)
內核是操作系統最基本的部分。它是為眾多應用程序提供對計算機硬件的安全訪問的一部分軟件,這種訪問是有限的,并且內核決定一個程序在什么時候對某部分硬件操作多長時間。內核的分類可分為單內核和雙內核以及微內核。嚴格地說,內核并不是計算機系統中必要的組成部分。
內核,是一個操作系統的核心。是基于硬件的第一層軟件擴充,提供操作系統的最基本的功能,是操作系統工作的基礎,它負責管理系統的進程、內存、
內核體系結構
設備驅動程序、文件和網絡系統,決定著系統的性能和穩定性。[2]?
現代操作系統設計中,為減少系統本身的開銷,往往將一些與硬件緊密相關的(如中斷處理程序、設備驅動程序等)、基本的、公共的、運行頻率較高的模塊(如時鐘管理、進程調度等)以及關鍵性數據結構獨立開來,使之常駐內存,并對他們進行保護。通常把這一部分稱之為操作系統的內核。[3]?
程序可以直接地被調入計算機中執行,這樣的設計說明了設計者不希望提供任何硬件抽象和操作系統的支持,它常見于早期計算機系統的設計中。最終,一些輔助性程序,例如程序加載器和調試器,被設計到機器核心當中,或者固化在只讀存儲器里。這些變化發生時,操作系統內核的概念就漸漸明晰起來了。[4]?
內核分類
單內核
單內核(Monolithic kernel),是個很大的進程。它的內部又能夠被分為若干模塊(或是層次或其他)。但是在運行的時候,它是個單獨的二進制大映象。其模塊間的通訊是通過直接調用其他模塊中的函數實現的,而不是消息傳遞。 [8]?
單內核結構在硬件之上定義了一個高階的抽象界面,應用一組原語(或者叫系統調用)來實現操作系統的功能,例如進程管理,文件系統,和存儲管理等等,這些功能由多個運行在核心態的模塊來完成。
盡管每一個模塊都是單獨地服務這些操作,內核代碼是高度集成的,而且難以編寫正確。因為所有的模塊都在同一個內核空間上運行,一個很小的bug都會使整個系統崩潰。然而,如果開發順利,單內核結構就可以從運行效率上得到好處。
很多現代的單內核結構內核,如Linux和FreeBSD內核,能夠在運行時將
Linux內核編程指南第3版
模塊調入執行,這就可以使擴充內核的功能變得更簡單,也可以使內核的核心部分變得更簡潔。
單內核結構是非常有吸引力的一種設計,由于在同一個地址空間上實現所有低級操作的系統控制代碼的復雜性的效率會比在不同地址空間上實現更高些。 單核結構正趨向于容易被正確設計,所以它的發展會比微內核結構更迅速些。
單內核結構的例子:傳統的UNIX內核----例如伯克利大學發行的版本,Linux內核。[
微內核
微內核(Microkernelkernel)結構由一個非常簡單的硬件抽象層和一組比較關鍵的原語或系統調用組成,這些原語僅僅包括了建立一個系統必需的幾個部分,如線程管理,地址空間和進程間通信等。
微核的目標是將系統服務的實現和系統的基本操作規則分離開來。例如,進程的輸入/輸出鎖定服務可以由運行在微核之外的一個服務組件來提供。這些非常模塊化的用戶態服務器用于完成操作系統中比較高級的操作,這樣的設計使內核中最核心的部分的設計更簡單。一個服務組件的失效并不會導致整個系統的崩潰,內核需要做的,僅僅是重新啟動這個組件,而不必影響其它的部分
微內核將許多OS服務放入分離的進程,如文件系統,設備驅動程序,而進程通過消息傳遞調用OS服務。微內核結構必然是多線程的,第一代微內核,在核心提供了較多的服務,因此被稱為'胖微內核',它的典型代表是MACH。它既是GNU HURD也是APPLE SERVER OS的核心,可以說,蒸蒸日上.第二代為微內核只提供最基本的OS服務,典型的OS是QNX,QNX在理論界很有名,被認為是一種先進的OS。[8]?
微內核只提供了很小一部分的硬件抽象,大部分功能由一種特殊的用戶態程序:服務器來完成。微核經常被用于機器人和醫療器械的嵌入式設計中,因為它的系統的關鍵部分都處在相互分開的,被保護的存儲空間中。這對于單核設計來說是不可能的,就算它采用了運行時加載模塊的方式。
微內核的例子:AIX,BeOS,L4微內核系列,.Mach中用于GNU Hurd和Mac OS X,Minix,MorphOS,QNX,RadiOS,VSTa。[9]?
混合內核
混合內核它很像微內核結構,只不過它的的組件更多的在核心態中運行,以獲得更快的執行速度。
混合內核實質上是微內核,只不過它讓一些微核結構運行在用戶空間的代碼運行在內核空間,這樣讓內核的運行效率更高些。這是一種妥協做法,設計者參考了微內核結構的系統運行速度不佳的理論。然而后來的實驗證明,純微內核的系統實際上也可以是高效率的。大多數現代操作系統遵循這種設計范疇,微軟公司開發的Windows操作系統就是一個很好的例子。另外還有XNU,運行在蘋果Mac OS X上的內核,也是一個混合內核。
混合內核的例子: BeOS 內核 ,DragonFly BSD,ReactOS 內核
Windows NT、Windows 2000、Windows XP、Windows Server 2003以及Windows Vista等基于NT技術的操作系統。
外內核
外內核系統,也被稱為縱向結構操作系統,是一種比較極端的設計方法。[12]?
外內核這種內核不提供任何硬件抽象操作,但是允許為內核增加額外的運行庫,通過這些運行庫應用程序可以直接地或者接近直接地對硬件進行操作。
它的設計理念是讓用戶程序的設計者來決定硬件接口的設計。外內核本身非常的小,它通常只負責系統保護和系統資源復用相關的服務。
傳統的內核設計(包括單核和微核)都對硬件作了抽象,把硬件資源或設備驅動程序都隱藏在硬件抽象層下。比方說,在這些系統中,如果分配一段物理存儲,應用程序并不知道它的實際位置。
而外核的目標就是讓應用程序直接請求一塊特定的物理空間,一塊特定的磁盤塊等等。系統本身只保證被請求的資源當前是空閑的,應用程序就允許直接存取它。既然外核系統只提供了比較低級的硬件操作,而沒有像其他系統一樣提供高級的硬件抽象,那么就需要增加額外的運行庫支持。這些運行庫運行在外核之上,給用戶程序提供了完整的功能。
理論上,這種設計可以讓各種操作系統運行在一個外核之上,如Windows和Unix。并且設計人員可以根據運行效率調整系統的各部分功能。
外核設計還停留在研究階段,沒有任何一個商業系統采用了這種設計。幾種概念上的操作系統正在被開發,如劍橋大學的Nemesis,格拉斯哥大學的Citrix系統和瑞士計算機科學院的一套系統。麻省理工學院也在進行著這類研究。[11]
單內核與微內核的比較
單內核結構是非常有吸引力的一種設計,由于在同一個地址空間上實現所有復雜的低階操作系統控制代碼的效率會比在不同地址空間上實現更高些。
20世紀90年代初,單內核結構被認為是過時的。把Linux設計成為單內核結構而不是微內核,引起了無數的爭議。
單核結構正傾向于設計不容易出錯,所以它的發展會比微內核結構更迅速些。兩個陣營中都有成功的案例。
盡管Mach是眾所周知的多用途的微內核,人們還是開發了除此之外的幾個微內核。L3是一個演示性的內核,只是為了證明微內核設計并不總是低運行速度。它的后續版本L4,甚至可以將Linux內核作為它的一個進程,運行在單獨的地址空間。
QNX是一個從20世紀80年代,就開始設計的微內核系統。它比Mach更接近微內核的理念。它被用于一些特殊的領域;在這些情況下,由于軟件錯誤,導致系統失效是不允許的。例如航天飛機上的機械手,還有研磨望遠鏡鏡片的機器,一點點失誤就會導致上千美元的損失。
很多人相信,由于Mach不能夠解決一些提出微內核理論時針對的問題,所以微內核技術毫無用處。Mach的愛好者表明這是非常狹隘的觀點,遺憾的是似乎所有人都開始接受這種觀點。
備注:轉載自http://baike.baidu.com/link?url=TYfHlFM6F7ruE69sqg97h5PIZxb4bDDBePbLTbdU5w-AnJjJi2sTuWjRMEdnEbDrsdkIGLt5y4c0_LM4JZYXuqdpAx8ogHq0o8Dtoe0GzcW
轉載于:https://blog.51cto.com/jiaojusuimu/1878280
總結
以上是生活随笔為你收集整理的基本概念之内核(Kernel)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯云搭建WordPress个人博客小白
- 下一篇: Spring——依赖注入类型