王柏 王柏,字會之,婺州金舉人。 生於宋寧宗慶元三年。從何基學習。景定五年,王柏任麗澤書院講席。卒於度宗咸淳十年。諡文憲。著有《詩疑》、《書疑》等,已佚。明朝時由王迪裒集為《王文憲公文集》二十卷。 維基百科
圖書介紹 - 資料來源:博客來 目前評分: 評分:
圖書名稱:穿越操作系統迷霧:從零實現操作系統 內容簡介
內容簡介這是一本能指導零計算機基礎的讀者輕鬆理解計算機軟硬體和作業系統工作原理,從而自己動手從0到1編寫出一個作業系統的著作。作者在作業系統領域深度耕耘20餘載,不僅一直奮鬥在百度等企業一線,而且一直致力於作業系統的教育和佈道,希望能幫助和指導越來越多的人,尤其是青少年,能從學生時代開始學習作業系統,能從底層原理真正理解作業系統,改變我國基礎軟體受制於人的現狀。本書不僅是作者悟透作業系統本質、厚積薄發的成果,而且是他將複雜的作業系統原理化繁為簡、舉重若輕,成功指導自己9歲的孩子從0到1編寫出一個作業系統的過程的全面複盤和複現。
本書驅散了作業系統的迷霧,讓作業系統不再神秘和高不可攀,讓每一個懷揣作業系統夢的中國人都能理解並實現自己的作業系統。全書一共14章,邏輯上分為上下兩篇。上篇(第1~5章)計算機軟硬體基礎和原理從計算機如何使用電進行計算開始,首先講述了電是如何抽象為資訊的,處理器是怎樣進行運算的,記憶體是怎樣存儲資訊的,處理器和記憶體是怎樣通過匯流排連接起來的,處理器是如何訪問外設的,之後講述了這些部件是如何結合起來運行程式的。
然後通過使用機器語言編寫一個程式,讓讀者深刻地理解指令和程式。接下來,結合組合語言講述了計算機體系結構。最後,從C編譯器如何將C語法翻譯為組合語言的角度,聚焦語法後面的本質,讓讀者徹底地理解C語言,而不再糾結在語言表面的語法。下篇(第6~14章)從0到1實現一個作業系統從系統引導(包含32位元和64位)開始講起,先後實現並闡述了記憶體管理、進程管理、中斷、進程調度、系統調用、進程間通信,最後實現了在顯示器上實現字元以及圖形輸出,並能接收鍵盤輸入。除了直接從應用程式直接訪問內核外,還展示了C庫等概念,展示了從應用軟體到C庫、圖形庫,最後到內核的完整軟體棧。
作者介紹
王柏生
資深作業系統技術專家,北京市科學技術進步獎一等獎獲得者。有20餘年作業系統研發經驗,現任百度主任架構師,曾就職於中國科學院軟體研究所、紅旗Linux,一直從事作業系統相關領域的研發工作,在作業系統領域有深厚積累。著有《深度探索Linux系統虛擬化》《深度探索Linux作業系統》等暢銷書。
王晟寒
對計算機技術有著濃厚的興趣,9歲開始跟隨爸爸學習編寫作業系統,在爸爸的指導下,自己動手完成了本書作業系統的編寫。5歲開始學習小提琴,現為學校交響樂團成員。業餘時間熱愛閱讀,喜歡游泳、籃球等體育運動。
目錄
前 言
第1章 計算機基礎 1
1.1 認識電 1
1.2 信息表示 5
1.2.1 二進位 5
1.2.2 十六進位 6
1.3 計算 7
1.3.1 邏輯運算 8
1.3.2 邏輯門 8
1.3.3 加法器 10
1.4 記憶體 12
1.4.1 物理實現 12
1.4.2 數學抽象 16
1.5 匯流排 17
1.6 寄存器 20
1.7 程式 22
1.8 外存 26
1.9 外設及介面 27
1.9.1 I/O位址空間 28
1.9.2 記憶體映射I/O 29
1.10 位址空間 30
1.11 數學模型到物理世界 31
第2章 認識Linux 34
2.1 什麼是作業系統 34
2.2 檔案系統 35
2.3 終端 37
2.4 shell 39
2.5 Linux常用命令 40
2.6 ANSI轉義序列 43
2.7 編輯器 45
2.8 準備“物理”計算機 47
第3章 機器語言程式設計 49
3.1 程式及指令 49
3.2 補數 50
3.3 ASCII碼 52
3.4 串口 53
3.5 “向串口寫字元A”的程式流程 55
3.6 寫外設指令 55
3.7 準備源操作數 57
3.8 準備目的操作數 58
3.9 跳轉指令 59
3.10 創建程式檔 60
3.11 程式執行過程 61
3.12 使用kvmtool運行程式 69
第4章 組合語言程式設計 71
4.1 初識組合語言 71
4.2 段及段寄存器 72
4.3 指令指標寄存器 74
4.4 通用寄存器 75
4.5 標誌寄存器 76
4.6 彙編指令格式 78
4.7 第一個組合語言程式 78
4.7.1 彙編和連結 79
4.7.2 運行 80
4.7.3 顯式設置操作數的段寄存器 83
4.7.4 虛擬指令.code16 85
4.8 構建工具Make 85
4.9 操作數定址 86
4.9.1 立即數定址 87
4.9.2 直接定址 88
4.9.3 ModR/M定址 89
4.9.4 SIB定址 94
4.9.5 SIB + disp定址 98
4.10 程式運行流程控制 101
4.10.1 選擇 101
4.10.2 迴圈 102
4.11 棧 103
4.12 函數及x86調用約定 107
4.12.1 call和ret指令 108
4.12.2 棧幀 110
4.12.3 多模組及符號可見性 113
4.12.4 參數傳遞 114
4.12.5 區域變數 116
4.12.6 返回值及參數清理 118
4.12.7 寄存器保存和恢復 119
4.13 連結 122
4.13.1 目的檔案合併 123
4.13.2 符號解析 125
4.13.3 符號的可見性 128
第5章 C語言程式設計 129
5.1 基本語法 130
5.1.1 詞法元素 130
5.1.2 運算式 131
5.1.3 聲明 132
5.1.4 語句 133
5.1.5 識別字 135
5.1.6 物件的存儲類別 138
5.1.7 標頭檔 138
5.1.8 預處理指令 139
5.2 C語言入口 141
5.3 第一個C程式 142
5.4 從C語言到機器語言 143
5.5 變數 145
5.5.1 變數類型 146
5.5.2 區域變數 147
5.5.3 全域變數 150
5.5.4 全域變數的連結性 151
5.5.5 靜態區域變數 152
5.5.6 變數類型轉換 154
5.5.7 溢出 155
5.6 運算 157
5.6.1 算數運算 157
5.6.2 遞增和遞減 158
5.6.3 關係運算 159
5.6.4 邏輯運算 161
5.6.5 位運算 163
5.6.6 賦值運算 164
5.6.7 運算的優先順序和結合性 165
5.7 程式運行流程控制 166
5.7.1 選擇 166
5.7.2 迴圈 168
5.8 數組 172
5.9 結構體 175
5.9.1 基本語法 175
5.9.2 記憶體佈局 176
5.9.3 位域 179
5.10 指針 180
5.10.1 基本語法 181
5.10.2 指向結構體的指標 183
5.10.3 指針的+/-運算 185
5.10.4 雙指針 186
5.10.5 void指針 188
5.10.6 空指針 189
5.11 函數 189
5.11.1 基本語法 189
5.11.2 參數的值傳遞和指針傳遞 191
5.11.3 const參數 195
5.11.4 函數指針 195
5.12 內聯彙編 197
第6章 32位引導過程 200
6.1 真實模式 200
6.2 保護模式 201
6.3 內核映射組成及佈局 203
6.3.1 真實模式位址空間 203
6.3.2 內核映射的佈局 205
6.3.3 內核映射檔組織 206
6.4 創建保護模式的段描述符 207
6.4.1 段描述符格式 207
6.4.2 保護模式的內核程式碼片段描述符 208
6.4.3 保護模式的內核數據段描述符 210
6.4.4 創建保護模式的段描述符表 210
6.5 告知處理器段描述符表位址 211
6.6 開啟處理器保護模式 212
6.7 跳轉到內核保護模式部分 213
6.7.1 準備保護模式部分 213
6.7.2 跳轉到保護模式部分 214
6.8 編譯及創建內核映射檔 215
6.8.1 編譯內核 215
6.8.2 組裝內核映射檔 217
6.9 使用Make構建內核 220
第7章 64位引導過程 222
7.1 記憶體分頁 222
7.1.1 為什麼要分頁 222
7.1.2 分頁模式下的位址翻譯過程 224
7.1.3 程式的虛擬位址空間 225
7.1.4 分頁模式下的定址 225
7.1.5 頁表 226
7.2 64位元模式下程式的虛擬位址空間 228
7.3 創建64位元模式的臨時段描述符表 229
7.3.1 程式碼片段 230
7.3.2 數據段 231
7.3.3 為64位元模式創建臨時段描述符表 231
7.4 建立內核映射的虛擬位址到物理位址的映射 233
7.4.1 建立四級頁表映射 234
7.4.2 建立三級頁表映射 235
7.4.3 建立二級頁表映射 236
7.4.4 建立一級頁表映射 239
7.5 建立恒等映射 240
7.6 切入64位元模式 244
7.6.1 使能PAE 244
7.6.2 設置CR3指向頁表 244
7.6.3 使能64位元模式 245
7.6.4 開啟分頁 245
7.6.5 跳轉到64位元部分 246
7.7 走進內核64位元部分 248
7.7.1 創建64位元模式段描述符表 248
7.7.2 轉換到內核位址空間 251
7.7.3 構建內核64位元部分 254
第8章 記憶體管理 258
8.1 獲取記憶體信息 258
8.1.1 BIOS簡介 258
8.1.2 讀取記憶體信息 260
8.1.3 E820的C數據結構表示 262
8.1.4 計算實體記憶體大小 263
8.1.5 print的實現 264
8.1.6 使用Make內置函數提取文件 266
8.1.7 創建Make中的文件依賴關係 267
8.2 頁面管理 269
8.2.1 劃分頁面 269
8.2.2 為內核映射保留頁面 270
8.2.3 分配頁面 271
8.2.4 歸還頁面 272
8.3 映射實體記憶體 272
8.3.1 線性映射 274
8.3.2 第1階段映射 275
8.3.3 第2階段映射 278
8.4 區塊管理 281
8.4.1 塊管理數據組織 281
8.4.2 分配區塊 284
8.4.3 釋放區塊 289
第9章 進程 292
9.1 程式運行環境 292
9.2 創建應用程式 293
9.3 創建任務結構體 295
9.4 建立進程位址映射 297
9.4.1 內核空間映射 298
9.4.2 用戶空間映射 299
9.5 創建進程任務狀態段及內核棧 300
9.5.1 準備任務狀態段及內核棧 302
9.5.2 創建任務狀態段的段描述符 304
9.5.3 設置任務寄存器 307
9.6 偽造中斷現場 307
9.7 設置CR3指向進程頁表 310
9.8 進入用戶空間 310
9.9 I/O埠存取權限控制 311
第10章 中斷和異常 313
10.1 中斷及其處理過程 313
10.1.1 可程式設計中斷控制器8259A 314
10.1.2 進階可程式中斷控制卡APIC 317
10.1.3 MSI 317
10.2 初始化8259A 318
10.3 組織中斷描述符表 321
10.3.1 初始化中斷描述符表 322
10.3.2 設置中斷寄存器 324
10.4 時鐘中斷 325
10.4.1 時鐘中斷處理函數 325
10.4.2 設置時鐘中斷描述符 327
10.4.3 程式設計時鐘晶片8254 327
10.4.4 開啟中斷 329
10.4.5 現場保存和恢復 329
10.5 缺頁異常 334
第11章 進程調度 338
11.1 任務狀態 338
11.2 創建進程 339
11.3 空閒任務 341
11.4 任務調度 342
11.5 任務切換 345
第12章 系統調用 349
12.1 系統調用工作機制 349
12.2 內核系統調用入口 351
12.3 設置MSR寄存器 354
12.4 實現系統調用sleep 357
12.5 C庫 360
12.6 應用調用sleep掛起 362
第13章 進程間通信 364
13.1 共用記憶體原理 364
13.2 內核共用記憶體實現 366
13.3 C庫實現共用記憶體介面 368
13.4 應用使用共用記憶體通信 368
第14章 顯示及輸入 370
14.1 圖形處理器 370
14.2 文字模式和圖形模式 371
14.3 獲取模式信息 373
14.4 將framebuffer映射到用戶空間 374
14.5 應用獲取模式信息 376
14.6 設計字體 377
14.7 圖形庫 379
14.8 應用繪製 383
14.9 鍵盤輸入 384
詳細資料
- ISBN:9787111732884
- 規格:平裝 / 387頁 / 19 x 26 x 1.94 cm / 普通級 / 1-1
- 出版地:中國
|
|
|
| 作者:周姚萍 出版社:五南圖書出版股份有限公司 出版日期:2018-05-28 66折: $ 198 | | 66折: $ 211 | | 66折: $ 383 | | 作者:賽門.加菲爾 出版社:木馬文化事業有限公司 出版日期:2020-07-08 66折: $ 251 | |
|
| 作者:新台 出版社:新台圖書 出版日期:2023-08-30 $ 18 | | 作者:黑青郎君 出版社:未來數位有限公司 出版日期:2024-11-13 $ 277 | | $ 276 | | 作者:山根綾乃 出版社:尖端漫畫 出版日期:2024-11-21 $ 699 | |
|
| 作者:塗田一帆 出版社:尖端 出版日期:2024-11-19 $ 553 | | $ 276 | | 作者:王振愷 出版社:遠足文化事業股份有限公司 出版日期:2024-11-20 $ 385 | | 作者:杉井光 出版社:皇冠文化出版有限公司 出版日期:2024-09-30 $ 284 | |
|
|
|
|