3dwoo大學簡體電腦書店
自研操作系統:DIM-SUM設計與實現
( 簡體 字)
作者:謝寶友類別:1. -> 程式設計 -> 綜合
出版社:電子工業出版社自研操作系統:DIM-SUM設計與實現 3dWoo書號: 53127
詢問書籍請說出此書號!
有庫存
NT售價: 645
出版日:7/1/2020
頁數:456
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 字 )
ISBN:9787121391866 加入購物車加到我的最愛 (請先登入會員)
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社)
第 1章 準備工作 1
1.1 DIM-SUM簡介 1
1.2 DIM-SUM是什么 1
1.2.1 DIM-SUM的第一個版本為什么是HOT-POT 1
1.2.2 DIM-SUM歡迎什么 2
1.2.3 DIM-SUM不歡迎什么 3
1.3 獲得源代碼 3
1.3.1 通過網頁下載源代碼 3
1.3.2 通過Git獲取源代碼 3
1.4 搭建調試開發環境 4
1.4.1 安裝ubuntu 16.04 4
1.4.2 ubuntu 16.04環境配置 5
1.4.3 搭建編譯環境 6
1.4.4 編譯HOT-POT 7
1.4.5 運行HOT-POT 8
1.4.6 開始調試 10
1.5 向DIM-SUM操作系統提交補丁 11
1.5.1 心態 11
1.5.2 準備工作 11
1.5.3 制作補丁 13
1.5.4 制作正確的補丁 14
1.5.5 發送補丁 16
1.6 獲得幫助 17
1.7 提醒 17
第 2章 算法基礎 18
2.1 鏈表 18
2.2 散列表 19
2.3 紅黑樹 20
2.4 基樹 22


