专门做旅游的网站有哪些,电商系统的哪家好,p2p网站建设制作,用wordpress做的博客目录
一、剖析一个块设备
二、缓冲区和缓冲区头
三、bio 结构体
四、请求队列
五、I/O 调度程序 系统中能够随机#xff08;不需要按顺序#xff09;访问固定大小数据片#xff08;chunks#xff09;的硬件设备称作块设备#xff0c;这些固定大小的数据片就称作块。最…目录
一、剖析一个块设备
二、缓冲区和缓冲区头
三、bio 结构体
四、请求队列
五、I/O 调度程序 系统中能够随机不需要按顺序访问固定大小数据片chunks的硬件设备称作块设备这些固定大小的数据片就称作块。最常见的块设备为硬盘其他的还有软盘驱动器、闪存等它们都是以安装文件系统的方式使用的。
另一种基本的设备类型是字符设备。字符设备按照字符流的方式被有序访问像串口和键盘就属于字符设备。
对于这两种类型的设备它们的区别在于是否可以随机访问数据。内核对块设备的管理需要有一个专门提供服务的子系统对字符设备的管理则不需要。
一、剖析一个块设备
块设备中最小的可寻址单位是扇区。扇区大小一般是 2 的整数倍最常见的是 512 字节。扇区的大小是设备的物理属性。
在软件层面上最小逻辑可寻址单元为块。块是文件系统的一种抽象只能基于块来访问文件系统。虽然物理磁盘寻址是按照扇区进行的但是内核执行的所有操作都是按照块进行的。所以块不能比扇区还小只能倍数于扇区大小。
总之扇区是设备的最小寻址单元也被称为 “硬扇区” 或 “设备块”同样地块是文件系统的最小寻址单元也被称为 “文件块” 或 “I/O 块”。 二、缓冲区和缓冲区头
当一个块被调入内存时在读入后或等待写出时它要存储在一个缓冲区中。每个缓冲区与一个块对应它相当于是磁盘块在内存中的表示。一个页可以容纳一个或多个内存中的块。由于内核在处理数据时需要一些相关的控制信息比如一个块属于哪个块设备块对应于哪个缓冲区等所以每一个缓冲区都有一个对应的描述符 buffer_head 结构体称为缓冲区头定义在 linux/buffer_head.h它包含了内核操作缓冲区所需要的全部信息 但是将缓冲区头作为 I/O 操作单元带来了两个弊端
缓冲区头是一个很大且不容易控制的数据结构体而且缓冲区头对数据的操作既不方便也不清晰。它仅能描述单个缓冲区缓冲区头会促使内核八大块数据的 I/O 操作分解为多个 buffer_head 结构体进行操作。
所以后面为块 I/O 操作引入了一种新型、灵活并轻量级的容器——bio 结构体。
三、bio 结构体
目前内核中块 I/O 操作的基本容器由 bio 结构体表示定义在 linux/bio.h。该结构体代表了正在活动的以片段segment链表形式组织的块 I/O 操作。一个片段是一小块连续的内存缓冲区而片段链表可以使一个缓冲区分散在内存的多个位置上bio 结构体能对内核保证 I/O 操作的执行像这样的向量 I/O 就是所谓的聚散 I/O。
bio 结构体定义于 linux/bio.h 中 使用 bio 结构体的目的主要是代表正在现场执行的 I/O 操作所以该结构体中的主要域都是用来管理相关信息的 bi_io_vec 域指向一个 bio_vec 结构体数组该结构体链表包含了一个特定 I/O 操作所需要使用到的所有片段。每个 bio_vec 结构都是一个形式为 page, offset, len 的向量它描述的是一个特定的片段片段所在的物理页、块在物理页中的偏移位置、块长度。 总之每一个块 I/O 请求都通过一个 bio 结构体表示每个请求包含一个或多个块这些块存储在 bio_vec 结构体数组中bio_vec 结构体描述了每个片段在物理页中的实际位置并且像向量一样被组织在一起。
bio 结构体代表的是 I/O 操作它包含内存中的一个或多个页而 buffer_head 结构体代表的是一个缓冲区它描述的仅仅是磁盘中的一个块。
四、请求队列
块设备将它们挂起的块 I/O 请求保存在请求队列中该队列由 request_queue 结构体表示定义在文件 linux/blkdev.h 中包含一个双向请求链表以及相关控制信息。
队列中的请求由结构体 request 表示一个请求可能要操作多个连续的磁盘块所以每个请求可以由多个 bio 结构体组成。
五、I/O 调度程序
磁盘寻址是整个计算机中最慢的操作之一为了缩短寻址时间Linux 引入了 I/O 调度程序。
I/O 调度程序将磁盘 I/O 资源分配给系统中所有挂起的块 I/O 请求。I/O 调度程序通过两种方法减少磁盘寻址时间合并与排序。
合并指将两个或多个请求结合成一个新请求即如果两个请求访问的磁盘扇区相邻那么可以把两个请求合并为一个请求这样可以将 I/O 多次请求的开销压缩成一次请求的开销。排序指将整个请求队列按扇区增长方向有序排列通过保持磁盘头以直线方向移动从而缩短所有请求的磁盘寻址时间。这种 I/O 调度程序也被称为电梯调度。
Linux 实际使用的 I/O 调度程序有如下几种
Linux 电梯最终期限 I/O 调度程序预测 I/O 调度程序完全公正的排队 I/O 调度程序空操作的 I/O 调度程序