X86启动过程分析

本文详细介绍了计算机启动过程中,如何从磁盘加载操作系统到内存。包括初始引导程序的作用、引导扇区的功能以及引导装入程序的选择等内容。

一直对计算机的启动过程不甚清楚,总是一知半解。这几天搜集一些这方面的资料,通过学习对启动过程有个更深入的了解。

通常情况下,我们的系统装在磁盘上。而CPU是不能够直接访问磁盘的,必须将磁盘上的内容读入内存后才能被CPU访问。那么计算机是如何启动并运行操作系统代码的呢?这里必定存在一个将磁盘上的代码加载到内存的程序,而且该程序必须能够被CPU访问,也就是说必须在内存中。为了能在每次开机时执行该代码,这段代码必须存储在非挥发性(非易失性)的内存中,比如EPROM、Flash中。当按下开机键或重启键后,CPU就会进入实模式,此时代码段寄存器CS的值为0xffff,指令指针寄存器IP的值为0,所以CPU会从线性地址(此时也是物理地址)0xffff0开始执行指令,而0xffff0指向的内存位于EPROM、Flash中。因此,每次开机时CPU都会从0xffff0出开始执行一段程序,这段被称为初始引导程序(例如BIOS)。可以想象一下,如果EPROM、Flash的存储空间足够大,大到能够放入操作系统的全部镜像大话,我们完全可以在0xffff0处放入操作系统镜像,这样直接就可以进入操作系统而不用从磁盘读入操作系统镜像了。但是由于受到EPROM、Flash存储空间的的限制,只能采取间接的方法了,那就是通过初始引导程序来加载磁盘上的镜像。由于各种操作系统的代码大小不一样,不可能编写一个通用的初始引导程序来加载所有可能的操作系统镜像。所以初始引导程序被设计成将磁盘第一扇区(称为引导扇区)读入内存,然后将引导扇区的开头作为一段程序的起始地址,让CPU转入这段程序。这样一来就可以使初始引导程序独立于具体的操作系统,保证了初始引导程序的通用性,具体的操作系统只需要在磁盘的引导扇区放入相应的代码即可。由于引导扇区只是一个扇区,即512字节,能够容纳的信息和代码有限,所以常常还需要由引导扇区的程序先装入其他若干扇区,再由这些扇区中的程序和数据协同完成整个引导过程。

通常,我们引入一个称为引导装入程序的工具程序来辅助加载操作系统镜像。我们通过引导扇区读入引导装入程序,然后再由引导装入程序加载操作系统镜像。常用的引导装入程序有LILO、grub等。从功能上说,引导装入程序和EPROM中的初始引导程序并没有什么不同,只是体积更大,功能更为复杂。

转载于:https://www.cnblogs.com/andywxl/archive/2011/11/13/2247574.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值