Linux0.11 源码趣读
闪客
低并发编程公号作者
18650 人已学习
赠一得一
课程目录
已完结/共 22 讲
Linux0.11 源码趣读
15
15
1.0x
00:00/00:00
登录|注册

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

你好,我是闪客。
在上一讲中我们说到了进程调度的初始化,让操作系统随时准备迎接时钟中断的到来,进而触发进程调度。
那接下来我们就回到 main 函数,继续看下一个初始化的方法,缓冲区初始化 buffer_init,加油,没剩多少了!
// init/main.c
void main(void) {
...
buffer_init(buffer_memory_end);
...
}
首先要注意到,这个函数传了个参数 buffer_memory_end,这个是在老早之前就设置好的,就在 第 12 讲 | 边界值划分与主内存初始化,可以去回顾下。
同时,且我们在 第 12 讲,主内存初始化 mem_init 中,用 mem_init 设置好了主内存的管理结构 mam_map。
这是把主内存区管理起来了,所以今天就是把剩下的缓冲区部分,也初始化管理起来。目的就是这么单纯,我们看代码。
我们还是采用之前的方式,就假设内存只有 8M,把一些不相干的分支去掉,方便理解。
// fs/buffer.c
extern int end;
struct buffer_head * start_buffer = (struct buffer_head *) &end;
void buffer_init(long buffer_end) {
struct buffer_head * h = start_buffer;
void * b = (void *) buffer_end;
while ( (b -= 1024) >= ((void *) (h+1)) ) {
h->b_dev = 0;
h->b_dirt = 0;
h->b_count = 0;
h->b_lock = 0;
h->b_uptodate = 0;
h->b_wait = NULL;
h->b_next = NULL;
h->b_prev = NULL;
h->b_data = (char *) b;
h->b_prev_free = h-1;
h->b_next_free = h+1;
h++;
}
h--;
free_list = start_buffer;
free_list->b_prev_free = h;
h->b_next_free = free_list;
for (int i=0;i<307;i++)
hash_table[i]=NULL;
}
虽然很长,但其实就造了两个数据结构而已。
不过别急,我们先从第一行代码开始看起。
// fs/buffer.c
extern int end;
void buffer_init(long buffer_end) {
struct buffer_head * start_buffer = (struct buffer_head *) &end;
...
}
这里有个外部变量 end,而我们的缓冲区开始位置 start_buffer 就等于这个变量的内存地址。
这个外部变量 end 并不是操作系统代码写就的,而是由链接器 ld 在链接整个程序时设置的一个外部变量,帮我们计算好了整个内核代码的末尾地址。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

缓冲区初始化buffer_init:面试高频考点 文章介绍了缓冲区初始化的重要性以及具体的实现方法。首先,通过分析代码,解释了如何利用外部变量end和buffer_end来确定内核代码和缓冲区的分界线。然后,详细讲解了缓冲头和缓冲块的管理结构,以及如何通过双向空闲链表和哈希表来管理缓冲区。通过哈希表和双向链表的结构,实现了对缓冲区的快速查找和管理,为后续文件系统的读取操作提供了基础支持。最后,指出了缓冲区的重要性,它是用户进程的内存和硬盘之间的桥梁,同时也提到了缓冲区的使用和弃用可以通过LRU算法来实现。整体来说,文章内容涵盖了缓冲区初始化的重要性、实现方法以及相关的技术细节,对于读者快速了解缓冲区初始化具有一定的参考价值。

该试读文章来自《Linux0.11 源码趣读》,如需阅读全部文章,
请先通过赠一得一解锁课程
赠一得一
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部