Skip to content
oraccha edited this page Jan 14, 2013 · 1 revision

MSR OS

  • [http://research.microsoft.com/os/singularity/ 本家]

  • [http://research.microsoft.com/research/pubs/view.aspx?type=technical+report&id=989 An Overview of the Singularity Project] (MSR-TR-2005-135)

  • [http://channel9.msdn.com/ShowPost.aspx?PostID=68302 Singularity: A research OS written in C#] . Jim Larus,Galen Hunt.

  • [http://channel9.msdn.com/Showpost.aspx?postid=141858 Singularity Revisited] . Jim Larus,Galen Hunt,Manuel Fahndrich,David Tarditi. [http://channel9.msdn.com/ Channel9] ってなかなか面白いなぁ.

  • [http://slashdot.jp/article.pl?sid=06/03/16/1143227 やっぱり OS 開発はネイティブコード?] (SlashdotJapan 2006-03-16) . WindowsVista の大部分はマネージドコードじゃなくて,ネイティブコードで実装されているという話.

  • [http://itpro.nikkeibp.co.jp/article/NEWS/20080305/295383/ Microsoft Researchが新OS「Singularity」の開発者向けキットをリリース,非商用に限り無償で] (ITPRO 2008-03-05) . 「Singularityは次期Windowsではない」「コンセプトカーのようなものと考えて欲しい。OSやアプリケーションどうしがやりとりする手段の新たなパラダイムに向けたプロトタイプOSだ」

  • [http://www.itmedia.co.jp/enterprise/articles/0807/30/news076.html MSのポストWindows「Midori」の構想が明らかに] (ITmedia 2008-07-30) . 「Midoriは、Microsoft ResearchのOS『Singularity』から派生したもので、そのツールとライブラリは完全なマネージドコードだ。Midoriは、ネイティブハードウェア(x86、x64、ARM)上で直接動作するとともに、『Windows Hyper-V』ハイパーバイザー上、さらには1つのWindowsプロセス上でも動くように設計されている」

    • 思い出すのは MidoriLinux ...

中心的開発者である [http://research.microsoft.com/~galenh/ Galen Hunt] 氏は,ソフトウェアDSMや分散コンピューティングが専門なのかな.[http://research.microsoft.com/research/sn/detours/ Detours] (Win32 API をフックする仕掛け)の開発者でもある(>> [http://oyamayoshihiro.blog18.fc2.com/blog-entry-38.html 【フック】 Detours: Binary Interception of Win32 Functions 【Windows】]).

Software-Isolated Processes (SIPs)

  • Singularity の拡張モデル
  • アプリケーションもファイルシステムもドライバもカーネル拡張もプロセスで,チャネルを介してメッセージパッシングするというマイクロカーネルアーキテクチャ.
  • SIP ごとにオブジェクト空間(アドレス空間じゃなく),ランタイム,GCを持つ.

カーネルの大半は C++,unsafe C#,アセンブリで書かれていて(些細だけどデバッガのスタブ用に C のコードも含まれている),その他の部分は,安全な言語(例えば Sing#) -> MSIL -> ネイティブコード.

  • Sing# は C# ベースの [http://research.microsoft.com/projects/specsharp/ Spec#] を拡張した言語.Sing# を使う理由は,メッセージパッシング通信をうまく抽象化するためと,verification のため.
  • アセンブリで書かれた割込みルーチンがディスパッチされた後,C# のコードに遷移する.

SPINとはどこらへんが違うんでしょうか? -- arino

  • 安全な言語を使って OS の拡張性と安全性を両立させるという目的は同じですが,拡張の単位が違うのだと思います.SPIN が Modula-3 の手続きレベルで機能拡張するのに対して(サービスと呼んでいた?),Singularity は Mach のようにプロセスレベルで機能拡張します(SIP と呼ぶ).

  • メッセージパッシングを既存のシステム記述言語(Cとか)で書くのは面倒なので,Mach は MIG というスタブジェネレータを提供していましたが,Sing# は言語自体のファーストクラスオブジェクトとして扱えるようにしています.

  • (よくわかってませんが)executable が MSIL でいいのであれば,SPIN のように言語に縛られることはないですよね.

  • Singularity はいつネイティブコードにコンパイルするんですかね? SPIN が登場したときと比較すると JIT 技術も研究が進んだと思うので,状況が変わってそうです.

    • ネイティブコードへのコンパイルはなんとなく静的、というかあらかじめコンパイルしておく、みたいな事をrevisitedの方で言ってた気がします(うろおぼえ)
    • [http://www.fastwave.gr.jp/diarysrv/arino/200601a.html#20060108-1 arinoのその後の印象]にもリンクを貼っておく -- arino
    • CRL は存在せず,MSIL をあらかじめネイティブコードにコンパイルしてしまうのですね.コンパイラは[http://research.microsoft.com/act/ Bartok]を使っている.

アドレス空間が分かれないからMachのポートでの通信が重いって問題が解決される、という理解であってるんですかね? でもexternal memoryでしたっけ?共有する部分。あれってあんましキャッシュにはヒットしないのでやっぱり遅い気がするんですが、そうでも無いのかなぁ -- arino

  • (上の SPIN との比較はずいぶん的をはずしてましたね...)ハードウェアの保護機構を使うのではなくて,ソフトウェア(プログラミング言語)を使ってプロセスを隔離するから '''Software'''-Isolated Processe なんですね.
    • 現在は,すべての SIP は ring 0 の特権モードで,カーネルアドレス空間内で動いているようですね.
    • [共有ライブラリ],動的ロードがないのですね.動的ロード(リンク)する代わりに,子プロセスを作って,チャネルで通信すると.動的ロードしないから,JIT も不要.
  • SIP 間でのデータ授受は ExHeap を介して行なう.Mach の out-of-line data IPC みたいなものか.
  • アドレス空間越えの他に,Mach の場合,ケーパビリティのチェックやマーシャリングを OS でやる必要があったけど,Singularity の場合,どれくらい言語で吸収 or (安全が保証されるから)端折れるのかな?
  • 安全性が保証できないから,プロセス(アドレス空間)を分けたり,特権/非特権モードを使い分けたりと保護するわけで,安全な言語で書けば,安全性を保証したまま,よけいなオーバヘッドのない OS が実現できるというのはわかります.というか,仮想マシンとシステムコールなどで,同じような妄想を何度か書いてますね..NET 用語で言うところの,managed OS になるのかな?
    • PCC とか TAL への言及がありますね.
  • [http://www.radiumsoftware.com/0607.html#060721 Virtual Memory Overhead] (Radium Software 2006-07-21) では,仮想記憶管理のオーバヘッドの視点から Singularity に触れられてます.

余談ですが,dependable というのはシステムソフトウェア分野での流行りの一つで,(OSじゃない方の)SPINなどモデルチェッキングの話とかいろいろ研究はあるようです.現実的な規模のOSを真面目にモデルチェッキングできるか疑問なところはありますが.


レイ・カーツワイルの「ポスト・ヒューマン誕生」などで描かれる[http://ja.wikipedia.org/wiki/技術的特異点 技術的特異点]とは違う。

Clone this wiki locally