《Linux0.11源码解读》理解(一) 从开机到加载bootsec

news/2024/11/26 7:17:47/

计算机启动时, 内存(RAM)没有任何东西, 自然也无法跑操作系统. 但是可以执行固化在ROM里面的BIOS程序. 在按下电源键的一刻. CPU的cs和ip寄存器硬件被设置为0xf000和0xfff0, 于是cs:ip也就指向0xffff0这个地址, 而这个地址正是指向了ROM的BIOS范围(这里是0xfe000~0xfffff, 20根地址线全部范围0x0000~0xfffff, 这个范围包括RAM、ROM、其他map的外设). 

于是cpu开始执行BIOS程序. BIOS从第一条指令开始的首要工作是,在内存最开始的位置用1KB的内存空间(0x00000~0x003FF)构建中断向量表, 在紧挨着它的位置用256字节的内存空间构建BIOS数据区(0x00400~0x004FF), 并在大约57KB以后的位置(0x0E05B~0x0FFFE)加载了8KB左右与中断向量表相应的若干中断服务程序.

  

中断也是程序,必须由cpu执行. 也就是说cpu的寄存器cs:ip须被设置以找到相应程序的地址. 中断分为BIOS中断和Linux中断. 后者先暂且不表, 前者是存在于实模式下的程序,它的中断调用都是建立在中断向量表基础上的。而BIOS中断都是通过软中断指令INT xxx来调用的. 中断向量表中的每个向量大小是4byte(2个byte分别cs:ip值), 有256项(共占据1KB). 

然后BIOS接着会进行一些硬件自检操作, 没问题后重头戏来了: BIOS会发起一个0x19的软中断. 刚才说了, BIOS已经把中断向量表配置好了, CPU根据中断号0x19去起始于RAM 0地址的向量表找到相应的向量, 该向量指向中断服务程序的地址(该地址也指向BIOS),  去执行0x19程序. 其功能是把启动扇区(0盘面0磁道1扇区)的所在硬盘的512kb复制到内存的0x7c00位置. 这个512kb就是对应操作系统最初始的代码, 名为bootsec(引导程序)第一部分内核代码被编译成2进制放在硬盘的启动扇区里. 此外此程序还会设置cs:ip为0x7c00:0x0000让CPU去执行bootsec. 

接着开始执行真正属于Linux的代码了, 虽然还是用汇编写的bootsec.

参考:

你管这破玩意叫操作系统源码 | 第一回 最开始的两行代码
《操作系统真象还原》——0.20 BIOS中断、DOS中断、Linux中断的区别-阿里云开发者社区
CPU的中断那些事儿


http://www.ppmy.cn/news/49055.html

相关文章

【配电网重构】【SOE】随机配电网重构中的开关开换方法研究(Matlab代码实现)

💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥 🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 …

Ubuntu 常用命令50个含示例

以下是 Ubuntu 常用命令,按照最容易忘记的命令优先,前 50 个: sudo:用于在 Ubuntu 中以管理员权限执行命令的命令。例如:以管理员权限编辑文件 /etc/hosts:sudo nano /etc/hosts。 apt-get:用于…

大数据技术之集群数据迁移

在大数据集群数据迁移的项目中涉及到很多技术细节,本博客记录了迁移的大致的操作步骤。 迁移借用Hadoop自带的插件:distcp。 一、Hadoop集群数据迁移 **DistCp(分布式拷贝)**是用于大规模集群内部和集群之间拷贝的工具。它使用M…

一篇文章快速入门Spring AMQP

文章目录 一、AMQP二、Spring AMQP2.1 介绍2.2 SpringAMQP发送消息2.3 SpringAMQP接收消息2.4 WorkQueue模型2.4.1 概念2.4.2 示例 2.5 发布订阅模型2.5.1 介绍2.5.2 Fanout Exchange2.5.3 Direct Exchange2.5.4 Topic Exchange 2.6 消息转换器2.6.1 介绍2.6.2 切换消息转换器 …

【vue2】近期bug收集与整理02

⭐【前言】 在使用vue2构建页面时候,博主遇到的问题难点以及最终的解决方案。 🥳博主:初映CY的前说(前端领域) 🤘本文核心:博主遇到的问题与解决思路 目录 ⭐数据枚举文件的使用⭐elementUI中分页组件使用的注意事项⭐…

4、Symbol-ES6新基础类型

symbol是 ES6 新增的一种基本数据类型,它和 number、string、boolean、undefined 和 null 是同类型的,object 是引用类型。它用来表示独一无二的值,通过 Symbol 函数生成。 本小节代码都是纯JavaScript代码,建议在非TypeScript环境…

让HR眼前一亮:30个APP项目软件测试经验,点燃你的简历

在求职过程中,我们都希望自己的简历能够吸引面试官的眼球,从而获得更多的面试机会。作为一名软件测试人员,丰富的实战经验是让自己脱颖而出的关键之一。 在我多年从事APP项目软件测试的工作中,我积累了大量的实践经验&#xff0c…

2023年3月 青少年软件编程(C 语言) 等级考试试卷(一级)

2023. 03 青少年软件编程(C 语言) 等级考试试卷(一级) 1.字符长方形 给定一个字符, 用它构造一个长为 4 个字符, 宽为 3 个字符的长方形, 可以参考样例输出。 时间限制: 1000 内存限…