为什么主引导记录的内存地址是0x7C00?
2015-11-23 15:34
323 查看
前言
《计算机原理》课本说,启动时,主引导记录会存入内存地址0x7C00。为什么不存入内存的头部、尾部、或者其他位置,而偏偏存入这个比
32KB 小1024字节的地方?
正文
计算机启动是这样一个过程。(简单描述)
通电
读取ROM里面的BIOS,用来检查硬件
硬件检查通过
BIOS根据指定的顺序,检查引导设备的第一个扇区(即主引导记录),加载在内存地址 0x7C00
主引导记录把操作权交给操作系统
所以,主引导记录就是引导"操作系统"进入内存的一段小程序,大小不超过1个扇区(512字节)。
0x7C00这个地址来自Intel的第一代个人电脑芯片8088,以后的CPU为了保持兼容,一直使用这个地址。
981年8月,IBM公司最早的个人电脑IBM PC 5150上市,就用了这个芯片。
p s:当时,搭配的操作系统是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) +--------------------- (...)
总结
相关文章推荐
- 单例模式
- Objective-C Runtime
- awk 初学02
- 华为oj inoc产品部--完全数计算
- 在CentOS 6.3/6.6 64bit上源码安装cmake 3.4.0
- CSS美化上传按钮并获取上传文件路径
- Db2 sql summarize
- UDP包的最大大小是多少?
- Struts1 标签库
- 浅谈压缩感知(三):几何解释
- Spring MVC interceptor 使用
- cocos2d-x大型地图的实现
- 图书api 查询图书内容
- iOS-PCH File的快速导入方法和使用
- 成功投资者应具备的气质
- Android编程之菜单的实现方法实例详解
- svn-bak-daily.bat
- MYSQL 优化
- 外排序(大数据文件排序)
- heap