从零开发操作系统-关于 0x7c00 地址

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益:

  1. 了解大厂经验
  2. 拥有和大厂相匹配的技术等

希望看什么,评论或者私信告诉我!

一、背景

其实也没有啥背景。
最主要的原因就像 《30天自制操作系统》一书作者说的那样,写一个操作系统,仅仅想想就是一件特别有趣的事情呢。一两年前曾经入手开始写过,但慢慢的就不了了之了。现在又有这个想法了,准备一直干下去,最终写一个操作系统出来,算是程序员生涯的一份礼物。

其次的原因,是因为我也认为未来初级程序员的岗位会越来越少,借助 LLM 人人都是初级程序员可能会变成现实。这个时候专业性和底层就会越来越重要

二、 0x7c00

从零开发操作系统-第二天汇编语言、BIOS以及Makefile介绍 这篇文章中,我们提到了 0x7c00 这个地址中说了,这是IMB大叔们规定的。但我依然有很多问题,因为CPU要想从这个执行,PC寄存器必须设置为 0x7c00 才可以,但我们上篇文章从未设置过 PC,满满的大问号,这也带来了一系列的问题。

要想解决,就不得不从点击开机键说起。当我们点击电脑开机键的时候

在计算机启动过程中,CPU 和 BIOS 的启动顺序是这样的:

  1. 电源启动

    • 当你按下电源按钮时,电源供应器开始向主板和 CPU 提供电压。这个电源的引入触发了CPU的硬件复位(reset)。
  2. CPU 初始化

    • CPU 在接收到电源后会自动初始化。这个初始化过程是硬件级别的,由 CPU 内部的电路和微代码控制。CPU 会重置其内部状态,它会自动将内部状态重置到一个预定义的初始状态,包括寄存器和指令指针。例如:将程序计数器(PC)设置到一个特定的启动地址。

    • 在x86架构中,这个启动地址被硬编码为0xFFFFFFF0(对于现代处理器)或0xFFFF0(对于旧的16位x86系统)。这个地址是设计时就确定的,是由硬件电路和微处理器设计决定的,这个初始地址是CPU的一个硬编码的启动向量,用于确保在系统启动时能够找到并执行BIOS(或UEFI)固件。

    • 在早期的 x86 系统中,物理内存地址空间是 1MB(0x100000),而 BIOS 通常被映射在这个地址空间的高端,以避免与操作系统使用的内存冲突。

  3. BIOS 执行

    • CPU 初始化完成后,会从预设的固定内存地址(通常是物理地址 0xFFFFFFF0 或 0xFFFF0)开始执行代码。这个地址在 x86 架构中是 BIOS 的 ROM 或 Flash 存储器的映射地址
    • 这种映射地址是通过地址解码逻辑和内存映射硬件实现的,这些硬件在主板设计时就已经确定
    • BIOS 存储在主板上的非易失性存储器中,它包含了一系列的指令和程序,用于在系统启动时进行硬件检测和初始化。
  4. BIOS 检测硬件

    • BIOS 开始执行后,会进行一系列的硬件检测,包括检测 CPU 类型、内存大小、硬盘、显卡等。
    • BIOS 会根据检测到的硬件配置来初始化硬件设备,并设置相应的配置参数。
  5. 引导过程

    • 在硬件检测和初始化完成后,BIOS 会查找可引导设备(如硬盘、软盘、USB驱动器等)。
    • BIOS 从可引导设备的第一个扇区(通常是512字节)读取数据,并将其加载到内存中的0x7C00地址。
  6. 跳转到引导扇区

    • BIOS 会设置一个新的 CS:IP 组合,通常是将 CS 设置为 0xF000,IP 设置为 0xFFF0。这样,CS:IP 的实际值就是 0xF000:FFF0,转换为物理地址是 0xFFFFFFF0。
    • 引导扇区的前几个字节通常包含一个跳转指令(如 JMP 0x7C00),这个指令会将 CPU 的 CS:IP 跳转到 0x7C00 地址。
    • 在 x86 架构的 CPU 中,并没有一个名为 "PC" 的寄存器。在 x86 架构中,程序计数器(Program Counter)的功能是由 CS(代码段寄存器)和 IP(指令指针寄存器)共同实现的。这种设计是由于 x86 架构使用了分段内存模型。
  7. 执行引导扇区代码

    • 从 0x7C00 地址开始,引导扇区中的代码开始执行。这个代码通常会初始化一些基本的硬件设置,然后加载操作系统或其他引导加载程序。

三、进一步解释

从零开发操作系统-第二天汇编语言、BIOS以及Makefile介绍 中的汇编也用到了 jump 命令

        ORG     0x7c00          
        JMP     entry

刚开始,我一直不明白,为什么《30天自制操作系统》一书作者说 entry 的地址就是 0x7c00,现在明白了,因为程序的装载地址为 0x7c00,而 entry 又是的程序入口点,所以它的地址为 0x7c00。这个 JMP 也设置了 CPU 的PC寄存器地址为 0x7C00,后续 CPU 会从这里开始执行。

四、总结

文章深入探讨了计算机启动过程中CPU和BIOS的相互作用,以及引导扇区在启动过程中的关键作用。作者通过解释硬件复位、CPU初始化、BIOS执行、硬件检测、引导过程以及执行引导扇区代码等步骤,为读者提供了对操作系统启动过程以及 0x7c00 的全面理解。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容