第 3章 計數與互斥同步 23
3.1 計數 23
3.1.1 計數的難題 24
3.1.2 精確計數器 24
3.1.3 近似計數器 27
3.1.4 引用計數 31
3.2 內核互斥原語 32
3.2.1 每CPU變量 32
3.2.2 自旋鎖 38
3.2.3 自旋位鎖 42
3.2.4 自旋順序鎖 44
3.2.5 自旋讀/寫鎖 47
3.2.6 讀/寫信號量 50
3.2.7 互斥鎖 56
3.3 內核同步原語 60
3.3.1 信號量的設計原理 60
3.3.2 信號量的數據結構 61
3.3. 3 信號量API 61
3.3.4 信號量的實現 62
第 4章 調度 65
4.1 基本概念 65
4.1.1 進程和線程 65
4.1.2 任務 66
4.1.3 任務搶占 66
4.1.4 idle線程 66
4.2 SMP CPU初始化 66
4.3 數據結構 71
4.3.1 線程 71
4.3.2 調度隊列 76
4.3.3 雜項 77
4.4 調度子系統初始化 77
4.4.1 init_sched_early函數 78
4.4.2 init_idle_process函數 78
4.4.3 init_sched函數 79
4.5 線程調度 79
4.5.1 上下文切換 79
4.5.2 喚醒線程 82
4.6 高級調度API 85
4.6.1 等待隊列 85
4.6.2 位等待隊列 89
4.6.3 線程睡眠 93
4.6.4 消息隊列 96
第 5章 中斷及定時器 108
5.1 中斷控制器初始化 108
5.1.1 主CPU中斷控制器初始化 109
5.1.2 從CPU中斷控制器初始化 110
5.2 中斷控制器維護 110
5.2.1 中斷號映射 110
5.2.2 邏輯中斷的控制 113
5.2.3 設備中斷處理函數 116
5.3 中斷處理 119
5.3.1 序言 119
5.3.2 中斷處理通用流程 120
5.3.3 處理外部設備中斷 122
5.3.4 處理核間中斷 126
5.3.5 軟中斷 126
5.3.6 尾聲 126
5.4 工作隊列 128
5.4.1 工作隊列的數據結構 128
5.4.2 工作隊列的全局變量 130
5.4.3 工作隊列的API 130
5.4.4 工作隊列的實現 131
5.5 定時器與時間管理 139
5.5.1 初始化 139
5.5.2 定時器的數據結構 139
5.5.3 定時器的全局變量 141
5.5.4 定時器的API 141
5.5.5 定時器的實現 141
5.5.6 定時器中斷處理 144
5.5.7 時間管理 148
第 6章 內存管理 151
6.1 內存初始化 151
6.1.1 艱難地準備C運行環境 151
6.1.2 準備BOOT內存空間 152
6.1.3 物理內存塊管理 152
6.1.4 早期設備內存映射 153
6.1.5 初始化每CPU變量 157
6.1.6 初始化線性映射 157
6.1.7 其他內存初始化工作 160
6.2 BOOT內存分配器 160
6.2.1 BOOT內存分配API 161
6.2.2 BOOT內存分配器的實現 161
6.2.3 BOOT內存分配器的銷毀 163
6.3 頁面編號 163
6.3.1 頁面編號的數據結構 164
6.3.2 頁面編號的全局變量 165
6.3.3 頁面編號的API 165
6.3.4 頁面編號的實現 165
6.4 頁面分配器 168
6.4.1 頁面分配器的設計原理 168
6.4.2 頁面分配器的數據結構 169
6.4.3 頁面分配器的全局變量 174
6.4.4 頁面分配器的API 175
6.4.5 頁面分配器的實現 176
6.4.6 頁面分配器的初始化 192
6.5 Beehive內存分配器 193
6.5.1 Beehive內存分配器的設計原理 193
6.5.2 Beehive內存分配器的數據結構 195
6.5.3 Beehive內存分配器的全局變量 197
6.5.4 Beehive內存分配器的API 199
6.5.5 Beehive內存分配器的實現 199
6.5.6 Beehive內存分配器的初始化 214
6.6 I/O內存映射 216
第 7章 塊設備 219
7.1 磁盤及其分區 220
7.1.1 磁盤及其分區的數據結構 220
7.1.2 磁盤及其分區的全局變量 222
7.1.3 磁盤及其分區的API 222
7.1.4 磁盤及其分區的實現 222
7.2 塊設備維護 228
7.2.1 塊設備的數據結構 228
7.2.2 塊設備的全局變量 230
7.2.3 塊設備的API 231
7.2.4 塊設備的實現 231
7.3 I/O請求 242
7.3.1 I/O請求的數據結構 243
7.3.2 I/O請求的全局變量 250
7.3.3 I/O請求的API 250
7.3.4 I/O請求的實現 251
7.4 I/O調度 265
7.4.1 I/O調度的數據結構 265
7.4.2 I/O調度的全局變量 267
7.4.3 I/O調度的API 267
7.4.4 I/O調度的實現 268
第 8章 虛擬文件系統 271
8.1 掛載、卸載文件系統 271
8.1.1 掛載、卸載文件系統的數據結構 272
8.1.2 掛載、卸載文件系統的全局變量 277
8.1.3 掛載、卸載文件系統的API 278
8.1.4 掛載、卸載文件系統的實現 278
8.2 文件節點緩存 285
8.2.1 文件節點緩存的數據結構 286
8.2.2 文件節點緩存的全局變量 288
8.2.3 文件節點緩存的API 289
8.2.4 文件節點緩存的實現 290
8.3 打開、關閉文件 304
8.3.1 打開、關閉文件的數據結構 305
8.3.2 打開、關閉文件的全局變量 308
8.3.3 打開、關閉文件的API 309
8.3.4 打開、關閉文件的實現 309
8.4 讀/寫文件 319
8.4.1 讀/寫文件的數據結構 320
8.4.2 讀/寫文件的全局變量 323
8.4.3 讀/寫文件的API 323
8.4.4 讀/寫文件的實現 323
8.5 其他功能 337
第 9章 雜項文件系統 338
9.1 文件系統的掛載 338
9.1.1 第一次加載根文件系統 338
9.1.2 第二次加載根文件系統 340
9.2 內存文件系統 340
9.2.1 內存文件系統的數據結構 340
9.2.2 內存文件系統的全局變量 340
9.2.3 內存文件系統的API 341
9.2.4 內存文件系統的實現 341
9.3 設備文件系統 349
9.3.1 設備文件系統的數據結構 349
9.3.2 設備文件系統的全局變量 350
9.3.3 設備文件系統的API 351
9.3.4 設備文件系統的實現 351
第 10章 LEXT3文件系統 358
10.1 簡介 358
10.1.1 超級塊 359
10.1.2 塊組描述符 359
10.1.3 塊位圖 360
10.1.4 文件節點位圖 360
10.1.5 文件節點表 360
10.1.6 文件節點 360
10.1.7 文件日志 362
10.2 LEXT3 363
10.2.1 LEXT3的數據結構 363
10.2.2 LEXT3的全局變量 371
10.2.3 LEXT3的API 372
10.2.4 LEXT3的實現 373
10.3 文件系統日志 397
10.3.1 日志的數據結構 397
10.3.2 日志的全局變量 405
10.3.3 日志的API 405
10.3.4 日志的實現 406
第 11章 雜項 438
11.1 klibc 438
11.2 網絡子系統 440
11.3 SIMPLE-KSHELL 440
本書詳細闡述了自研操作系統DIM-SUM的設計與實現,提供了在ARM 64虛擬機中動手實踐DIM-SUM及參與DIM-SUM開發的方法。針對DIM-SUM操作系統的同步與互斥、調度、內存、中斷與定時器、塊設備、文件系統模塊進行了詳細的分析,包括這些模塊的設計思路、數據結構定義、關鍵API說明。最重要的是,本書對各個模塊的主要函數進行了逐行解釋,有助于讀者深刻理解如何實現一款實用的操作系統。最后,本書還展望了接下來10年DIM-SUM操作系統的發展目標,希望最終其能發展為可以在服務器系統、桌面系統中實用的自研操作系統。
推薦序1

