無料Wikiサービス | デモページ | [広告] サイト検索サービス Sx4
Linux Kernel(2.6)の実装に関するメモ書き
最近更新したページ
2008/1/14
2008/1/13
2007/12/9
2007/10/5
2007/9/28
2007/9/27
2007/8/22
2007/8/21
検索

ブロックデバイス


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のフィールド(一部)
フィールド
説明
major
メジャー番号
first_minor
最初のマイナー番号
minors
マイナー番号数
disk_name
デバイス名
fops
ハンドラ群のポインタを格納したstruct block_device_operationsへのポインタ


[関連ページ]
I/Oスケジューラ


最終更新 2006/7/21 01:27:24 - kztomita
(2006/7/21 01:00:42 作成)