第三周 构造一个简单的Linux系统
20135331文艺
首先 在上周内容中我们学习了
计算机三个法宝:
1、存储程序计算机
2、函数调用堆栈
3、中断
本周中得知
操作系统两把宝剑:
1、中断上下文的切换:保存现场和恢复现场
2、进程上下文的切换
跟踪分析Linux内核的启动过程
在Linux的内核结构目录中 arch中x86较为重要
kernel为Linux的核心代码所在
实验部分 : (本次实验实在实验楼中完成 )
直接在命令行中输入 Linuxkernel文件 ,进入目录
再输入qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img启动文件 如下图:
系统支持三条命令:help、version和quit
接下来使用gdb调试
输入qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
-S表示:在CPU初始化之前,冻结CPU
-s表示在:1234端口上创建一个tcp接口
在这里遇到了一个问题 在输入file linux-3.18.6/vmlinux 却找不到文件
这里重新输入指令 先进入Linuxkernel文件夹之后在调试即可出现
( : 由于网速太差的原因 在输入target remote:1234 时出现了连接超时 导致以下命令无法进行 但知道做法 (故在此引用以下别人完成的一张截图))
设置断点,把内核启动的起点start_kernel设为断点,在init/main.c文件中输入c 系统从冻结状态开始启动
启动后如下:
分析start_kernel :
首先在init目录下的main.c中启动kernel
init-task既手工创建的PCB 0号金城最终的idle进程 (也就是说PCB在此初始化)
init-process :1号进程 第一个用户态进程
系统没有进程需要执行时 就调度到0号进程 rest-init 一直存在
: 在0号进程创建1号进程后,一个进程创建另一个进程和线程,一生二、二生三、三生万物,系统内核就启动了