第三周 构造一个简单的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号进程后,一个进程创建另一个进程和线程,一生二、二生三、三生万物,系统内核就启动了

posted @ 2016-03-10 16:40  20135331文艺  阅读(224)  评论(0编辑  收藏  举报