在大二上学习《操作系统》这门课的时候,课程主要是以linux系统为案例,当时老师推荐我们去阅读minix3.1.8的源代码,minix3是基于微内核架构的类UNIX计算机操作系统,精巧而且完全开源,对于操作系统的入门者来说较容易理解。以下为本人在课程中整理的源代码阅读笔记,如果也有想要解读minix3.1.8源代码的朋友,推荐一款读代码的软件 source insight,利用其树状架构可以很清楚地追踪函数及变量定义。
一、Minix3的启动:
l 硬件读入引导程序,引导程序装入boot,Boot在内存中装入引导映像(包含内核、pm、fs等)
l 内核初始化(/Kernel/main.c):
1、初始化进程表和特权进程表:
状态设成空闲、区别任务还是其他进程设置p_nr值、将priv[i]映射到ppriv_addr[i]等
2、初始化引导映像中的程序,将进程名、进程指针等都复制到proc表中,并设置它们的特权(是否允许陷阱、是否能够运行kernel call等等);如果是内核任务或者根系统进程则可以立即被调度,其他进程则不能被调度;
3、初始化栈、建立内存映射、初始化寄存器值
4、初始化服务器的栈指针,将proc_ptr 指向当前进程,入队,设为可调度状态