18|缓冲区初始化buffer_init:面试高频考点
闪客

你好,我是闪客。
在上一讲中我们说到了进程调度的初始化,让操作系统随时准备迎接时钟中断的到来,进而触发进程调度。
那接下来我们就回到 main 函数,继续看下一个初始化的方法,缓冲区初始化 buffer_init,加油,没剩多少了!
首先要注意到,这个函数传了个参数 buffer_memory_end,这个是在老早之前就设置好的,就在 第 12 讲 | 边界值划分与主内存初始化,可以去回顾下。

同时,且我们在 第 12 讲,主内存初始化 mem_init 中,用 mem_init 设置好了主内存的管理结构 mam_map。

这是把主内存区管理起来了,所以今天就是把剩下的缓冲区部分,也初始化管理起来。目的就是这么单纯,我们看代码。
我们还是采用之前的方式,就假设内存只有 8M,把一些不相干的分支去掉,方便理解。
虽然很长,但其实就造了两个数据结构而已。
不过别急,我们先从第一行代码开始看起。
这里有个外部变量 end,而我们的缓冲区开始位置 start_buffer 就等于这个变量的内存地址。
这个外部变量 end 并不是操作系统代码写就的,而是由链接器 ld 在链接整个程序时设置的一个外部变量,帮我们计算好了整个内核代码的末尾地址。
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结

缓冲区初始化buffer_init:面试高频考点 文章介绍了缓冲区初始化的重要性以及具体的实现方法。首先,通过分析代码,解释了如何利用外部变量end和buffer_end来确定内核代码和缓冲区的分界线。然后,详细讲解了缓冲头和缓冲块的管理结构,以及如何通过双向空闲链表和哈希表来管理缓冲区。通过哈希表和双向链表的结构,实现了对缓冲区的快速查找和管理,为后续文件系统的读取操作提供了基础支持。最后,指出了缓冲区的重要性,它是用户进程的内存和硬盘之间的桥梁,同时也提到了缓冲区的使用和弃用可以通过LRU算法来实现。整体来说,文章内容涵盖了缓冲区初始化的重要性、实现方法以及相关的技术细节,对于读者快速了解缓冲区初始化具有一定的参考价值。
该试读文章来自《Linux0.11 源码趣读》,如需阅读全部文章,
请先通过赠一得一解锁课程
请先通过赠一得一解锁课程
赠一得一
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论