为什么 x86 操作系统从 0x7c00 处开始

news2024/11/15 21:45:09

0x00:x86 架构 BIOS 引导加载程序中的"0x7C00"之谜

你知道 x86 操作系统中的"0x7C00"这个神奇数字吗 ?

"0x7C00" 是BIOS加载MBR(主引导记录,磁盘中的第一个扇区)的内存地址。操作系统或引导加载程序开发人员必须假设他们的汇编代码已加载并从 0x7C00 开始。

但是...

第一,你可能很疑惑: "我读了所有的Intel x86 手册,但没有找到神奇的数字0x7C00。"是的。0x7C00 与 x86 CPU 无关。很自然你在 intel 的cpu规格中查不到它。然后,你很想知道 "是谁确定这个数字的?"

第二,你可能很疑惑:"0x7C00 十进制数为 32KiB - 1024B。这个数字意味着什么?难道这只是巧合吗?"

是谁决定了这个地址?并且,他为什么选择这样一个不着边际的地址呢?现在,让我们一起深入了解现代 x86 PC 的祖先"IBM PC 5150"的 BIOS 秘密!

0x01:"0x7C00"首先出现在IBM PC 5150中

图片

纵观x86 IBM兼容个人电脑的历史,IBM PC 5150 是现代x86 IBM PC/AT 电脑的始祖。该电脑于 1981 年 8 月发布,配备 Intel 8088(16 位)和 16KiB RAM(最低内存型号), BIOS 和 Microsoft BASIC 存储在 ROM 中。

当机器上电时,BIOS 执行 "POST"(开机自检)程序,然后执行中断调用 INT 19h。在中断 INT 19h 处理程序中,BIOS 检查 PC 是否有软盘/硬盘/固定软盘。如果有任何可用的磁盘,BIOS 将磁盘的第一个扇区(512B)加载到 0x7C00 中,并从这里开始启动操作系统。

现在,你明白为什么在 x86 文档中找不到这个神奇数字了吧。这个幻数属于 BIOS 规范。

0x02:0x7C00的由来

图片

