day0-1 笔记:《30天自制操作系统》/《自己动手写操作系统》

本文详细解析了PC从按下电源键到系统启动完成的过程,包括CPU如何执行BIOS、主引导记录MBR的位置选择原理及其历史背景,以及早期IBM PC5150的内存分配情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当按下计算机电源键到系统启动完成,都发生了什么?

(根据网上看到的资料,自己整理,如有侵权,请私信邮箱告知:1063871905@qq.com)
step1、 PC开机时,CPU默认执行0xffff:0x0000处的指令(8086是这样,386应该类似),而此内存地址刚好存放的就是BIOS
      PS: 这里可以解决我的一个疑问就是:开机之后,CPU是怎么就知道去执行BIOS
step2、 很多引导程序第一句汇编都是:org 0x7c00这是为什么?
    PS: 主引导记录MBR:  引导"操作系统"进入内存的一段小程序,大小不超过1个扇区(512字节)。
    解释:
         0x7c00这个地址来自Intel的第一代个人电脑芯片8088 ,以后的CPU为了保持兼容,一直使用这个地址。

    |
    |    (下面是重点)
   \/
1981年8月,IBM公司最早的个人电脑IBM PC 5150上市,就用了这个芯片。
当时,搭配的操作系统是86-DOS。这个操作系统需要的内存最少是32KB。我们知道,内存地址从0x0000开始编号,32KB的内存就是0x0000~0x7FFF
8088芯片本身需要占用0x0000~0x03FF,用来保存各种中断处理程序的储存位置。(主引导记录本身就是中断信号INT 19h的处理程序。)所以,内存只剩下0x0400~0x7FFF可以使用。
为了把尽量多的连续内存留给操作系统,主引导记录就被放到了内存地址的尾部。由于一个扇区是512字节,主引导记录本身也会产生数据,需要另外留出512字节保存。所以,它的预留位置就变成了:
0x7FFF - 512 - 512 + 1 = 0x7C00
0x7C00就是这样来的。
计算机启动后,32KB内存的使用情况如下
+- -- -- -- -- -- -- -- -- -- -- 0x0
| Interrupts vectors
+- -- -- -- -- -- -- -- -- -- -- 0x400
| BIOS data area
+- -- -- -- -- -- -- -- -- -- -- 0x5 ? ?
| OS load area
+- -- -- -- -- -- -- -- -- -- -- 0x7C00
| Boot sector
+- -- -- -- -- -- -- -- -- -- -- 0x7E00
| Boot data / stack
+- -- -- -- -- -- -- -- -- -- -- 0x7FFF
| ( not used )
+- -- -- -- -- -- -- -- -- -- -- ( . . . )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值