中國必須發展安全、可控的操作系統,不然會被卡脖子。
操作系統是管理計算機與軟件資源的計算機程序,同時也是計算機系統的內核與基石。隨著數字經濟的發展,隨著5G、人工智能、大數據、云計算等新一代信息技術的蓬勃興起,保障網絡安全成為各個國家的重要任務,自主研發操作系統也就成了建設網絡強國勢在必行的任務。自主可控是實現網絡安全的前提和必要條件,面對日益凸顯的網絡安全挑戰,中國在今后一段時期里,必須加快推進國產自主可控替代計劃,構建安全可控的信息技術體系,而操作系統正是信息技術體系的核心。
目前,全世界智能終端操作系統被三家外國跨國公司(蘋果、谷歌和微軟)所壟斷,它們也是世界上最大的三家IT企業,這并非巧合。在這個領域,我國被人家卡了脖子,只有大力發展自己的操作系統,才能盡快擺脫受制于人的局面。

中國目前還有大量的操作系統人才缺口。
無論國內國外,廠商開發操作系統都需要投入足夠多的人力和巨大的資金,而國內的廠商在資金和人力上都不具備強大的實力,甚至有個別廠商還處于虧損的狀態。不妨引用幾組數據:Windows XP 有4000萬行代碼,Windows 7有5000萬行代碼,3.6版的Linux 內核有1590萬行代碼,Linux的發行版Debian有著多達6500萬行代碼。而且,這些代碼還都是經過軟件廠商反復精簡以后的結果。微軟開發Windows Vista操作系統時用掉的研發經費在200億美元以上,開發Windows XP時集中了5000多名的程序員來編寫代碼。
實踐經驗表明,發展操作系統必須有龐大的軟件人才隊伍的支撐,但國內至今嚴重缺乏能夠開發操作系統的軟件人才,特別是一流的人才。事實上,中國有著相當豐富的應用軟件開發人才,可以給微軟、蘋果、谷歌等科技巨頭開發出很好的應用軟件,可偏偏缺乏了能開發操作系統等基礎軟件的人才。因此,如何吸引中國廣大應用軟件人才,迅速提高他們的技能,從開發應用軟件轉向開發操作系統等基礎軟件,這對于發展國產操作系統具有重要意義。我們相信,在這方面本書可以發揮很好的作用。

操作系統是一個整體概念,一個成型的系統很龐大,初學者一次搞懂很難,從一個簡單的系統入手是好的選擇。
與其他軟件不同,一個發布版的操作系統非常龐大,僅僅是操作系統的內核就有上千萬行代碼,隨著版本的更新,代碼量還在不斷增加,從這樣的源代碼中體會操作系統的整體設計思想無疑是困難的,許多對操作系統有興趣的學生,面對這個龐大的代碼量時退卻了。對于初學者而言,從頭進行一個小而全的操作系統設計是更好的選擇,容易上手,也更容易理解龐雜代碼下的設計核心。本書采取了從易到難、從小到大、循序漸進、融會貫通的途徑,特別適合操作系統的新手閱讀,可以這樣說,本書為有志于從事基礎軟件攻關的讀者打開了一扇通向操作系統殿堂的大門。

