什么是块?
固定大小的数据块
什么是块设备?
系统能够随机访问块的硬件设备
怎样区分字符设备和块设备?
设备能够以不按顺序的方式访问的是块设备否则是字符设备。
什么是扇区?
扇区是块设备最基本的操作和寻址单元,扇区的大小是设备的物理属性,一般是2的倍数,最常见扇区大小为512字节。
磁盘块在内存中如何表示?
当一个块被调入内存时,被存储到缓冲区。每个缓冲区和一个块对应。
什么是缓冲区头?
缓冲区用一个buffer_head的数据结构描述块的相关控制信息(如块所属块设备、块对应的缓冲区),这个数据结构称为缓冲区头。
缓冲区头有什么作用?
描述磁盘块和缓冲区之间的映射关系。
缓冲区头有哪些缺点?
- 缓冲区头很大且不易控制,对数据操作不方便不清晰。
- 仅能描述单个缓冲区
目前内核中块IO操作的基本容器是什么?
bio结构体,代表正在现场的活动的以片段(segment)链表形式组织的块IO操作。
什么是片段(segment)?
一小块连续的内存缓冲区
缓冲区头和bio结构体有什么区别?
- 缓冲区头----代表缓冲区,描述单独某一页的某个磁盘块
- bio结构体---代表IO操作,描述一个或多个页中的块
使用片段bio结构体来描述缓冲区有什么好处?
- bio结构体可以代表普通页IO,也可以代表直接IO(不通过页高速缓存的IO操作)
- 易于处理高端内存
- 便于处理集中或分散的块IO操作,操作数据取自多个物理页面
- 只包含块IO操作相关的信息,不包含缓冲区信息
什么是请求队列?
request_queue结构体表示请求队列,它保存着块设备挂起的块IO请求。当请求队列不为空时,相应的块设备驱动程序从队列头获取请求送到对应的块设备上。
如何表示队列的块IO请求?
用request结构体表示块IO请求,一个请求可能需要操作多个连续的磁盘块(内存中的块不一定要连续),所以一个请求可以由多个bio结构体组成
怎样提高系统性能?
磁盘寻址在计算机操作中占用大量时间,缩短磁盘寻址的时间是提高性能的关键。
怎样优化寻址,缩短寻址时间?
内核在将请求提交给磁盘之前,先将请求队列中挂起的请求执行合并和排序的预操作。合并操作---当存在两个或两个以上的请求访问的磁盘扇区相邻,将多个请求结合成一个新的请求。排序操作----将请求队列按照磁盘扇区的增长方向有序排序,使磁头保持直线方向移动,保证队列中的请求是以被访问磁盘物理位置为序进行排列的。
什么是IO调度程序?
内核中负责提交IO请求的子系统。
IO调度程序和进程调度程序有什么不同?
- 进程调度程序的作用是将处理器资源分配给系统中运行的进程
- IO调度程序的作用是将磁盘IO资源通过预操作分配给系统中挂起的块IO请求
在IO调度程序预处理机制下,一个请求插入请求队列有哪几种情况?
- 队列中存在一个相邻磁盘扇区的操作请求,将新请求与之合并;
- 队列中存在一个驻留时间过长的请求,将新请求插入到队列尾部
- 队列中以扇区方向为序存在合适的插入位置,将新请求插入该位置
- 队列中不存在合适位置插入新请求,将新请求插入到队列尾部
什么是最后期限IO调度程序?
在最后期限IO调度程序中每个请求都有一个超时时限,除了将请求按照访问磁盘顺序添加到普通排序队列中,还会根据请求的类型加入到相应的FIFO队列。当某个请求超时或超时前,不管普通排序队列中下一个响应的是不是这个请求,都会依据FIFO队列,提交和执行这个请求。