围绕 IBM DOS、微软和SCP 86-DOS 这些科技公司,都是很有趣的故事。请参阅:MS-DOS 简史(http://www.patersontech.com/dos/Byte/History.html)。

IBM DOS 1.0 操作系统是参考的 SCP 的"86-DOS"(1980 年)。86-DOS(早期称为QDOS)是8086/8088 cpu 的 CP/M 兼容操作系统。SCP出售两块 S-100总线板,一块是8086 CPU板,另外一块是"CPU Monitor" rom板。"CPU Monitor"程序提供了引导加载程序和调试器,这个"CPU Monitor"引导加载程序将 MBR 加载到"0x200",而不是"0x7C00"。 

1981 年,IBM DOS 是适用于 8086/8088 的下一代 CP/M 操作系统,"0x7C00 首次出现在 IBM PC 5150 ROM BIOS 中"。在这之前,SCP 的 CPU Monitor 引导加载程序加载到 0x200,而不是 0x7C00。

0x03:为什么早期的 CPU Monitor 的引导加载程序将 MBR 写入"0x200"?

关于"0x200"有三个原因:

  • (1) 8086 中断向量使用 0x0 - 0x3FF

  • (2) 86-DOS 是从0x400加载的

  • (3) 86-DOS 不使用 0x200 - 0x3FF 之间的中断向量

这些原因意味着 0x200 - 0x3FF 保留空闲,并且86-DOS 或用户应用程序想要加载到位置,不能妨碍操作系统,因此 Tim Paterson(86-DOS 开发人员)选择 0x200 作为 MBR 加载地址。

0x04:"0x7C00" 又是谁决定的?

图片

答案是:IBM PC 5150 BIOS 开发团队。

"0x7C00 "是由 IBM PC 5150 BIOS 开发团队(David Bradley 博士)决定的。如上所述,这个神奇的数字诞生于 1981 年,"IBM PC/AT Compat" PC/BIOS 供应商为了 BIOS 和操作系统的向后兼容性,从没改变过这个值。

不是英特尔(8086/8088 供应商)或微软(操作系统供应商)决定的。

0x05:"0x7C00 = 32KiB - 1024B"是什么意思?难道只是巧合吗?

答案是:受操作系统要求和 CPU 内存布局影响。

IBM PC 5150 最小内存型号只有 16KB 内存。因此,你可能会有这样的疑问:最小内存型号(16KiB)可以从软盘加载操作系统吗?BIOS 将 MBR 加载到 32KiB - 1024B 地址处,但物理内存显然不够。

不,这种情况不在考虑范围之内。IBM PC 5150 ROM BIOS 开发团队成员之一 David Bradley 博士说:"DOS1.0至少需要32KB,所以我们并不考虑在16KB内启动。"

(注:DOS 1.0 最低要求 16KB 还是 32KB ?我找不到正确的答案。但至少在 1981 年的早期 BIOS 开发中,他们认为 32KB 是 DOS 的最低要求)。

BIOS 开发团队决定使用 0x7C00 是因为:

  • (1) 他们希望在 32KiB 内为操作系统留下尽可能多的空间来加载自身。

  • (2) 8086/8088使用0x0 - 0x3FF作为中断向量,BIOS数据区在其之后。

  • (3) 引导扇区为 512 字节,引导程序的堆栈/数据区域需要更多 512 字节。

  • (4) 因此,选择了 0x7C00,即 32KiB 的最后 1024B。

一旦操作系统加载并启动,引导扇区在电源重置之前不会被使用。因此,操作系统和应用程序可以自由使用 32KiB 的最后 1024B。

其内存布局如下所示:

+--------------------- 0x0| Interrupts vectors+--------------------- 0x400| BIOS data area+--------------------- 0x5??| OS load area+--------------------- 0x7C00| Boot sector+--------------------- 0x7E00| Boot data/stack+--------------------- 0x7FFF| (not used)+--------------------- (...)

参考:

https://www.glamenv-septzen.net/en/view/6

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1243863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

思维模型 等待效应

本系列文章 主要是 分享 思维模型 ,涉及各个领域,重在提升认知。越是等待,越是焦虑。 1 等待效应的应用 1.1 等待效应在管理中的应用 西南航空公司是一家美国的航空公司,它在管理中运用了等待效应。西南航空公司鼓励员工在工作中…

XUbuntu22.04之解决gpg keyserver receive failed no data(一百九十三)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

Axios 通过a标签下载文件 跨域下载

<!-- a标签占位 --><a ref"down" ></a>getTest() {this.$axios.request({url: https://cnv13.55.la/download?file_key3695fa9461a0ae59cf3148581e4fe339&handle_typeexcel2pdf,method: get,responseType: blob, // 切记类型 blob}).then(re…

【Java并发】聊聊线程池原理以及实际应用

线程其实对于操作系统来说是宝贵的资源&#xff0c;java层面的线程其实本质还是依赖于操作系统内核的线程进行处理任务&#xff0c;如果频繁的创建、使用、销毁线程&#xff0c;那么势必会非常浪费资源以及性能不高&#xff0c;所以池化技术&#xff08;数据库连接池、线程池&a…

3D火山图绘制教程

一边学习&#xff0c;一边总结&#xff0c;一边分享&#xff01; 本期教程内容 **注&#xff1a;**本教程详细内容 Volcano3D绘制3D火山图 一、前言 火山图是做差异分析中最常用到的图形&#xff0c;在前面的推文中&#xff0c;我们也推出了好几期火山图的绘制教程&#xff0…

Linux下载工具XDM下载安装与使用

Windows上IDM多线程下载非常强大&#xff0c;即能捕捉页面上的视频、图片、音频&#xff0c;又能作为浏览器下载器使用&#xff0c;但是IDM无法在Linux下使用&#xff0c;除非使用wine。不过我们可以在Linux中用XDM(Xtreme Download Manager)代替IDM。 1、XDM下载 Xtreme Dow…

从Discord的做法中学习 — 使用Golang进行请求合并

正如你可能之前看到的&#xff0c;Discord去年发布了一篇有价值的文章&#xff0c;讨论了他们成功存储了数万亿条消息。虽然有很多关于这篇文章的YouTube视频和文章&#xff0c;但我认为这篇文章中一个名为“数据服务为数据服务”的部分没有得到足够的关注。在这篇文章中&#…

如何在AD的PCB板做矩形槽孔以及如何倒圆弧角

Altium Designer 22下载安装教程-CSDN博客 如何在AD上创建完整的项目-CSDN博客 开始前&#xff0c;请先安装后AD&#xff0c;并创建好项目。 目录 1. 如何在AD的PCB板做矩形槽孔 2. 如何在AD的PCB板倒圆弧角 1. 如何在AD的PCB板做矩形槽孔 首先&#xff0c;我们进入上面创…

普通话考试相关(一文读懂)

文章目录&#xff1a; 一&#xff1a;相关常识 1.考试报名时间 2.报名地方 费用 证件 3.考试流程 4.普通话等级说明 二&#xff1a;题型 三&#xff1a;技巧 1.前三题 2.命题说话 四&#xff1a;普通话考试题库 1.在线题库 2.下载题库 一&#xff1a;相关常识 …

【工具栏】热部署不生效

目录 配置热部署&#xff1a; 解决热部署不生效&#xff1a; 首先检查&#xff1a; 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 第四步&#xff1a; 配置热部署&#xff1a; https://blog.csdn.net/m0_67930426/article/details/133690559 解决热部署不…

OmniGraffle

安装 在mac上安装OmniGraffle&#xff0c;找一个正版或者啥的都行&#xff0c;安装好后&#xff0c;可以直接在网上找一个激活码&#xff0c;然后找到软件的许可证&#xff0c;进行添加即可。 使用 新建空白页 然后图形啥的看一眼工具栏就知道了&#xff0c;颜色形状还是挺…

ELK企业级日志分析平台——ES集群监控

启用xpack认证 官网&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/7.6/configuring-tls.html#node-certificates 在elk1上生成证书 [rootelk1 ~]# cd /usr/share/elasticsearch/[rootelk1 elasticsearch]# bin/elasticsearch-certutil ca[rootelk1 ela…

九、ffmpeg命令转封装

开了几天小差&#xff0c;今天继续学习ffmpeg。 准备测试使用的视频&#xff0c;并查看其信息 # 查看视频信息。使用Mediainfo也可以 ffprobe test.mp4 视频格式的信息如下。 保持编码格式&#xff1a;ffmpeg -i test.mp4 -vcodec copy -acodec copy test_copy.tsffmpeg -i…

读书笔记——《黑猩猩的政治》

前言 弗朗斯德瓦尔&#xff08;Frans de Waal)的代表作《黑猩猩政治》成书于1982年&#xff0c;是它的首部书籍作品&#xff0c;也是美国国会新任议员的被推荐读物。之前看的他另一部作品的《万智有灵》是2016年的作品&#xff0c;时间跨度居然这么大。《万智有灵》介绍了许多…

6.2.SDP协议

那今天呢&#xff1f;我们来介绍一下sdp协议&#xff0c;那实际上呢&#xff1f;sdp协议非常的简单。我们如果拿到一个stp的文档去看的话&#xff0c;那你要分阅里边的所有的内容会觉得很枯燥&#xff0c;但实际上呢&#xff0c;如果我们按照这张图所展示的结构去看stp的话。你…

消息中间件——RabbitMQ(四)命令行与管控台的基本操作!

前言 在前面的文章中我们介绍过RabbitMQ的搭建&#xff1a;RabbitMQ的安装过以及各大主流消息中间件的对比&#xff1a;&#xff0c;本章就主要来介绍下我们之前安装的管控台是如何使用以及如何通过命令行进行操作。 1. 命令行操作 1.1 基础服务的命令操作 rabbitmqctl sto…

Linux快速显示文件行号并跳转

有时候&#xff0c;想要在线上直接查看日志文件&#xff0c;搜索到关键词后&#xff0c;如果一直按n找下去&#xff0c;很麻烦&#xff0c;我们可以先显示出行号&#xff0c;确定好我们要找内容对应的行号&#xff0c;直接跳转过去。 esc进入命令模式&#xff0c;输入:set nu命…

【神印王座】龙皓晨美妆胜过月夜,魔神皇识破无视,撮合月夜阿宝

Hello,小伙伴们&#xff0c;我是拾荒君。 《神印王座》国漫第82集已更新&#xff0c;拾荒君和大多数人一样&#xff0c;更新就去看了。魔神皇枫秀&#xff0c;威严凛然&#xff0c;突然空降月魔宫&#xff0c;整个宫殿都在这股无与伦比的强大气息中颤栗。为了顺利躲避魔神皇的…

筑牢思想防线——建行驻江门市分行纪检组举办2023年清廉合规大讲堂

为推动廉洁教育打通“最后一公里”&#xff0c;近日&#xff0c;建行驻江门市分行纪检组举办江门市分行2023年清廉合规大讲堂。 本次大讲堂检察官结合一线办案经历&#xff0c;从防范化解金融风险、预防金融从业人员犯罪等方面对全辖员工进行了深入浅出地的讲解&#xff0c;引导…

Volcano3D绘制3D火山图

一边学习&#xff0c;一边总结&#xff0c;一边分享&#xff01; 本期教程内容 **注&#xff1a;**本教程详细内容 Volcano3D绘制3D火山图 一、前言 火山图是做差异分析中最常用到的图形&#xff0c;在前面的推文中&#xff0c;我们也推出了好几期火山图的绘制教程&#xff0…