對操作系統發展的期望。
目前,基于國產操作系統和芯片的自主創新計算機體系已經逐步縮小了與Wintel體系(即Windows操作系統和Intel架構CPU所構成的體系)之間的差距,國產操作系統已經從“不可用”發展到“可用”,并正向“好用”方向發展。在今后一個相當長的時期里,操作系統的國產化替代將成為我國網信領域的新常態。希望有更多的讀者對操作系統產生興趣,加入自主操作系統的研發中去,為祖國的操作系統事業做出貢獻!


中國工程院院士 倪光南
推薦序2

未來是云的時代,也是大數據和人工智能的時代!
芯片和操作系統共同構成了云時代IT基礎設施的基石。從操作系統的角度來說,其重要性在于:
操作系統的穩定性是IT基礎設施的生命線。
操作系統可以充分利用硬件的性能,有利于企業在競爭中處于優勢地位。
數十年來,Linux操作系統已經在產業界取得了廣泛的應用,應用生態也得到了蓬勃發展,目前正處于方興未艾的階段。在接下來的10年里,Linux可能仍然會是服務器系統、嵌入式系統,甚至是物聯網系統中的主流操作系統。
但是,產業界也存在其他一些與Linux競爭的操作系統。例如蘋果的iOS系統、谷歌正在研發的Fuchsia操作系統,以及其他國內廠商研發的操作系統。
這些操作系統可能會對產業界10年之后的競爭態勢產生一定的影響,因此引起產業界、學術界越來越多的關注。
操作系統的研發工作是一項復雜的系統工程,這也導致一個結果:很難看到個人在實現操作系統,特別是實現可用于生產系統的、實用的服務器操作系統方面有所作為。我們很難想象哪個人會有膽量去嘗試,更難想象哪個人會付諸行動。
當我在OS2ATC 2019大會上,聽到本書作者謝寶友演講“做中國的Linux,做中國的Linus”的時候,感到非常吃驚。竟然真的有人愿意在服務器操作系統方面嘗試邁出第一步!不管結果如何,我們首先應該為本書作者的勇氣點贊。當然,我們也期望作者能夠知行合一,繼續發展DIM-SUM操作系統,并最終邁向可用于生產環境的服務器操作系統。
我從書稿看到:雖然DIM-SUM還不是一個真正可用于生產環境的服務器操作系統,而且很多設計思路和代碼都源于Linux,但是正因為作者在深刻理解Linux的設計與實現后,才能游刃有余地對其進行重構,并且在重構的過程中糅合自己原創的設計要素。真正在產業界一線的工程師更能清楚地意識到,這是一個很有挑戰的工作。
隨著本書的出版,作者也會提供可以動手實踐的DIM-SUM操作系統源代碼,以及實踐環境的搭建方法。本書中也對DIM-SUM操作系統源代碼進行了逐行注釋。這有利于讀者親自動手實踐,也有利于業界同仁參與到DIM-SUM操作系統的開發工作中來。
DIM-SUM操作系統已經具備了中斷、調度、內存管理、文件系統、I/O、網絡等操作系統的基本要素,并且具備與Linux應用生態兼容的能力。因此,它不僅可供讀者學習操作系統的設計與實現,也具備發展成為實用服務器操作系統的潛在能力。推薦對操作系統有興趣的在校學生、一線工程師閱讀本書。
“路漫漫其修遠兮”,希望10年后,DIM-SUM操作系統能夠在生產系統中發揮作用,也希望更多的人加入到DIM-SUM的開發中來。
西安郵電大學 陳莉君

前 言

