操作系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn):基于LoongArch架構(gòu) 周慶國 楊虎斌 劉剛 陳玉聰 張福新
定 價:59 元
- 作者:周慶國 楊虎斌 劉剛 陳玉聰 張福新
- 出版時間:2024/4/1
- ISBN:9787111746683
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP316
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書以基于LoongArch架構(gòu)的教學(xué)版操作系統(tǒng)MaQueOS為主線,詳細(xì)介紹了操作系統(tǒng)內(nèi)核的設(shè)計(jì)和實(shí)現(xiàn)方法。在介紹MaQueOS的功能的基礎(chǔ)上,依次介紹了顯示器驅(qū)動、時鐘中斷、鍵盤驅(qū)動、進(jìn)程0和進(jìn)程1的創(chuàng)建與運(yùn)行、進(jìn)程的掛起與喚醒、硬盤驅(qū)動、xtfs文件系統(tǒng)、進(jìn)程1加載可執(zhí)行文件、頁例外、進(jìn)程間通信和文件操作的實(shí)現(xiàn)方法。本書結(jié)構(gòu)清晰、循序漸進(jìn),既突出操作系統(tǒng)的基本原理,又強(qiáng)調(diào)動手實(shí)現(xiàn),適合作為高校計(jì)算機(jī)類專業(yè)操作系統(tǒng)相關(guān)的教材,也適合作為技術(shù)人員的參考書。
親自動手設(shè)計(jì)和實(shí)現(xiàn)一個具備基本功能的操作系統(tǒng)內(nèi)核是學(xué)習(xí)操作系統(tǒng)的有效方式。本書以作者團(tuán)隊(duì)開發(fā)的基于龍芯指令集的MaQueOS為主線,詳細(xì)介紹了操作系統(tǒng)的進(jìn)程管理、內(nèi)存管理、文件系統(tǒng)、中斷管理和外設(shè)驅(qū)動等功能的實(shí)現(xiàn)方法。本書采用循序漸進(jìn)的寫作方式,每一章的內(nèi)容均是在前一章內(nèi)容基礎(chǔ)上對功能進(jìn)行迭代而實(shí)現(xiàn)的,最終形成一個完整的操作系統(tǒng)。書中提供了各個關(guān)鍵函數(shù)、功能的源代碼,并附有詳細(xì)的說明和注釋,讀者可通過研讀代碼理解操作系統(tǒng)不同功能的實(shí)現(xiàn)方法以及各個功能間如何實(shí)現(xiàn)協(xié)同工作。
前 言
編寫初衷
早在2019年,我們就計(jì)劃撰寫一本用于操作系統(tǒng)實(shí)驗(yàn)課程的教材。當(dāng)時的思路是對基于x86架構(gòu)的Linux 0.11內(nèi)核進(jìn)行深入分析后,從零開始一步一步實(shí)現(xiàn)一個用于教學(xué)的Linux 0.11操作系統(tǒng)內(nèi)核。但是,按照這個思路,要分析1萬多行源代碼,所以進(jìn)展緩慢。幸運(yùn)的是,龍芯中科基于二十年的CPU研發(fā)經(jīng)驗(yàn)和生態(tài)建設(shè)積累,于2020年推出了LoongArch架構(gòu)。我們實(shí)驗(yàn)室于2021年和龍芯中科合作了產(chǎn)學(xué)合作項(xiàng)目—“基于LoongArch架構(gòu)的教學(xué)版操作系統(tǒng)內(nèi)核”。2022年,作為該項(xiàng)目的重要成果,MaQueOS誕生了。
MaQueOS簡介
MaQueOS是一個開源的基于LoongArch架構(gòu)的教學(xué)版操作系統(tǒng)。作為一個教學(xué)版操作系統(tǒng),MaQueOS的代碼雖然只有1000多行,但是它實(shí)現(xiàn)了操作系統(tǒng)核心的進(jìn)程管理、內(nèi)存管理、文件系統(tǒng)、中斷管理和外設(shè)驅(qū)動等功能子系統(tǒng),并為應(yīng)用程序提供了16個系統(tǒng)調(diào)用接口。
MaQueOS由Linux 0.11內(nèi)核深度裁剪而來,并完成了從x86架構(gòu)到LoongArch架構(gòu)的移植。其中,對所有外設(shè)驅(qū)動程序(硬盤、鍵盤和顯示器)進(jìn)行了重寫。除此之外,不同于Linux 0.11支持MINIX文件系統(tǒng)、a.out可執(zhí)行文件和基于管道操作的進(jìn)程間通信機(jī)制,MaQueOS支持自定義的xtfs格式的文件系統(tǒng)、xt格式的可執(zhí)行文件和基于共享內(nèi)存的進(jìn)程間通信機(jī)制。
其中,xtfs文件系統(tǒng)是一個極小型的文件系統(tǒng),僅用100多行代碼就實(shí)現(xiàn)了文件的創(chuàng)
建/刪除、打開/關(guān)閉和讀/寫操作,以及文件系統(tǒng)掛載功能。xt可執(zhí)行文件包括一個大小為512字節(jié)的可執(zhí)行文件頭和代碼數(shù)據(jù)被鏈接在一起的二進(jìn)制可執(zhí)行代碼,因此對xt可執(zhí)行文件的加載過程相當(dāng)簡潔;诠蚕韮(nèi)存的進(jìn)程間通信機(jī)制的實(shí)現(xiàn)也比基于管道操作的進(jìn)程間通信機(jī)制的實(shí)現(xiàn)更簡單、高效。
目標(biāo)讀者
本書詳細(xì)地介紹了MaQueOS的實(shí)現(xiàn)過程,適合作為高校計(jì)算機(jī)及相關(guān)專業(yè)操作系統(tǒng)原理課程的補(bǔ)充讀物和實(shí)驗(yàn)課程的教材。除此之外,本書也可以作為學(xué)習(xí)Linux內(nèi)核原理的讀者的入門參考書。
各章內(nèi)容簡介
本書以MaQueOS的實(shí)現(xiàn)過程為主線,介紹了如何從零開始實(shí)現(xiàn)一個操作系統(tǒng)。本書最大的特點(diǎn)是采用循序漸進(jìn)的方式組織內(nèi)容,每章的內(nèi)容都是在上一章內(nèi)容的基礎(chǔ)上實(shí)現(xiàn)的。通過第1~12章內(nèi)容的迭代,讀者可以對操作系統(tǒng)的實(shí)現(xiàn)過程有更加深入的理解。
本書大部分章都有一個(或者多個)實(shí)例,用于驗(yàn)證該章實(shí)現(xiàn)的功能。第1~12章的最后都安排了數(shù)量不等的任務(wù),讀者可以通過完成這些任務(wù),更好地掌握各章的內(nèi)容。本書各章的主要內(nèi)容如下:
第0章:簡述MaQueOS支持的功能,以及驗(yàn)證這些功能的測試應(yīng)用程序。
第1章:介紹顯示器的組成以及顯示原理,在此基礎(chǔ)上詳細(xì)地描述MaQueOS的顯示器驅(qū)動程序的實(shí)現(xiàn)細(xì)節(jié),包括字符的顯示和擦除操作、回車換行的處理、卷屏的操作和刪除字符的過程以及panic函數(shù)。
第2章:介紹LoongArch架構(gòu)提供的用于產(chǎn)生時鐘中斷的恒定頻率定時器的使用原理,以及LoongArch架構(gòu)支持的13個中斷類型。然后,介紹時鐘中斷的初始化過程、開中斷的過程,并詳細(xì)地描述產(chǎn)生時鐘中斷后MaQueOS處理時鐘中斷的過程。
第3章:介紹MaQueOS的物理內(nèi)存管理機(jī)制,描述MaQueOS在內(nèi)核態(tài)下使用的虛擬地址到物理地址的地址轉(zhuǎn)換模式,并重點(diǎn)介紹3A處理器和7A橋片中與中斷有關(guān)的控制器的功能,以及鍵盤驅(qū)動程序的實(shí)現(xiàn)。
第4章:介紹MaQueOS使用的虛擬內(nèi)存管理機(jī)制,重點(diǎn)描述MaQueOS使用的基于二級頁表結(jié)構(gòu)的頁表映射;描述MaQueOS在用戶態(tài)下使用的虛擬地址到物理地址的地址轉(zhuǎn)換模式,以及如何在二級頁表結(jié)構(gòu)中建立虛擬頁和物理頁之間的映射關(guān)系;描述用于進(jìn)程管理的數(shù)據(jù)結(jié)構(gòu)(進(jìn)程描述符)、進(jìn)程0的創(chuàng)建過程,以及從內(nèi)核態(tài)進(jìn)入用戶態(tài)運(yùn)行進(jìn)程0的可執(zhí)行代碼的過程、TLB重填例外的處理過程和時鐘中斷處理過程。
第5章:介紹MaQueOS為應(yīng)用程序提供服務(wù)的系統(tǒng)調(diào)用的處理過程,主要包括在用戶態(tài)下調(diào)用系統(tǒng)調(diào)用、從用戶態(tài)進(jìn)入內(nèi)核態(tài)后保存中斷現(xiàn)場、系統(tǒng)調(diào)用的處理過程和系統(tǒng)調(diào)用的返回等。最后,介紹在CPU上運(yùn)行多個進(jìn)程時,MaQueOS引入的基于時間片的進(jìn)程間切換機(jī)制。
第6章:討論MaQueOS的進(jìn)程掛起、喚醒與終止機(jī)制,重點(diǎn)描述子進(jìn)程如何向父進(jìn)程發(fā)送終止信號、父進(jìn)程如何接收并處理終止信號以及最終父進(jìn)程如何釋放子進(jìn)程占用的系統(tǒng)資源。
第7章:介紹SATA硬盤的接口標(biāo)準(zhǔn)AHCI,并基于AHCI接口標(biāo)準(zhǔn)詳細(xì)描述SATA硬盤的初始化和讀寫過程。在讀寫硬盤過程中涉及的硬盤中斷處理過程類似于第3章中介紹的鍵盤中斷處理過程。
第8章:介紹MaQueOS目前唯一支持的xtfs文件系統(tǒng),包括xtfs文件系統(tǒng)的格式和涉及的數(shù)據(jù)結(jié)構(gòu);詳細(xì)地描述如何將一個硬盤鏡像文件格式化為xtfs文件系統(tǒng),以及如何將一個普通文件復(fù)制到xtfs文件系統(tǒng)。
第9章:介紹MaQueOS如何掛載第8章中介紹的xtfs文件系統(tǒng),以及MaQueOS目前唯一支持的xt可執(zhí)行文件格式;描述專門為MaQueOS開發(fā)的用于和用戶進(jìn)行交互的shell程序xtsh的實(shí)現(xiàn);著重介紹MaQueOS加載運(yùn)行xt可執(zhí)行文件的過程。
第10章:介紹頁無效例外和頁修改例外的觸發(fā)條件,以及可能發(fā)生頁無效例外和頁修改例外的場景;描述在前幾章內(nèi)容的基礎(chǔ)上實(shí)現(xiàn)的MaQueOS對頁無效例外和頁修改例外的支持;介紹頁無效例外和頁修改例外在LoongArch架構(gòu)中的觸發(fā)條件,以及發(fā)生頁無效例外和頁修改例外后的處理過程。
第11章:介紹MaQueOS支持的基于共享內(nèi)存的進(jìn)程間通信機(jī)制,以及共享內(nèi)存機(jī)制在MaQueOS中的具體實(shí)現(xiàn);說明由于共享內(nèi)存機(jī)制的引入,對復(fù)制和釋放頁表操作的修改;詳細(xì)介紹MaQueOS支持的軟件定時器的實(shí)現(xiàn)原理。
第12章:介紹xtfs文件系統(tǒng)中基本文件操作的具體實(shí)現(xiàn),包括文件的創(chuàng)建、刪除、打開、關(guān)閉和讀寫等。
附錄:附錄A介紹如何搭建實(shí)驗(yàn)環(huán)境;附錄B介紹在MaQueOS中使用的LoongArch匯編指令;附錄C對MaQueOS涉及的LoongArch控制狀態(tài)寄存器進(jìn)行說明;附錄D介紹MaQueOS內(nèi)核代碼使用的庫函數(shù),這些庫函數(shù)都位于include目錄下的xtos.h頭文件中;附錄E描述飛機(jī)大戰(zhàn)程序的概要設(shè)計(jì)。
致謝
感謝參與“基于LoongArch架構(gòu)的教學(xué)版操作系統(tǒng)內(nèi)核”項(xiàng)目的蘭州大學(xué)信息科學(xué)與工程學(xué)院的研究生和本科生。他們是:
前期在分析、裁剪Linux 0.11內(nèi)核源碼過程中,參與文件系統(tǒng)部分工作的錢浩萊、李城煒、葉楚瑋同學(xué),參與內(nèi)存管理部分工作的邵嵐曄、陳之帆、張昱寬同學(xué),參與引導(dǎo)系統(tǒng)部分工作的魯葉木、孔俊同學(xué),參與進(jìn)程管理部分工作的陶蒙媛、王天同、馮柳源同學(xué),參與中斷系統(tǒng)部分工作的孫川卜同學(xué),參與字符設(shè)備部分工作的徐楚佳、張浩文同學(xué),參與塊設(shè)備部分工作的張芝林、張鈞同學(xué)。
后期在從x86架構(gòu)移植到LoongArch架構(gòu)過程中,參與移植工作的邵若忱、蔣遠(yuǎn)博、呂銳、王天一、葉清揚(yáng)、聶嘉一同學(xué)。
在本書撰寫過程中,參與資料準(zhǔn)備和部分編寫工作的程延博、張斯奕、王鶴陽、楊柳、吳鴻杰、李豐耘同學(xué),以及參與校稿的安卓君同學(xué)。
最后特別感謝機(jī)械工業(yè)出版社的各位編輯為本書出版提供的專業(yè)意見和建議。
聯(lián)系我們
如果您發(fā)現(xiàn)書中有任何問題,或者對本書有任何意見、建議,請通過郵箱dslab@lzu.edu.cn與作者聯(lián)系。
作 者
2024年1月
周慶國,1973年出生,福建人,理學(xué)博士,教授,博士生導(dǎo)師,蘭州谷歌開發(fā)者社區(qū)(Lanzhou GDG)負(fù)責(zé)人,現(xiàn)任蘭州大學(xué)分布式與嵌入式系統(tǒng)實(shí)驗(yàn)室主任、開源軟件與實(shí)時系統(tǒng)工程研究中心副主任。已在國內(nèi)外學(xué)術(shù)期刊上發(fā)表論文 51 篇(SCI 7 篇,EI 24 篇)。
目 錄
前言
第0章 緒論1
0.1 MaQueOS的功能1
0.1.1 進(jìn)程管理2
0.1.2 內(nèi)存管理4
0.1.3 文件系統(tǒng)4
0.1.4 外設(shè)驅(qū)動5
0.1.5 中斷管理5
0.2 系統(tǒng)功能測試5
第1章 顯示器驅(qū)動7
1.1 顯示器的顯示原理7
1.1.1 顯示模式7
1.1.2 字符顯示7
1.2 printk函數(shù)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函數(shù)15
1.3 本章任務(wù)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 中斷現(xiàn)場保存與恢復(fù)19
2.2.3 中斷處理21
2.2.4 中斷返回21
2.3 本章任務(wù)22
第3章 鍵盤驅(qū)動23
3.1 物理內(nèi)存管理23
3.1.1 初始化24
3.1.2 申請25
3.1.3 釋放26
3.2 初始化鍵盤中斷27
3.3 鍵盤中斷的處理過程29
3.4 本章任務(wù)32
第4章 進(jìn)程0的創(chuàng)建與運(yùn)行34
4.1 虛擬內(nèi)存管理34
4.1.1 初始化35
4.1.2 建立頁表映射37
4.2 創(chuàng)建進(jìn)程038
4.3 進(jìn)程0的運(yùn)行41
4.3.1 進(jìn)程0進(jìn)入用戶態(tài)41
4.3.2 TLB重填例外的處理過程42
4.4 時鐘中斷的處理過程44
4.4.1 中斷響應(yīng)及處理44
4.4.2 中斷返回46
4.5 本章任務(wù)46
第5章 進(jìn)程1的創(chuàng)建與運(yùn)行48
5.1 創(chuàng)建進(jìn)程148
5.1.1 系統(tǒng)調(diào)用48
5.1.2 fork系統(tǒng)調(diào)用51
5.1.3 系統(tǒng)調(diào)用返回54
5.2 進(jìn)程切換55
5.2.1 時鐘中斷55
5.2.2 從進(jìn)程0切換到進(jìn)程156
5.2.3 進(jìn)程1的運(yùn)行59
5.3 本章任務(wù)59
第6章 進(jìn)程的掛起、喚醒與終止60
6.1 不可中斷掛起與喚醒60
6.1.1 不可中斷掛起62
6.1.2 喚醒不可中斷掛起進(jìn)程64
6.2 可中斷掛起與喚醒65
6.3 進(jìn)程終止66
6.3.1 exit系統(tǒng)調(diào)用66
6.3.2 釋放進(jìn)程資源67
6.4 本章實(shí)例69
6.5 本章任務(wù)72
第7章 硬盤驅(qū)動73
7.1 初始化硬盤73
7.2 讀寫硬盤77
7.2.1 發(fā)送讀寫命令77
7.2.2 硬盤中斷處理78
7.3 硬盤讀寫實(shí)例80
7.3.1 創(chuàng)建硬盤鏡像文件81
7.3.2 讀硬盤82
7.3.3 寫硬盤85
7.4 本章任務(wù)86
第8章 xtfs文件系統(tǒng)87
8.1 xtfs文件系統(tǒng)概述87
8.2 格式化xtfs文件系統(tǒng)87
8.2.1 格式化xtfs.img88
8.2.2 格式化實(shí)例88
8.3 文件復(fù)制89
8.3.1 加載0/1號數(shù)據(jù)塊90
8.3.2 復(fù)制數(shù)據(jù)塊90
8.3.3 創(chuàng)建數(shù)據(jù)塊索引表92
8.3.4 初始化inode數(shù)據(jù)結(jié)構(gòu)93
8.3.5 寫回0/1號數(shù)據(jù)塊94
8.3.6 復(fù)制實(shí)例94
8.4 本章任務(wù)97
第9章 進(jìn)程1加載可執(zhí)行文件98
9.1 掛載xtfs文件系統(tǒng)98
9.2 xt可執(zhí)行文件100
9.2.1 編譯xt可執(zhí)行文件100
9.2.2 shell程序102
9.3 加載可執(zhí)行文件104
9.4 進(jìn)程1的運(yùn)行108
9.5 本章實(shí)例109
9.6 本章任務(wù)109
第10章 頁例外111
10.1 頁無效例外111
10.1.1 觸發(fā)頁無效例外112
10.1.2 處理頁無效例外114
10.2 頁修改例外116
10.2.1 觸發(fā)頁修改例外118
10.2.2 處理頁修改例外118
10.3 本章實(shí)例120
10.4 本章任務(wù)122
第11章 進(jìn)程間通信123
11.1 共享內(nèi)存123
11.1.1 初始化123
11.1.2 與共享頁建立映射的
虛擬頁125
11.1.3 shmem系統(tǒng)調(diào)用127
11.1.4 復(fù)制頁表128
11.1.5 釋放頁表129
11.1.6 共享內(nèi)存實(shí)例130
11.2 軟件定時器131
11.2.1 軟件定時器的實(shí)現(xiàn)原理131
11.2.2 軟件定時器實(shí)例133
11.3 本章任務(wù)134
第12章 文件操作135
12.1 創(chuàng)建文件135
12.1.1 創(chuàng)建文件的過程135
12.1.2 創(chuàng)建文件實(shí)例137
12.2 寫文件140
12.2.1 打開文件的過程140
12.2.2 寫文件的過程141
12.2.3 關(guān)閉文件的過程142
12.2.4 寫文件實(shí)例144
12.3 讀文件146
12.3.1 讀文件的過程146
12.3.2 讀文件實(shí)例146
12.4 刪除文件147
12.4.1 刪除文件的過程147
12.4.2 刪除文件實(shí)例149
12.5 本章任務(wù)150
附 錄151
附錄A 實(shí)驗(yàn)環(huán)境的搭建151
附錄B LoongArch匯編指令153
附錄C LoongArch控制狀態(tài)寄存器157
附錄D MaQueOS庫函數(shù)159
附錄E 飛機(jī)大戰(zhàn)程序設(shè)計(jì)163