1、块设备的最小寻址单元是扇区,以安装文件系统的方式访问。
2、最小逻辑可寻址单元:块。块是文件系统的一种抽象,只能基于块来访问文件系统。一个块包含多个扇区,不能超过页。
3、缓冲区和缓冲区头:【和页高速缓存的区别】
缓冲区(buffer):每个缓冲区和一个磁盘块对应,相当于磁盘块在内存中的表示,一个缓冲区对应一个缓冲区描述符(缓冲区头)。一个块存储在一个缓冲区中,一个块不会超过一个页面大小,导致缓冲区也不会超过一个页面大小。操作大量数据时引起分割。
缓冲区头(buffer_head):
缓冲区头的目的在于描述磁盘块和物理内存缓冲区之间的映射关系。这个结构体在内核中只扮演一个描述符的角色,说明从缓冲区到块的映射关系。也说明其所描述块的状态(脏,干净,过期等)。它并不与底层的块驱动程序打交道。也就是说它现在只是使得内核了解各个块的状态,而当内核需要提交这些块时,就使用bio,bio根据buffer_head描述的各个块的状态,将相应的块收集起来交给底层驱动程序。因此bio现在是上层与下层连接的纽带,它既包含了上层内存的信息,也包含了下层磁盘的信息。
4、bio结构体:块IO操作的基本容器? :代表正在现场执行的IO操作。
bio是一个io操作的基本单位,一个bio里面包含n个bio_vec,而每个bio_vec(page,offset,len)里面包含一个segment,而每个segment里面包含连续的几个buffer。【聚散IO】而buffer_head就是用来保存对物理内存和磁盘块之间映射关系的结构,也就是buffer_head对应于一个buffer。
bio所请求的数据在块设备中是连续的,但是在缓冲区中不一定连续,对于不连续的数据块(指块设备中的数据块)需要放到多个bio中;
bio结构体代表的是I/O操作,它可以包括内存中的一个或多个页,即多个缓冲区,映射了多个连续的磁盘块;另一方面,buffer_head结构体代表的是一个缓冲区,它描述的仅仅是磁盘中的一个块。bio结构体是轻量级的,它描述的块可以不需要连续存储区,并且不需要分割I/O操作。
buffer_head是用来管理buffer,而bio是用来传输buffer的。bio为通用层的主要数据结构,既描述了磁盘的位置,又描述了内存的位置,是上层内核vfs与下层驱动的连接纽带。
IO调度程序:
最终期限IO调度:合并+排序+最后期限
完全公正的排队IO调度程序:基于进程的请求队列,轮询各个请求队列
空操作IO调度:只合并
预测IO调度程序:进行对历史IO操作的统计,选择启发式预测调度算法,延迟调度,等待更多的IO请求,一次执行。