| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 主引导记录的内存地址为什么是0x7C00 -> 正文阅读 |
|
[系统运维]主引导记录的内存地址为什么是0x7C00 |
????????最近看操作系统编写方面的书籍,对于其中的一些代码很好奇。org为什么要指定0x7c00这个位置。书中的解释是下面两张图,。。。不知所云
? ? ? ? 问题真正的答案,在网上找了半天也没有确切的答案。后来再阮一峰的博客里发现了答案(膜拜大佬)。下面揭晓谜底: 简单说,计算机启动是这样一个过程。 1、通电 2、读取ROM里面的BIOS,用来检查硬件 3、硬件检查通过 4、BIOS根据指定的顺序,检查引导设备的第一个扇区(即主引导记录),加载在内存地址 0x7C00 5、主引导记录把操作权交给操作系统 ????????主引导记录就是引导"操作系统"进入内存的一段小程序,大小不超过1个扇区(512字节)。0x7C00这个地址来自Intel的第一代个人电脑芯片8088,以后的CPU为了保持兼容,一直使用这个地址。 ????????当时,搭配的操作系统是86-DOS。这个操作系统需要的内存最少是32KB。我们知道,内存地址从0x0000开始编号,32KB的内存就是0x0000~0x7FFF。 ????????8088芯片本身需要占用0x0000~0x03FF,用来保存各种中断处理程序的储存位置。(主引导记录本身就是中断信号INT 19h的处理程序。)所以,内存只剩下0x0400~0x7FFF可以使用。 ????????为了把尽量多的连续内存留给操作系统,主引导记录就被放到了内存地址的尾部。由于一个扇区是512字节,主引导记录本身也会产生数据,需要另外留出512字节保存。所以,它的预留位置就变成了:
参考: http://www.ruanyifeng.com/blog/2015/09/0x7c00.html https://www.ruanyifeng.com/blog/2013/02/booting.html http://www.glamenv-septzen.net/en/view/6 《30天自制操作系统》 《Orange’S:一个操作系统的实现》 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 18:52:13- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |