3.从CPU和内存的角度来看Linux系统的执行
1.从在CPU执行指令的角度看:

2.从内存的角度看

我理解的计算机进行工作时,总线连接cpu和内存,cpu内有许多的寄存器,他们分工不同,大小也不同,cpu其中有个很重要的寄存器,就是ip寄存器,ip寄存器不断向下递增,指令被不断地执行。计算机通过一定的语句来控制这些组件,实现计算机要完成的工作,就拿这个实验,将c语言编译成机器更容易理解的汇编语言。使用汇编语言,指令被不断地执行,反映在栈中,就是堆栈里面不断发生改变,计算机这样完成了自己的工作。
内核的启动过程可以简单地这么来看:start_kernel从内核一启动的时候它会一直存在,这个就是0号进程,idle就是一个while0,一直在循环着,当系统没有进程需要执行的时候就调度到idle进程,我们在windows系统上会经常见到,叫做system idle,这是一个一直会存在的0号进程,然后呢就是0号进程创建了1号进程,这个init_process是我们的1号进程也就是第一个用户态进程,也就是它默认的就是根目录下的程序,也就是常会找默认路径下的程序来作为1号进程,1号进程接下来还创建了kthreadd来管理内核的一些线程,这样整个程序就启动起来了。也就是所谓的道生一,一生二,二生三,三生万物。
计算机中进程的创建与描述:
系统调用
我理解中这三大法宝是缺一不可,共同配合之后完成的工作。尤其是中断,上一次课的时候没有讲到中断,其实中断也很重要。有了中断以后在系统里面可以同时跑好几个程序,每个程序有自己的执行流,在这个执行流的过程中,可以切换过去完成另外一项任务,这时候cpu就会做一件事情,由cpu和内核代码共同实现了保存现场和恢复现场。cpu把当前的esp、ebp都压到一个叫做内核堆栈的另外一个堆栈里面去,压到这个堆栈里面去之后呢,然后把eip指向一个中断处理程序的入口,保存现场,执行中断处理程序,我们这个中断处理程序模拟了这个时钟中断,这是是周期性的,每过一段时间发生一个时钟中断,这个时钟中断也会调用一个程序,我们的实验可以很明显看到当前系统里只有一个进程,一直在那里执行,执行过程中每隔一段时间,时钟中断发生一次,这样就模拟了一个最基本的系统环境,在这个系统环境中我们就可以写一个最简单的时间片轮转的一个非常小的,代码少的一个操作系统内核。这就是我理解的操作系统的工作过程。