Linux-块设备-数据结构

对于各种块设备,内核使用了一张块设备表blk_dev[]来进行管理。每种块设备都在块设备表中占据一项。

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

    // 块设备处理结构。

 struct blk_dev_struct {

         void (*request_fn)(void);                     // 请求处理函数指针。

         struct request * current_request;             // 当前处理的请求结构。

  }


    // 下面是请求队列中项的结构。其中如果字段dev = -1,则表示队列中该项没有被使用。

    // 字段cmd可取常量 READ0)或 WRITE1)(定义在include/linux/fs.h中)。

    // 其中,内核并没有用到waiting指针,起而代之地内核使用了缓冲块的等待队列。因为

    // 等待一个缓冲块与等待请求项完成是对等的。

 struct request {

         intdev;                      /* -1 if no request */ // 发请求的设备号。

         intcmd;                      /* READ or WRITE */ // READWRITE命令。

         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;         // 指向下一请求项。

  };



猜你喜欢

转载自blog.csdn.net/bear_miao/article/details/78820623