Inferno (オペレーティングシステム)

Inferno
Inferno 4th Edition
Inferno 4th Edition
開発者ベル研究所 / Vita Nuova Holdings
プログラミング言語C
OSの系統Unixの後継
開発状況開発中
ソースモデルフリーソフトウェア / オープンソース
最新安定版リリースFourth Edition / 2007年2月2日
対応プラットフォームx86, MIPS, ARM, PowerPC, SPARC
カーネル種別仮想機械
ライセンスGPL / LGPL / MIT
ウェブサイトVita Nuova
テンプレートを表示

Infernoは、分散システムのためのオペレーティングシステム (OS)。Plan 9 from Bell Labs (Plan 9) を開発した経験を元に、その後のベル研究所でのOS、言語、オンザフライ・コンパイラ、グラフィックス、セキュリティ、ネットワーク、移植性などの研究成果を盛り込んでいる。

Infernoアプリケーションは様々なハードウェア、ネットワーク、環境に移植可能である。任意のマシンに実装可能な仮想機械 (Dis) がベースになっている。また、型安全な言語Limboが移植性の高いバイトコードを生成する。さらに、ハードウェア上で直接動作する場合でも、他のOS上でアプリケーションとして動作する場合でも同じインターフェースを提供する仮想オペレーティングシステムを含む。

リソースアクセスは、ローカルでもリモートでもStyxという通信プロトコルを使う。例えばアプリケーションが標準的なファイル操作(オープン、リード、ライト、クローズ)を行う場合もその通信プロトコルを経由する。第4版 (Fourth edition) では、StyxはPlan 9の新しいバージョンでの9Pプロトコル (9P2000) と全く同じである。

OSの名称、関連プログラムの名称、さらには Vita Nuova Holdings という企業名は、ダンテ・アリギエーリの作品、特に『神曲』に由来している。

設計理念

Infernoは1995年ベル研究所の計算機科学研究部門がPlan 9の考え方をより広範囲なデバイスやネットワークに広めるために開発した。Infernoは、Plan 9から得られた以下の3つの原則に基づいた分散オペレーティングシステムである。

ファイルとしてのリソース
全てのリソースはファイルとして表現され、ファイルシステムの階層内のどこかに配置される。
名前空間
アプリケーションから見て、ネットワークは単一で一貫した名前空間であり、物理的には分散したリソースも1つの階層化されたファイルシステムとして見える。
標準通信プロトコル
Styxという標準プロトコルで、ローカルなリソースにもリモートのリソースにもアクセスする。

対象とするネットワーク環境の多様性に対応するため、設計段階で仮想機械を使うのが必須であると決定された。これはJavaを生んだOakプロジェクトと同じ結論だが、それぞれ独自に同じ結論に至っている。仮想機械Disはレジスタマシンの一種で、Java仮想マシンとは反対に、動作するアーキテクチャになるべくマッチするよう設計されている。そのため、新たなアーキテクチャをサポートする際にJITコンパイラを作成するのが単純という利点がある。

この仮想機械は、メモリが1MB程度でMMUのないデバイスでも効率的に動作するよう設計されたメモリ管理を備えている。そのガベージコレクションは参照カウント方式とリアルタイム・カラーリング方式の組み合わせである。

Infernoカーネルには、仮想機械、オンザフライ・コンパイラ、スケジューラ、デバイスドライバ、通信プロトコルスタック、名前空間エバリュエータ、ファイルシステム階層のルートが含まれる。また、仮想オペレーティングシステムのインタフェース(システムコール、グラフィックス、セキュリティ、算術モジュールなど)を提供する組み込みモジュールもある。

Bell Labs Technical Journalの論文[1]では、以下に示したような観点でInfernoの移植性と汎用性を紹介している。

プロセッサ間の移植性
現在、x86SPARCMIPSARMHP-PAPowerPCといったアーキテクチャで動作し、他のプロセッサへの移植も容易である。
環境間の移植性
小型端末上の独立したOSとしても動作するが、Windows NTWindows 95、Unix (IRIX, Solaris, FreeBSD, Linux, AIX, HP-UX)、Plan 9上でもアプリケーションとして動作する。どの環境でもInfernoのアプリケーションはインタフェースが同一である。
分散設計
ユーザーのクライアントマシンでもサーバでも同じ環境を確立し、どちらも相手のリソース(例えば、接続しているI/Oデバイスやネットワーク)をインポートできる。システムの通信機能の助けにより、アプリケーションをクライアントとサーバに(時には動的に)分割するのが容易である。
ハードウェアの要求仕様が小さい
最小1MBのメモリでもそれなりのアプリケーションを実行でき、MMUハードウェアを必要としない。
移植性の高いアプリケーション
Infernoのアプリケーションは型安全な言語Limboで書かれており、その実行ファイルは全てのプラットフォームで同一である。
動的適応性
ハードウェアや利用可能なリソースの状況によって、アプリケーションがロードするモジュールを変えることがある。例えば、ビデオプレーヤーのアプリケーションは状況によってデコーダモジュールを使い分ける。

このような設計は、コンテンツプロバイダやサービスプロバイダがコンテンツを提供する際に、ハードウェアやソフトウェアやネットワークの詳細を気にせずに済むような標準インタフェースを提供する目的で行われた。