***本人该系列文章为bilibili李述铜老师手写操作系统课程笔记,如有疑问欢迎评论沟通***
一、计算机启动顺序
***当计算机上电启动时会首先进入16位的实模式,然后执行BIOS程序,接着执行引导程序,最后才执行操作系统程序。其中:
16位的实模式的具体概念感兴趣可以自行百度(个人感觉不是很重要)
BIOS程序从字义上称为“基本输出输入系统”,它是一组固化到计算机内主板上一个ROM芯片上的程序,保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。
此处引用李述铜老师的课程截图:
二、接管计算机运行权
在运行引导代码阶段会将磁盘的第0个扇区(每个扇区大小为512字节)加载到0x7c00处开始运行利用这个特性就可以进行操作接管计算机运行权,即通过更改第0个扇区的数据即可接管计算机的运行权。(其中引导标识是扇区的最后两个字节,通过引导标识即可表明该程序为启动程序)
其中BIOS引导代码阶段会执行两个操作:
1. 检查引导标示
引导标示为:
1FE:0x55
1FF:0xaa
2. 读取加载
此处引用我本人的笔记截图(字迹略丑敬请谅解):
三、工程结构及启动流程
李述铜老师的手写操作系统使用的GCC工具链对C文件及汇编文件进行编译和汇编并且使用CMake工具对整个工程进行编译和管理,因此工程结构中存在CMake配置文件。
整个工程的基础框架如图所示:
其中:
.vscode文件中保存着整个工程的配置的目录
.vscode
|--launch.json-----保存着一些配置,调试时,vscode会从中读取一些参数。如:
"program"表示在调试时会加载改路径指示下的文件,
"MIDebuggerPath"表示使用什么启动调试
"miDebuggerServerAddress"表示在什么端口号启动调试
|--settings.json-----了解或不了解都没关系,给vscode的一些设置信息
|--tasks.json-----给vscode的一些应用,当点击vscode终端->运行任务所显示
的任务就是通过这个文件设置的
script 下存的是一些shell脚本文件
source 文件夹是按目录来组织存储工程,每一个子目录都是一个工程,外部的CMakeLists.txt就是整个大工程的配置文件,每个子目录下的CMakeLists.txt文件就是用来配置子工程的
此处引用我个人笔记截图,其中source文件为最终手写完成后的操作系统程序结构:
项目gitee地址:https://gitee.com/jim-jenny/x86-32OS