Inferno

Inferno
Inferno第四版
Inferno第四版
开发者 貝爾實驗室 / Vita Nuova Holdings
编程语言 C
作業系統家族 "Unix衍生"
運作狀態 持續中
源码模式 自由軟體
最新版本 第四版(2007年2月2日)
支援平台 ARMPA-RISCMIPSPowerPCSPARCx86
内核类别 虛擬機器
许可证 GPL / LGPL / MIT
官方網站 Vita Nuova

Inferno是種可以創造並支援分散式服務的 作業系統。它主要是基於 貝爾實驗室九號計畫的經驗以及貝爾實驗室接下來對於作業系統、語言、即時編譯器、圖形、安全性、網路、移植等的研究而產生的。

Inferno應用程式可以移植到大多數混合的硬體、網路、環境上。它也定義了一套名為 Dis的 虛擬機器,這個虛擬機器可以在任何實體機器上實做,使用 Limbo這種 型別安全的語言來編譯成位元碼。Inferno也提供了具備相同介面的虛擬作業系統來讓使用者可以在硬體上原生地執行Inferno或以應用程式的方式托管在其他系統中。

一種名為 Styx通訊協定被用來讓系統內可以採用一致的方式,讓應用程式只要使用標準的檔案操作,如開啟、讀取、寫入,以及關閉,就可以存取近端與遠端的資源。在第四版的Inferno中,Styx跟 九號計畫9P協定的新版本9P2000是一樣的。

作業系統以及相關程式、 Vita Nuova Holdings公司的名稱都是源自於 但丁·阿利吉耶里的著作,尤其是 神曲

設計概念

Inferno最早是於1995年由 貝爾實驗室計算機科學研究部門(Computer Science Research division)的成員為了把 九號計畫的思想更廣泛的使用在设备及網路上所製作的。Inferno是基於九號計畫的三個基礎原则而製作的 分散式作業系統:

  • 把資源視做檔案:把所有的 資源都列在 階層式 檔案系統中以檔案表示。
  • 命名空間:從應用程式的觀點來看,網路是種單一且清楚的 命名空間,能展現階層式檔案系統,也能代表近端或遠端實體分離的資源。
  • 標準通訊協定:採用名為 Styx的標準協定,用來存取近端或遠端的所有資源。

為了處理並使用多樣化的網路環境,設計者決定採用 虛擬機器當做系統中必要的元件。這跟後來成為 Java的Oak專案的結論相同,但各別達成了這樣的目標。 Dis虛擬機器是一種傾向於貼近運行架構的一種寄存器機(register machine),相對來說 Java虛擬機器則是一種堆疊機(stack machine)。這種方法的優勢是只要簡單的為新架構創建一個 即時編譯器就可以了。

虛擬機器提供的記憶體管理功能設計上在1MB大小的記憶體且不提供記憶體映射的硬體上會較有效率。 垃圾回收機制則是一種參照計數(reference counting)與收集循環資料(cyclic data)的即時染色收集器(real-time coloring collector)混合而成的。

Inferno核心包含了虛擬機器、即時編譯器(on-the-fly compiler)、排程、裝置、協定堆疊(protocol stacks)、各行程檔案命名空間的命名空間直譯器(evaluator),以及階層式檔案系統的根目錄。核心也同時包含了一些提供了虛擬作業系統介面的內建模組,像是系統呼叫、圖形、安全性、以及數學函式模組。

貝爾實驗室技術期刊( Bell Labs Technical Journal英语 Bell Labs Technical Journal [1]介紹Inferno具有幾個方面上由作業系統所支援的可移植性與通用性:

  • 可以移植到不同的處理器上:目前可以在 ARMMIPSPA-RISCPowerPCSPARC,以及 x86等架構上運作,也可以移植到其他的架構上。
  • 可以移植到不同的環境上:它可以以獨立的作業系統運作在小型終端機上,或是以使用者應用軟體的形式存在於 九號計畫Windows NTWindows 95、UNIX( IrixSolarisFreeBSDGNU/LinuxAIXHP-UX)。Inferno應用程式在這些環境中都有相同的介面。
  • 分散式設計:在使用者終端機以及伺服器的部分都具有相同的環境,而且彼此間可以匯入對方的資源(例如附加的輸入/輸出裝置或是網路)。應用程式可以在運行系統中的通訊機制輔助之下,輕鬆的(甚至是動態的)分散到客戶端或伺服器端。
  • 最低硬體需求:它在機器上所運行的實用應用程式只需要1MB的記憶體,也不需要 記憶體映射的硬體支援。
  • 可攜式應用:Inferno應用程式是以 型別安全的Limbo語言所撰寫,編譯出來的執行檔在各種平台上的執行結果都會一致。
  • 動態適應性(Dynamic adaptability):應用程式可以根據硬體或其他可用資源來載入不同的程式模組來執行特定的功能。例如像影片播放器可以使用許多不同解碼模組中的任何一個來進行影片的解碼。

這些設計面上的決定導致它為了能夠讓內容與服務提供者可以著重於他們所傳送的內容,而非把重心放在處理各種不同的硬體、軟體或網路環境,因此提供了一種標準的介面來達成這樣的目的。