核心（，又稱 zhcn 核心；zhtw 核心；zhhk 核心；）在電腦科學中是一個用來管理軟體發出的資料 IO（輸入與輸出）要求的電腦程式，將這些要求轉譯為資料處理的指令並交由中央處理器（CPU）及電腦中其他電子元件進行處理，是現代作業系統中最基本的部分。它是為眾多應用程式提供對計算機硬體的安全訪問的一部分軟體，這種訪問是有限的，並由核心決定一個程式在什麼時候對某部分硬體操作多長時間。直接對硬體操作是非常複雜的。所以核心通常提供一種硬體抽象的方法，來完成這些操作。有了這個，透過程序間通訊機制及系統呼叫，應用程序可間接控制所需的硬體資源（特別是處理器及 IO 裝置）。 嚴格地說，核心並不是計算機系統中必要的組成部分。有些程式可以直接地被調入計算機中執行；這樣的設計，說明了設計者不希望提供任何硬體抽象和作業系統的支援；它常見於早期計算機系統的設計中。但隨著電腦技術的發展，最終，一些輔助性程式，例如程式載入器和偵錯程式，被設計到機器核心當中，或者寫入在只讀記憶體裡。這些變化發生時，作業系統核心的概念就漸漸明晰起來了。 分類 核心在設計上可以概分為單核心與微核心兩大架構。在單核心與微核心之間，進行妥協的設計，這稱為混合核心，但是混合內核能否被列為第三大架構，目前仍然有爭議。另外與微核心相似，有一種極端的設計方式，稱為外核心，仍還在研究階段，沒有任何一個流行的作業系統採用了這種設計。 宏核心 宏核心結構在硬體之上，定義了一個高階的抽象介面，應用一組原語（或者叫系統呼叫）來實現作業系統的功能，例如程序管理，檔案系統，和儲存管理等等，這些功能由多個執行在核心態的模組來完成。 儘管每一個模組都是單獨地服務這些操作，核心程式碼是高度整合的，而且難以編寫正確。因為所有的模組都在同一個核心空間上執行，一個很小的 bug 都會使整個系統崩潰。然而，如果開發順利，宏核心結構就可以從執行效率上得到好處。 很多現代的宏核心結構核心，如 Linux 和 FreeBSD 核心，能夠在執行時將模組調入執行，這就可以使擴充核心的功能變得更簡單，也可以使核心的核心部分變得更簡潔。 宏核心結構的例子： 傳統 Unix 核心 BSD Solaris 類 Unix 系統（Unixlike）的核心 FreeBSD OpenBSD NetBSD Linux LynxOS Syllable Desktop DOS DRDOS MSDOS Microsoft Windows 9x 系列（95、98、98SE、Me） Mac OS（從最初版到 Mac OS 86 版） OpenVMS XTS400 微核心 微核心結構由一個非常簡單的硬體抽象層和一組比較關鍵的原語或系統呼叫組成；這些原語，僅僅包括了建立一個系統必需的幾個部分；如執行緒管理，地址空間和行程間通訊等。 微核的目標是將系統服務的實現和系統的基本操作規則分離開來。例如，程序的輸入 輸出鎖定服務可以由執行在微核之外的一個服務元件來提供。這些非常模組化的使用者態伺服器用於完成作業系統中比較高階的操作，這樣的設計使核心中最核心的部分的設計更簡單。一個服務元件的失效並不會導致整個系統的崩潰，核心需要做的，僅僅是重新啟動這個元件，而不必影響其它的部分。 微核心將許多 OS 服務放入分離的程序，如檔案系統，裝置驅動程式，而程序透過訊息傳遞呼叫 OS 服務。微核心結構必然是多執行緒的，第一代微核心，在核心提供了較多的服務，因此被稱為 胖微核心 ，它的典型代表是 Mach，它是 Mac OS X 的核心。第二代微核心只提供最基本的 OS 服務，典型的 OS 是 QNX，QNX 在黑莓手機 BlackBerry 10 系統中被採用。 微核心結構的例子： AIX BeOS L4 微核心系列 Mach（用於 XNU、GNU Hurd） Minix QNX RadiOS 宏核心與微核心的比較 宏核心結構是非常有吸引力的一種設計，由於在同一個地址空間上實現所有複雜的低階作業系統控制程式碼的效率會比在不同地址空間上實現更高些。 20 世紀 90 年代初，宏核心結構被認為是過時的。把 Linux 設計成為宏核心結構而不是微核心，引起了無數的爭議（參見塔能鮑姆 林納斯辯論）。Recordings of the debate between Torvalds and Tanenbaum can be found at dinadk groupsgooglecom oreillycom and Andrew Tanenbaums website 現在，單核結構正傾向於設計不容易出錯，所以它的發展會比微核心結構更迅速些。兩個陣營中都有成功的案例。微核經常被用於機器人和醫療器械的嵌入式設計中，因為它的系統的關鍵部分都處在相互分開的，被保護的儲存空間中。這對於單核設計來說是不可能的，就算它採用了執行時載入模組的方式。 儘管 Mach 是眾所周知的多用途的微核心，人們還是開發了除此之外的幾個微核心。L3 是一個演示性的核心，只是為了證明微核心設計並不總是低執行速度。它的後續版本 L4，甚至可以將 Linux 核心作為它的一個程序，執行在單獨的地址空間。 QNX 是一個從 20 世紀 80 年代，就開始設計的微核心系統。它比 Mach 更接近微核心的理念。它可以被用於一些特殊的領域；在這些情況下，由於軟體錯誤，導致系統失效是不允許的。例如太空梭上的機械手，還有研磨望遠鏡鏡片的機器，一點點失誤就會導致上千美元的損失。 很多人相信，由於 Mach 不能夠解決一些提出微核心理論時針對的問題，所以微核心技術毫無用處。Mach 的愛好者表明這是非常狹隘的觀點，但遺憾的是似乎所有人都開始接受這種觀點。 混合核心 混合核心的設計理念來自微核心，只不過它讓一些微核結構執行在使用者空間的程式碼執行在核心空間，這樣讓核心的執行效率更高些。這是一種妥協做法，微軟視窗就是一個典型的例子。另外還有 XNU，執行在蘋果 Mac OS X 上的核心，也是一個混合核心。林納斯託瓦茲認為混合核心這種分類只是一種市場行銷手法，因為它的架構實作與運作方式接近於單核心。 混合核心的例子： 自 Windows NT 之後所有基於 NT 技術的微軟視窗作業系統 Mac OS X（使用 Mach 核心來實作） BeOS 核心 DragonFly BSD ReactOS 核心 XNU（使用 Mach 核心） 外核心 外核心系統，也被稱為縱向結構作業系統，是一種比較極端的設計方法。 它的設計理念是讓使用者程式的設計者來決定硬體介面的設計。外核心本身非常的小，它通常只負責系統保護和系統資源複用相關的服務。 傳統的核心設計（包括單核和微核）都對硬體作了抽象，把硬體資源或裝置驅動程式都隱藏在硬體抽象層下。比方說，在這些系統中，如果分配一段物理儲存，應用程式並不知道它的實際位置。 而外核的目標就是讓應用程式直接請求一塊特定的物理空間，一塊特定的磁碟塊等等。系統本身只保證被請求的資源當前是空閒的，應用程式就允許直接存取它。既然外核系統只提供了比較低階的硬體操作，而沒有像其他系統一樣提供高階的硬體抽象，那麼就需要增加額外的執行庫支援。這些執行庫執行在外核之上，給使用者程式提供了完整的功能。 理論上，這種設計可以讓各種作業系統執行在一個外核之上，如 Windows 和 Unix。並且設計人員可以根據執行效率調整系統的各部分功能。 現在，外核設計還停留在研究階段，沒有任何一個商業系統採用了這種設計。幾種概念上的作業系統正在被開發，如劍橋大學的 Nemesis，格拉斯哥大學的 Citrix 系統和瑞士計算機科學院的一套系統。麻省理工學院也在進行著這類研究。 參考文獻 參見 作業系統 Category 作業系統技術