操作系统实现(一):概述及前期准备
概述:
首先对本系列内容将要实现的操作系统做一个简要概述:
本系列基于x86-64架构实现一个64位的类Linux操作系统。
本操作系统将分为引导层、内核层与应用层三大部分,并逐一对它们进行实现。
引导层。引导启动程序(bootloader)将使用Intel风格(基于x86-64架构)的汇编语言编写。实现引导扇区引导启动、文件系统识别、系统内核加载、内存容量检测、显示模式的检测与设置、处理器运行模式切换、页表配置等功能,进而完成系统内核运行前的准备工作。
内核层。内核层部分是操作系统的主要部分,该部分在开头将使用AT&T风格的汇编语言完成内核加载的剩余准备工作,随后即使用传统的系统编程语言C来编写内核的绝大部分。内核层将实现内存管理模块、中断/异常处理模块、进程管理模块、多核通信模块、文件系统模块、外部设备驱动等一系列功能模块,成为一个可以正常工作且功能相对完 整的系统内核。同时,本系统还将遵循POSIX规范标准,为应用层提供通用的编程接口(系统调用API)。
应用层。应用层部分将实现本系统的shell终端和一些其他基础命令。
环境:
本系列要求对以下环境、工具及编程语言有所了解:
本系统开发过程将在WSL中的Linux环境(Ubuntu 20.04)下进行。
模拟器使用Bochs虚拟机进行开发调试及前期功能验证,后期将在实机进行演示。
本系统BootLoader部分将采用Intel格式的汇编语言编写,使用NASM汇编器进行汇编;操作系统的内核与应用程序将采用AT&T格式的汇编语言编写,使用GNU的AS/GAS汇编器进行汇编; 而内核和应用程序只有一小部分关键代码必须使用汇编语言编写,绝大部分代码会使用C 语言编写,并使用GCC进行编译。同时使用两种汇编语言书写格式的原因可以概括为以下两点:
由于BootLoader需要全部使用汇编语言编写,代码量大,采用Intel格式的汇编语言可以保证 既书写简单又便于阅读。
为GNU C搭配上AT&T格式的GNU汇编语言,可使两者更加自然流畅地相互调用,进而提高两者的互相兼容性。
同时在对比编写中增强对两种汇编语言风格的理解。
代码:
完整代码可在github上查看
参考:
书籍:
- 一个64位操作系统的设计与实现,作者:田宇
- 30天自制操作系统,作者:川合秀实
- OrangeS一个操作系统的实现,作者:于渊
