一個64位操作係統的設計與實現 C語言自製操作係統教程 引入諸多

一個64位操作係統的設計與實現 C語言自製操作係統教程 引入諸多 pdf epub mobi txt 電子書 下載 2025

田宇 著
圖書標籤:
  • 操作係統
  • 自製操作係統
  • C語言
  • 64位操作係統
  • 內核開發
  • 係統編程
  • 嵌入式係統
  • 底層開發
  • 計算機原理
  • 教程
想要找書就要到 靜思書屋
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
店鋪: 一鍵團圖書專營店
齣版社: 人民郵電齣版社
ISBN:9787115475251
商品編碼:28650430611
包裝:平裝
開本:16
齣版時間:2018-05-01
字數:1022

具體描述


內容介紹
本書講述瞭一個64位多核操作係統的自製過程。此操作係統自製過程是先從虛擬平颱構築起一個基礎框架,隨後再將基礎框架移植到物理平颱中進行升級、完善與優化。為瞭凸顯64位多核操作係統的特點,物理平颱選用搭載著Intel Core-i7處理器的筆記本電腦。與此同時,本書還將Linux內核的源碼精髓、諸多官方白皮書以及多款常用協議濃縮於其中,可使讀者在讀完本書後能夠學以緻用,進而達到理論聯係實際的目的。 全書共分為16章。*1~2章講述瞭操作係統的基礎概念和開發操作係統需要掌握的知識;第3~5章在虛擬平颱下快速構建起一個操作係統模型;第6~16章將在物理平颱下對操作係統模型做進一步升級、優化和完善。 本書既適閤在校學習理論知識的初學者,又適閤在職工作的軟件工程師或有一定基礎的業餘愛好者。

作者介紹
田宇 Linux內核愛好者,曾在多傢大中型軟件公司從事軟件開發工作,參與過多款高端嵌入式産品的開發研製,主要負責Linux內核和驅動的研發,以及開源操作係統環境的深度定製。

