14 块设备初始化blk dev init:读取硬盘前的准备工作
上一讲我们说到中断初始化 trap_init,它可以设置中断描述符表中的一些中断处理函数,比如键盘中断、硬盘中断等等,是我们学到的main方法中的第三个初始化函数。
这一讲,我们会看到块设备初始化的过程,为后续读写磁盘做准备。
我们接着往下看,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 个元素结构体中的两个属性 dev 和 next 附上值,看这两个值 -1 和 NULL 也大概可以猜出,这是没有任何作用时的初始化值。