TOP
0
0
【簡體曬書區】 單本79折,5本7折,活動好評延長至5/31,趕緊把握這一波!
操作系統真象還原(簡體書)
滿額折

操作系統真象還原(簡體書)

人民幣定價:128.9 元
定  價:NT$ 773 元
優惠價:87673
領券後再享88折
海外經銷商無庫存,到貨日平均30天至45天
可得紅利積點:20 點
相關商品
商品簡介
作者簡介
名人/編輯推薦
目次

商品簡介

本書共分16章,講解了開發一個作業系統需要的技術和知識,主要內容有:作業系統基礎、部署工作環境、編寫MBR主引導記錄、完善MBR錯誤、保護模式入門、保護模式進階和向內核邁進、中斷、記憶體管理系統、執行緒、輸入輸出系統、使用者進程、完善內核、編寫硬碟驅動程式、檔案系統、系統交互等核心技術。
本書適合程式師、系統底層開發人員、作業系統愛好者閱讀,也可作為大專院校相關專業師生用書和培訓學校的教材。

作者簡介

鄭鋼

畢業於北京大學,前百度運維高級工程師,對操作系統有深入的研究。好運動,喜鑽研,熱衷於嘗試前沿技術,樂於分享學習成果。

名人/編輯推薦

前百度高級工程師精心寫作。操作系統並不深奧,本書給予解讀。
歷時19個月,行文60餘萬字,用6000多行代碼實現了一個完整的操作系統。剖析操作系統的原理,實現內核線程、特權級變換、用戶進程、任務調度、文件系統等操作系統基本的組成單元。
用實際代碼解釋了鎖、信號量、生產者消費者問題。
實現了shell,幫助大家理解內部命令、外部命令、管道等操作。
本書用詼諧幽默的語言,把深奧的操作系統盡量講解清楚,讀者在輕鬆閱讀中就學通了深奧的知識,學完後不但明白了操作系統,讀者可以輕鬆自製一個操作系統,是一本難得的好書。
本書適合操作系統快速入門並希望快速提高的讀者、具備一定基礎、但不能靈活運用的讀者、也適用於那些已經在操作系統領域有一定造詣、但依然存在誤用的讀者
絕大多數技術人都對操作系統懷著好奇的心,他們渴望一本告訴操作系統到底是什麼的書,裡面不要摻雜太多無關的管理性的東西,代碼量不大且是現代操作系統雛形,渴望很快看到操作系統的本質而不花費大量的時間成本。操作系統並不深奧,本書給予解讀。

目次

目錄

