2.6 初始化块设备请求项结构

2.6 初始化块设备请求项结构

Linux 0.11将外设分为两类:一类是块设备,另一类是字符设备。块设备将存储空间等分为若干同样大小的称为块的小存储空间,每个块有块号,可以独立、随机读写。硬盘、软盘都是块设备。字符设备以字符为单位进行I/O通信。键盘、早期黑屏命令行显示器都是字符设备。

进程要想与块设备进行沟通,必须经过主机内存中的缓冲区。请求项管理结构request[32]就是操作系统管理缓冲区中的缓冲块与块设备上逻辑块之间读写关系的数据结构。

请求项在进程与块设备进行I/O通信的总体关系如图2-11所示。

操作系统根据所有进程读写任务的轻重缓急,决定缓冲块与块设备之间的读写操作,并把需要操作的缓冲块记录在请求项上,得到读写块设备操作指令后,只根据请求项中的记录来决定当前需要处理哪个设备的哪个逻辑块。

执行代码如下:

 
 
  1. //代码路径:init/main.c:  
  2. void main(void)  
  3. {  
  4.     …  
  5.     blk_dev_init();  
  6.     …  
  7. }  
  8.  
  9. //代码路径:kernel/blk_dev/blk.h:  
  10. …  
  11. #define NR_REQUEST 32  
  12. struct request {  
  13.     int dev; /* -1 if no request */  
  14.     int cmd; /* READ or WRITE */  
  15.     int errors;  
  16.     unsigned long sector;  
  17.     unsigned long nr_sectors;  
  18.     char * buffer;  
  19.     struct task_struct * waiting;  
  20.     struct buffer_head * bh;  
  21.     struct request * next; //说明request可以构成链表  
  22. };  
  23.     …  
  24.  
  25. //代码路径:kernel/blk_dev/ll_rw_block.c:  
  26.     …  
  27. struct request request[NR_REQUEST]; //数组链表  
  28.     …  
  29. void blk_dev_init(void)  
  30. {  
  31.     int i;  
  32.  
  33.     for (i=0;i<NR_REQUEST;i++) {  
  34.          request[i].dev= -1;  //设置为空闲  
  35.          request[i].nextNULL;  //互不挂接  
  36.     }  

注意:request[32]是一个由数组构成的链表;request[i].dev = ?1说明了这个请求项还没有具体对应哪个设备,这个标志将来会被用来判断对应该请求项的当前设备是否空闲;request[i].next = NULL说明这时还没有形成请求项队列。初始化的过程和效果如图2-12所示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值