Raspberry PiでネイティブInferno OSを試す

Raspberry Pi用のInferno OS作業ポートの紹介。











システムがLinux / Windows / MacOS / Plan9でプロセスとして起動するとき、長い間、「ホスト」モードではなく「ネイティブ」OSとしてInferno OSを試すのは簡単ではありませんでした。 これの主な問題は、メインプラットフォーム用の幅広いドライバーの欠如と簡単にアクセスできる「ホスト」モードです。



最初に、ベールを少し開けて、Inferno OSとは何か、そしてそれが良いことを言うのはおそらく価値があります(彼らがコメントで最初に尋ねます!powermanからのロシア語の記事の素晴らしいサイクル: リストはすでに長い間存在しており、そのブログも)。



すべてがファイルです


Inferno OSシステムはPlan9のイデオロギーの子孫であるため、単純な概念の存在は明らかです。すべてがファイルです。 まさに、APIの概念はある意味で省略できます。 たとえば、TCPスタックは仮想ファイルであり、新しい接続が開かれ、データはファイルの書き込み/読み取りを介して転送されます。 環境変数-/ envディレクトリ(ファイルは環境変数など)...



名前空間


各プロセスは、それ自体とその子孫のために独自の環境を作成できます-アプリケーション用のネットワークなしでサンドボックス実装が必要ですか? -特定の子孫プロセスの環境から単純に/ネットを削除します。 システム、他のアプリケーション、および環境とのすべての相互作用は、合成ファイルを介して実行されるため、アプリケーション環境をジャグリングすることにより、アプリケーション開発に正反対のアプローチを実装できます-アプリケーションは、環境、ハードウェア、ソフトウェアを分析することでプラットフォームに適応しようとせず、必要に応じて環境をカスタマイズできますアプリケーション。



Dis、仮想マシンおよびプラットフォームに依存しないバイトコード


Disは、レジスタを使用せずにプロセッサを「実装」するかなり興味深いバイトコードです。つまり、asm Disコマンドは、mov mem1、mem2;という形式のコマンドです。 mem1、mem2、mem3を追加します。 このようなコマンド(JIT)の翻訳は、各Dis命令がプラットフォームプロセッサコマンドのカップルにのみ対応するため、非常に高速で効率的です。 javaバイトコードをDisバイトコードに変換するプロジェクトもあります。 パフォーマンスの観点から、テストでの同じCプログラムの遅れはわずか1.6〜2回でした(結果を確認するために、このようなテストをすぐに再現したい)。



安全性


結果として、アクセスチェックのシステムはファイルへのアクセスの制御に要約されます-脆弱性について何百もの異なるAPIをチェックする頭痛がなくなります。 これは、脆弱性がないことを意味するものではありませんが、セキュリティシステム全体を大幅に簡素化します。



順次プロセス通信の概念を使用したアプリケーションプログラミング


Inferno OS用のアプリケーションをプログラミングする場合、ライトスレッド、チャネル、Goに付属のすべてが使用されます。 しかし、GoやErlangなどとは異なり、アプリケーションチャネルを合成ファイルに変換する根本的な機会があります。 その結果、各マルチスレッドアプリケーションは個別のプロセス、アプリケーションに簡単に分割され、必要に応じて異なるホストに簡単に拡散します。 そのため、アプリケーションを記述する主なプラクティスは、 stdinを期待し、データを処理して結果をstdoutで生成する「スレッド」unixスタイルのアプリケーションではなく、着信データ、制御、および仮想ファイル用の仮想(合成)ファイルを持つファイルサーバースタイルのアプリケーションではありません出力。



ユニバーサルネットワーキングプロトコル-9p / Styx


さまざまなコンポーネントの接続を整理するための非常にシンプルで効果的なプロトコル。 1つの設計機能のみが遅延感度です。



Inferno OSが非常に優れており、「ホスト」モードで簡単に実行できる場合、「ネイティブ」バージョンが必要なのはなぜですか?


最も興味深い点は次のとおりです。ここ数年で、Inferno OSへの関心が目覚めましたが、ユーザーシステムとしてではなく、モノのインターネットインフラストラクチャで使用するシステムとして。 奇妙なことに、すべてにアクセスし、すべてとユニバーサルDisコードを管理するためのユニバーサル9p / styxプロトコルを備えたコンパクトなオペレーティングシステムとして、このニッチに組み込み、使用するのに理想的です。



現在、多くのSoCには、対象とするタスクの計算能力の「過剰」と呼ばれるものがあります。 したがって、Dis / Limbo / Styxなどのテクノロジーは、Cの対応するものよりもパフォーマンスが低い場合でも利点があります。さらに、「計算」部分をカーネルのCレベルにする簡単な機会が常にあります。 しかし、9p / Styxを使用すると、数十以上のインファーノデバイスの相互作用と統合をスマートネットワークに簡単に実装できます。また、デバイス間で計算を転送するなども簡単です。



次に、ポート自体について説明します。


楽しみのために、ポートはゆっくりと開始されました。 そして、それが完全なポートになるとは思っていませんでした。 私が設定した主な目標は、移植プロセスをラボの形で文書化して、システムを可能な限り新しいチップに適応せることを単純化することです。 「Spherical Inferno in a Vacuum」(シーズン1、ドライバーなし、プロセスの切り替えなどを含む)を受け取った後、ドライバーの多くはPi(9pi)のPlan9プロジェクトから非常に簡単に適応できることがわかりました。ネットワーク、キーボード、マウス、グラフィカルシェルを備えたRPiで完全に実行するステータス。



システムを別のARMチップに移植するのは非常に簡単であることがわかりました。



その結果、Inferno OSをハードウェア上の「ネイティブ」システムとして正確にテストおよび調査する簡単な機会が生まれました。 システムは非常にコンパクトであるため、コードは簡単に学習できます(コードの一部はPlan9と共通です)。このオペレーティングシステムは、研究タスクのために簡単に変更できます(いくつかのホットなアイデアがあります!)。 オペレーティングシステムの分野の多くの研究者がこれに興味を持っていると思います。



PS。 しばらくの間、このスズメバチは忘れられていると言えます。 このシステムの多くのアーキテクチャソリューションは時代を先取りしており、単に要求されていません。 現在、「物事のインターネット」の出現により状況は変化しているようです。



推奨読書:


1. Limboを使用したInfernoプログラミング。 フィリップ・スタンレー・マーベル。

2.オペレーティングシステムの原則:設計とアプリケーション。 ブライアンL.スチュアート

3.順次プロセスの伝達。 ホア、カー



All Articles