IO层设备分为两种
1)块设备:能够随机访问固定大小的数据片,以安装文件系统的方式使用
2)字符设备:按照字符流的方式被有序访问。
块设备的管理:
1)单位
文件块/IO块:扇区的2的整数倍,小于页面大小,访问文件系统的单位。
缓冲区:每个缓冲区与一个块对应,是磁盘块在内存中的表示;
缓冲区头:缓冲区的描述符,用buffer_head结构体描述,定义在<linux/buffer_head.h>
bio结构体:块操作的基本容器,定义在<linux/bio.h>中,代表正在现场的以片段(连续的内存缓冲区)链表形式组织的块IO操作。
每个块IO请求通过一个bio结构体表示,一个活多个块存储在bio_vec结构体数组中。
2)请求队列
块设备将快请求保存在请求队列中,reques_queue结构体定义在<linux/blkdev.h>中,内核将请求加入队列,相应的块设备驱动程序从队列头获取请求。
request:队列中的每个请求,可由多个bio结构体组成。
3)IO调度程序
工作室管理块设备的请求队列,通过合并和排序等将磁盘IO资源分配给系统中所有挂起的块IO请求。
linus电梯调度程序(早期)
最终期限IO调度程序
预测IO调度程序
完全公正的排队IO调度程序(缺省)
空操作IO调度程序
reference:
http://www.360doc.com/content/12/0201/22/2459_183505470.shtml
http://www.cnblogs.com/liugf05/archive/2012/06/18/2553998.html