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

14 | 块设备初始化blk_dev_init:读取硬盘前的准备工作

上一讲我们说到中断初始化 trap_init,它可以设置中断描述符表中的一些中断处理函数,比如键盘中断、硬盘中断等等,是我们学到的 main 方法中的第三个初始化函数。
这一讲,我们会看到块设备初始化的过程,为后续读写磁盘做准备。
我们接着往下看,blk_dev_init 方法。
// init/main.c
void main(void) {
...
blk_dev_init();
...
}
直译过来就是块设备初始化。

块设备初始化

我们知道,读取硬盘数据到内存中,是操作系统的一个基础功能。这个过程需要有块设备驱动程序、文件系统、缓冲区,甚至进程的阻塞与唤醒等功能的支持。
但不要慌,我们就按照源码的顺序,看看这个块设备初始化究竟在搞什么鬼。
// kernel/blk_drv/ll_rw_blk.c
void blk_dev_init(void) {
int i;
for (i=0; i<32; i++) {
request[i].dev = -1;
request[i].next = NULL;
}
}
我没看错吧,这也太简单了吧?
就是给 request 这个数组前 32 个元素结构体中的两个属性 devnext 附上值,看这两个值 -1NULL 也大概可以猜出,这是没有任何作用时的初始化值。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了块设备初始化的过程,为后续读写磁盘做准备。通过分析源代码,文章详细解释了blk_dev_init方法的实现过程,以及request结构体的重要性和各个成员变量的含义。文章还简要介绍了sys_read和file_read函数的作用,以及这些函数如何与request结构体和硬盘IO端口进行交互。最后,文章总结了本文的内容,强调了blk_dev_init的重要性,为后续的块设备访问提前建立了一个数据结构,作为访问块设备和内存缓冲区之间的桥梁。文章内容详实,适合读者快速了解块设备初始化的技术特点。

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

全部留言(2)

  • 最新
  • 精选
  • 夜未眠
    request数据结构是在哪里定义的呢?闪客大佬
    2023-03-10归属地:云南
    1
  • Fighting
    越来越精彩了!
    2023-02-27归属地:北京
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部