Minix3操作系统的文件系统初始化

FS的初始化确实是在servers/fs/main.c中的fs_init()函数中完成的.
开机启动之后, PM会建立自己的mproc[], 依据是一个映射表, 其中包含9个开机启动必须的进程, 比如PM, FS, INIT等
这样mproc[0] --> mproc[8] 就被填满了.
PM在建表的同时, 还会包装一条消息给FS, 消息中包括 "当前处理的这个进程在我的表中占第几位 [比如PM占第0位]", 以及 "当前进程的pid [PM在建表时会分配id给每个进程]";
FS不断的从PM那receive消息, 从中提取 位序 和 pid, 并在自己这边的 fproc[]表中建立对应项;
直到PM处理完所有的9个, 会发一个NONE给FS, 表示我这边没有了
FS会回复一个OK给PM, 这样双方就都明白了.
结果是: PM和FS各有一个表, 表中各有9项, 9项一一对应;

然后初始化buf和super_block; 这个很简单, 自己看代码

最后是读入根目录inode,  将fproc[]中每一个进程的workdir和rootdir都指向该inode 

这样就初始化完成了

以后的进程都是在这9个基础上fork出来的, 所以mproc[]中多一个, 就会给FS发一个消息, fprocp[]中也相应多一个


你可能感兴趣的:(Minix3操作系统的文件系统初始化)