2.1 操作系统启动过程BIOS ----- 操作系统真相还原

1. 什么叫”程序载入内存“

     程序先被加载器(软件或者硬件)加载进内存的某个区域,之后将CPU的cs:ip寄存器指向这个程序的起始地址。


2. 实模式下的内存布局

    以intel8086为例,该CPU有20条地址总线,故而可以访问到的内存空间为1MB,从0x00000到0xFFFFF。从低地址到高地址,其具体布局如下:

    1、地址0~0x9FFFF处,共640KB大小,为DRAM内存区域,即通常所说的内存条。其中,中断向量表处于第一个KB处,主引导记录MBR会被加载进0x7c00~0x7DFF处,共512B。

    2、地址A0000~EFFFF用以访问外设的内存区域。

    3、地址F0000~FFFFF为BIOS代码存储区域,共64KB

    需要注意的是,CPU可以访问到内存区域并不都是内存条的空间,因为地址总线可访问的地址范围需要包含进外设和BIOS,因此我们实际在已启动的系统里查看内存条大小,可能会发现比标称的小,就是因为地址总线的宽度并没有全部用来覆盖内存条的内存空间。


3. 计算机启动过程

    BIOS被存储在ROM中,掉电不会消失,但是ROM也是内存区域,故而以上提到的载入内存对于BIOS程序执行来说,不需要加载BIOS的代码进内存,因为它已处于内存,且此ROM被映射在1MB内存的顶部0xF0000到0xFFFF处。

    BIOS也是程序,程序的执行需要入口地址。BIOS的入口地址位于0xFFFF0。

    计算机启动开机的一瞬间,CPU的cs:ip寄存器就被硬件初始化为0xF000:0xFFFF。由于计算机在启动时CPU处于实模式,这是,CPU实际访问的地址就是段基址左移四位加上偏移地址的值,从而,访问内存0xFFFF0处,也就是BIOS的入口地址,BIOS开始执行。

    这里仅仅只有16B空间,因而只有一个跳转指令,jmp far f000:e05b,此处是BIOS代码真正的开始处。之后BIOS开始马不停蹄地检测内存、显卡等外设信息。当检测通过后,便初始化好硬件,开始在内存0x000~0x3FF处建立数据结构中断向量表IVT并填写中断例程。

    最后一项工作就是校验启动盘中0盘0道1扇区的内容,若此扇区末尾两个字节分别是魔数0x55和0xaa,BIOS便认为此扇区中确实存在可执行的程序,即MBR程序,从而加载到物理地址0x7c00处,并跳转到此地址继续执行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值