2014-04-18 设备管理之块设备框架

来源:互联网 发布:快递员取件抢单软件 编辑:程序博客网 时间:2024/06/07 18:11

块设备是一种能随机访问的存储介质。与字符设备不同,块设备能保存文件系统数据。


(1)IDE是PC机的常见存储接口,ATA是其规范,ATA5最大支持66MB/s;SCSI是服务器和高端工作站站选用的一种存储技术,比SATA速度快,支持320MB/s;RAID可实现冗余性和可靠性,定义了各种级别;然而在嵌入式领域,存储器比上述的技术的速度慢的多,如SD卡;


(2)块设备对I/O请求有对应的缓冲区,可以选择以什么顺序进行响应(调整顺序对块设备的读写效率很重要,只针对机械上的原因,因此SD卡和RamDisk不存在调整的必要),可被随机读写;而字符设备无缓冲区且被直接读写,只能被顺序读写。通过register_blk_dev和unregister_blk_dev来注册和注销,注意不是注册磁盘。


(3)gendisk表示一个独立的磁盘设备(或分区),包括磁盘的主设备号,含有block_device_operations指针即对块设备操作的集合(支持open,ioctl,mend-changed等函数);含有request_queue指针管理设备的I/O请求队列的指针;private_data指向自身的私有数据;disk_part_tbl表示分区表,part0是其子项,capacity表示相应扇区大小时的扇区数;通过alloc_disk,add_disk,del_gendisk来分配,添加,释放。用request表示正在等待的I/O请求,包括尚未完成的第一个扇区hard_sector,未完成的数hard_nr_sectors,当前待完成的扇区数hard_cur-sectors。分别都有副本备份;bio指针是请求中包含的bio的链表,通过_rq_for_each_bio来遍历获取;buffer指针存储传送的数据;可支持DMA映射,rq_data_dir来获得request的数据传送方向;


(4)request_queue跟踪块的request,存储用于的这个设备能够支持的请求的类型信息,硬件扇区大小,对齐,最大大小,包含一个插入接口,可用于选择调度器(电梯,FIFO,CFQ等),通过blk_init_queue,blk_cleanup_queue,elv_next_request等初始化,清除,提取下一个请求。


(5)用bio对应上层传递给块设备层的I/O请求;I/O调度算法可将连续的bio请求合并成一个request(经过bio合并过调整过的结果);核心是一个bio_vec,不应直接访问,通过bio_for_each_segment()来遍历真个bio的每一个段。





0 0