linux源代码阅读笔记 高速缓冲区管理
2015-03-26 16:48
351 查看
高速缓冲区是文件系统访问块设备中数据的必经要道,为了访问文件系统等块设备上的数据,内核可以每次都访问块设备,进行读写操作。
为了提高系统性能,内核在内存中开辟一个高速数据缓冲区。在Linux内核中,高速缓冲区位于内核代码和主内存之间。
当需要从块设备中读取数据时,先到高速缓冲区中寻找,若找不到,就发出读块设备命令,块设备将数据写入高速缓冲区中。
高速缓冲区划分为块,每块的大小恰好和硬盘中的存储单元相同。
Linux中,高速缓冲区的实际组织形式较为复杂。
首先看它的结构体:
buffer块是以链表形式组织的。分为空闲块和使用块。空闲块以b_prev_free指针,b_next_free指针形成双向链表free_list。
而使用块则以b_prev指针,b_next指针形成双向链表。但是与空闲块不同的是,为了加快使用块的查找速度,系统另外设置了
一个哈希表,该hash表用函数(设备号^逻辑块号)mod 307 对数据块请求进行hash。hash到的块是一组缓冲块所链接成的双向链表,
这些缓冲块拥有共同的哈希值。系统在该双向链表中查找所需求的块(设备号,逻辑号相同),找到,则返回该块,否则去free_list中
申请新的缓冲块。
free_list应该是包含了所有的块,对此还不是很确定。
为了提高系统性能,内核在内存中开辟一个高速数据缓冲区。在Linux内核中,高速缓冲区位于内核代码和主内存之间。
当需要从块设备中读取数据时,先到高速缓冲区中寻找,若找不到,就发出读块设备命令,块设备将数据写入高速缓冲区中。
高速缓冲区划分为块,每块的大小恰好和硬盘中的存储单元相同。
Linux中,高速缓冲区的实际组织形式较为复杂。
首先看它的结构体:
56 struct buffer_head { 57 char * b_data; /* pointer to data block (1024 bytes) */ 58 unsigned short b_dev; /* device (0 = free) */ 59 unsigned short b_blocknr; /* block number */ 60 unsigned char b_uptodate; /*weather the data have been refreshed*/ 61 unsigned char b_dirt; /* 0-clean,1-dirty */ 62 unsigned char b_count; /* users using this block */ 63 unsigned char b_lock; /* 0 - ok, 1 -locked */ 64 struct task_struct * b_wait; 65 struct buffer_head * b_prev; 66 struct buffer_head * b_next; 67 struct buffer_head * b_prev_free; 68 struct buffer_head * b_next_free; 69 };
buffer块是以链表形式组织的。分为空闲块和使用块。空闲块以b_prev_free指针,b_next_free指针形成双向链表free_list。
而使用块则以b_prev指针,b_next指针形成双向链表。但是与空闲块不同的是,为了加快使用块的查找速度,系统另外设置了
一个哈希表,该hash表用函数(设备号^逻辑块号)mod 307 对数据块请求进行hash。hash到的块是一组缓冲块所链接成的双向链表,
这些缓冲块拥有共同的哈希值。系统在该双向链表中查找所需求的块(设备号,逻辑号相同),找到,则返回该块,否则去free_list中
申请新的缓冲块。
free_list应该是包含了所有的块,对此还不是很确定。
相关文章推荐
- Linux源代码阅读笔记-内存管理
- linux源代码阅读笔记 get_free_page()代码分析
- memcached源代码阅读笔记(6)memcached1.4.10 在linux平台多线程模型研究
- linux源代码阅读笔记 linux文件系统(二)
- linux源代码阅读笔记 fork和execve的区别
- 关于linux0.11文件系统高速缓冲的见解【《linux内核完全注释》阅读笔记】
- 鸟哥的LINUX私房菜基础篇第三版 阅读笔记 三 Linux磁盘与文件系统管理
- 卡卡笔记之Linux Service 服务管理
- (转载)Linux内核网络设备操作部分阅读笔记
- Linux电源管理研究笔记—acpid工作原理
- linux笔记06(进程管理)
- Linux电源管理研究笔记—动态电源管理(DPM)
- Source Insight: Linux源代码阅读的利器
- 阅读笔记:链接器 - 源代码漫游
- Source Insight3.0 Linux源代码阅读的利器
- linux笔记04(用户和组管理)
- 写得蛮好的linux学习笔记(帐号管理,开机流程简介)
- linux驱动阅读笔记
- [BTS06]BizTalk2006 SDK阅读笔记(七) 管理与监控
- Linux电源管理研究笔记—gnome-power-manager的工作原理