linux源代码阅读笔记 高速缓冲区管理
高速缓冲区是文件系统访问块设备中数据的必经要道,为了访问文件系统等块设备上的数据,内核可以每次都访问块设备,进行读写操作。
为了提高系统性能,内核在内存中开辟一个高速数据缓冲区。在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应该是包含了所有的块,对此还不是很确定。
转载于:https://www.cnblogs.com/elnino/p/4369279.html
linux源代码阅读笔记 高速缓冲区管理相关推荐
- linux源代码阅读笔记 find_entry分析
78 static struct buffer_head * find_entry(struct m_inode * dir,79 const char * name, int namelen, st ...
- 非常好!!!Linux源代码阅读——环境准备【转】
Linux源代码阅读--环境准备 转自:http://home.ustc.edu.cn/~boj/courses/linux_kernel/0_prepare.html 目录 Linux 系统环境准备 ...
- Linux 源代码阅读知识点及要求
说明:1.本次源代码阅读,以Linux 最新的稳定版本(2.6)为主: 2.源代码下载地址: 在官方站点 www.kernel.org 上最新稳定版本是 2.6.13.2: 在清华的 ftp 上随时都 ...
- 非常好!!!Linux源代码阅读——内核引导【转】
Linux源代码阅读--内核引导 转自:http://home.ustc.edu.cn/~boj/courses/linux_kernel/1_boot.html 目录 Linux 引导过程综述 BI ...
- linux 内核round-robin scheduler代码,LINUX源代码阅读报告
进程调度代码分析 --关于LINUX源代码中进程调度部分的读书报告 在多进程的操作系统中,进程调度是一个全局性.关键性的问题,它对系统的总体设计.系统的的实现.功能设置以及各个方面的性能都有着决定性的 ...
- linux源代码阅读组合vim tags taglist
vim+ctags+taglist 在linux下构建类似于windows sourceinsight的源码阅读环境 /***********************************/ /** ...
- Flask 源代码阅读笔记
我认为我已经养成了一个坏习惯.在使用一个框架过程中对它的内部原理非常感兴趣,有时候须要花不少精力才 明确,这也导致了学习的缓慢,但换来的是对框架的内部机理的熟悉,正如侯捷所说,源代码面前,了无秘密.这 ...
- linux源码阅读神器,Ubuntu下安装LXR Linux源代码阅读利器
1.安装apache2 sudo apt-get install apache2 2.安装lxr sudo apt-get install lxr 3. 在/etc/apache2/httpd.con ...
- OBS源代码阅读笔记
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. obs配置文件加载:bool OBSBasic::InitBasicConfig(); OBS认证信息加载,貌似还没有实 ...
- Vector和LinkedList源代码阅读笔记
Vector 1 三个成员变量 elementData: Container elementCount: 有效长度 capacityIncrement: 每次增加的长度 2, 其构造函数没什么特别的, ...
最新文章
- 如何快速优化机器学习的模型参数
- c mysql显示多条数据_用一条mysql语句插入多条数据
- Caffe学习记录(十二) ICNet分割网络学习二
- jemter编写Mysql脚本___传参
- 前端技术周刊 2018-03-02
- 猎八哥浅谈存储过程——数据库中的双刃剑
- phpstorm配置Xdebug
- VTK:PolyData之ParametricSpline
- ubuntu如何解压.tar.gz
- #UML# Astah+Doxygen 将C++源码映射为类图
- 揭秘win10系统CPU占用100%的真正原因/找出那些罪魁祸首
- idea php 提示丢失,解决idea 暂存文件或idea切换分支代码丢失的问题
- 关闭 Eureka 的自我保护机制
- 好用的读书笔记app精选
- 如何学习自然语言处理:一本书和一门课
- 如何在九酷·轻音乐上下载MP3格式的音乐素材?
- HTTPS与自制SSL证书
- 使用pandas模块实现数据的标准化
- Get Offer —— 能力素质考核训练
- 线性系统理论 matlab,线性系统理论.pdf
热门文章
- ubuntu16.04安装驱动
- matlab preparets,请问吧里有大神做过MATLAB时间序列神经网络(NARX)吗?
- foreach php 多重数组,PHP的foreach与多维数组
- android刷新界面的几种方法,Android UI更新的几种方法
- 获取android设备唯一编号_如何获取Android设备唯一识别码
- 施密特正交化_夜思 | 为什么非实对称矩阵对应的特征向量不能施密特正交化?...
- 数字图像处理与python实现 pdf_python数字图像处理实现直方图与均衡化
- 【Django 2021年最新版教程15】数据库定义 models字段类型 限制 用法 总结
- 区块链 以太坊 虚拟机 EVM 为什么256条指令
- kubernetes 容器持久化存储PV、PVC、StorageClass