xv6启动流程
启动链条
- Power On: CPU 处于 M Mode。执行 ROM 里的代码。
- Bootloader: 加载 OS Kernel 到内存
0x80000000。 kernel/entry.S: 设置栈,跳转到start.c。kernel/start.c(M Mode):- 设置
mstatus寄存器,准备切换到 S Mode。 - 设置
mepc为main函数地址。 - 设置页表硬件屏蔽(暂时)。
- 配置时钟中断。
- 执行
mret指令 → 硬件降级到 S Mode 并跳转到main()。
- 设置
kernel/main.c(S Mode):- 初始化各子系统 (内存、进程、锁、磁盘)。
- 调用
userinit()创建第一个用户进程 (initcode.S)。 scheduler()开始调度。
init进程: 执行/init程序,启动 Shell。