内核的启动过程可以简单地这么来看:start_kernel从内核一启动的时候它会一直存在,这个就是0号进程,idle就是一个while0,一直在循环着,当系统没有进程需要执行的时候就调度到idle进程,我们在windows系统上会经常见到,叫做system idle,这是一个一直会存在的0号进程,然后呢就是0号进程创建了1号进程,这个init_process是我们的1号进程也就是第一个用户态进程,也就是它默认的就是根目录下的程序,也就是常会找默认路径下的程序来作为1号进程,1号进程接下来还创建了kthreadd来管理内核的一些线程,这样整个程序就启动起来了。也就是所谓的道生一,一生二,二生三,三生万物。Linux操作系统架构概览我们在这里总结一下这个课学习的内容:

任何计算机系统都包含一个基本的程序集合,称为操作系统
-内核(进程管理,进程调度,进程间通讯机制,内存管理,中断异常处理,文件系统,I/O系统,网络部分)
-其它程序(例如函数库,shell程序、系统程序等等)
操作系统的目的
-与硬件交互,管理所有的硬件资源
-为用户程序(应用程序)提供一个良好的执行环境
那么我们可以看一张图:最底层有磁盘管理,物理内存的管理,内存控制器还有控制台,这个地方它有一个Kernel Intelface to the hardware,
也就是对硬件资源的管理,然后呢在上一层就是内核的实现,内核的实现也就是CPU调度,内存管理,按需调度,虚拟内存等等,还有其他的驱动,磁盘管理,文件系统等等,这些操作系统的内核,我们这门课分析的内核只是计算机操作系统里面最最关键的一些代码,实际上整个操作系统非常复杂,很多其他的部分都没有涉及。那么呢,这个地方有一个系统调用接口,这里涉及到不同的部分,基础软件也就是share共享库lib ,动态加载器这些等等。

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指向一个中断处理程序的入口,保存现场,执行中断处理程序,我们这个中断处理程序模拟了这个时钟中断,这是是周期性的,每过一段时间发生一个时钟中断,这个时钟中断也会调用一个程序,我们的实验可以很明显看到当前系统里只有一个进程,一直在那里执行,执行过程中每隔一段时间,时钟中断发生一次,这样就模拟了一个最基本的系统环境,在这个系统环境中我们就可以写一个最简单的时间片轮转的一个非常小的,代码少的一个操作系统内核。这就是我理解的操作系统的工作过程。
 
posted on 2016-04-21 14:51  20135124  阅读(160)  评论(0编辑  收藏  举报