第0章一些你可能正感到迷惑的問題1
0.1 操作系統是什麼1
0.2 你想研究到什麼程度2
0.3 寫操作系統,哪些需要我來做2
0.4 軟件是如何訪問硬件的2
0.5 應用程序是什麼,和操作系統是如何
配合到一起的3
0.6 為什麼稱為“陷入”內核4
0.7 內存訪問為什麼要分段4
0.8 代碼中為什麼分為代碼段、數據段?
這和內存訪問機制中的段是一回事嗎6
0.9 物理地址、邏輯地址、有效地址、線性
地址、虛擬地址的區別11
0.10 什麼是段重疊12
0.11 什麼是平坦模型12
0.12 cs、ds這類sreg段寄存器,位寬是
多少12
0.13 什麼是工程,什麼是協議13
0.14 為什麼Linux系統下的應用程序不能在
Windows系統下運行14
0.15 局部變量和函數參數為什麼要放在
棧中14
0.16 為什麼說彙編語言比C語言快15
0.17 先有的語言,還是先有的編譯器,第1個
編譯器是怎麼產生的16
0.18 編譯型程序與解釋型程序的區別19
0.19 什麼是大端字節序、小端字節序19
0.20 BIOS中斷、DOS中斷、Linux中斷的
區別21
0.21 Section和Segment的區別25
0.22 什麼是魔數29
0.23 操作系統是如何識別文件系統的30
0.24 如何控制CPU的下一條指令30
0.25 指令集、體系結構、微架構、編程
語言30
0.26 庫函數是用戶進程與內核的橋樑33
0.27 轉義字符與ASCII碼37
0.28 MBR、EBR、DBR和OBR各是
什麼39
第1章部署工作環境42
1.1 工欲善其事,必先利其器42
1.2 我們需要哪些編譯器42
1.2.1 世界頂級編譯器GCC42
1.2.2 彙編語言編譯器新貴NASM43
1.3 操作系統的宿主環境43
1.3.1 什麼是虛擬機44
1.3.2 盜夢空間般的開發環境,虛擬機
中再裝一個虛擬機45
1.3.3 virtualBox下載,安裝46
1.3.4 Linux發行版下載46
1.3.5 Bochs下載安裝46
1.4 配置bochs48
1.5 運行bochs49
第2章編寫MBR主引導記錄,讓我們開始
掌權52
2.1 計算機的啟動過程52
2.2 軟件接力第一棒,BIOS52
2.2.1 實模式下的1MB內存佈局52
2.2.2 BIOS是如何甦醒的54
2.2.3 為什麼是0x7c0056
2.3 讓MBR先飛一會兒58
2.3.1 神奇好用的$和$$,令人迷惑的
section58
2.3.2 NASM簡單用法60
2.3.3 請下一位選手MBR同學做
準備60
第3章完善MBR65
3.1 地址、section、vstart淺嚐輒止65
3.1.1 什麼是地址65
3.1.2 什麼是section67
3.1.3 什麼是vstart68
3.2 CPU的實模式70
3.2.1 CPU的工作原理71
3.2.2 實模式下的寄存器72
3.2.3 實模式下內存分段由來76
3.2.4 實模式下CPU內存尋址方式78
3.2.5 棧到底是什麼玩意兒81
3.2.6 實模式下的ret84
3.2.7 實模式下的call85
3.2.8 實模式下的jmp92
3.2.9 標誌寄存器flags97
3.2.10 有條件轉移99
3.2.11 實模式小結101
3.3 讓我們直接對顯示器說點什麼吧101
3.3.1 CPU如何與外設通信—IO
接口101
3.3.2 顯卡概述105
3.3.3 顯存、顯卡、顯示器106
3.3.4 改進MBR,直接操作顯卡110
3.4 bochs調試方法112
3.4.1 bochs一般用法113
3.4.2 bochs調試實例118
3.5 硬盤介紹122
3.5.1 硬盤發展簡史122
3.5.2 硬盤工作原理123
3.5.3 硬盤控制器端口126
3.5.4 常用的硬盤操作方法128
3.6 讓MBR使用硬盤129
3.6.1 改造MBR130
3.6.2 實現內核加載器134
第4章保護模式入門136
4.1 保護模式概述136
4.1.1 為什麼要有保護模式136
4.1.2 實模式不是32位CPU,變成了
16位137
4.2 初見保護模式137
4.2.1 保護模式之寄存器擴展137
4.2.2 保護模式之尋址擴展140
4.2.3 保護模式之運行模式反轉141
4.2.4 保護模式之指令擴展145
4.3 全局描述符表150
4.3.1 段描述符150
4.3.2 全局描述符表GDT、局部描述
符表LDT及選擇子155
4.3.3 打開A20地址線157
4.3.4 保護模式的開關,CR0寄存器的
PE位158
4.3.5 讓我們進入保護模式158
4.4 處理器微架構簡介165
4.4.1 流水線166
4.4.2 亂序執行168
4.4.3 緩存168
4.4.4 分支預測169
4.5 使用遠跳轉指令清空流水線,更新段描述
符緩衝寄存器172
4.6 保護模式之內存段的保護173
4.6.1 向段寄存器加載選擇子時的
保護173
4.6.2 代碼段和數據段的保護174
4.6.3 棧段的保護175
第5章保護模式進階,向內核邁進177
5.1 獲取物理內存容量177
5.1.1 學習Linux獲取內存的方法177
5.1.2 利用BIOS中斷0x15子功能
0xe820獲取內存177
5.1.3 利用BIOS中斷0x15子功能
0xe801獲取內存179
5.1.4 利用BIOS中斷0x15子功能
0x88獲取內存180
5.1.5 實戰內存容量檢測181
5.2 啟用內存分頁機制,暢遊虛擬空間186
5.2.1 內存為什麼要分頁186
5.2.2 一級頁表188
5.2.3 二級頁表192
5.2.4 規劃頁表之操作系統與用戶
進程的關係197
5.2.5 啟用分頁機制198
5.2.6 用虛擬地址訪問頁表204
5.2.7 快表TLB(Translation Lookaside
Buffer)簡介206
5.3 加載內核207
5.3.1 用C語言寫內核207
5.3.2 二進製程序的運行方法211
5.3.3 elf格式的二進製文件213
5.3.4 elf文件實例分析218
5.3.5 將內核載入內存222
5.4 特權級深入淺出229
5.4.1 特權級那點事229
5.4.2 TSS簡介230
5.4.3 CPL和DPL入門232
5.4.4 門、調用門與RPL序235
5.4.5 調用門的過程保護240
5.4.6 RPL的前世今生243
5.4.7 IO特權級248
第6章完善內核252
6.1 函數調用約定簡介252
6.2 彙編語言和C語言混合編程256
6.2.1 淺析C庫函數與系統調用256
6.2.2 彙編語言和C語言共同協作259
6.3 實現自己的打印函數261
6.3.1 顯卡的端口控制261
6.3.2 實現單個字符打印265
6.3.3 實現字符串打印275
6.3.4 實現整數打印277
6.4 內聯彙編281
6.4.1 什麼是內聯彙編281
6.4.2 彙編語言AT&T語法簡介281
6.4.3 基本內聯彙編283
6.4.4 擴展內聯彙編284
6.4.5 擴展內聯彙編之機器模式簡介294
第7章中斷298
7.1 中斷是什麼,為什麼要有中斷298
7.2 操作系統是中斷驅動的299
7.3 中斷分類299
7.3.1 外部中斷299
7.3.2 內部中斷301
7.4 中斷描述符表304
7.4.1 中斷處理過程及保護306
7.4.2 中斷發生時的壓棧308
7.4.3 中斷錯誤碼310
7.5 可編程中斷控制器8259A311
7.5.1 8259A介紹311
7.5.2 8259A的編程314
7.6 編寫中斷處理程序319
7.6.1 從**簡單的中斷處理程序
開始319
7.6.2 改進中斷處理程序335
7.6.3 調試實戰:處理器進入中斷時
壓棧出棧完整過程339
7.7 可編程計數器定時器8253簡介346
7.7.1 時鐘—給設備打拍子346
7.7.2 8253入門348
7.7.3 8253控製字349
7.7.4 8253工作方式350
7.7.5 8253初始化步驟353
7.8 提高時鐘中斷的頻率,讓中斷來得更
猛烈一些354
第8章內存管理系統357
8.1 makefile簡介357
8.1.1 makefile是什麼357
8.1.2 makefile基本語法358
8.1.3 跳到目標處執行360
8.1.4 偽目標361
8.1.5 make:遞歸式推導目標362
8.1.6 自定義變量與系統變量363
8.1.7 隱含規則365
8.1.8 自動化變量366
8.1.9 模式規則367
8.2 實現assert斷言367
8.2.1 實現開、關中斷的函數367
8.2.2 實現ASSERT370
8.2.3 通過makefile來編譯372
8.3 實現字符串操作函數374
8.4 位圖bitmap及其函數的實現377
8.4.1 位圖簡介377
8.4.2 位圖的定義與實現378
8.5 內存管理系統381
8.5.1 內存池規劃381
8.5.2 內存管理系統第一步,分配頁
內存388
第9章線程398
9.1 實現內核線程398
9.1.1 執行流398
9.1.2 線程到底是什麼399
9.1.3 進程與線程的關係、區別簡述402
9.1.4 進程、線程的狀態405
9.1.5 進程的身份證—PCB405
9.1.6 實現線程的兩種方式—內核或
用戶進程406
9.2 在內核空間實現線程409
9.2.1 簡單的PCB及線程棧的實現409
9.2.2 線程的實現413
9.3 核心數據結構,雙向鍊錶417
9.4 多線程調度421
9.4.1 簡單優先級調度的基礎421
9.4.2 任務調度器和任務切換425
第10章輸入輸出系統439
10.1 同步機制——鎖439
10.1.1 排查GP異常,理解原子操作439
10.1.2 找出代碼中的臨界區、互斥、
競爭條件444
10.1.3 信號量445
10.1.4 線程的阻塞與喚醒447
10.1.5 鎖的實現449
10.2 用鎖實現終端輸出452
10.3 從鍵盤獲取輸入456
10.3.1 鍵盤輸入原理簡介456
10.3.2 鍵盤掃描碼457
10.3.3 8042簡介463
10.3.4 測試鍵盤中斷處理程序465
10.4 編寫鍵盤驅動468
10.4.1 轉義字符介紹468
10.4.2 處理掃描碼469
10.5 環形輸入緩衝區476
10.5.1 生產者與消費者問題簡述476
10.5.2 環形緩衝區的實現478
10.5.3 添加鍵盤輸入緩衝區481
10.5.4 生產者與消費者實例測試482
第11章用戶進程485
11.1 為什麼要有任務狀態段TSS485
11.1.1 多任務的起源,很久很久
以前…… 485
11.1.2 LDT簡介486
11.1.3 TSS的作用488
11.1.4 CPU原生支持的任務切換
方式492
11.1.5 現代操作系統採用的任務
切換方式495
11.2 定義並初始化TSS497
11.3 實現用戶進程501
11.3.1 實現用戶進程的原理501
11.3.2 用戶進程的虛擬地址空間501
11.3.3 為進程創建頁表和3特權
級棧502
11.3.4 進入特權級3505
11.3.5 用戶進程創建的流程506
11.3.6 實現用戶進程—上507
11.3.7 bss簡介513
11.3.8 實現用戶進程—下515
11.3.9 讓進程跑起來—用戶進程的
調度519
11.3.10 測試用戶進程520
第12章進一步完善內核523
12.1 Linux系統調用淺析523
12.2 系統調用的實現527
12.2.1 系統調用實現框架527
12.2.2 增加0x80號中斷描述符527
12.2.3 實現系統調用接口528
12.2.4 增加0x80號中斷處理例程528
12.2.5 初始化系統調用和實現
sys_getpid530
12.2.6 添加系統調用getpid531
12.2.7 在用戶進程中的系統調用532
12.2.8 系統調用之棧傳遞參數534
12.3 讓用戶進程“說話”536
12.3.1 可變參數的原理536
12.3.2 實現系統調用write538
12.3.3 實現printf539
12.3.4 完善printf542
12.4 完善堆內存管理545
12.4.1 malloc底層原理545
12.4.2 底層初始化548
12.4.3 實現sys_malloc550
12.4.4 內存的釋放555
12.4.5 實現sys_free558
12.4.6 實現系統調用malloc和free562
第13章編寫硬盤驅動程序566
13.1 硬盤及分區表566
13.1.1 創建從盤及獲取安裝的
磁盤數566
13.1.2 創建磁盤分區表567
13.1.3 磁盤分區表淺析571
13.2 編寫硬盤驅動程序578
13.2.1 硬盤初始化578
13.2.2 實現thread_yield和idle線程582
13.2.3 實現簡單的休眠函數584
13.2.4 完善硬盤驅動程序585
13.2.5 獲取硬盤信息,掃描分區表590
第14章文件系統595
14.1 文件系統概念簡介595
14.1.1 inode、間接塊索引表、文件
控制塊FCB簡介595
14.1.2 目錄項與目錄簡介597
14.1.3 超級塊與文件系統佈局599
14.2 創建文件系統601
14.2.1 創建超級塊、i結點、目錄項601
14.2.2 創建文件系統603
14.2.3 掛載分區609
14.3 文件描述符簡介612
14.3.1 文件描述符原理612
14.3.2 文件描述符的實現614
14.4 文件操作相關的基礎函數615
14.4.1 inode操作有關的函數616
14.4.2 文件相關的函數620
14.4.3 目錄相關的函數623
14.4.4 路徑解析相關的函數628
14.4.5 實現文件檢索功能630
14.5 創建文件633
14.5.1 實現file_create633
14.5.2 實現sys_open636
14.5.3 在文件系統上創建第1個
文件639
14.6 文件的打開與關閉640
14.6.1 文件的打開640
14.6.2 文件的關閉642
14.7 實現文件寫入643
14.7.1 實現file_write643
14.7.2 改進sys_write及write系統
調用648
14.7.3 把數據寫入文件650
14.8 讀取文件651
14.8.1 實現file_read651
14.8.2 實現sys_read與功能驗證653
14.9 實現文件讀寫指針定位功能655
14.10 實現文件刪除功能657
14.10.1 回收inode657
14.10.2 刪除目錄項660
14.10.3 實現sys_unlink與功能驗證663
14.11 創建目錄665
14.11.1 實現sys_mkdir創建目錄666
14.11.2 創建目錄功能驗證669
14.12 遍歷目錄671
14.12.1 打開目錄和關閉目錄671
14.12.2 讀取1個目錄項673
14.12.3 實現sys_readdir及sys_
rewinddir674
14.13 刪除目錄676
14.13.1 刪除目錄與判斷空目錄676
14.13.2 實現sys_rmdir及功能驗證677
14.14 任務的工作目錄679
14.14.1 顯示當前工作目錄的原理及
基礎代碼679
14.14.2 實現sys_getcwd681
14.14.3 實現sys_chdir改變工作目錄683
14.15 獲得文件屬性684
14.15.1 ls命令的幕後功臣684
14.15.2 實現sys_stat685
第15章系統交互687
15.1 fork的原理與實現687
15.1.1 什麼是fork687
15.1.2 fork的實現689
15.1.3 添加fork系統調用與實現init
進程695
15.2 添加read系統調用,獲取鍵盤輸入696
15.3 添加putchar、clear系統調用697
15.4 實現一個簡單的shell699
15.4.1 shell雛形699
15.4.2 添加Ctrl+u和Ctrl+l快捷鍵701
15.4.3 解析鍵入的字符703
15.4.4 添加系統調用705
15.4.5 路徑解析轉換708
15.4.6 實現ls、cd、mkdir、ps、rm等
命令712
15.5 加載用戶進程717
15.5.1 實現exec717
15.5.2 讓shell支持外部命令723
15.5.3 加載硬盤上的用戶程序執行724
15.5.4 使用戶進程支持參數727
15.6 實現系統調用wait和exit731
15.6.1 wait和exit的作用731
15.6.2 孤兒進程和殭屍進程732
15.6.3 一些基礎代碼733
15.6.4 實現wait和exit737
15.6.5 實現cat命令741
15.7 管道745
15.7.1 管道的原理745
15.7.2 管道的設計747
15.7.3 管道的實現748
15.7.4 利用管道實現進程間通信752
15.7.5 在shell中支持管道754
參考文獻760

您曾經瀏覽過的商品

購物須知

大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。

特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。

無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。

為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。

若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。

優惠價:87 673
海外經銷商無庫存,到貨日平均30天至45天

暢銷榜

客服中心

收藏

會員專區