内核加载与linux的grub

  计算机系统的启动是一个复杂的过程,启动过程大致可以分为以下几个阶段:

+------计算机系统启动流程----------------------------- --------------------+
|+-------1----------+      +-------2-----------+     +-------3---------+|
||                  |      |                   |     |                 ||
||  管理控制单元上电  |----->|       cpu上电      |---->|    BIOS引导     ||
||                  |      |                   |     |                 ||
|+------------------+      +-------------------+     +-------+---------+|
|                                                            |          |
|           +-------<-------------------------<--------------+          |
|           |                                                           |
|           |                                                           |
|+-------4--+-------+      +-------5-----------+     +-------6---------+|
||                  |      |                   |     |                 ||
||    加载OS内核     |----->| 系统软硬件初始化    |---->|    启动init进程  ||
||                  |      |                   |     |                 ||
|+------------------+      +-------------------+     +-----------------+|
+-----------------------------------------------------------------------+

 其中最开始的2个阶段是属于机械物理过程,最后2个阶段主要是按照一定的顺序来执行软件程序,这几个阶段都较为直观简单,中间的2个阶段从BIOS开始到系统执行内核启动函数start_kernel()结束。

  那么先来说说bios,计算机基本输入输出系统,通俗点讲是保存在ROM的一组程序,计算机系统上电后cpu执行的第一个程序就是bios程序,这里有一个问题:

在系统上电的一瞬间,内存、cpu相关的一些寄存器都是空白的,bios程序是如何开始执行的呢?

  从系统体系的角度看,既然bios不能由软件来触发执行,那么只能由硬件逻辑来实现。Intel 80x86 系列的cpu分为实模式和保护模式,实际上是,在cpu上电的一瞬间即进入实模式运行,同时硬件逻辑将cpu的cs寄存器和ip寄存器设置为:0xFFFF-0x0000,计算机体系将bios程序的入口写死在这个地址上,同时cpu在实模式下的地址即为绝对地址,cpu根据cs+ip找到了bios程序的入口的物理地址,load第一条bios指令到cpu开始执行。bios程序主要干两件事情:硬件检测和配置、加载os 的内核。注意bios程序是不会直接去加载os 内核的,那么:

bios程序为什么不直接加载os 内核, os内核是由谁来加载的呢?

  

 

 

 

 

 

 

 

 

 

内核加载与linux的grub,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。