Upload
aleta
View
49
Download
0
Embed Size (px)
DESCRIPTION
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) にコンパイルされる. 既存の問題. - PowerPoint PPT Presentation
Citation preview
CIL で表現された OS カーネルの実行方法
An executing method of a OS kernel represented in the CIL
957◆KhjEefLZMk
2
CLIを実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発研究概要
PC/AT 向け汎用オペレーティングシステムを開発◆ CLI: Common Language Infrastructure を用いる。
Microsoft .NET として有名◆ CLI で開発するし、利用もする。
カーネルの記述は C# 言語を主に使用◆ 記述しやすい◆ メモリ操作と管理が安全
◆ 中間言語 (CIL) にコンパイルされる
3
CLIを実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発既存の問題
CLI (C#) や JVM (Java) は、アプリケーションでは使われている。
CLI には、システムソフトウェアが備えるべき要件を満たすための規格が十分に定義されている。◆ 実用的な実行速度◆ セキュリティ
しかし、システムソフトウェアには適用されていない。◆ OS は非 CLI/JVM で作られている。◆ 中間言語という特徴がカーネルには適用しにくくしている。
4
CLIを実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発研究目的
オペレーティングシステムに CLI の特徴を活かし、安全な基盤ソフトウェアを実現する。
そのために、 CLI でカーネルを構築する手法を提案し、動作を実証することを目的とする。
5
CLIを実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発類似研究
C/C++ Java CLI (.NET)
Corporate Windows Java OS Singularity
Non-corporate Linux JNode, JX, etc.
(nothing)
CLI を用いる研究例は非常に少ない
起動時にインタープリタと組み合わせるものはない
オペレーティングシステム設計
Architecture and Desgin
7
CLIを実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発基本方針
CLI の特長を生かす(従来不可能なことを試す)◆ カーネルは CLI で表現する◆ システム全体も CLI 準拠にする
既存資産を最大限生かす◆ Mono クラスライブラリ(標準ライブラリに相当)◆ FreeType フォントエンジン
8
CLIを実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発ソフトウェア構成
特徴:ふたつのカーネルがリレーする
レガシー・カーネル◆ C++ で記述 → 機械語◆ CIL インタープリタを含む◆ i.e. 巨大ブートストラップ・ローダ
マネージ・カーネル◆ CLI 言語 (C# など ) → ほぼ中間言語◆ 完全なカーネルプログラム◆ CIL コンパイラを含む
マネージカーネル CIL( )
レガシーカーネル C+( +言語)
アセンブリローダ
CIL コンパイラ
CIL インタープリタ
実行
などコンパイル
9
CLIを実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発ブートシーケンス
最終的には C# で書かれたマネージカーネルのみ残る
ブートローダ ブートローダ
レガシーカーネル レガシーカーネル
マネージカーネル
カーネルブリッジ カーネルブリッジ
ブートローダ
レガシーカーネル
消滅したプログラム
実行中のプログラム
マネージカーネル
システムライブラリシステムライブラリ
動作中のライブラリ
読み込まれたデータ
カーネルブリッジ
ブートローダ
レガシーカーネル
マネージカーネル
システムライブラリ
フォントレンダラ
シェル
起動
10
CLIを実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発提案手法の利点
システム全体を CLI で表現できる
起動時の初期化処理から CLI を活用できる◆ 初期化処理も C# で記述できる◆ Mono クラスライブラリを使える
ハードウェアに依存する箇所が少ない◆ インタープリタ◆ MMS: Memory Management System を使用しない
提案手法の実装
Implementation of our proposed method
12
CLIを実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発手法概要
重要な手続きは二つ◆ メタデータ
メタデータは CLI の核になる要素 コンパイルでも利用する
◆ コンパイル カーネルとして必要になる処理
説明の順序1. 起動までの流れ2. メタデータ構築手順3. コンパイラと JIT コンパイル
13
CLIを実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発初期状態
Unmanaged C+空間( +用)
メタデータ CIL インタープリタ
起動直後のメモリ内の要素◆ マネージカーネルのメタデータ◆ CIL インタープリタ
レガシーカーネルから自然にアクセス可能
14
CLIを実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発提案手法の処理概要
メタデータを構築
機械語を生成
Unmanaged C+空間( +用)
メタデータ
CIL インタープリタ
Managed CL空間( I 用)
メタデータアセンブリローダ
実行
構築
Unmanaged C+空間( +用)
CIL インタープリタ
Managed CL空間( I 用)
メタデータ
CIL コンパイラ
実行
出力機械語
メタデータ入力
15
CLIを実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発メタデータとは
プログラムが扱うデータに関するデータ◆ 型の情報(種類、基本クラスなど)◆ フィールドの情報
型、位置とサイズなど◆ メソッドの情報
戻り値、パラメタなど コードが格納されている場所
◆ 外部で定義されるシンボルとのリンク
CLI のメタデータは、元のソースコードが復元できるほどの情報量を持つ
“ リフレクション API” を通して公開される
16
CLIを実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発メタデータの構築手順
プログラム実行にメタデータが必要(なときがある)◆ メタデータを CLI プログラムでロードできない
仮のメタデータと真のメタデータの切り替え
仮
ローダ
真
普通のプログラム
ランタイム
プログラム
アセンブリ
アセンブリ
アセンブリ
真
17
CLIを実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発型オブジェクトの様子
int 100myInstance = new MyClassについての型オブジェクト
移行前はアセンブリは参照不可
移行後はアセンブリを参照して完全なメタデータを利用可能
<<struct>>100 : Int32
myInstance : MyClass
Int32 : PseudoTypeMyClass : PseudoType
PseudoType : PseudoType
<<struct>>100 : Int32
myInstance : MyClass
Int32 : PrimitiveTypeMyClass : ClassType
cscorlib : Assembly mscorlib : Assembly
PrimitiveType : ClassTypeClassType : ClassType
18
CLIを実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発コンパイル
中間言語のコンパイラを機械語に翻訳する処理◆ コンパイラの動作から逐次実行を無くすことが目的
スタックマシンからレジスタマシンへの単純な翻訳(ただし表の命令をのぞく)
newobj AllocateObjectImpl
newarr AllocateSzArrayImpl
ldstr LoadStringImpl
box BoxImpl
isinst IsInstImpl
castclass CastClassImpl
call PrepareCode
callvirt FindActualMethod
callvirt FindActualMethodForInterface
19
CLIを実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発JITコンパイル
Caller メソッド(発呼側)におけるCallee メソッド(被呼側)の呼び出し部分
Caller ランタイム
PrepareCode(method_id)
コンパイラ
コード
Compile()
機械語コード
生成
Callee()
スタブ
Stub()
書き換え
分岐アドレ
実験
Experiments
21
CLIを実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発起動実験
起動時の画面 テキストモード(右図)とグラフィックモード(左図)
( OS のモードではなくグラフィックアダプタの設定)
開発した OS の名称を CooS (クース)という。
22
CLIを実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発ファイルシステムなどの試験
ファイル一覧を出力するプログラム (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
CLIを実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発フォントレンダラの試験
Windows と CooS の両方でFreeType ライブラリを動作
◆ 高品位フォントエンジン
24
CLIを実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発デバイスドライバの記述
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を実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発まとめ
CLI をカーネルで用いるための手法を提案した。◆ レガシーカーネルとマネージカーネルという二つのカーネルを
組み合わせて動作させる
提案手法を実装した OS を実装し、実際に動作させて評価した。◆ Windows とのクラスプラットフォーム
ファイルシステム FreeType ライブラリ
◆ デバイスドライバの記述
26
CLIを実
装す
る次
世代
オペ
レー
ティ
ング
シス
テム
の開
発今後の展望
現状では、一部メソッドの実行を依然としてインタープリタに頼っている。(それらメソッドのコールグラフの解析で解決できると考えられる。)
インタープリタが動作する部分を予め終わらせておく(ビルドプロセスの一部として逐次実行を入れる)