Linux IO Block--块设备的表示.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux IO Block--块设备的表示

? Linux I/O Block--块设备的表示 分类:?Linux驱动程序2012-12-07 16:05?1959人阅读?评论(1)?收藏?举报 ?????? 块设备的特点是其平均访问时间较长,因此为了提高块设备的访问效率,Linux内核用了很多的笔墨来设计和块设备相关的部分,这样一来,从代码的角度来看,访问一个文件的过程变得尤其的漫长……整个路径包含的过程基本可以概括为虚拟文件系统--块设备实际文件系统--通用块层--I/O scheduler--块设备驱动程序。为了提高块设备的访问效率,内核主要是在两个方面下功夫: 1.引入缓存,当用户空间要访问文件时,内核不可能每次都去访问块设备,内核会将块设备的内容读取到内存中,以便下次访问时可以直接在内存中找到相应的内容,这其中又涉及到了预读等相关的问题,当然这不是现在关注的重点…… 2.对于I/O请求的重排列,I/O请求并不会立即被响应,而是会放在一个队列里进行一段延迟,以期能够和后来的I/O请求进行合并或者进行排序。因为像磁盘这样的块设备,其耗时主要是因为磁头的定位,因此内核会尽量保证磁头只往一个方向移动,而不是来回移动(可以和电梯的运作进行对比),简而言之,就是将存储介质上相邻的数据请求安排在一起,对于I/O请求的处理主要包括合并和排序,具体如何处理,由I/O scheduler决定。 ? 首先,我们先来了解一个块设备是如何表示的。描述块设备的数据结构有两个,一个是struct block_device,用来描述一个块设备或者块设备的一个分区;另一个是struct gendisk,用来描述整个块设备的特性。对于一个包含多个分区的块设备,struct block_device结构有多个,而struct gendisk结构永远只有一个。 [cpp]?view plaincopy struct?block_device?{?? ????dev_t???????????bd_dev;??/*?not?a?kdev_t?-?its?a?search?key?*/?? ????struct?inode?*??????bd_inode;???/*?will?die?*/?? ????struct?super_block?*????bd_super;?? ????int?????????bd_openers;?? ????struct?mutex????????bd_mutex;???/*?open/close?mutex?*/?? ????struct?list_head????bd_inodes;?? ????void?*??????????bd_holder;?? ????int?????????bd_holders;?? #ifdef?CONFIG_SYSFS?? ????struct?list_head????bd_holder_list;?? #endif?? ????struct?block_device?*???bd_contains;?? ????unsigned????????bd_block_size;?? ????struct?hd_struct?*??bd_part;?? ????/*?number?of?times?partitions?within?this?device?have?been?opened.?*/?? ????unsigned????????bd_part_count;?? ????int?????????bd_invalidated;?? ????struct?gendisk?*????bd_disk;?? ????struct?list_head????bd_list;?? ????/*? ?????*?Private?data.??You?must?have?bd_claimed?the?block_device? ?????*?to?use?this.??NOTE:??bd_claim?allows?an?owner?to?claim? ?????*?the?same?device?multiple?times,?the?owner?must?take?special? ?????*?care?to?not?mess?up?bd_private?for?that?case.? ?????*/?? ????unsigned?long???????bd_private;?? ?? ????/*?The?counter?of?freeze?processes?*/?? ????int?????????bd_fsfreeze_count;?? ????/*?Mutex?for?freeze?*/?? ????struct?mutex?????

文档评论(0)

wt60063 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档