ディスクブロックへのアクセスを監視し、ブロックビットマップの形式でアクセスを監視する方法を探しています。
また、デバイスブロックアクセスを固定(およびキュー)できる必要があります(固定解除および保留中のブロック書き込みも可能でなければなりません)。この機能はカーネルモードでサポートする必要があるようです(おそらくユーザーアプリケーションでは不可能です)。カーネルには、実際のブロックデバイスを呼び出す前のエントリポイントであるblk-core.cがあります。こんな用途で使ってもいいと思います。
ある種のキューイングメカニズムが使用されているようで、実際にデバイスに記録された時期を知る方法が必要です。
void blk_start_queue(struct request_queue *q)
{
WARN_ON(!irqs_disabled());
queue_flag_clear(QUEUE_FLAG_STOPPED, q);
__blk_run_queue(q);
}
EXPORT_SYMBOL(blk_start_queue);
また、ブロックではなくセクタを使用することも確認しました(追跡しなければならない部分です)。
カーネルファイルシステムの書き込み要求はセクタにありますが、デフォルトのディスクデバイスドライバはブロックにありますか?その場合は、ブロック監視がディスクドライバに存在する必要があります。
また、デバイスブロック自体(たとえば、hd.c)は、要求構造に転送が必要な場所が正確にどこにあるのかわかりません。
struct request
{
....
sector // the position in the device at which the transfer should be made
....
}
読み書きする正確なセクタに関する情報を提供しますが、要求を送信する上位層はどのように決定しますか?これはブロックドライバ(この場合hd.c)の決定ではありませんか?
私が理解している部分が欠けている可能性があります。
このトピックに関する提案を送信していただきありがとうございます。