Chinaunix首页 | 论坛 | 博客
  • 博客访问: 387928
  • 博文数量: 70
  • 博客积分: 1919
  • 博客等级: 上尉
  • 技术积分: 1179
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-24 20:05
文章分类

全部博文(70)

文章存档

2014年(2)

2013年(29)

2012年(20)

2011年(1)

2010年(13)

2009年(5)

分类: LINUX

2012-11-20 16:58:34

刚好有一个项目让自己做一个livecd,知道了操作系统的启动过程.
1.当有一个X86机器启动以后,系统BIOS开始检测系统参数,如内存大小,日期,时间,磁盘设备,光驱,以及这些磁盘设备用于引导的顺序。
具体细节如下:
A 开机上电,cpu自动把代码寄存器cs设置为0xf000,把段基地址设置为:0xffff 0000 段长度为64kb 而ip设置为0xfff0 因此 cpu代码指针指向 0xffff fff0 地址 ,也就是rom B
Bios的 存放的位置
B 执行bios中的jmp指令,跳转到bios代码中 64kb范围内的某一条指令开始执行,由于在目前的pc中bios容量大约有1-2MB 并存储在闪存rom中,因此为了执行bios超过64kb范围的其他代码或数据,bios首先使用32为寻址方式,bios会把段长度(数据寄存器的访问范围)设置为4GB 而不是原来的64KB,这样cpu就可以操作0-4GB范围执行和操作数据了
C 然后就是常说的加电自检了,bios此时执行一系列硬件检测和初始化,并且将bios内容(代码和数据)复制到低端内存低端1MB的末端的64KB处即 0x00f0 0000 -1MB
D 复制完成后,跳转到这个位置(0xf00000) 让cpu真正运行在实模式下
E bios从硬盘或其他设备把操作系统引导程序加载内存0x7c00处,并跳转到这个地方执行引导程序
通常情况下,Bios被设置成首先检查软驱或光驱,然后尝试从硬盘引导,如果在这些移动设备中,没找到可用于引导的介质,那么bios通常会转向第一块硬盘的最初几个扇区,寻找操作系统的指令。这些扇区就是从一开始装载预选择操作系统的。这个就是俗称的MBR,以前虽然知道MBR,但是现在终于完全理解了MBR在哪里,真实是什么东西了。 

硬盘的物理第一扇(0柱面,0磁道,1扇区)是硬盘主扇MBR,计算机启动时,首先就读取该扇,读出硬盘分区表,从中选择三个主分区中唯一一个具有活动标记的分区,引导该分区上的操作系统。

2.目前,有两种比较主流的装载启动应用程序:LILO和grub。grub经常使用,grub是许多linux默认的引导程序,也经常听说,但是这个LILO还真是不懂。现在先说说LILO吧。
LILO俗称:linux引导程序(linux loader)。LILO是一个启动操作系统的选择程序,它其实写MBR的。假如你的电脑上安装了windows和linux操作系统,你可以配置LILO来引导其中的一个,假如你下次又想运行另一个操作系统,则启动时按Ctrl、Alt、Shift、Caps Lock健会出现boot,此时按Tab健获得LILO的菜单,重新进行配置,写入MBR,这样就可以引导其他 操作系统了,但LILO的优点同时也是自己的缺点,它可以快速安装在MBR上,而有些操作系统不能容忍LILO频繁的修改主引导记录(MBR),因此grub就派上用场了。

小知识:
大多数新电脑都为Microsoft Windows或Mac OS的一些版本安装了引导加载程序。如果计算机使用,就必须安装一个特殊的引导加载程序。这就是在安装linux的时候,要安装grub的原因了,终于搞清楚了。
3.LILO大家有一定了解了,下来说说grub,并说明操作系统启动过程:
grub是一个将引导装载程序安装到主引导记录的程序,MBR位于第一个硬盘的开始扇区,在MBR中的程序其中的特定指令装载一个Grub菜单或Grub命令环境。这使得用户可以进行操作系统的选择,在内核引导时传递特定指令给内核或内核引导前,确定一些系统参数。

grub的运行分下面几步完成的:
1.装载基本的引导程序。基本引导程序位于主引导扇区一个非常小的空间,因此不能载入过多的内容,需要第二次加载引导程序,所以基本引导程序所做的事情就是加载第二引导程序
2.装载第二引导程序,第二引导程序就包含更多的高级功能,允许用户载入一个特定操作系统
3.装载特定的操作系统,linux是通过内核方式加载的,而window是采用链式转载程序,所以在grub.conf中,常会看见linux的加载命令是:
kernel /vmlinuz-xxx-xx
而windows的是:
chainloader +1      #(位于硬盘的第一个扇区内的文件
现在终于明白怎么回事了。。
上面主要详细讲解了引导程序的过程。
总的操作系统启动过程:
1.系统加电,
2.Bios装载MBR
3.LILO或Grub获得引导控制权
4.显示相应菜单,用户选择启动操作系统
从此各个资源的管理都交给了操作系统。

linux操作系统开始接管后,开始执行kernel内核,开始启动linux,此时应该会启动传说中的init的进程。然后操作系统读fstab、inittab配置文件,挂载rootfs,文件系统等。

bootimage是引导启动image文件,其中包括磁盘引导扇区代码,操作系统加载程序和内核执行代码。
pc启动是 rom bios中的程序会默认启动驱动器上的引导扇区代码和数据读入内存,而引导扇区代码负责 把操作系统加载程序和内核执行代码加载到内存中,然后把控制全交给操作加载程序,进一步准备内核初始化操作。最终 加载程序会把控制权交给内核代码,内核代码若要正常运行就需要文件系统的支持。
rootimage就是向内核提供最基本支持的根文件系统,其中包括操作系统一些最起码的配置文件和命令执行程序。
阅读(5935) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

lmnos2012-11-21 10:40:42

很好,就是简单了点