ブロックデバイス
1. デバイスドライバの初期化
1.1 デバイスの登録
デバイスドライバは初期化時にregister_blkdev()でデバイスをカーネルに登録する。引数にはデバイスのメジャー番号とデバイス名を指定する。
1.2 RequestQueue
ブロックデバイスはI/O Requestを受けつけるためのRequestQueueがある。RequestQueueはblk_init_queue()で作成する。
1.3 Request処理ルーチン
RequestQueueを作成する時、blk_init_queue()の引数rfnでRequestを処理(I/Oを実行)するルーチンを指定する。このルーチンはelv_next_request()でElevator(I/Oスケジューラ)からRequestを取りだしてRequestQueueに入れて、デバイスにI/Oを発行していく。
2. 関連データ構造
struct block_device_operations
/dev/hda1などのデバイスファイルからのアクセス(open(),ioctl()...)に対するハンドラが定義される。
struct gendisk
一般的なディスクデバイス用の管理テーブル。
表1 struct gendiskのフィールド(一部)
表1 struct gendiskのフィールド(一部)
フィールド |
説明 |
---|---|
major |
メジャー番号 |
first_minor |
最初のマイナー番号 |
minors |
マイナー番号数 |
disk_name |
デバイス名 |
fops |
ハンドラ群のポインタを格納したstruct block_device_operationsへのポインタ |
[関連ページ]
I/Oスケジューラ