cil os n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
CIL で表現された OS カーネルの実行方法 PowerPoint Presentation
Download Presentation
CIL で表現された OS カーネルの実行方法

Loading in 2 Seconds...

play fullscreen
1 / 26

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


  • 124 Views
  • Uploaded on

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) にコンパイルされる. 既存の問題.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
cil os

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

An executing method of a OS kernel represented in the CIL

957◆KhjEefLZMk

slide2
研究概要
  • PC/AT向け汎用オペレーティングシステムを開発
    • CLI: Common Language Infrastructure を用いる。
      • Microsoft .NET として有名
    • CLIで開発するし、利用もする。
  • カーネルの記述はC#言語を主に使用
    • 記述しやすい
    • メモリ操作と管理が安全
    • 中間言語(CIL)にコンパイルされる
slide3
既存の問題
  • CLI (C#) や JVM (Java) は、アプリケーションでは使われている。
  • CLIには、システムソフトウェアが備えるべき要件を満たすための規格が十分に定義されている。
    • 実用的な実行速度
    • セキュリティ
  • しかし、システムソフトウェアには適用されていない。
    • OSは非CLI/JVMで作られている。
    • 中間言語という特徴がカーネルには適用しにくくしている。
slide4
研究目的
  • オペレーティングシステムにCLIの特徴を活かし、安全な基盤ソフトウェアを実現する。
  • そのために、CLIでカーネルを構築する手法を提案し、動作を実証することを目的とする。
slide5
類似研究
  • CLIを用いる研究例は非常に少ない
  • 起動時にインタープリタと組み合わせるものはない
slide7
基本方針
  • CLIの特長を生かす(従来不可能なことを試す)
    • カーネルはCLIで表現する
    • システム全体もCLI準拠にする
  • 既存資産を最大限生かす
    • Monoクラスライブラリ(標準ライブラリに相当)
    • FreeTypeフォントエンジン
slide8
ソフトウェア構成
  • 特徴:ふたつのカーネルがリレーする
  • レガシー・カーネル
    • C++で記述 → 機械語
    • CILインタープリタを含む
    • i.e. 巨大ブートストラップ・ローダ
  • マネージ・カーネル
    • CLI言語(C#など) → ほぼ中間言語
    • 完全なカーネルプログラム
    • CILコンパイラを含む
slide9
ブートシーケンス
  • 最終的にはC#で書かれたマネージカーネルのみ残る
slide10
提案手法の利点
  • システム全体をCLIで表現できる
  • 起動時の初期化処理からCLIを活用できる
    • 初期化処理もC#で記述できる
    • Monoクラスライブラリを使える
  • ハードウェアに依存する箇所が少ない
    • インタープリタ
    • MMS: Memory Management System を使用しない
slide11

提案手法の実装

Implementation of our proposed method

slide12
手法概要
  • 重要な手続きは二つ
    • メタデータ
      • メタデータはCLIの核になる要素
      • コンパイルでも利用する
    • コンパイル
      • カーネルとして必要になる処理
  • 説明の順序
    • 起動までの流れ
    • メタデータ構築手順
    • コンパイラとJITコンパイル
slide13
初期状態
  • 起動直後のメモリ内の要素
    • マネージカーネルのメタデータ
    • CILインタープリタ
  • レガシーカーネルから自然にアクセス可能
slide14
提案手法の処理概要
  • メタデータを構築
  • 機械語を生成
slide15
メタデータとは
  • プログラムが扱うデータに関するデータ
    • 型の情報(種類、基本クラスなど)
    • フィールドの情報
      • 型、位置とサイズなど
    • メソッドの情報
      • 戻り値、パラメタなど
      • コードが格納されている場所
    • 外部で定義されるシンボルとのリンク
  • CLIのメタデータは、元のソースコードが復元できるほどの情報量を持つ
  • “リフレクションAPI”を通して公開される
slide16
メタデータの構築手順
  • プログラム実行にメタデータが必要(なときがある)
    • メタデータをCLIプログラムでロードできない
  • 仮のメタデータと真のメタデータの切り替え

アセンブリ

アセンブリ

普通のプログラム

アセンブリ

ローダ

プログラム

ランタイム

slide17
型オブジェクトの様子
  • int 100myInstance = new MyClassについての型オブジェクト
  • 移行前はアセンブリは参照不可
  • 移行後はアセンブリを参照して完全なメタデータを利用可能
slide18
コンパイル
  • 中間言語のコンパイラを機械語に翻訳する処理
    • コンパイラの動作から逐次実行を無くすことが目的
  • スタックマシンからレジスタマシンへの単純な翻訳(ただし表の命令をのぞく)
slide19
JITコンパイル
  • Caller メソッド(発呼側)におけるCallee メソッド(被呼側)の呼び出し部分
slide20

実験

Experiments

slide21
起動実験
  • 起動時の画面
  • テキストモード(右図)とグラフィックモード(左図)(OSのモードではなくグラフィックアダプタの設定)
  • 開発したOSの名称を CooS(クース)という。
slide22
ファイル一覧を出力するプログラム (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();

}

}

}

ファイルシステムなどの試験
slide23
フォントレンダラの試験
  • WindowsとCooSの両方でFreeTypeライブラリを動作
    • 高品位フォントエンジン
slide24
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.

}

デバイスドライバの記述
slide25
まとめ
  • CLIをカーネルで用いるための手法を提案した。
    • レガシーカーネルとマネージカーネルという二つのカーネルを組み合わせて動作させる
  • 提案手法を実装したOSを実装し、実際に動作させて評価した。
    • Windowsとのクラスプラットフォーム
      • ファイルシステム
      • FreeTypeライブラリ
    • デバイスドライバの記述
slide26
今後の展望
  • 現状では、一部メソッドの実行を依然としてインタープリタに頼っている。(それらメソッドのコールグラフの解析で解決できると考えられる。)
  • インタープリタが動作する部分を予め終わらせておく(ビルドプロセスの一部として逐次実行を入れる)