IO访问设备:字符设备和块设备
块设备:系统中能够随机访问固定大小数据片(块)的硬件设备,最小可寻址单元扇区(硬扇区、设备块)通常是512B,另一种块(文件块、IO块)是文件系统的一种抽象,也只能基于这种块来访问文件系统
块调入内存中,存储在一个缓冲区中,每个缓冲区与一个块对应(磁盘块在内存中的表示),块大小不能超过页大小(页-块-扇区),缓冲区中相关控制信息记录在缓冲区头(buffer_head 描述磁盘块和物理内存缓冲区之间的映射关系),其中b_state表示缓冲区状态标志,b_count表示缓冲区使用计数
bio是块IO操作的基本容器,代表了正在现场的(活动的)以片段链表形式组织的块IO操作,其中片段是一小块连续的内存缓冲区,这样一个缓冲区就可以分散在内存的多个位置,一个bio包含一个特定IO操作所需的所有缓冲区,而每个缓冲区又由多个片段(bio_vec)组成
PS:RAID工作原理,设备驱动拷贝bio结构体,把bi_idx域(指向bio_vec数组中当前bio_vec片段,块IO层通过它可以追踪块IO操作完成进度)设置为每个独立硬盘操作时需要的位置
-
buffer_head与bio并存
-
buffer_head代表一个缓冲区,关联单独页中单独磁盘块,导致请求按块为单位划分,然后再重新组合,但它描述了磁盘块到页面的映射,bio则不包含任何与缓冲区相关的状态信息
-
bio包含内存中一个或多个页,很容易处理高端内存(处理物理页而不是直接指针),可以代表普通IO和直接IO(不通过页告诉缓存的IO操作)
块设备会将挂起的块IO请求保存在请求队列(reques_queue)中,文件系统将请求加入队列,块设备驱动程序会将请求送入对应的块设备执行
阅读(2561) | 评论(0) | 转发(0) |