Upload
arlene
View
55
Download
5
Embed Size (px)
DESCRIPTION
教育用 OS のソフトウェア工学的側面 - udos の開発を通して -. 権藤 克彦(東工大) 大場 勝(東工大). 教育用 OS udos を作りました.. まずは デモ . 特徴: 小さい .約 5,000 行. C とアセンブリ. 実機で動作 . PC/AT 機(レガシー FDD ). 最小限度の機能. KISS の追求. preemptive マルチタスク( nonpreemptive カーネル ), IA-32 の保護モード,仮想メモリ , FAT12, Unix API( 一部 ) . - PowerPoint PPT Presentation
Citation preview
2004/11/13 FOSE2004@伊勢志摩 2/19
教育用 OS udos を作りました.
まずはデモ. 特徴:
小さい.約 5,000 行. C とアセンブリ. 実機で動作. PC/AT 機(レガシー FDD ). 最小限度の機能. KISS の追求.
preemptive マルチタスク( nonpreemptive カーネル),IA-32 の保護モード,仮想メモリ , FAT12, Unix API( 一部 ) .
ハード: PIT, PIC, DMAC, KBDC, VGA, FDC のみ .
2004/11/13 FOSE2004@伊勢志摩 3/19
主張
OS は抽象→具体の追跡性が悪い. そもそも, OS 開発者用のよい抽象がな
い. OS とハードウェアの役割分担が不
明. udos 開発で苦労した経験から.
hard-won experience .ソフトウェア工学は OS 開発に貢献してない!
2004/11/13 FOSE2004@伊勢志摩 5/19
OS とハードウェアの役割分担(1) 例:カーネルとフロッピーディスク
ユーザ空間
カーネル空間
カーネル FDC
I/O 命令
割り込みread
•ファイル抽象•同期・排他制御
•ブロック単位 の読み書き
アプリ
2004/11/13 FOSE2004@伊勢志摩 6/19
OS とハードウェアの役割分担(2)
抽象「 FD= セクタ単位でアクセスする,1つの巨大なファイル.」は単純すぎ.
実際はもっと複雑.•同期・排他制御の粒度・方法が不明.•複数の I/O 命令と割り込みが必要.•FDC や DMAC の初期化・監視・リセットが必要.•ハードの制約・定石:モータ, seek, recalibrate など.
モジュール化しても漏れる
2004/11/13 FOSE2004@伊勢志摩 7/19
そもそも抽象化とは... 抽象化とは目的に応じて,
性質や機能の詳細を省き, 重要な点を残すこと.
抽象化は難しい. 様々な方向,様々なレベル. 上手にできるとは限らない.例: fork 具象化への追跡性がないと意味なし.
2004/11/13 FOSE2004@伊勢志摩 8/19
既存の抽象化≠ OS 実装理解の抽象化
既存の抽象化: 外部仕様 - 例: POSIX API 拡張性・移植性・保守性用
例: VFS, STREAMS, devsw, LKM 間接層を増す→理解は複雑に.
半同期・半非同期パターン - 抽象しすぎ. OS 教科書 - ハード非依存の浅い説明.
2004/11/13 FOSE2004@伊勢志摩 9/19
実用 OS コードでは複雑すぎ.
最適化,エラー処理. 多くのデバイス / モードのサポート 多くの間接層. 多くの機能
例: NTFS は FAT に比べて複雑.
2004/11/13 FOSE2004@伊勢志摩 11/19
どんな抽象化が欲しいのか?
ユーザ
開発者
使い方の本質は?
作り方の本質は?
readで読め
る
カーネルの(非)モニタ化がポイン
ト!見方が違う
例えば,これが欲しい.
フロッピー
OS
カーネル
2004/11/13 FOSE2004@伊勢志摩 12/19
カーネルの(非)モニタ化とは?
2種類の preemptive マルチタスク. nonpreemptive カーネル
カーネルをモニタとみなす. ○同期処理が楽・簡潔.
preemptive カーネル カーネル中も細粒度で排他制御. × 同期処理が複雑.○反応速度向上.
nonpreemptiveマルチタスクとは別用語.
2004/11/13 FOSE2004@伊勢志摩 13/19
udos の場合は... udos の fd.c
半同期・半非同期パターン カーネルがモニタの一種.
sync_wait = Java の wait sync_notify = Java の notify
ミドルレベルの抽象を提供. 具象への追跡性がよい.
抽象例:カーネル=モニタ. 具象例: sync_wait は ljmp の
タスクスイッチで実現.
FDC_read_write () { while (fd_is_busy) sync_wait (&fd_is_busy); fd_is_busy = 1; FDC_seek (); sync_wait (&ident_fd); FDC_setup_DMAC (); read_write_command (); sync_wait (&ident_fd); fd_is_busy = 0; sync_notify (&fd_is_busy);}FDC_intr_handler () { sync_notify (&ident_fd);}
この位の抽象度が欲しい.
2004/11/13 FOSE2004@伊勢志摩 15/19
比較(1):教育用 OS Nachos
Nachos はハードへの追跡性を軽視. ユーザプロセス上で動作. CPU ( R3000 )は精密にエミュレー
ション. HDD は単にファイル読み書きで抽象.
2004/11/13 FOSE2004@伊勢志摩 16/19
比較(2): OSKit, GRUB
OSKit = OS 開発キット GRUB=汎用ブートローダ
疎粒度の高い抽象を提供. OS 開発コストを低減. コード量が多い→追跡性は悪い.
2004/11/13 FOSE2004@伊勢志摩 17/19
比較(3):他の教育用 OS
MINIX: 3万行で大きすぎる. GeekOS: 単純,リアル,理解性.
≒udos の目標・サイズ. 追跡性の話なし.ページング・ファイルシ
ステム・ fork/exec なし. 他の目的:
Linux 拡張,マイクロカーネル,ユビキタス,ネットワーク,組込み,リアルタイム, ...
2004/11/13 FOSE2004@伊勢志摩 18/19
まとめ
主張:教育用 OS は抽象→具体の追跡性をよくする(べき). 形式的記述としてソースコードは有用.
udos ホームページ http://www.sde.cs.titech.ac.jp/~gondow/udos/
2004/11/13 FOSE2004@伊勢志摩 19/19
将来の展望
(教育用 OS 用の)理解支援ツール. ADIOS ドキュメンテーションツール. 識別子断片コーパス.
教育用 OS が持つべき他の性質. 例:観察可能性.
内部動作・複雑な状態を外に公開.
by 大場
2004/11/13 FOSE2004@伊勢志摩 21/19
きれいに抽象化できないこともある.
やさしい例:スタック 外部仕様と内部仕様がきれいに分離. そもそも仕様が小さい.
難しい例:プロセス 内部仕様の一部が外部仕様に漏れる.
例: fork 時に継承される属性はいろいろ.
2004/11/13 FOSE2004@伊勢志摩 22/19
fork in POSIX ( IEEE 1003.1-2003)
fork はプロセスのコピーを作る. 例外: PID, PPID など, 25項目も. 内部に依存する項目もある.
例:スケジュールが FIFO か RR なら,スケジューリングポリシーや優先度を継承,それ以外は実装依存.
2004/11/13 FOSE2004@伊勢志摩 23/19
半同期・半非同期パターン
無いもの ハードウェア初期化 プロセススイッチ 同期・排他制御の方法
や粒度 I/O 命令 ハードウェア制約
例:モータ ON/OFF
sync layer
queueinglayer
1, 4: read(data)
async layer 3: enqueue(data)
2: interrupt
synctask
synctask
asynctask
message queue
hardware
キューでプロセスを直列化
2004/11/13 FOSE2004@伊勢志摩 24/19
FDC N82077 (1): implied seek
implied seek=READ/WRITE前に明示的に SEEK しなくて良い機能. 元祖 FDCμPD765 は implied seek なし.
udos はこちらで実装.明示的に seek . N82077以降は implied seekあり.
SEEK コマンド発行の役割分担が変化.
2004/11/13 FOSE2004@伊勢志摩 25/19
FDC N82077(2): モータ制御 ルール:
READ/WRITE コマンド発行の 500ミリ秒以上前にモータをオンにする.
オンのままだとメディアが磨耗.まずい. udos での効率化:
READ/WRITE後にモータをオフにしない. 一秒間何も無ければ, PIT ハンドラがオフにす
る. モータ制御モジュールの外に漏れている!
2004/11/13 FOSE2004@伊勢志摩 26/19
FDC N82077(3): recalibrate seek後,目的の位置とずれることがある.
FDD はシリンダ位置情報をくれない. データを読むと,住所は読める. seek後のヘッド位置が正しいかは分からない.
recalibrate 一度,先頭に戻り,ずれをゼロに初期化する. FDD はヘッドが 0 シリンダにあるかを検出可
能. いつ,何度リトライすべき ?
2004/11/13 FOSE2004@伊勢志摩 27/19
教育用 OS はなぜ必要 ?
「 OS はコンピュータに奇跡を起こさせる魔法, OS の講義はその魔法の秘密を学生に説明すべき」 [Dick00]
でも,現実には説明できてない→教育用 OS
forkread
魔法の言葉
うきっ
2004/11/13 FOSE2004@伊勢志摩 28/19
よい抽象は教育用 OS が与える(べき)
「カーネル=モニタ」というミドルレベルの抽象度が大事. 教育用OS( udos )はこれを提供. OS 教科書や実用 OS では分かりにく
い.
2004/11/13 FOSE2004@伊勢志摩 29/19
ギター侍
「俺は権藤, udos 作りました」って言うじゃない...
でもアンタ, udos で Fn+F5を押すと,なぜ外部ディスプレイ表示になるのか説明できませんから.
残念!斬り!
2004/11/13 FOSE2004@伊勢志摩 30/19
FOSE2005
場所:仙台 作並温泉(予定) 仙台駅よりバスで約 80 分. よいホテルがあれば教えて下さい.一の坊?
第 2候補:三浦半島 日程: 2005年 11月(予定) 委員長
権藤克彦(東工大),小林隆志(東工大)
2004/11/13 FOSE2004@伊勢志摩 31/19
メモ 追跡性とモジュール化の違いは ? udos で理解しても, Linux が作れるよ
うになるわけではない. 様々なレベルの教育用 OS があるべき.
OS はモジュール化が難しい例題を与える. 散らばる cross-cutting concern への追跡
性. AOP でいけるよね.わりと.