2009-03-28 FreeBSD - 既存のドライバモデルを調べよう os mona Mona のドライバモデルをきちんと決めるべく既存の OS のドライバモデルを調べていこう。 前回までの調査 Windows - 既存のドライバモデルを調べよう BeOS - 既存のドライバモデルを調べよう BSDカーネルの設計と実装—FreeBSD詳解の必要部分を読み返した。 デバイス キャラクタデバイス cdevsw 構造体 open/close/read/write/ioctl/pool/map システム起動時、デバイス構成時などに生成 デバイス番号 デバイスドライバの種類を一意に特定 /dev/ に cdevsw の各要素がマッピングされる デバイスドライバの構成 自動コンフィギュレーションおよび初期化のための関数 ハードウェアの存在を検出(probe) 初期化時に1度呼ばれる 入出力要求を処理するための関数(カーネル上部) デバイスドライバ上部 システムコール、仮想記憶システムに呼ばれる カーネル上部で同期的に実行される 割り込みを処理するための関数(カーネル上部) デバイスドライバ下部 自身のスレッドコンテキストを持たない ブロックする事も可能(5.2以降) クラッシュダンプ関数 動き方 典型的な入出力デバイスの場合 入出力要求をデバイス単位の処理キューに置く 割り込み時にキューから取りだし処理をして通知 デバイスドライバ上部と下部がキューを介して通信。 割り込み 割り込み処理では、グルー関数が割り込みベクタテーブルに登録される。 グルー関数は統計情報更新したあとに、ドライバの割り込み処理スレッドをスケジュールして戻る。 ハードウェア抽象化・管理 GEOM 層 ディスク入出力要求を処理するフレームワーク CAM 層 資源割り当て ドライバ非依存処理 SCSI サブシステム ATA 層 ATA 共通コード 所感 ドライバ割り込み処理が即座に実行されなければいけないケースはないのかなあ。>グルー関数。 これでハードウェア応答要求に間に合うのだろうか。もしそうならば、現状の Mona のスタイルでも良いかもしれない。