块设备请求项队列及硬盘驱动

Linux 0.11通过ll_rw_block函数和请求队列处理块设备的读写,避免并发问题并优化磁头移动,提高性能。请求项结构体在硬盘初始化时指定操作函数,读写操作通过make_request和add_request进行,后者应用电梯算法。硬盘读写以扇区为最小单位,逻辑块与扇区映射涉及磁头、柱面和扇区的转换计算。
摘要由CSDN通过智能技术生成

linux0.11在读写块设备的时候,并不直接对块设备进行操作,而是借由低级的ll_rw_block函数通过请求项来与设备进行联系,也即加入了一个中间环节。当然,你也可以直接对块设备进行操作,但是直接操作会存在一些问题:

1. 同一个进程在写的过程中就不能发出读的请求,反之,在读的过程中也不能发出写的请求。

2. 当一个进程正在对硬盘进行写或者读的时候,其他进程就不能发出硬盘操作命令,只能进入睡眠状态,等待硬盘空闲,而不能做其他事情。

所以要解决上面的问题,最好的方法就是定义一个请求队列,将进程发出的各种请求放在队列中,至于什么时候硬盘开始读写就不用管了,进程就可以执行其它的操作。定义这个队列的另一个优点就是可以使用所谓的电梯算法,在频繁进行磁盘操作的时候可以非常有效的减少磁头移动的总距离,增加磁盘寿命。

linux0.11定义的请求项的数据结构如下:

struct request {
	int dev;		/* -1 if no request */
	int cmd;		/* READ or WRITE */
	int errors;
	unsigned long sector;
	unsigned long nr_sectors;
	char * buffer;
	struct task_struct * waiting;
	struct buffer_head * bh;
	struct request * next;
};
struct request request[NR_REQUEST];
一共定义了32个请求,然后为每个块设备又再定义一个结构,用于指定设备的请求项操作函数do_xx_request。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值