linux-0.11内核 硬盘驱动程序

一、概述

首先要说明的是内核每次读写的数据量以一个逻辑块为单位,即1024B,而块设备控制器则是以扇区(512B)为单位。

对硬盘的读写操作是通过中断处理程序进行的,使用读写请求项等待队列来顺序缓冲一次读写多个逻辑块的操作。进程读

硬盘上的一个逻辑块时向缓冲区管理程序提出申请,然后进入睡眠状态。缓冲区管理程序检查缓冲区以前是否已经读取过

这块数据,如有直接将对应的缓冲区块头指针返回给进程并唤醒它,否则,调用ll_rw_block()向相应的设备驱动程序发出

一个读数据块的操作请求。该函数创建一个请求结构项,插入队列,插入时采用电梯算法(至今还没读懂电梯算法)。如对应

设备的请求项队列空,则设备不忙,立即向该设备控制器发出读数据命令。当设备控制器将数据读入到指定的缓冲块中后,就

会发出中断请求信号,并调用相应的读命令后处理函数,处理继续读扇区操作或者结束本次请求项的过程。(引自赵炯老师)

二、数据结构

块设备项

struct blk_dev_struct {
 void (*request_fn)(void);//请求项操作的函数指针
 struct request * current_request;//当前请求项指针
};

 

块设备表

extern struct blk_dev_struct blk_dev[NR_BLK_DEV];//每种块设备都在表中占有一项,共7项

 

请求项

struct request {
 int dev;  /* -1 if no request */
 int cmd;  /* READ or WRITE

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值