Linux操作系统--块IO层

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请求,一次执行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值