關聯推薦
基於Intel I7處理器的64位多核操作係統,引入諸多Linux內核的設計精髓
目錄
*一部分 操作係統相關知識介紹及環境搭建
*1章 操作係統概述  4
1.1 什麼是操作係統  4
1.2 操作係統的組成結構  4
1.3 編寫操作係統需要的知識  7
1.4 本書操作係統簡介  8
*2章 環境搭建及基礎知識  9
2.1 虛擬機及開發係統平颱介紹  9
2.1.1 VMware的安裝  9
2.1.2 編譯環境CentOS 6  10
2.1.3 Bochs虛擬機  11
2.2 匯編語言  14
2.2.1 AT&T;匯編語言格式與Intel匯編語言格式  14
2.2.2 NASM編譯器  16
2.2.3 使用匯編語言調用C語言的函數  16
2.3 C語言  19
2.3.1 GNU C內嵌匯編語言  20
2.3.2 GNU C語言對標準C語言的擴展  23
*二部分 初級篇
第3章 BootLoader引導啓動程序  30
3.1 Boot引導程序  30
3.1.1 BIOS引導原理  31
3.1.2 寫一個Boot引導程序  32
3.1.3 創建虛擬軟盤鏡像文件  36
3.1.4 在Bochs上運行我們的Boot程序  38
3.1.5 加載Loader到內存  40
3.1.6 從Boot跳轉到Loader程序  52
3.2 Loader引導加載程序  54
3.2.1 Loader原理  54
3.2.2 寫一個Loader程序  55
3.2.3 從實模式進入保護模式再到IA-32e模式  65
3.2.4 從Loader跳轉到內核程序  75
第4章 內核層  78
4.1 內核執行頭程序  78
4.1.1 什麼是內核執行頭程序  78
4.1.2 寫一個內核執行頭程序  79
4.2 內核主程序  83
4.3 屏幕顯示  85
4.3.1 在屏幕上顯示色彩  86
4.3.2 在屏幕上顯示log  88
4.4 係統異常  100
4.4.1 異常的分類  101
4.4.2 係統異常處理(一)  102
4.4.3 係統異常處理(二)  109
4.5 初級內存管理單元  121
4.5.1 獲得物理內存信息  121
4.5.2 計算可用物理內存頁數  123
4.5.3 分配可用物理內存頁  126
4.6 中斷處理  142
4.6.1 8259A PIC  142
4.6.2 觸發中斷  148
4.7 鍵盤驅動  152
4.7.1 簡述鍵盤功能  152
4.7.2 實現鍵盤中斷捕獲函數  154
4.8 進程管理  155
4.8.1 簡述進程管理模塊  155
4.8.2 PCB  156
4.8.3 init進程  163
第5章 應用層  171
5.1 跳轉到應用層  171
5.2 實現係統調用API  180
5.3 實現一個係統調用處理函數  185
第三部分 *級篇
第6章 處理器體係結構  190
6.1 基礎功能與新特性  190
6.1.1 運行模式  190
6.1.2 通用寄存器  191
6.1.3 CPUID指令  192
6.1.4 標誌寄存器EFLAGS  193
6.1.5 控製寄存器  195
6.1.6 MSR寄存器組  199
6.2 地址空間  199
6.2.1 虛擬地址  200
6.2.2 物理地址  200
6.3 實模式  200
6.3.1 實模式概述  201
6.3.2 實模式的段尋址方式  201
6.3.3 實模式的中斷嚮量錶  201
6.4 保護模式  202
6.4.1 保護模式概述  202
6.4.2 保護模式的段管理機製  206
6.4.3 保護模式的中斷/異常處理機製  214
6.4.4 保護模式的頁管理機製  217
6.4.5 保護模式的地址轉換過程  224
6.5 IA-32e模式  226
6.5.1 IA-32e模式概述  226
6.5.2 IA-32e模式的段管理機製  228
6.5.3 IA-32e模式的中斷/異常處理機製  234
6.5.4 IA-32e模式的頁管理機製  234
6.5.5 IA-32e模式的地址轉換過程  237
第7章 完善BootLoader功能  238
7.1 實模式的尋址瓶頸  238
7.1.1 錯綜復雜的1 MB物理地址空間  238
7.1.2 突破1 MB物理內存瓶頸  239
7.1.3 實模式下的4 GB綫性地址尋址  240
7.2 獲取物理地址空間信息  240
7.3 操作係統引導加載階段的內存空間劃分  242
7.4 U盤啓動  244
7.4.1 USB-FDD、USB-ZIP和USB-HDD啓動模式的簡介  244
7.4.2 將Boot引導程序移植到U盤中啓動  251
7.5 在物理平颱上啓動操作係統  255
7.6 細說VBE功能的實現  261
7.6.1 VBE規範概述  261
7.6.2 獲取物理平颱的VBE相關信息  272
7.6.3 設置顯示模式  279
第8章 內核主程序  282
8.1 內核主程序功能概述  282
8.2 操作係統的Makefile編譯腳本  282
8.3 操作係統的kernel.lds鏈接腳本  286
8.4 操作係統的綫性地址空間劃分  289
8.5 獲得處理器的固件信息  290
第9章 *級內存管理單元  297
9.1 SLAB內存池  297
9.1.1 SLAB內存池概述及相關結構體定義  298
9.1.2 SLAB內存池的創建與銷毀  299
9.1.3 SLAB內存池中對象的分配與迴收  302
9.2 基於SLAB內存池技術的通用內存管理單元  308
9.2.1 通用內存管理單元的初始化函數slab_init  308
9.2.2 通用內存的分配函數kmalloc  312
9.2.3 通用內存的迴收函數kfree  317
9.3 調整物理頁管理功能  321
9.3.1 內存管理單元結構及相關函數調整  321
9.3.2 調整alloc_pages函數  323
9.3.3 創建free_pages函數  327
9.4 頁錶初始化  330
9.4.1 頁錶重新初始化  331
9.4.2 VBE幀緩存區地址重映射  334
*10章 *級中斷處理單元  337
10.1 APIC概述  337
10.2 Local APIC  338
10.2.1 Local APIC的基礎信息  338
10.2.2 Local APIC整體結構及各功能描述  344
10.3 I/O APIC  352
10.3.1 I/O APIC控製器的基礎信息  353
10.3.2 I/O APIC整體結構及各引腳功能  356
10.4 中斷控製器的模式選擇與初始化  358
10.4.1 中斷模式  359
10.4.2 Local APIC控製器的初始化  362
10.4.3 I/O APIC控製器的初始化  368
10.5 *級中斷處理功能  375
10.5.1 Linux的中斷處理機製概述  375
10.5.2 實現中斷上半部處理功能  377
*11章 設備驅動程序  382
11.1 鍵盤和鼠標驅動程序  382
11.1.1 鍵盤和鼠標控製器  382
11.1.2 完善鍵盤驅動  389
11.1.3 實現鼠標驅動  398
11.2 硬盤驅動程序  403
11.2.1 硬盤設備初探  403
11.2.2 完善硬盤驅動程序  418
*12章 進程管理  428
12.1 進程管理單元功能概述  428
12.2 多核處理器  429
12.2.1 超綫程技術與多核技術概述  429
12.2.2 多核處理器間的IPI通信機製介紹  434
12.2.3 讓我們的係統支持多核  437
12.3 進程調度器  464
12.3.1 Linux進程調度器簡介  465
12.3.2 牆上時鍾與定時器  468
12.3.3 內核定時器  479
12.3.4 實現進程調度功能  486
12.4 內核同步方法  498
12.4.1 原子變量  498
12.4.2 信號量  499
12.4.3 完善自鏇鎖  501
12.5 完善進程管理單元  503
12.5.1 完善PCB與處理器運行環境  503
12.5.2 完善進程調度器和AP處理器引導程序  508
12.5.3 關於綫程  514
*13章 文件係統  516
13.1 文件係統概述  516
13.2 解析FAT32文件係統  517
13.2.1 FAT32文件係統簡介  517
13.2.2 通過實例深入解析FAT32文件係統  523
13.2.3 實現基於路徑名的文件係統檢索功能  532
13.3 虛擬文件係統  552
13.3.1 Linux VFS簡介  552
13.3.2 實現VFS  554
*14章 係統調用API庫  566
14.1 係統調用API結構  566
14.2 基於POSIX規範實現係統調用API庫  567
14.2.1 POSIX規範下的係統調用API簡介  567
14.2.2 升級係統調用模塊  568
14.2.3 基礎文件操作的係統調用API實現  574
14.2.4 進程創建的係統調用API實現  599
14.2.5 內存管理的基礎係統調用API實現  618
*15章 Shell命令解析器及命令  626
15.1 Shell命令解析器  626
15.1.1 Shell命令解析器概述  626
15.1.2 實現Shell命令解析器  627
15.2 基礎命令  641
15.2.1 重啓命令reboot  641
15.2.2 工作目錄切換命令cd  642
15.2.3 目錄內容顯示命令ls  645
15.2.4 文件查看命令cat  654
15.2.5 程序執行命令exec  655
*16章 一個彩蛋  665
附錄 術語錶  676
參考資料  679


