您的位置:首页 > 理论基础 > 数据结构算法

Linux-块设备-数据结构

2017-12-16 16:40 176 查看
对于各种块设备,内核使用了一张块设备表blk_dev[]来进行管理。每种块设备都在块设备表中占据一项。

块设备表中每个块设备项的数据结构为:

    // 块设备处理结构。
 struct blk_dev_struct {
         void (*request_fn)(void);                     //
请求处理函数指针。
         struct request * current_request;             //
当前处理的请求结构。
  }

    // 下面是请求队列中项的结构。其中如果字段dev = -1,则表示队列中该项没有被使用。
    // 字段cmd可取常量 READ(0)或 WRITE(1)(定义在include/linux/fs.h中)。
    // 其中,内核并没有用到waiting指针,起而代之地内核使用了缓冲块的等待队列。因为
    // 等待一个缓冲块与等待请求项完成是对等的。
 struct request {
         intdev;                      /* -1 if no request */ //
发请求的设备号。
         intcmd;                      /* READ or WRITE */ // READ或WRITE命令。
         int errors;                    //操作时产生的错误次数。
        unsigned long sector;          //
起始扇区。(1块=2扇区)
         unsigned long nr_sectors;       //
读/写扇区数。
         char * buffer;                 //
数据缓冲区。
         struct task_struct * waiting;  //
任务等待请求完成操作的地方(队列)。
         struct buffer_head * bh;       //
缓冲区头指针(include/linux/fs.h,68)。
         struct request * next;         //
指向下一请求项。
  };
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: