linux内核完全注释()第九章.pptVIP

  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内核完全注释()第九章

Linux操作系统内核分析 湘潭大学信息工程学院 高速缓冲区 从外部设备上读写数据是一项很耗时的操作,为了提高性能内核在内存中开辟了一个缓冲区,并将其划分成一个个与磁盘数据块大小(1K)相等的缓冲块,用于存放最近被使用过的数据。 当需要读数据时,操作系统首先会在缓冲区中寻找,如果该数据已经在内存中(命中)就无须在访问外设;否则,把数据从外设读入到某个缓冲块中 当需要写数据时,操作系统会在把数据临时保存在某个缓冲块中。什么时候真正把数据写到设备上,要通过设备数据同步实现(延迟写) 高速缓冲区 高速缓冲区 struct buffer_head { char * b_data; unsigned long b_blocknr; unsigned short b_dev; unsigned char b_uptodate; unsigned char b_dirt; unsigned char b_count; unsigned char b_lock; struct task_struct * b_wait; struct buffer_head * b_prev; struct buffer_head * b_next; struct buffer_head * b_prev_free; struct buffer_head * b_next_free; }; 高速缓冲区 高速缓冲区 为了能够快速在缓冲区中寻找请求的数据块是否已经读入到缓冲区中,Linux使用了具有307个buffer_head指针项的Hash表结构(P243第31行) Hash函数是(设备号^块号)Mod307 P245第128行 #define _hashfn(dev,block) (((unsigned)(dev^block))%NR_HASH) #define hash(dev,block) hash_table[_hashfn(dev,block)] 高速缓冲区 高速缓冲区 等待队列 buffer_wait (P243第33行) 等待任何一个缓冲区有效。 高速缓冲区 高速缓冲区 void buffer_init(long buffer_end) 作用:缓冲区数据结构初始化 参数:buffer_end——缓冲区在内存中的结束位置。 P250第348行 高速缓冲区 高速缓冲区 struct buffer_head * bread(int dev,int block) 作用:读取指定设备上的指定块 参数:dev——设备号 block——块号 返回:正确时返回装有数据的缓冲区头 失败返回NULL P248第267行 高速缓冲区 高速缓冲区 #define BADNESS(bh) (((bh)-b_dirt1)+(bh)-b_lock) dirt*2+lock,权值越小越好。 尽量不使用脏缓冲块,因为要涉及写盘操作;尽量不使用上锁的缓冲块,因为要涉及等待解锁操作。 高速缓冲区 void brelse(struct buffer_head * buf) 作用:释放缓冲块 参数:buf——要释放的缓冲块的缓冲头 P248第253行 高速缓冲区 int sys_sync(void) 作用:同步设备与缓冲区 P243第44行 缓冲区写的时间:与设备同步时;申请了一个脏缓冲区时。 MINIX文件系统介绍 MINIX文件系统介绍 MINIX文件系统介绍 MINIX文件系统介绍 super_block[NR_SUPER] P266第27行 MINIX文件系统介绍 MINIX文件系统介绍 i节点位图用于说明i节点是否被使用(1表示被使用,0表示未被使用),每位代表一个i节点。 i节点位图最多使用8个缓冲块,所以i节点数量最多是8*8K=64K。 当磁盘上所有i节点都被使用时,查找空闲i节点的函数会返回0,所以i节点位图中的第0位(会把它置1)与它对应的第0个i节点都不会被使用。 MINIX文件系统介绍 逻辑块位图用于说明逻辑块是否被使用(1表示被使用,0表示未被使用),每位代表一个逻辑块。 逻辑块位图最多使用8个缓冲块,所以逻辑块数量最多是8*8K=64K。 当磁盘上所有逻辑块都被使用时,查找空闲逻辑块的函数会返回0,所以逻辑块位图中的第0位(会把它置1)与它对应的第0个逻辑块都不会被使用。 MINIX文件系统介绍 索引节点(又称为i节点)是记录每一个文件的控制信息,如文件的类型、访问权限、创建、修改与访问文件的时间、用户ID、组ID、文件的连接数、文件的大小与文件数据块在磁盘上的地址的一个数据结构。 MINIX文件系统介绍 MINIX文件系统介绍

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档