《從零構建:我的64位操作係統開發實戰》 前言 在這個數字時代,我們每天都在享受著操作係統帶來的便利,但你是否曾好奇過,究竟是什麼在幕後驅動著這一切?是什麼讓我們的電腦能夠響應指令、管理硬件、運行各種程序?《從零構建:我的64位操作係統開發實戰》將帶你踏上一段深度探索之旅,深入操作係統的核心,親手打造一個屬於自己的64位操作係統。本書並非空泛的概念講解,而是一部充滿實踐精神的教程,通過大量的C語言代碼示例和詳盡的原理剖析,引導你一步步理解並實現一個完整的操作係統。 本書概覽 本書的核心目標是讓你掌握構建一個現代64位操作係統的關鍵技術和核心組件。我們將從最基礎的引導加載程序(Bootloader)開始,逐步構建起內存管理、進程調度、中斷處理、設備驅動等一係列操作係統的核心要素。不同於其他理論性過強的書籍,《從零構建》將重點放在“如何做”,通過手把手的實踐,讓你真正理解每個環節的工作原理。 核心章節精講 1. 初識引導:操作係統加載的起點 BIOS與UEFI: 理解計算機啓動過程中BIOS(Basic Input/Output System)和UEFI(Unified Extensible Firmware Interface)的作用,它們如何加載操作係統。 引導加載程序(Bootloader): 深入學習引導加載程序的設計原理,包括它如何讀取操作係統內核,並將其加載到內存中。我們將使用匯編語言編寫一個簡單的Bootloader,為後續的C語言開發奠定基礎。 實模式與保護模式的轉換: 講解x86架構下從16位實模式到32位保護模式,再到64位長模式的切換過程,這是構建64位操作係統的關鍵一步。 2. 內核基石:搭建操作係統的核心框架 C語言與匯編的融閤: 學習如何在C語言環境中嵌入匯編代碼,以完成一些低級硬件操作和模式切換。 初始化內核: 編寫主內核函數,進行必要的硬件初始化,設置中斷描述符錶(IDT)、全局描述符錶(GDT)等關鍵數據結構。 中斷處理: 深入理解中斷的機製,包括硬件中斷和軟件中斷。我們將實現中斷服務例程(ISR),學習如何捕獲和響應中斷,這是操作係統與硬件交互的基石。 異常處理: 學習如何處理CPU産生的各種異常,例如除零錯誤、頁錯誤等,確保係統的健壯性。 3. 內存管理:讓程序有序運行的生命綫 物理內存管理: 講解如何分配和釋放物理內存,避免內存衝突。我們將實現一個簡單的夥伴係統(Buddy System)或位圖(Bitmap)算法來管理物理內存。 虛擬內存: 深度解析虛擬內存的概念,包括頁錶、分頁機製。學習如何建立頁錶,實現地址映射,為進程隔離和內存保護打下基礎。 內存分配器(Heap): 實現內核級彆的內存分配器,為內核模塊和用戶態程序提供動態內存分配服務。 4. 進程與綫程:多任務處理的靈魂 進程概念與PCB: 理解進程是什麼,以及進程控製塊(PCB)在操作係統中的作用。學習如何創建和銷毀進程。 進程調度: 介紹常見的進程調度算法,如先來先服務(FCFS)、時間片輪轉(Round Robin)、優先級調度等。我們將實現一個簡單的調度器,讓多個進程能夠交替運行。 綫程概念與TSS: 區分進程與綫程,理解綫程的優勢。學習綫程的創建、同步和通信。 上下文切換(Context Switching): 深入剖析上下文切換的過程,瞭解CPU寄存器的保存和恢復,以及它對多任務執行的重要性。 5. 同步與通信:協調進程與綫程的利器 互斥鎖(Mutex): 學習如何使用互斥鎖來保護共享資源,避免數據競爭。 信號量(Semaphore): 理解信號量的原理,並學習如何使用它來實現進程間的同步。 條件變量(Condition Variable): 掌握條件變量的使用,用於解決生産者-消費者等經典的同步問題。 消息隊列(Message Queue): 實現簡單的消息隊列機製,用於進程間的數據傳遞。 6. 設備驅動:連接硬件與軟件的橋梁 鍵盤驅動: 學習如何編寫鍵盤驅動,捕獲用戶的鍵盤輸入,並將其傳遞給內核。 屏幕(VGA)驅動: 實現簡單的屏幕驅動,用於在屏幕上顯示文本信息,這是操作係統可視化的基礎。 定時器驅動: 實現定時器中斷,為時間片輪轉等調度算法提供時間基準。 硬盤(IDE/AHCI)驅動(可選): 介紹如何與存儲設備進行交互,為後續的文件係統開發打下基礎。 7. 文件係統:組織和管理數據的係統 文件係統概念: 講解文件、目錄、inode、superblock等基本概念。 簡單文件係統實現: 從一個非常簡單的文件係統開始,例如FAT(File Allocation Table)的簡化版本,理解其結構和操作。 磁盤I/O: 學習如何進行磁盤的讀寫操作,將數據持久化到存儲介質。 8. 用戶態與內核態:權限的隔離與切換 係統調用(System Call): 講解係統調用的概念,以及用戶態程序如何通過係統調用請求內核服務。 係統調用接口設計: 設計並實現一套基礎的係統調用接口。 用戶態程序的加載與運行: 學習如何加載和運行簡單的用戶態程序。 本書特色 全程C語言實現: 所有的代碼都將使用標準C語言編寫,讓你能夠專注於操作係統本身的邏輯,而無需學習過多的特定平颱匯編。 詳盡的代碼示例: 每一章節都配有可運行、可調試的C語言代碼示例,幫助你直觀地理解理論。 循序漸進的學習路徑: 從最基礎的Bootloader到相對復雜的文件係統,內容組織科學,難度逐步提升。 原理與實踐並重: 不僅講解“是什麼”,更強調“為什麼”和“怎麼做”,讓你知其然,更知其所以然。 構建一個可工作的微型操作係統: 最終,你將能夠構建一個能夠啓動、運行簡單程序、進行基本設備交互的64位操作係統。 適閤讀者 對操作係統底層原理充滿好奇的計算機科學專業的學生。 希望深入理解計算機工作原理的程序員。 有誌於從事操作係統開發、嵌入式係統開發等領域的開發者。 任何對挑戰自我、構建復雜係統感興趣的技術愛好者。 學習本書的收獲 通過學習《從零構建:我的64位操作係統開發實戰》,你將: 深刻理解操作係統的核心機製: 掌握內存管理、進程調度、中斷處理、設備驅動等關鍵技術。 掌握C語言進行低級係統編程的能力: 學習如何在C語言中操作硬件,實現復雜的係統邏輯。 建立完整的操作係統開發思維: 能夠從宏觀到微觀,設計和實現一個完整的操作係統。 提升解決復雜問題的能力: 操作係統開發是一個充滿挑戰的過程,你將鍛煉齣強大的問題分析和解決能力。 為更高級的係統開發打下堅實基礎: 無論你未來從事分布式係統、嵌入式係統還是雲計算等領域,本書所學都將為你提供寶貴的財富。 結語 操作係統是現代計算的基石,而親手構建一個操作係統,則是對計算原理最深刻的理解。本書將是你開啓這段激動人心旅程的理想夥伴。讓我們一起,從零開始,用C語言,構建屬於你的64位操作係統!

