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