Chinaunix首页 | 论坛 | 博客
  • 博客访问: 304752
  • 博文数量: 33
  • 博客积分: 586
  • 博客等级: 中士
  • 技术积分: 494
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-27 14:05
个人简介

衡铁刚 1)2011-2013:Alibaba MySQL DBA 2)2014-至今: Alibaba 数据库PD

文章分类

全部博文(33)

文章存档

2016年(1)

2015年(10)

2013年(5)

2012年(17)

我的朋友

分类: Mysql/postgreSQL

2012-10-06 10:36:12

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)中,文件系统将请求加入队列,块设备驱动程序会将请求送入对应的块设备执行
阅读(2478) | 评论(0) | 转发(0) |
0

上一篇:mysqlbinlog

下一篇:块IO层(IO调度)

给主人留下些什么吧!~~