用戶評價

評分

這本《深入理解計算機係統》確實是一本讓我愛不釋手的巨著。它以一種非常係統和全麵的方式,剖析瞭現代計算機係統是如何工作的。從最底層的二進製錶示,到處理器指令集、存儲器層次結構,再到鏈接器、運行時內存管理,最後延伸到係統級I/O和並發編程,作者們循序漸進地將復雜概念呈現齣來,而且邏輯嚴謹,引人入勝。我尤其欣賞書中大量的插圖和清晰的圖示,它們極大地幫助我理解瞭那些抽象的概念,比如虛擬內存的頁錶查找過程,或者多綫程同步時的競爭條件。我嘗試著按照書中的例子動手實踐,運行那些代碼片段,觀察它們在不同環境下的錶現,這種“實踐齣真知”的學習方式讓我受益匪淺。雖然書中內容確實龐大,但每一次重讀都會有新的體會和更深的理解,感覺自己對計算機底層運作的認識又上瞭一個颱階。這本書絕對是計算機科學專業學生以及任何想深入瞭解計算機係統工作原理的開發者的必備讀物。

評分

這本書帶來的震撼,遠超我最初的期待。它不僅僅是一本技術書籍,更像是一堂關於“思考”的課程。作者的寫作風格非常獨特,他不是簡單地羅列知識點,而是通過提齣問題、引導讀者思考,然後一步步揭示答案。這種互動式的閱讀體驗,讓我感覺自己像是在和一位經驗豐富的工程師進行一對一的交流。書中對於一些經典計算機科學問題的探討,比如算法的效率、數據結構的權衡,以及如何進行性能優化,都充滿瞭智慧和洞察力。我特彆喜歡其中關於“設計決策”的討論,作者會解釋為什麼在某個特定場景下會選擇某種方案,而放棄另一種,這讓我明白,好的設計往往是基於對各種因素的權衡和取捨。讀完這本書,我感覺自己的編程思維方式得到瞭極大的提升,不再是單純地寫齣能運行的代碼,而是開始思考如何寫齣更健壯、更高效、更易於維護的代碼。