如果說DIM-SUM操作系統是一個完美的操作系統,那無疑是一個謊言。如果說DIM-SUM操作系統只是大家茶余飯后的談資,那無疑是另一個謊言。
30年前,計算機逐漸進入公眾的視野。筆者在使用DOS操作系統命令的時候,就對操作系統非常好奇,想搞清楚系統如何啟動并響應輸入的命令。于是在同學的幫助下,筆者將部分DOS操作系統文件進行了反匯編,通過閱讀匯編代碼的方式了解到一些操作系統的知識。
那時很難找到硬件相關的資料,也沒有合適的操作系統設計方面的書。因此,筆者對操作系統的探索只能淺嘗輒止。
但是,這并沒有引起筆者對國內操作系統現狀的擔憂,因為筆者曾看到一則報道,從20世紀80年代中期開始,國內就有專家團隊在系統性地研發國產操作系統、編譯器這樣的基礎軟件。我們只不過是落后一些時日,遲早會有自研操作系統問世的。
在20世紀90年代,Linux和BSD操作系統慢慢發展成為可用于生產的穩定操作系統。由于這些操作系統是開源的,所以在全球范圍內得到了極大的普及,這也間接壓縮了自研操作系統的生存空間。
另外,從20世紀80年代開始,自研的國產操作系統最終都失敗了,國內工程技術人員和研究者紛紛開始基于Linux開展他們的工作。
進入21世紀以后,Linux在國內發展得如火如荼。雖然“核高基”項目仍然堅持在操作系統領域投入數十億元人民幣,但是從筆者親身參與的操作系統項目來看,這些項目均以Linux為基礎,嚴格來說,并不是從頭開始自研的操作系統。
筆者對這樣的現狀深感憂心,在2010年就預測Android系統可能會走向封閉,或者限制國內廠商的使用。可惜業界同人對此不以為然,認為國內可以基于Android系統持續使用。
從目前的現狀來看,谷歌公司已經開始限制國內廠商使用Android系統了。這進一步加深了筆者的擔憂:如果某一天,我們不能免費使用基于Linux的這些開源操作系統,我們是否有替代操作系統可用?
正是這樣的憂患意識,促使筆者潛心研究Linux開源操作系統。從2008年進入中興通訊操作系統團隊開始,在隨后的6年時間內,筆者利用業余時間認真閱讀了《深入理解Linux內核》、《深入理解Linux網絡內幕》、《深入理解Linux虛擬內存管理》,以及其他一些與存儲、網絡相關的內核圖書,并做了2200頁、88萬字的學習筆記,同時翻譯并出版了《深入理解并行編程》一書。
在潛心研究Linux之時,筆者也嘗試編寫自研操作系統DIM-SUM,并在2018年完成了第一個版本:HOT-POT操作系統。業界同人親切地將這個系統稱為火鍋操作系統。筆者是四川人,在成都生活了將近30年,對火鍋有一種親切感,因此將第一個版本命名為HOT-POT。
實際上,DIM-SUM僅僅是一個快速原型操作系統,它可以運行在ARM 64 的QEMU模擬器中。讀者可以隨便找一臺機器,通過QEMU模擬器將它運行起來。在這個原型操作系統中,實現了同步與互斥、調度、內存、中斷、定時器、塊設備、文件系統模塊,并且有一個簡單的命令行控制臺。雖然它的很多思想是借鑒Linux的,你甚至可以毫不留情地批評這個操作系統大量抄襲了Linux,但是筆者可以自豪地聲稱:DIM-SUM操作系統進行了重大的代碼重構,同時也有不少原創的元素包含在里面。在一線工作的工匠程序員們應該會滿含熱淚地認同這項工作的艱辛。
本書詳細闡述了自研操作系統DIM-SUM的設計與實現,提供了在ARM 64虛擬機中動手實踐DIM-SUM及參與DIM-SUM開發的方法。本書也針對DIM-SUM操作系統的各個模塊進行了詳細的分析,包括這些模塊的設計思路、數據結構定義、關鍵API說明。本書最大的特點是對各個模塊的主要函數進行了逐行解釋,這樣有助于讀者深刻理解如何實現一款實用的操作系統。
最后,本書還展望了接下來10年DIM-SUM操作系統的發展目標,希望最終將DIM-SUM發展成可以在服務器系統、桌面系統中實用的自研操作系統。
筆者不能妄言10年之后DIM-SUM會發展成什么樣,但是希望借本書的出版,督促自己不忘初心,沿著自研操作系統的道路堅持走下去。
最后,筆者要表達的一個很重要的觀點是:DIM-SUM不屬于某一個公司,當然它更不是個人用來謀私的工具。
DIM-SUM是屬于所有操作系統愛好者的!

謝寶友
2020年4月25日
于杭州
pagetop