操作系统设计与实现:基于LoongArch架构
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

前言

编写初衷

早在2019年,我们就计划撰写一本用于操作系统实验课程的教材。当时的思路是对基于x86架构的Linux 0.11内核进行深入分析后,从零开始一步一步实现一个用于教学的Linux 0.11操作系统内核。但是,按照这个思路,要分析1万多行源代码,所以进展缓慢。幸运的是,龙芯中科基于二十年的CPU研发经验和生态建设积累,于2020年推出了LoongArch架构。我们实验室于2021年和龙芯中科合作了教育部产学合作项目——“基于LoongArch架构的教学版操作系统内核”。2022年,作为该项目的重要成果,MaQueOS诞生了。

MaQueOS简介

MaQueOS是一个开源的基于LoongArch架构的教学版操作系统[1]。作为一个教学版操作系统,MaQueOS的代码虽然只有1000多行,但是它实现了操作系统核心的进程管理、内存管理、文件系统、中断管理和外设驱动等功能子系统,并为应用程序提供了16个系统调用接口。

MaQueOS由Linux 0.11内核深度裁剪而来,并完成了从x86架构到LoongArch架构的移植。其中,对所有外设驱动程序(硬盘、键盘和显示器)进行了重写。除此之外,不同于Linux 0.11支持MINIX文件系统、a.out可执行文件和基于管道操作的进程间通信机制,MaQueOS支持自定义的xtfs格式的文件系统、xt格式的可执行文件和基于共享内存的进程间通信机制。

其中,xtfs文件系统是一个极小型的文件系统,仅用100多行代码就实现了文件的创建/删除、打开/关闭和读/写操作,以及文件系统挂载功能。xt可执行文件包括一个大小为512字节的可执行文件头和代码数据被链接在一起的二进制可执行代码,因此对xt可执行文件的加载过程相当简洁。基于共享内存的进程间通信机制的实现也比基于管道操作的进程间通信机制的实现更简单、高效。

目标读者

本书详细地介绍了MaQueOS的实现过程,适合作为高校计算机及相关专业操作系统原理课程的补充读物和实验课程的教材。除此之外,本书也可以作为学习Linux内核原理的读者的入门参考书。

各章内容简介

本书以MaQueOS的实现过程为主线,介绍了如何从零开始实现一个操作系统。本书最大的特点是采用循序渐进的方式组织内容,每章的内容都是在上一章内容的基础上实现的。通过第1~12章内容的迭代,读者可以对操作系统的实现过程有更加深入的理解。

本书大部分章都有一个(或者多个)实例,用于验证该章实现的功能。第1~12章的最后都安排了数量不等的任务,读者可以通过完成这些任务,更好地掌握各章的内容。本书各章的主要内容如下:

• 第0章:简述MaQueOS支持的功能,以及验证这些功能的测试应用程序。

• 第1章:介绍显示器的组成以及显示原理,在此基础上详细地描述MaQueOS的显示器驱动程序的实现细节,包括字符的显示和擦除操作、回车换行的处理、卷屏的操作和删除字符的过程以及panic函数。

• 第2章:介绍LoongArch架构提供的用于产生时钟中断的恒定频率定时器的使用原理,以及LoongArch架构支持的13个中断类型。然后,介绍时钟中断的初始化过程、开中断的过程,并详细地描述产生时钟中断后MaQueOS处理时钟中断的过程。

• 第3章:介绍MaQueOS的物理内存管理机制,描述MaQueOS在内核态下使用的虚拟地址到物理地址的地址转换模式,并重点介绍3A处理器和7A桥片中与中断有关的控制器的功能,以及键盘驱动程序的实现。

• 第4章:介绍MaQueOS使用的虚拟内存管理机制,重点描述MaQueOS使用的基于二级页表结构的页表映射;描述MaQueOS在用户态下使用的虚拟地址到物理地址的地址转换模式,以及如何在二级页表结构中建立虚拟页和物理页之间的映射关系;描述用于进程管理的数据结构(进程描述符)、进程0的创建过程,以及从内核态进入用户态运行进程0的可执行代码的过程、TLB重填例外的处理过程和时钟中断处理过程。

