1 / 26

CIL で表現された OS カーネルの実行方法

CIL で表現された OS カーネルの実行方法. An executing method of a OS kernel represented in the CIL. 957◆KhjEefLZMk. 研究概要. PC/AT 向け汎用オペレーティングシステムを開発 CLI: Common Language Infrastructure を用いる。 Microsoft .NET として有名 CLI で開発するし、利用もする。 カーネルの記述は C# 言語を主に使用 記述しやすい メモリ操作と管理が安全 中間言語 (CIL) にコンパイルされる. 既存の問題.

aleta
Download Presentation

CIL で表現された OS カーネルの実行方法

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CILで表現されたOSカーネルの実行方法 An executing method of a OS kernel represented in the CIL 957◆KhjEefLZMk

  2. 研究概要 • PC/AT向け汎用オペレーティングシステムを開発 • CLI: Common Language Infrastructure を用いる。 • Microsoft .NET として有名 • CLIで開発するし、利用もする。 • カーネルの記述はC#言語を主に使用 • 記述しやすい • メモリ操作と管理が安全 • 中間言語(CIL)にコンパイルされる

  3. 既存の問題 • CLI (C#) や JVM (Java) は、アプリケーションでは使われている。 • CLIには、システムソフトウェアが備えるべき要件を満たすための規格が十分に定義されている。 • 実用的な実行速度 • セキュリティ • しかし、システムソフトウェアには適用されていない。 • OSは非CLI/JVMで作られている。 • 中間言語という特徴がカーネルには適用しにくくしている。

  4. 研究目的 • オペレーティングシステムにCLIの特徴を活かし、安全な基盤ソフトウェアを実現する。 • そのために、CLIでカーネルを構築する手法を提案し、動作を実証することを目的とする。

  5. 類似研究 • CLIを用いる研究例は非常に少ない • 起動時にインタープリタと組み合わせるものはない

  6. オペレーティングシステム設計 Architecture and Desgin

  7. 基本方針 • CLIの特長を生かす(従来不可能なことを試す) • カーネルはCLIで表現する • システム全体もCLI準拠にする • 既存資産を最大限生かす • Monoクラスライブラリ(標準ライブラリに相当) • FreeTypeフォントエンジン

  8. ソフトウェア構成 • 特徴:ふたつのカーネルがリレーする • レガシー・カーネル • C++で記述 → 機械語 • CILインタープリタを含む • i.e. 巨大ブートストラップ・ローダ • マネージ・カーネル • CLI言語(C#など) → ほぼ中間言語 • 完全なカーネルプログラム • CILコンパイラを含む

  9. ブートシーケンス • 最終的にはC#で書かれたマネージカーネルのみ残る

  10. 提案手法の利点 • システム全体をCLIで表現できる • 起動時の初期化処理からCLIを活用できる • 初期化処理もC#で記述できる • Monoクラスライブラリを使える • ハードウェアに依存する箇所が少ない • インタープリタ • MMS: Memory Management System を使用しない

  11. 提案手法の実装 Implementation of our proposed method

  12. 手法概要 • 重要な手続きは二つ • メタデータ • メタデータはCLIの核になる要素 • コンパイルでも利用する • コンパイル • カーネルとして必要になる処理 • 説明の順序 • 起動までの流れ • メタデータ構築手順 • コンパイラとJITコンパイル

  13. 初期状態 • 起動直後のメモリ内の要素 • マネージカーネルのメタデータ • CILインタープリタ • レガシーカーネルから自然にアクセス可能

  14. 提案手法の処理概要 • メタデータを構築 • 機械語を生成

  15. メタデータとは • プログラムが扱うデータに関するデータ • 型の情報(種類、基本クラスなど) • フィールドの情報 • 型、位置とサイズなど • メソッドの情報 • 戻り値、パラメタなど • コードが格納されている場所 • 外部で定義されるシンボルとのリンク • CLIのメタデータは、元のソースコードが復元できるほどの情報量を持つ • “リフレクションAPI”を通して公開される

  16. メタデータの構築手順 • プログラム実行にメタデータが必要(なときがある) • メタデータをCLIプログラムでロードできない • 仮のメタデータと真のメタデータの切り替え アセンブリ 真 アセンブリ 普通のプログラム アセンブリ ローダ プログラム ランタイム 仮 真

  17. 型オブジェクトの様子 • int 100myInstance = new MyClassについての型オブジェクト • 移行前はアセンブリは参照不可 • 移行後はアセンブリを参照して完全なメタデータを利用可能

  18. コンパイル • 中間言語のコンパイラを機械語に翻訳する処理 • コンパイラの動作から逐次実行を無くすことが目的 • スタックマシンからレジスタマシンへの単純な翻訳(ただし表の命令をのぞく)

  19. JITコンパイル • Caller メソッド(発呼側)におけるCallee メソッド(被呼側)の呼び出し部分

  20. 実験 Experiments

  21. 起動実験 • 起動時の画面 • テキストモード(右図)とグラフィックモード(左図)(OSのモードではなくグラフィックアダプタの設定) • 開発したOSの名称を CooS(クース)という。

  22. ファイル一覧を出力するプログラム (ls) このプログラムをWindows上でコンパイル・動作させ、動作を確認。 動作確認した実行可能ファイル (ls.exe) をCooSにコピーして実行して、動作することを確認した。 クロスプラットフォーム ファイルシステム互換 using System; using System.IO; class ls { static void Main(string[] args) { DirectoryInfo dir; if(args.Length==0) { dir = new DirectoryInfo( Directory.GetCurrentDirectory()); } else { dir = new DirectoryInfo(args[0]); } foreach(FileSystemInfo fsi in dir.GetFileSystemInfos()) { Console.Write("{0,-32} ", fsi.Name); if(fsi is FileInfo) { FileInfo fi = (FileInfo)fsi; Console.Write("{0,10} B", fi.Length); } else { Console.Write("{0,10} -",""); } Console.WriteLine(); } } } ファイルシステムなどの試験

  23. フォントレンダラの試験 • WindowsとCooSの両方でFreeTypeライブラリを動作 • 高品位フォントエンジン

  24. DMAコントローラの構築子 DMAコントローラに割り当てられているIOポートを生成しているのが分かる 初期化メソッド 各ポートを通してDMAを制御している private DMAController( ushort cadr0, ushort cadr1, ushort cadr2, ushort cadr3, ushort ccnt0, ushort ccnt1, ushort ccnt2, ushort ccnt3, ushort psts, ushort pcmd, ushort preq, ushort psmask, ushort pmode, ushort pcbpf, ushort ptmp, ushort pmclr, ushort pcmask, ushort pamask) { this.cur_address[0] = new IOPort1(cadr0); this.cur_address[1] = new IOPort1(cadr1); this.cur_address[2] = new IOPort1(cadr2); this.cur_address[3] = new IOPort1(cadr3); this.cur_counter[0] = new IOPort1(ccnt0); this.cur_counter[1] = new IOPort1(ccnt1); this.cur_counter[2] = new IOPort1(ccnt2); this.cur_counter[3] = new IOPort1(ccnt3); this.status = new IOPort1(psts); this.command = new IOPort1(pcmd); this.request = new IOPort1(preq); this.single_mask = new IOPort1(psmask); this.mode = new IOPort1(pmode); this.clear_byte_ptr_flipflop = new IOPort1(pcbpf); this.temporary = new IOPort1(ptmp); this.master_clear = new IOPort1(pmclr); this.clear_mask = new IOPort1(pcmask); this.all_mask = new IOPort1(pamask); } private void Initialize(byte mode, byte mask) { this.master_clear.Write(0x00); // master clear (reset) this.command.Write(0x00);// cmd reg. this.mode.Write(mode); // mode reg. this.all_mask.Write(mask);// all mask reg. } デバイスドライバの記述

  25. まとめ • CLIをカーネルで用いるための手法を提案した。 • レガシーカーネルとマネージカーネルという二つのカーネルを組み合わせて動作させる • 提案手法を実装したOSを実装し、実際に動作させて評価した。 • Windowsとのクラスプラットフォーム • ファイルシステム • FreeTypeライブラリ • デバイスドライバの記述

  26. 今後の展望 • 現状では、一部メソッドの実行を依然としてインタープリタに頼っている。(それらメソッドのコールグラフの解析で解決できると考えられる。) • インタープリタが動作する部分を予め終わらせておく(ビルドプロセスの一部として逐次実行を入れる)

More Related