新書推薦:
《
民法典1000问
》
售價:NT$
454.0
《
国术健身 易筋经
》
售價:NT$
152.0
《
古罗马800年
》
售價:NT$
857.0
《
权力与相互依赖(第四版)(中译本修订版)
》
售價:NT$
658.0
《
写出心灵深处的故事:踏上疗愈之旅(修订版)(创意写作书系)
》
售價:NT$
301.0
《
控制权视角下的家族企业管理与传承
》
售價:NT$
398.0
《
冯友兰和青年谈心系列
》
售價:NT$
762.0
《
利他主义的生意:偏爱“非理性”的市场(英国《金融时报》推荐读物!)
》
售價:NT$
352.0
|
編輯推薦: |
亲自动手设计和实现一个具备基本功能的操作系统内核是学习操作系统的有效方式。本书以作者团队开发的基于龙芯指令集的MaQueOS为主线,详细介绍了操作系统的进程管理、内存管理、文件系统、中断管理和外设驱动等功能的实现方法。本书采用循序渐进的写作方式,每一章的内容均是在前一章内容基础上对功能进行迭代而实现的,最终形成一个完整的操作系统。书中提供了各个关键函数、功能的源代码,并附有详细的说明和注释,读者可通过研读代码理解操作系统不同功能的实现方法以及各个功能间如何实现协同工作。
|
內容簡介: |
本书以基于LoongArch架构的教学版操作系统MaQueOS为主线,详细介绍了操作系统内核的设计和实现方法。在介绍MaQueOS的功能的基础上,依次介绍了显示器驱动、时钟中断、键盘驱动、进程0和进程1的创建与运行、进程的挂起与唤醒、硬盘驱动、xtfs文件系统、进程1加载可执行文件、页例外、进程间通信和文件操作的实现方法。本书结构清晰、循序渐进,既突出操作系统的基本原理,又强调动手实现,适合作为高校计算机类专业操作系统相关的教材,也适合作为技术人员的参考书。
|
關於作者: |
周庆国,1973年出生,福建人,理学博士,教授,博士生导师,兰州谷歌开发者社区(Lanzhou GDG)负责人,现任兰州大学分布式与嵌入式系统实验室主任、开源软件与实时系统工程研究中心副主任。已在国内外学术期刊上发表论文 51 篇(SCI 7 篇,EI 24 篇)。
|
目錄:
|
目 录
前言
第0章 绪论1
0.1 MaQueOS的功能1
0.1.1 进程管理2
0.1.2 内存管理4
0.1.3 文件系统4
0.1.4 外设驱动5
0.1.5 中断管理5
0.2 系统功能测试5
第1章 显示器驱动7
1.1 显示器的显示原理7
1.1.1 显示模式7
1.1.2 字符显示7
1.2 printk函数10
1.2.1 显示字符串10
1.2.2 字符擦除12
1.2.3 回车换行13
1.2.4 卷屏13
1.2.5 删除字符14
1.2.6 panic函数15
1.3 本章任务15
第2章 时钟中断16
2.1 时钟中断初始化16
2.1.1 恒定频率定时器16
2.1.2 初始化17
2.1.3 开中断18
2.2 时钟中断的处理过程18
2.2.1 中断硬件18
2.2.2 中断现场保存与恢复19
2.2.3 中断处理21
2.2.4 中断返回21
2.3 本章任务22
第3章 键盘驱动23
3.1 物理内存管理23
3.1.1 初始化24
3.1.2 申请25
3.1.3 释放26
3.2 初始化键盘中断27
3.3 键盘中断的处理过程29
3.4 本章任务32
第4章 进程0的创建与运行34
4.1 虚拟内存管理34
4.1.1 初始化35
4.1.2 建立页表映射37
4.2 创建进程038
4.3 进程0的运行41
4.3.1 进程0进入用户态41
4.3.2 TLB重填例外的处理过程42
4.4 时钟中断的处理过程44
4.4.1 中断响应及处理44
4.4.2 中断返回46
4.5 本章任务46
第5章 进程1的创建与运行48
5.1 创建进程148
5.1.1 系统调用48
5.1.2 fork系统调用51
5.1.3 系统调用返回54
5.2 进程切换55
5.2.1 时钟中断55
5.2.2 从进程0切换到进程156
5.2.3 进程1的运行59
5.3 本章任务59
第6章 进程的挂起、唤醒与终止60
6.1 不可中断挂起与唤醒60
6.1.1 不可中断挂起62
6.1.2 唤醒不可中断挂起进程64
6.2 可中断挂起与唤醒65
6.3 进程终止66
6.3.1 exit系统调用66
6.3.2 释放进程资源67
6.4 本章实例69
6.5 本章任务72
第7章 硬盘驱动73
7.1 初始化硬盘73
7.2 读写硬盘77
7.2.1 发送读写命令77
7.2.2 硬盘中断处理78
7.3 硬盘读写实例80
7.3.1 创建硬盘镜像文件81
7.3.2 读硬盘82
7.3.3 写硬盘85
7.4 本章任务86
第8章 xtfs文件系统87
8.1 xtfs文件系统概述87
8.2 格式化xtfs文件系统87
8.2.1 格式化xtfs.img88
8.2.2 格式化实例88
8.3 文件复制89
8.3.1 加载0/1号数据块90
8.3.2 复制数据块90
8.3.3 创建数据块索引表92
8.3.4 初始化inode数据结构93
8.3.5 写回0/1号数据块94
8.3.6 复制实例94
8.4 本章任务97
第9章 进程1加载可执行文件98
9.1 挂载xtfs文件系统98
9.2 xt可执行文件100
9.2.1 编译xt可执行文件100
9.2.2 shell程序102
9.3 加载可执行文件104
9.4 进程1的运行108
9.5 本章实例109
9.6 本章任务109
第10章 页例外111
10.1 页无效例外111
10.1.1 触发页无效例外112
10.1.2 处理页无效例外114
10.2 页修改例外116
10.2.1 触发页修改例外118
10.2.2 处理页修改例外118
10.3 本章实例120
10.4 本章任务122
第11章 进程间通信123
11.1 共享内存123
11.1.1 初始化123
11.1.2 与共享页建立映射的
虚拟页125
11.1.3 shmem系统调用127
11.1.4 复制页表128
11.1.5 释放页表129
11.1.6 共享内存实例130
11.2 软件定时器131
11.2.1 软件定时器的实现原理131
11.2.2 软件定时器实例133
11.3 本章任务134
第12章 文件操作135
12.1 创建文件135
12.1.1 创建文件的过程135
12.1.2 创建文件实例137
12.2 写文件140
12.2.1 打开文件的过程140
12.2.2 写文件的过程141
12.2.3 关闭文件的过程142
12.2.4 写文件实例144
12.3 读文件146
12.3.1 读文件的过程146
12.3.2 读文件实例146
12.4 删除文件147
12.4.1 删除文件的过程147
12.4.2 删除文件实例149
12.5 本章任务150
附 录151
附录A 实验环境的搭建151
附录B LoongArch汇编指令153
附录C LoongArch控制状态寄存器157
附录D MaQueOS库函数159
附录E 飞机大战程序设计163
|
內容試閱:
|
前 言
编写初衷
早在2019年,我们就计划撰写一本用于操作系统实验课程的教材。当时的思路是对基于x86架构的Linux 0.11内核进行深入分析后,从零开始一步一步实现一个用于教学的Linux 0.11操作系统内核。但是,按照这个思路,要分析1万多行源代码,所以进展缓慢。幸运的是,龙芯中科基于二十年的CPU研发经验和生态建设积累,于2020年推出了LoongArch架构。我们实验室于2021年和龙芯中科合作了产学合作项目—“基于LoongArch架构的教学版操作系统内核”。2022年,作为该项目的重要成果,MaQueOS诞生了。
MaQueOS简介
MaQueOS是一个开源的基于LoongArch架构的教学版操作系统。作为一个教学版操作系统,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月
|
|