-
>
決戰行測5000題(言語理解與表達)
-
>
軟件性能測試.分析與調優實踐之路
-
>
第一行代碼Android
-
>
深度學習
-
>
Unreal Engine 4藍圖完全學習教程
-
>
深入理解計算機系統-原書第3版
-
>
Word/Excel PPT 2013辦公應用從入門到精通-(附贈1DVD.含語音視頻教學+辦公模板+PDF電子書)
操作系統真象還原 版權信息
- ISBN:9787115414342
- 條形碼:9787115414342 ; 978-7-115-41434-2
- 裝幀:一般膠版紙
- 冊數:暫無
- 重量:暫無
- 所屬分類:>
操作系統真象還原 本書特色
適讀人群 :適合操作系統愛好者和程序設計人員閱讀前百度高 級工程師精心寫作。操作系統并不深奧,本書給予解讀。 歷時19個月,行文60余萬字,用6000多行代碼實現了一個完整的操作系統。剖析操作系統的原理,實現內核線程、特權級變換、用戶進程、任務調度、文件系統等操作系統基本的組成單元。 用實際代碼解釋了鎖、信號量、生產者消費者問題。 實現了shell,幫助大家理解內部命令、外部命令、管道等操作。 本書用詼諧幽默的語言,把深奧的操作系統盡量講解清楚,讀者在輕松閱讀中就學通了深奧的知識,學完后不但明白了操作系統,讀者可以輕松自制一個操作系統,是一本難得的好書。 本書適合操作系統快速入門并希望快速提高的讀者、具備一定基礎、但不能靈活運用的讀者、也適用于那些已經在操作系統領域有一定造詣、但依然存在誤用的讀者 絕大多數技術人都對操作系統懷著好奇的心,他們渴望一本告訴操作系統到底是什么的書,里面不要摻雜太多無關的管理性的東西,代碼量不大且是現代操作系統雛形,渴望很快看到操作系統的本質而不花費大量的時間成本。操作系統并不深奧,本書給予解讀。
操作系統真象還原 內容簡介
本書共分16章,講解了開發一個操作系統需要的技術和知識,主要內容有:操作系統基礎、部署工作環境、編寫MBR主引導記錄、完善MBR錯誤、保護模式入門、保護模式進階和向內核邁進、中斷、內存管理系統、線程、輸入輸出系統、用戶進程、完善內核、編寫硬盤驅動程序、文件系統、系統交互等核心技術。 本書適合程序員、系統底層開發人員、操作系統愛好者閱讀,也可作為大專院校相關專業師生用書和培訓學校的教材。
操作系統真象還原 目錄
第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
操作系統真象還原 作者簡介
鄭鋼,畢業于北京大學,前百度運維高 級工程師,對操作系統有深入的研究。好運動,喜鉆研,熱衷于嘗試前沿技術,樂于分享學習成果。
- >
我與地壇
- >
姑媽的寶刀
- >
二體千字文
- >
煙與鏡
- >
人文閱讀與收藏·良友文學叢書:一天的工作
- >
名家帶你讀魯迅:故事新編
- >
大紅狗在馬戲團-大紅狗克里弗-助人
- >
巴金-再思錄