Mona のドライバモデルをきちんと決めるべく既存の OS のドライバモデルを調べていこう。
I/O キット
Apple が提供するドライバ開発フレムワーク。
- カーネルレベルで動くドライバ
- アプリケーションレベルで動くドライバ
のどちらも対応。オブジェクト指向である。
- I/O レジストリ。インスタンス化されたドライバの情報を保持。
- I/O カタログ。システムで利用可能な Class のデータベース。
- ユーザー空間で動いているアプリがドライバと通信可能なインターフェースの提供。
- カメラ、プリンタのサポートが弱い。
カーネル空間で動くドライバを書く場合
基本おすすめしないが、
- カーネルから使われるドライバである
- 頻繁にユーザープログラムから利用される
- 割り込みに即座に反応しなければ行けない
の場合にはカーネル空間で動くものを作る。
ユーザー空間用の便利機能
- higgher-level API
- I/O キットフレームワーク device-interface technology
ドライバのレイヤ
- C++ のクラスで抽象化
- ドライバは継承を介して、family のメンバーになる
- Ethernet のドライバであれば Network family の IOEthernetController が親クラス。
- Nub