• 第5章:介绍MaQueOS为应用程序提供服务的系统调用的处理过程,主要包括在用户态下调用系统调用、从用户态进入内核态后保存中断现场、系统调用的处理过程和系统调用的返回等。最后,介绍在CPU上运行多个进程时,MaQueOS引入的基于时间片的进程间切换机制。

• 第6章:讨论MaQueOS的进程挂起、唤醒与终止机制,重点描述子进程如何向父进程发送终止信号、父进程如何接收并处理终止信号以及最终父进程如何释放子进程占用的系统资源。

• 第7章:介绍SATA硬盘的接口标准AHCI,并基于AHCI接口标准详细描述SATA硬盘的初始化和读写过程。在读写硬盘过程中涉及的硬盘中断处理过程类似于第3章中介绍的键盘中断处理过程。

• 第8章:介绍MaQueOS目前唯一支持的xtfs文件系统,包括xtfs文件系统的格式和涉及的数据结构;详细地描述如何将一个硬盘镜像文件格式化为xtfs文件系统,以及如何将一个普通文件复制到xtfs文件系统。

• 第9章:介绍MaQueOS如何挂载第8章中介绍的xtfs文件系统,以及MaQueOS目前唯一支持的xt可执行文件格式;描述专门为MaQueOS开发的用于和用户进行交互的shell程序xtsh的实现;着重介绍MaQueOS加载运行xt可执行文件的过程。

• 第10章:介绍页无效例外和页修改例外的触发条件,以及可能发生页无效例外和页修改例外的场景;描述在前几章内容的基础上实现的MaQueOS对页无效例外和页修改例外的支持;介绍页无效例外和页修改例外在LoongArch架构中的触发条件,以及发生页无效例外和页修改例外后的处理过程。

• 第11章:介绍MaQueOS支持的基于共享内存的进程间通信机制,以及共享内存机制在MaQueOS中的具体实现;说明由于共享内存机制的引入,对复制和释放页表操作的修改;详细介绍MaQueOS支持的软件定时器的实现原理。

• 第12章:介绍xtfs文件系统中基本文件操作的具体实现,包括文件的创建、删除、打开、关闭和读写等。

• 附录:附录A介绍如何搭建实验环境;附录B介绍在MaQueOS中使用的LoongArch汇编指令;附录C对MaQueOS涉及的LoongArch控制状态寄存器进行说明;附录D介绍MaQueOS内核代码使用的库函数,这些库函数都位于include目录下的xtos.h头文件中;附录E描述飞机大战程序的概要设计。

致谢

感谢参与“基于LoongArch架构的教学版操作系统内核”项目的兰州大学信息科学与工程学院的研究生和本科生。他们是:

• 前期在分析、裁剪Linux 0.11内核源码过程中,参与文件系统部分工作的钱浩莱、李城炜、叶楚玮同学,参与内存管理部分工作的邵岚晔、陈之帆、张昱宽同学,参与引导系统部分工作的鲁叶木、孔俊同学,参与进程管理部分工作的陶蒙媛、王天同、冯柳源同学,参与中断系统部分工作的孙川卜同学,参与字符设备部分工作的徐楚佳、张浩文同学,参与块设备部分工作的张芝林、张钧同学。

• 后期在从x86架构移植到LoongArch架构过程中,参与移植工作的邵若忱、蒋远博、吕锐、王天一、叶清扬、聂嘉一同学。

• 在本书撰写过程中,参与资料准备和部分编写工作的程延博、张斯奕、王鹤阳、杨柳、吴鸿杰、李丰耘同学,以及参与校稿的安卓君同学。

最后特别感谢机械工业出版社的各位编辑为本书出版提供的专业意见和建议。

联系我们

如果您发现书中有任何问题,或者对本书有任何意见、建议,请通过邮箱dslab@lzu.edu.cn与作者联系。

作者

2024年1月


[1]MaQueOS的开源地址为https://gitee.com/dslab-lzu/maqueos。