跳至內容

Mach

出自Taiwan Tongues 台語維基
這是此頁批准,以及是最近的修訂。

Mach(國際音標:[mʌk])是一个由卡內基梅隆大學開發的電腦作業系統微核心,為著欲用著作業系統之研究,特別是咧分散式佮並列運算上。是上早實現微核心作業系統的例之一,是誠濟其他相𫝛的計畫的標準。

Mach 開發計畫佇卡內基梅隆大學對一九八五年運行到一九九四年,到 Mach 三更零版的結束。其他閣有真濟人繼續 Mach 的研究包括猶伊大學的 Mach 四。Mach 的開發是為著欲取代 BSD 的 UNIX 核心,所以是足濟新的作業系統的設計基礎。Mach 的研究到今敢若是停止矣,雖然有真濟商業化作業系統,如 NEXTSTEP 佮 OPENSTEP,特別是 Mac OS X(使用 XNU 核心)攏是使用 Mach 抑是其衍生系統。Mach 的虛擬記憶體(VM)系統嘛予 BSD 的開發者用佇咧 CSRG,並出現佇咧 BSD 衍生的系統內底,如 FreeBSD。Mac OS X 佮 FreeBSD 並無保留 Mach 首倡的微核心結構,除了 Mac OS X 繼續提供微核心內部處理通訊猶閣有應用程式直接控制。

Mach 繼承卡內底基梅隆大學的 Accent kernel,Mach 計畫主導人理察 ・ 搝希德捌佇微軟仔研究部門擔任高級人員,後成做微軟副總裁。另外一 Mach 開發者阿瓦德斯 ・ 特凡尼安(Avie Tevanian)曾經是 NeXT 頭手程式設計師,了後擔任蘋果電腦軟體技術部門主管到二空空六年 [一]。

一个叫做 GNU Mach 的計劃佮其相關的,伊是 GNU 作業系統工程的一部份。已經有的作業系統 Debian GNU / Hurd 就是因為 GNU Mach 猶閣有其上的 GNU Hurd。

歷史

名稱起源

Mach 概念

Mach 成做傳統 UNIX 核心的替代品出現的,因此其間無仝的所在足值得注意。彼陣的人已經漸漸感受著早期 UNIX 中「一切攏檔案」抽象的機制無夠,有限的擴充性予開發者掠襟啾,苦不堪言。雖然講貝爾實驗室的 Plan 九佇這个方向頂懸做矣進一步努力,毋過效果並無理想。現代作業系統需要閣較進一步的抽象。

比如講 UNIX 的管道會當飽受這个爭議。人切了愛一个類似管道的機制,允准佇咧程式間交換無仝款的資料,毋但是檔案式的讀寫。或者是換句話講,一套行程間通訊機制(IPC)。 一時間各路系統(包括講 UNIX)紛紛推出了各人的 IPC 機制,毋過大多數攏是一寡針對特定目標的庫,其通用性猶是誠遠無夠。

鑑於此,卡耐基梅隆大學對 Accent 核心專案出發,開發一套基於共享記憶體的 IPC 系統。Accent 是一个誠有豐富特性的純實驗系統,猶毋過佇 Accent 開發期間,社會上研究作業系統的重點已經有所變化;而且 UNIX 已經予人廣泛接受作為研究的預設系統,Accent 著 UNIX 的無相容嘛限制伊佇咧研究方向頂懸的應用;閣較甚者,Accent 的可移植性敢若並毋是真好,啊佇彼當陣看起來(八十年代初)硬體平台的更新換代值正欣欣向榮,敢若會出現一改大爆炸。

因此卡內基梅隆大學轉向矣 Mach 專案,其設計目標大體即一个結構足深的、UNIX 相容、懸度可能會徙栽的 Accent。按呢以後幾个概念作為其基礎:

  • 「任務」即擁有一組系統資源的東西,容允「執行緒」佇其中執行。
  • 「執行緒」是執行的基本單位,有一个任務的頂下文,並且共享任務中的資源。
  • 「port」是任務間通訊的一組受保護的訊息佇咧列;任務會當對任何 port 傳送抑是接收的資料。
  • 「訊息」是某一寡有類型的資料物件的集合,𪜶干焦會當送到位 port-毋是某乜特定任務抑是執行緒。

