linux的启动过程

linux操作系统启动之前,首先是硬件上电, BIOS,然后是主引导加载程序等。

我们从上电开始说起直到init进程。

启动第一部分:从系统上电到进入linux操作系统。

第二部分:linux操作系统开始初始化到启动init进程。

第一部分:

1.系统上电之后,会从0xffff,fff0处取指令。在0xffff,fff0地址处是一个跳转指令,通过此指令,CPU跳转到BIOS(位于ROM中)开始运行BIOS程序。

2.BIOS程序分两个部分:其一主要做自检工作,这个工作叫做POST(power on self test),这部分工作主要是检查硬件,其中有显卡,内存和系统总线,其中PCI的设备枚举过程就是在此完成的。例如没有键盘的话,会在此检查出来,并有提示。

 

2.1其一部分是:读入“引导块”。通过BIOS设置的引导顺序(“引导顺序”这个大家都很明白吧,就是从哪儿启动,一般是硬盘启动,安装系统时从光盘启动),依次从硬盘,光盘,软驱中读入“引导块”。此引导块是第一扇区的512个字节。一般来说都是从硬盘中读出此“引导块”并保存到RAM中,此时CPU从BIOS跳转到主引导加载程序。

3.主引导加载程序:

主引导加载程序的工作是查找并加载次引导加载程序(第二阶段)。它是通过在分区表中查找一个活动分区来实现这种功能的。当找到一个活动分区时,它会扫描分区表中的其他分区,以确保它们都不是活动的。当这个过程验证完成之后,就将活动分区的引导记录从这个设备中读入 RAM 中并执行它。

4.次引导加载程序:

次引导加载程序(第二阶段引导加载程序)可以更形象地称为内核加载程序。这个阶段的任务是加载 Linux 内核和可选的初始 RAM 磁盘。

在 x86 PC 环境中,第一阶段和第二阶段的引导加载程序一起称为 Linux Loader(LILO)或 GRand Unified Bootloader(GRUB)。

5.启动操作系统。(当然也可以是windows系统)

在此启动的第一部分完成,开始运行操作系统,注意以上过程全部使用实地址模式。

 

 

以硬盘启动为例

  1. 开机

  2. BIOS 加电自检 ( Power On Self Test -- POST ) 内存地址为 0FFFF : 0000

  3. 将硬盘第一个扇区 (0头0道[柱面]1扇区,也就是Boot Sector) 读入内存地址0000 : 7C00 处.

  4. 检查(WORD) 0000 : 7DFE 是否等于0xAA55,若不等于则转去尝试其它启动介质

  如果没有其它启动介质则显示"No ROM BASIC" 然后死机.

  5. 跳转到0000 : 7C00 处执行MBR 中的程序.

  6. MBR 首先将自己复制到 0000 : 0600 处, 然后继续执行.

  7. 在主分区表中搜索标志为活动的分区. 如果发现没有活动分区或有不止一个活动分区, 则转停止.

  8. 将活动分区的第一个扇区读入内存地址 0000 : 7C00 处.

  9. 检查(WORD) 0000 : 7DFE是否等于0xAA55,若不等于则显示"Missing Operating System"然后停止,或尝试软盘启动

  10. 跳转到0000 : 7C00处继续执行特定系统的启动程序.

  11. 启动系统 ...

  以上步骤中 2,3,4,5 步是由 BIOS 的引导程序完成. 6,7,8,9,10步由MBR中的引导程序完成.

 

更详细的介绍:

http://www.ibm.com/developerworks/cn/linux/l-linuxboot/

你可能感兴趣的:(linux,工作,windows,活动,basic,System)