評分

坦白說,這本書的閱讀門檻確實不低,但一旦你跨過瞭那個最初的“坎”,它帶來的迴報是巨大的。作者的文字功底非常瞭得,即使是那些極其晦澀的技術概念,在他筆下也變得生動有趣。我特彆喜歡書中對於“錯誤處理”和“異常機製”的探討,這部分內容往往是很多教程容易忽略的,但它卻是構建健壯係統不可或缺的一部分。作者通過大量的實際案例,展示瞭在復雜係統中,如何預見和處理各種潛在的錯誤,以及如何設計優雅的異常處理流程。另外,書中對於“調試技巧”的介紹也相當實用,它分享瞭一些非常有效的定位和解決bug的方法,這對我日常的開發工作提供瞭很大的幫助。總的來說,這本書是一次深入骨髓的學習體驗,它讓我對軟件開發的復雜性和藝術性有瞭全新的認識,也讓我對自己的技術能力有瞭更高的要求。

評分

這是一本能夠改變你對編程看法的書。我之前一直以為,寫齣能跑通的代碼就是目的,但讀瞭這本書之後,我纔意識到,還有更深層次的追求。它不僅僅講瞭“怎麼做”,更講瞭“為什麼這樣做”。書中對於各種設計模式、算法和數據結構的分析,都帶著一種“解構”的智慧,讓你明白這些工具背後的原理和適用場景。我印象最深刻的是關於並發編程的部分,作者用非常生動的例子,展示瞭多綫程環境下可能齣現的各種問題,以及如何利用鎖、信號量等機製來解決這些問題。這讓我意識到,並發編程並非易事,需要非常細緻和嚴謹的設計。這本書最大的價值在於,它培養瞭我的“工程思維”,讓我能夠從更高的維度去審視代碼和係統,不僅僅關注功能實現,更會思考性能、可靠性、安全性和可維護性。

評分

我花瞭很長時間纔消化完這本書,因為它的內容實在太豐富瞭。從操作係統內核的調度算法,到文件係統的實現細節,再到網絡通信的協議棧,它幾乎涵蓋瞭操作係統設計的方方麵麵。最令我印象深刻的是,作者並沒有迴避那些復雜的、充滿挑戰的部分,而是用一種清晰易懂的語言進行瞭闡述。我尤其對書中關於進程和綫程管理的章節情有獨鍾,裏麵詳細介紹瞭各種調度策略的優缺點,以及它們在實際應用中是如何被調優的。另外,文件係統的設計部分也讓我大開眼界,理解瞭不同文件係統的組織方式和存取機製,對數據在磁盤上的存儲有瞭更直觀的認識。這本書的知識密度很高,需要讀者投入大量的精力和時間去學習和實踐,但一旦掌握,它將為你構建起堅實的操作係統知識體係,讓你在麵對各種操作係統相關的問題時,都能遊刃有餘。

相關圖書

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.tinynews.org All Rights Reserved. 静思书屋 版权所有