Mach 繼承矣 Accent IPC 彼个理念,其本身煞釘根 UNIX,好就換起來矣 UNIX 落來的程式。Mach 引入來 port 的概念用表示雙向的 IPC,伊就敢若 UNIX 下的檔案平平有權限資訊,予伊安全模型非常的接近 UNIX。並且,Mach 予任何的行程攏會當有一般系統中核心才有的權限,對而且允准使用者行程實現佮硬體互動等等操作。

仝 UNIX 仝款,Mach 系統嘛包括一組豐富的實用工具,並且保留 unix 中驅動程式的概念用硬體互動。

佮 UNIX 的一大區別即在於,除了操作檔案,Mach 會當操作一切「任務」。 這一來大量的核心代碼會當轉去使用者空間,予核心變閣較細,從此領發了微核心的思潮。佮傳統的系統無仝款,Mach 落的行程(抑是講「任務」)之下是彼个濟个執行緒。這佇今仔日家己看著誠鮮,毋過愛知影,Mach 正正就是按呢定義任務佮執行緒關係的第一人。核心的責任就對總攬大局者精簡做基礎設施的提供者,並且提供有限的排程。

Port 機制佇咧 IPC 中的應用該是 Mach 佮其他的傳統核心的一大分野。佇咧 UNIX 落,使用者行程呼叫核心干焦會當通過系統呼叫抑是陷落去(trap)。 使用者行程使用一个庫安排好資料的位置,然後軟體觸發一个斷去,核心佇初初開始化的時陣會為所有斷節設定 handler,所以程式觸發斷去的時陣,控制權就轉去矣核心,佇一寡必要的檢查了後就會當進一步來操作。

佇咧 Mach 落,這就交予矣 IPC 系統。佮直接系統呼叫無仝,遮的使用者行程是先向核心申請一个 port 的存取許可,然後利用 IPC 機制向這个 port 傳送的訊息。雖然講傳送訊息的操作仝款是系統呼叫,猶毋過 Mach 佇核心的工作形式有一寡無仝款—— handler 的工課會當交予其他的行程實現。

IPC 訊息傳達機制的應用為執行緒和並行提供了誠好的支援。行程之下是加一个執行緒,執行緒作為 IPC 機制的單元,Mach 著愛以佇訊息予處理時控制執行緒睏眠抑是喚醒。按呢這就允准系統共行程分佈佇濟个處理器之上,訊息直接通過共享記持體實現嘛會當,著愛為其他處理器複製一份嘛會使。佇傳統核心內底這足歹實現:系統著愛保證無仝處理器上的無仝程式袂佇仝時陣存取仝一塊記持體,佇咧 Mach 中則愛閣較容易的濟。無仝行程的記持體存取互相無干涉,一切交由 port 通批。

古早的 IPC 系統有一寡效能的問題,必須正視。仝其前輩 Accent 仝款,Mach 使用一个共享記持體機制以避免訊息傳達中低效的記持體複製。伊利用這个硬體的 MMU 實現資料共享,干焦佇資料被修改的時陣才執行審貝,即寫時複製。

核心嘛必須愛檢查訊息的正確性。Port 咧設計上就取矣 UNIX 檔案系統的概念,這一來就允准使用者使用現成的檔案系統概念即可,權限、存許可之類就攏有矣。

按呢設計嘛簡化矣開發。傳統的程式猶原會當提來,嘛會使閣設計矣。單核心系統的一个 bug 就著愛予規个系統幫敗對袂閣重新啟動,而且 Mach 干焦需要重新執行出問題的彼个行程。作業系統即一組程式的集合,使用者著愛選擇其系統的功能—— 只需要管理當前執行的行程即可。

需要了解,Mach 以上的所有的特別攏是跨平台設計。參照一段:

佮 UNIX 上蓋起初無看濟處理器的設計無仝,Mach 咧設計伊始咧欲加處理器支援納入考慮。伊的擴充性嘛足好的,UMA 抑是 NUMA 攏會當誠好的支援。Mach 是為著千種無仝的處理器設計的,徙栽去其他的體系結構蓋簡單。其設計的一个關鍵目標即為各無相仝的硬體平台頂,實現會當移植的分散式系統。(Appendix B , Operating System Concepts)

不足自然嘛袂少。相對容易的一个問題是 port 的位置無明顯,佇咧 UNIX 落來這款的問題通過檔案系統提供一个逐家攏知影的名來解決。雖然講這機制嘛會當挈來,猶毋過 Mach 咧設計上閣拄拄仔盡力 port 保持透明。欠缺表示 port 位置的機制,予其他的擴充性大打折扣。

參見

  • HURD
  • GNU Mach
  • Debian GNU / Hurd
  • XNU