32
2004/11/13 FOSE2004@伊伊伊伊 1/19 伊伊伊 OS 伊伊伊伊伊伊伊伊伊伊伊伊 - udos 伊伊伊伊伊伊伊 - 伊伊 伊伊 伊伊伊伊 () 伊伊 伊 伊伊伊伊 ()

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

  • 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@伊勢志摩 1/19

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

権藤 克彦(東工大)大場 勝(東工大)

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@伊勢志摩 4/19

抽象と具体の大きなギャップ

具体的すぎる

抽象的すぎる

大きなギャップOS 解説本 OS 教科書

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@伊勢志摩 10/19

図:多すぎる間接層

OS ソース読み=たまねぎの皮むき. どこまで読んでも本質が見えない.

うきっVFS

devsw STREAMS

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@伊勢志摩 14/19

よい抽象は教育用 OS が与える(べき)

具体的すぎる

抽象的すぎる

OS 解説本 OS 教科書

ミドルレベルの抽象化.

高い追跡性.

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@伊勢志摩 20/19

メモ

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 でいけるよね.わりと.

2004/11/13 FOSE2004@伊勢志摩 32/19

メモ

小さくするために FATツールと FAT コードの共通化 preloading 方式 汎用リスト構造