1 / 32

教育用 OS のソフトウェア工学的側面 - udos の開発を通して -

教育用 OS のソフトウェア工学的側面 - udos の開発を通して -. 権藤 克彦(東工大) 大場 勝(東工大). 教育用 OS udos を作りました.. まずは デモ . 特徴: 小さい .約 5,000 行. C とアセンブリ. 実機で動作 . PC/AT 機(レガシー FDD ). 最小限度の機能. KISS の追求. preemptive マルチタスク( nonpreemptive カーネル ), IA-32 の保護モード,仮想メモリ , FAT12, Unix API( 一部 ) .

arlene
Download Presentation

教育用 OS のソフトウェア工学的側面 - udos の開発を通して -

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. 教育用OSのソフトウェア工学的側面- udosの開発を通して- 権藤 克彦(東工大) 大場 勝(東工大) FOSE2004@伊勢志摩

  2. 教育用OSudosを作りました. • まずはデモ. • 特徴: • 小さい.約5,000行. Cとアセンブリ. • 実機で動作.PC/AT機(レガシーFDD). • 最小限度の機能.KISSの追求. • preemptiveマルチタスク(nonpreemptiveカーネル),IA-32の保護モード,仮想メモリ, FAT12, Unix API(一部). • ハード:PIT, PIC, DMAC, KBDC, VGA, FDCのみ. FOSE2004@伊勢志摩

  3. 主張 • OSは抽象→具体の追跡性が悪い. • そもそも,OS開発者用のよい抽象がない. • OSとハードウェアの役割分担が不明. • udos開発で苦労した経験から. • hard-won experience. ソフトウェア工学はOS開発に貢献してない! FOSE2004@伊勢志摩

  4. 抽象と具体の大きなギャップ OS教科書 OS解説本 大きなギャップ 具体的 すぎる 抽象的 すぎる OSとハードの 役割分担は? 落下中 FOSE2004@伊勢志摩

  5. OSとハードウェアの役割分担(1) • 例:カーネルとフロッピーディスク FDC カーネル I/O命令 read 割り込み アプリ • ファイル抽象 • 同期・排他制御 • ブロック単位 の読み書き ユーザ 空間 カーネル 空間 FOSE2004@伊勢志摩

  6. OSとハードウェアの役割分担(2) • 抽象「FD=セクタ単位でアクセスする,1つの巨大なファイル.」は単純すぎ. • 実際はもっと複雑. • 同期・排他制御の粒度・方法が不明. • 複数のI/O命令と割り込みが必要. • FDCやDMACの初期化・監視・リセットが必要. • ハードの制約・定石:モータ,seek, recalibrateなど. モジュール化 しても漏れる FOSE2004@伊勢志摩

  7. そもそも抽象化とは... • 抽象化とは目的に応じて, • 性質や機能の詳細を省き, • 重要な点を残すこと. • 抽象化は難しい. • 様々な方向,様々なレベル. • 上手にできるとは限らない.例:fork • 具象化への追跡性がないと意味なし. FOSE2004@伊勢志摩

  8. 既存の抽象化≠OS実装理解の抽象化 • 既存の抽象化: • 外部仕様- 例:POSIX API • 拡張性・移植性・保守性用 • 例:VFS, STREAMS, devsw, LKM • 間接層を増す→理解は複雑に. • 半同期・半非同期パターン - 抽象しすぎ. • OS教科書 - ハード非依存の浅い説明. FOSE2004@伊勢志摩

  9. 実用OSコードでは複雑すぎ. • 最適化,エラー処理. • 多くのデバイス/モードのサポート • 多くの間接層. • 多くの機能 • 例:NTFSはFATに比べて複雑. FOSE2004@伊勢志摩

  10. 図:多すぎる間接層 • OSソース読み=たまねぎの皮むき. • どこまで読んでも本質が見えない. うきっ VFS devsw STREAMS FOSE2004@伊勢志摩

  11. どんな抽象化が欲しいのか? カーネルの(非)モニタ化がポイント! 使い方の 本質は? ユーザ readで読める 例えば, これが欲しい. 見方が違う カーネル 作り方の 本質は? フロッピー 開発者 OS FOSE2004@伊勢志摩

  12. カーネルの(非)モニタ化とは? • 2種類の preemptiveマルチタスク. • nonpreemptive カーネル • カーネルをモニタとみなす. • ○同期処理が楽・簡潔. • preemptive カーネル • カーネル中も細粒度で排他制御. • ×同期処理が複雑.○反応速度向上. nonpreemptiveマルチタスク とは別用語. FOSE2004@伊勢志摩

  13. 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@伊勢志摩

  14. 教育用OS よい抽象は教育用OSが与える(べき) • ミドルレベルの抽象化. • 高い追跡性. OS教科書 OS解説本 具体的 すぎる 抽象的 すぎる FOSE2004@伊勢志摩

  15. 比較(1):教育用OS Nachos • Nachosはハードへの追跡性を軽視. • ユーザプロセス上で動作. • CPU(R3000)は精密にエミュレーション. • HDDは単にファイル読み書きで抽象. FOSE2004@伊勢志摩

  16. 比較(2):OSKit, GRUB • OSKit=OS開発キット • GRUB=汎用ブートローダ • 疎粒度の高い抽象を提供. • OS開発コストを低減. • コード量が多い→追跡性は悪い. FOSE2004@伊勢志摩

  17. 比較(3):他の教育用OS • MINIX: 3万行で大きすぎる. • GeekOS: 単純,リアル,理解性. • ≒udosの目標・サイズ. • 追跡性の話なし.ページング・ファイルシステム・fork/execなし. • 他の目的: • Linux拡張,マイクロカーネル,ユビキタス,ネットワーク,組込み,リアルタイム,... FOSE2004@伊勢志摩

  18. まとめ • 主張:教育用OSは抽象→具体の追跡性をよくする(べき). • 形式的記述としてソースコードは有用. • udos ホームページ • http://www.sde.cs.titech.ac.jp/~gondow/udos/ FOSE2004@伊勢志摩

  19. 将来の展望 • (教育用OS用の)理解支援ツール. • ADIOSドキュメンテーションツール. • 識別子断片コーパス. • 教育用OSが持つべき他の性質. • 例:観察可能性. • 内部動作・複雑な状態を外に公開. by 大場 FOSE2004@伊勢志摩

  20. メモ FOSE2004@伊勢志摩

  21. きれいに抽象化できないこともある. • やさしい例:スタック • 外部仕様と内部仕様がきれいに分離. • そもそも仕様が小さい. • 難しい例:プロセス • 内部仕様の一部が外部仕様に漏れる. • 例:fork 時に継承される属性はいろいろ. FOSE2004@伊勢志摩

  22. fork in POSIX(IEEE 1003.1-2003) • forkはプロセスのコピーを作る. • 例外:PID, PPIDなど,25項目も. • 内部に依存する項目もある. • 例:スケジュールがFIFOかRRなら,スケジューリングポリシーや優先度を継承,それ以外は実装依存. FOSE2004@伊勢志摩

  23. 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@伊勢志摩

  24. FDC N82077(1):implied seek • implied seek=READ/WRITE前に明示的にSEEKしなくて良い機能. • 元祖FDCμPD765はimplied seekなし. • udosはこちらで実装.明示的にseek. • N82077以降はimplied seekあり. • SEEKコマンド発行の役割分担が変化. FOSE2004@伊勢志摩

  25. FDC N82077(2): モータ制御 • ルール: • READ/WRITEコマンド発行の500ミリ秒以上前にモータをオンにする. • オンのままだとメディアが磨耗.まずい. • udosでの効率化: • READ/WRITE後にモータをオフにしない. • 一秒間何も無ければ,PITハンドラがオフにする. • モータ制御モジュールの外に漏れている! FOSE2004@伊勢志摩

  26. FDC N82077(3): recalibrate • seek後,目的の位置とずれることがある. • FDDはシリンダ位置情報をくれない. • データを読むと,住所は読める. • seek後のヘッド位置が正しいかは分からない. • recalibrate • 一度,先頭に戻り,ずれをゼロに初期化する. • FDDはヘッドが0シリンダにあるかを検出可能. • いつ,何度リトライすべき? FOSE2004@伊勢志摩

  27. 教育用OSはなぜ必要? うきっ • 「OSはコンピュータに奇跡を起こさせる魔法,OSの講義はその魔法の秘密を学生に説明すべき」 [Dick00] • でも,現実には説明できてない→教育用OS 魔法の言葉 read fork FOSE2004@伊勢志摩

  28. よい抽象は教育用OSが与える(べき) • 「カーネル=モニタ」というミドルレベルの抽象度が大事. • 教育用OS(udos)はこれを提供. • OS教科書や実用OSでは分かりにくい. FOSE2004@伊勢志摩

  29. ギター侍 • 「俺は権藤,udos作りました」って言うじゃない... • でもアンタ,udosでFn+F5を押すと,なぜ外部ディスプレイ表示になるのか説明できませんから. • 残念!斬り! FOSE2004@伊勢志摩

  30. FOSE2005 • 場所:仙台 作並温泉(予定) • 仙台駅よりバスで約80分. • よいホテルがあれば教えて下さい.一の坊? • 第2候補:三浦半島 • 日程:2005年11月(予定) • 委員長 • 権藤克彦(東工大),小林隆志(東工大) FOSE2004@伊勢志摩

  31. メモ • 追跡性とモジュール化の違いは? • udosで理解しても,Linuxが作れるようになるわけではない. • 様々なレベルの教育用OSがあるべき. • OSはモジュール化が難しい例題を与える. • 散らばるcross-cutting concernへの追跡性. • AOPでいけるよね.わりと. FOSE2004@伊勢志摩

  32. メモ • 小さくするために • FATツールとFATコードの共通化 • preloading方式 • 汎用リスト構造 FOSE2004@伊勢志摩

More Related