为什么主引导记录的内存地址是0x7C00?
记录 为什么 引导 内存地址
2023-09-14 09:02:07 时间
《计算机原理》课本说,启动时,主引导记录会存入内存地址0x7C00。
这个奇怪的地址,是怎么来的,课本就不解释了。我一直有疑问,为什么不存入内存的头部、尾部、或者其他位置,而偏偏存入这个比 32KB 小1024字节的地方?
昨天,我读到一篇文章,终于解开了这个谜。
![](http://www.ruanyifeng.com/blogimg/asset/2015/bg2015092804.png)
首先,如果你不知道,主引导记录(Master boot record,缩写为MBR)是什么,可以先读《计算机是如何启动的?》。
简单说,计算机启动是这样一个过程。
硬件检查通过 BIOS根据指定的顺序,检查引导设备的第一个扇区(即主引导记录),加载在内存地址 0x7C00 主引导记录把操作权交给操作系统
所以,主引导记录就是引导"操作系统"进入内存的一段小程序,大小不超过1个扇区(512字节)。
![](http://www.ruanyifeng.com/blogimg/asset/2015/bg2015092802-1.jpg)
0x7C00这个地址来自Intel的第一代个人电脑芯片8088,以后的CPU为了保持兼容,一直使用这个地址。
![](http://www.ruanyifeng.com/blogimg/asset/2015/bg2015092801-1.jpg)
1981年8月,IBM公司最早的个人电脑IBM PC 5150上市,就用了这个芯片。
![](http://www.ruanyifeng.com/blogimg/asset/2015/bg2015092803.png)
当时,搭配的操作系统是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) +--------------------- (...)
(完)
16.3 主引导目录(MBR)结构及作用 MBR 也就是主引导记录,位于硬盘的 0 磁道、0 柱面、1 扇区中,主要记录了启动引导程序和磁盘的分区表。我们通过图 1 来看看 MBR 的结构。
如何找到系统里的重复文件,快速释放磁盘空间? 不管是 Windows 电脑还是 Linux 电脑,在使用的过程中,或多或少都会留下很多重复的文件。这些文件不仅会占用我们的磁盘,还会拖累我们的系统,所以,很有必要干掉这些重复的文件。
阮一峰 阿里技术专家。著名技术博客作者,技术方向为 React + Node,自由软件运动的支持者
相关文章
- 成功解决YOLOv3测试——could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZE作记录
- Docker镜像的修改记录查询
- 记录:禁用你的元素 bootstrap
- 泰克 Tektronix THS720A 示波器 显示屏维修记录
- 【SQL开发实战技巧】系列(十七):数据仓库中时间类型操作(初级)确定两个日期之间的工作天数、计算—年中周内各日期出现次数、确定当前记录和下一条记录之间相差的天数
- 刷题记录:牛客NC16527[NOIP2013]货车运输 多次树链剖分+最大生成树
- 刷题记录:牛客NC20806区区区间间间
- 刷题记录:牛客NC16129小小粉刷匠