本書理論與實踐并重,全面、系統(tǒng)地闡述了操作系統(tǒng)的重要概念和原理,深入、細(xì)致地剖析了操作系統(tǒng)的組成結(jié)構(gòu)和運行機制,給出了相關(guān)概念、原理在Linux操作系統(tǒng)中的實現(xiàn)方法,提供了大量鮮活的應(yīng)用實例,詳細(xì)說明了Linux實驗環(huán)境搭建方法,給出了完整可用的LinuxC源程序及編譯和運行方法,方便讀者無障礙實驗學(xué)習(xí)和再創(chuàng)造,為培養(yǎng)具有扎實的專業(yè)理論知識和較強實踐能力的高級工程技術(shù)人才提供可理解、可實踐的內(nèi)容和素材。全書共分8章,內(nèi)容包括:操作系統(tǒng)概論、處理器管理、并發(fā)進程的同步、互斥與死鎖、存儲管理、設(shè)備管理、文件管理、操作系統(tǒng)安全機制、多處理機與多計算機操作系統(tǒng),涵蓋操作系統(tǒng)經(jīng)典、核心內(nèi)容及擴展內(nèi)容。本書配套有PPT、相關(guān)源代碼、習(xí)題解答等。
1. 本書面向卓越工程師培養(yǎng),理論與實踐并重;2. 深入講解操作系統(tǒng)原理,并提供了大量鮮活的應(yīng)用實例,有助于活躍學(xué)生思維,激發(fā)學(xué)習(xí)興趣,旨在培養(yǎng)較強實踐能力的高級工程技術(shù)人才;3. 篇幅適當(dāng),本書配套有PPT、相關(guān)源代碼、習(xí)題解答等。
操作系統(tǒng)是計算機系統(tǒng)的重要組成部分,是保證計算機功能正常、完整、可用的最基本的軟件系統(tǒng)。操作系統(tǒng)幾乎是每個計算機用戶駕馭計算機的唯一系統(tǒng)工具。因此,每個用戶理所當(dāng)然地需要熟悉操作系統(tǒng)。然而操作系統(tǒng)又是一種異常復(fù)雜的軟件系統(tǒng),不僅代碼規(guī)模龐大,而且組成結(jié)構(gòu)和運行機制復(fù)雜,學(xué)習(xí)、理解操作系統(tǒng)內(nèi)部奧秘極富挑戰(zhàn)性。操作系統(tǒng)直接建立在硬件基礎(chǔ)上,對硬件進行管理,向用戶屏蔽復(fù)雜的硬件細(xì)節(jié)。計算機系統(tǒng)中的硬件品種眾多,工作流程復(fù)雜。操作系統(tǒng)需要處理大量的并發(fā)任務(wù)及并行操作,良好協(xié)調(diào)這些任務(wù)及操作間的同步關(guān)系,防止錯誤的發(fā)生?傊,操作系統(tǒng)是計算機系統(tǒng)工作的指揮者、協(xié)調(diào)者、監(jiān)控者。理解操作系統(tǒng)乃至進行新的設(shè)計及實現(xiàn)均離不開對操作系統(tǒng)概念和理論的熟悉和掌握,這些概念和理論是操作系統(tǒng)領(lǐng)域的共同語言。操作系統(tǒng)課程內(nèi)容又是程序設(shè)計、軟件工程等需要以操作系統(tǒng)作為工作支持環(huán)境及涉及操作系統(tǒng)內(nèi)核要素的課程的基礎(chǔ)。作為一種復(fù)雜的大規(guī)模的軟件系統(tǒng),操作系統(tǒng)的成功研制也是軟件工程思想和方法應(yīng)用的典范,并且為軟件工程提供普遍的、可借鑒的、實用的實踐方案和模板。例如,操作系統(tǒng)所包含的方便軟件維護的模塊化、層次化、分布式軟件體系結(jié)構(gòu)思想、復(fù)雜系統(tǒng)分治策略及各種資源管理中的數(shù)據(jù)結(jié)構(gòu)在許多應(yīng)用軟件構(gòu)造中有著類似的應(yīng)用。因此,操作系統(tǒng)是一門重要的軟件理論和方法基礎(chǔ)課程。
全書共分8章,分別講述了操作系統(tǒng)基本概念、理論體系、處理器管理、并發(fā)進程的同步、互斥與死鎖、存儲管理、設(shè)備管理、文件管理、操作系統(tǒng)安全機制、多處理機與多計算機操作系統(tǒng),涵蓋操作系統(tǒng)經(jīng)典、核心內(nèi)容及擴展內(nèi)容。
第1章,介紹操作系統(tǒng)的定義、地位、功能、特性、發(fā)展、分類及結(jié)構(gòu)。重難點內(nèi)容是1.1.3 操作系統(tǒng)的資源管理技術(shù);1.3 操作系統(tǒng)的主要特性;1.5.1 程序接口;1.6 操作系統(tǒng)的結(jié)構(gòu)設(shè)計的理解與區(qū)分。
第2章,講述進程管理的硬件基礎(chǔ)、進程的定義、進程的結(jié)構(gòu)、狀態(tài)、進程控制、處理器調(diào)度以及線程概念和線程實現(xiàn)。重難點內(nèi)容是2.1.2指令系統(tǒng)、特權(quán)指令與非特權(quán)指令;2.1.3 處理器狀態(tài)及切換;2.2 中斷等硬件設(shè)施與操作系統(tǒng)控制地位的實現(xiàn)關(guān)系;2.3 進程概念、進程邏輯結(jié)構(gòu)與操作系統(tǒng)物理實現(xiàn)結(jié)構(gòu)的關(guān)系;2.4.2 多線程環(huán)境中進程與線程的區(qū)別與聯(lián)系、線程的應(yīng)用;2.6 處理器調(diào)度算法的理解與應(yīng)用及其評價標(biāo)準(zhǔn)。
第3章,講述并發(fā)進程之間的關(guān)系,包括:并發(fā)進程的同步、互斥關(guān)系及信號量與PV和管程實現(xiàn)機制、死鎖的產(chǎn)生及其解決方案、進程間的通信方案。重難點內(nèi)容是3.1.3 并發(fā)進程與時間有關(guān)的錯誤;3.2.1 臨界區(qū)調(diào)度原則;3.3 信號量結(jié)構(gòu)與PV操作邏輯及其應(yīng)用;3.4 管程結(jié)構(gòu)、實現(xiàn)方法及應(yīng)用;3.5 進程通信方案及應(yīng)用;3.6 死鎖的避免與檢測和解除方法。
第4章,從簡單到復(fù)雜講述存儲管理技術(shù),包括連續(xù)存儲管理技術(shù)(固定分區(qū)、可變分區(qū)、伙伴系統(tǒng))、離散實存管理技術(shù)(分頁、分段、段頁式系統(tǒng))和虛擬存儲管理技術(shù)(請求分頁、請求分段、請求段頁式系統(tǒng)),重點講述請求分頁虛擬存儲管理技術(shù)。重難點內(nèi)容是4.2 地址重定位、存儲保護和存儲共享;4.4 分頁存儲管理;4.6 虛擬存儲管理相關(guān)概念、工作原理及相關(guān)算法的理解與計算。
第5章,講述設(shè)備管理的硬件基礎(chǔ)知識、I/O軟件系統(tǒng)層次、磁盤結(jié)構(gòu)與磁盤I/O調(diào)度算法、虛擬設(shè)備技術(shù)。重難點內(nèi)容是5.1.2 I/O控制方式及控制器硬件工作關(guān)鍵細(xì)節(jié);5.2.3 設(shè)備驅(qū)動程序的用途及與中斷處理程序的協(xié)作關(guān)系;5.3.2 磁盤調(diào)度算法與計算及磁盤速度與磁道/扇區(qū)編排的關(guān)系;5.4.2 SPOOLing系統(tǒng)結(jié)構(gòu)。
第6章,講述文件管理系統(tǒng)的文件及目錄結(jié)構(gòu)、用戶接口功能及其實現(xiàn)、文件空間管理方法、內(nèi)存映射文件技術(shù)及虛擬文件系統(tǒng)結(jié)構(gòu)。重難點內(nèi)容是6.1.4 文件操作應(yīng)用;6.3 文件物理結(jié)構(gòu)與邏輯結(jié)構(gòu);6.4.2 文件操作系統(tǒng)調(diào)用功能實現(xiàn);6.4.3 文件共享技術(shù);6.5 文件空間管理技術(shù)、內(nèi)存映射文件的應(yīng)用。
第7章,簡述操作系統(tǒng)安全保護機制,了解系統(tǒng)安全隱患與相應(yīng)的防護措施。
第8章,簡述多處理機及多計算機環(huán)境下操作系統(tǒng)設(shè)計思想,了解復(fù)雜硬件條件下與單處理機環(huán)境下處理機管理的區(qū)別。
為了使讀者能夠近距離、可觸摸地感知操作系統(tǒng)的概念和原理知識,盡可能向讀者清晰展現(xiàn)操作系統(tǒng)的結(jié)構(gòu)元素和運行邏輯,本書采用可見形式描述復(fù)雜抽象的概念和事物。對于相關(guān)硬件及軟件的重要運作細(xì)節(jié)力求充分揭示。
對操作系統(tǒng)的內(nèi)核功能進行實踐應(yīng)用是解除操作系統(tǒng)陌生感的重要學(xué)習(xí)形式,也是以工程實踐能力為培養(yǎng)目標(biāo)的教學(xué)內(nèi)容的重要組成部分。本書包含了經(jīng)過多年教學(xué)實踐積累、完善形成的Linux操作系統(tǒng)內(nèi)核功能完整實驗程序和實驗環(huán)境搭建方法,可供讀者無障礙地驗證和透徹理解操作系統(tǒng)的相關(guān)概念和理論,并在此基礎(chǔ)上進行操作系統(tǒng)的應(yīng)用創(chuàng)新和設(shè)計。實驗內(nèi)容包括:Linux操作系統(tǒng)實驗環(huán)境的搭建、Linux程序接口實驗、Linux操作接口實驗、Linux進程控制實驗、多線程并發(fā)運行與互斥訪問實驗、Linux進程同步與互斥實驗、Linux多途徑通信實驗、Linux文件操作實驗、Linux內(nèi)存映射文件實驗。實驗選材既考慮操作系統(tǒng)概念、理論的驗證性需求,同時也考慮相關(guān)技術(shù)在工程實踐中的實用價值,達到學(xué)以致用的目的。
總之,本書理論與實踐并重,滿足各類讀者的需要。既方便以理論學(xué)習(xí)為主的人員具體、完整地理解和掌握操作系統(tǒng)理論知識,又方便需要在理論學(xué)習(xí)基礎(chǔ)上熟練掌握操作系統(tǒng)內(nèi)核功能應(yīng)用技術(shù)的人員順利獲得工程實踐能力。對于安排有獨立實驗學(xué)時的班級,教材中的實驗可以在實驗學(xué)時進行。對于課程安排在實驗室或機房,但是沒有獨立實驗學(xué)時的班級,教材中的實驗可以嵌入在理論講授的適當(dāng)時機進行,實驗時長由教師根據(jù)學(xué)生情況及總學(xué)時合理確定。建議理論講授與實驗交替進行,防止學(xué)習(xí)形式的單調(diào)性,保持學(xué)生學(xué)習(xí)興趣。對于不具備統(tǒng)一實驗條件的班級,教材中的實驗可以由學(xué)生課下進行,教師決定驗收與否。略過教材中的實驗章節(jié),并不影響操作系統(tǒng)理論體系的完整性。
本書內(nèi)容與知識結(jié)構(gòu)圖形象直觀地描述了本書核心章節(jié),同時也是操作系統(tǒng)各組成部分與所依賴的硬件系統(tǒng)各部件之間的對應(yīng)關(guān)系及內(nèi)部結(jié)構(gòu)。該圖幫助讀者總覽知識全局、準(zhǔn)確定位知識細(xì)節(jié)。
本書由申豐山主編和統(tǒng)稿。作者所在團隊的多名成員參與了課程討論與部分編寫工作。王黎明教授一直支持作者從事操作系統(tǒng)教學(xué)工作,使得作者有充分的時間和機會熟悉、積累和完善操作系統(tǒng)知識、探索講授技巧,為本書的成稿積累了重要的素材。王黎明教授參與了教材第1章、第2章、第3章的部分編寫工作。張卓博士參與討論、編寫了第4章、第5章和第6章的部分內(nèi)容,職為梅和張岳參與討論、編寫了第7章和第8章的部分內(nèi)容。書中某些章節(jié)參考或引用了文獻中列出的國內(nèi)外著作的部分內(nèi)容以及互聯(lián)網(wǎng)資源上的某些內(nèi)容,謹(jǐn)此向各位作者一并表示衷心的感謝!本書的講義版在卓越工程師班及計算機和軟件類專業(yè)班的應(yīng)用極大調(diào)動了學(xué)生學(xué)習(xí)和探索操作系統(tǒng)的興趣,這是促成本書出版的重要動力。
由于作者水平有限,加上操作系統(tǒng)代碼規(guī)模龐大、復(fù)雜,分析不易,難以獲得系統(tǒng)、完整、準(zhǔn)確的第一手資料作為佐證,書中內(nèi)容難免存在錯誤,某些抽象、晦澀的內(nèi)容可能改進不徹底,敬請讀者批評、指正,以便共同改進教材。為方便課程講授,華信教育資源網(wǎng)提供了教學(xué)課件等資源供教師下載,或與作者聯(lián)系索取。
用于搭建實驗環(huán)境的ubuntu Linux操作系統(tǒng)可從網(wǎng)址下載,也可從其他相關(guān)網(wǎng)站下載安裝。ubuntu新版本不斷推出,讀者可能下載到高于本書使用的ubuntu版本,高版本ubuntu完全可以替代本書使用的低版本ubuntu順利安裝和完成實驗。
編 者
2015年12月
申豐山,1970年出生,西安電子科技大學(xué)博士畢業(yè),1999年至今在鄭州大學(xué)信息工程學(xué)院擔(dān)任教師工作,2013年至今負(fù)責(zé)操作系統(tǒng)(卓越工程師班)授課培訓(xùn),擔(dān)任校企聯(lián)合實驗室產(chǎn)學(xué)研課題研發(fā)指導(dǎo)。
第1章 操作系統(tǒng)概論 1
1.1 操作系統(tǒng)的資源管理功能和目標(biāo) 1
1.1.1 操作系統(tǒng)的定義 1
1.1.2 操作系統(tǒng)在計算機系統(tǒng)中的位置 2
1.1.3 操作系統(tǒng)的資源管理技術(shù) 2
1.1.4 操作系統(tǒng)運行程序的服務(wù) 3
實驗1 Linux操作系統(tǒng)實驗環(huán)境搭建 5
1.1.5 操作系統(tǒng)的目標(biāo) 10
1.2 操作系統(tǒng)的功能 10
1.3 操作系統(tǒng)的主要特性 11
1.3.1 并發(fā)性 11
1.3.2 共享性 12
1.3.3 異步性 12
1.3.4 虛擬性 13
1.4 操作系統(tǒng)的發(fā)展和分類 13
1.4.1 操作系統(tǒng)的發(fā)展 13
1.4.2 操作系統(tǒng)的分類 15
1.5 操作系統(tǒng)的用戶接口 16
1.5.1 程序接口 17
實驗2 Linux程序接口實驗 19
1.5.2 操作接口 20
實驗3 Linux操作接口實驗 21
1.6 操作系統(tǒng)的結(jié)構(gòu)設(shè)計 25
1.6.1 操作系統(tǒng)的主要構(gòu)件 25
1.6.2 操作系統(tǒng)的結(jié)構(gòu) 26
1.6.3 操作系統(tǒng)運行模型 27
習(xí)題1 28
第2章 處理器管理 30
2.1 處理器 30
2.1.1 寄存器 30
2.1.2 指令系統(tǒng)、特權(quán)指令與非特權(quán)指令 30
2.1.3 處理器狀態(tài)及切換 31
2.1.4 程序狀態(tài)字寄存器 32
2.2 中斷 32
2.2.1 中斷概念 32
2.2.2 中斷源分類 33
2.2.3 中斷處理 34
2.3 進程及其實現(xiàn) 35
2.3.1 引入進程概念的必要性 35
2.3.2 進程定義和屬性 35
2.3.3 進程狀態(tài)與切換 36
2.3.4 進程描述 39
2.3.5 進程切換 43
2.3.6 模式切換 45
2.3.7 進程控制與管理 45
實驗4 Linux進程控制實驗 47
2.4 線程及其實現(xiàn) 49
2.4.1 多線程的引入 49
2.4.2 多線程環(huán)境中的進程與線程 50
2.4.3 多線程實現(xiàn)方法 52
實驗5 結(jié)果不唯一的多線程并發(fā)運行實例 53
實驗6 多線程共享資源并發(fā)訪問控制 54
2.5 處理器調(diào)度系統(tǒng) 58
2.6 處理器調(diào)度算法 63
2.6.1 低級調(diào)度的功能和類型 63
2.6.2 作業(yè)調(diào)度和低級調(diào)度算法 64
習(xí)題2 70
第3章 并發(fā)進程的同步、互斥與死鎖 73
3.1 并發(fā)進程 73
3.1.1 程序執(zhí)行的順序性 73
3.1.2 程序執(zhí)行的并發(fā)性 74
3.1.3 與時間有關(guān)的錯誤 77
3.1.4 進程的交互 79
3.2 臨界區(qū)管理 79
3.2.1 臨界區(qū)調(diào)度原則 79
3.2.2 實現(xiàn)臨界區(qū)管理的幾種錯誤算法 80
3.2.3 實現(xiàn)臨界區(qū)管理的Peterson算法 81
3.2.4 實現(xiàn)臨界區(qū)管理的硬件設(shè)施 82
3.3 同步 84
3.3.1 同步與同步機制 84
3.3.2 信號量與PV操作 85
3.3.3 利用信號量實現(xiàn)互斥 87
3.3.4 利用信號量實現(xiàn)進程同步 88
3.3.5 Linux系統(tǒng)中的同步互斥功能 96
實驗7 使用信號量解決生產(chǎn)者-消費者問題 97
3.4 管程 100
3.4.1 管程的概念 100
3.4.2 管程的實現(xiàn) 103
3.4.3 管程的應(yīng)用 106
3.5 進程通信 109
3.5.1 管道通信機制 109
實驗8 Linux管道通信 110
3.5.2 共享內(nèi)存通信機制 113
實驗9 Linux共享內(nèi)存通信 114
3.5.3 消息傳遞通信機制 118
實驗10 Linux消息傳遞通信 120
3.5.4 套接字通信機制 122
實驗11 Linux套接字通信 123
3.5.5 信號通信機制 125
3.6 死鎖 128
3.6.1 死鎖的概念和產(chǎn)生的必要條件 128
3.6.2 死鎖防止 130
3.6.3 死鎖避免 130
3.6.4 死鎖檢測與解除 133
習(xí)題3 135
第4章 存儲管理 138
4.1 存儲器層次 138
4.2 地址重定位、存儲保護和存儲共享 139
4.3 連續(xù)存儲管理 141
4.3.1 固定分區(qū)存儲管理 141
4.3.2 可變分區(qū)存儲管理 143
4.3.3 伙伴系統(tǒng) 145
4.3.4 主存不足的輔助存儲管理技術(shù) 146
4.4 分頁存儲管理 146
4.4.1 分頁存儲管理方案 146
4.4.2 快表 148
4.4.3 分頁存儲空間的分配和釋放 149
4.4.4 分頁存儲空間頁面共享與保護 150
4.4.5 多級頁表 150
4.4.6 反置頁表 151
4.5 分段存儲管理 152
4.6 虛擬存儲管理 155
4.6.1 虛擬存儲器原理 155
4.6.2 請求分頁虛擬存儲管理 156
習(xí)題4 166
第5章 設(shè)備管理 167
5.1 I/O硬件系統(tǒng) 167
5.1.1 I/O設(shè)備 167
5.1.2 I/O控制方式 169
5.2 I/O軟件系統(tǒng) 172
5.2.1 I/O軟件設(shè)計目標(biāo) 172
5.2.2 中斷處理程序 173
5.2.3 設(shè)備驅(qū)動程序 173
5.2.4 設(shè)備無關(guān)I/O軟件 176
5.2.5 用戶空間的I/O軟件 179
5.3 磁盤管理 180
5.3.1 磁盤結(jié)構(gòu) 180
5.3.2 磁盤調(diào)度算法 182
5.4 虛擬設(shè)備 185
5.4.1 虛擬設(shè)備原理 185
5.4.2 SPOOLing系統(tǒng)結(jié)構(gòu) 186
習(xí)題5 188
第6章 文件管理 189
6.1 文件 189
6.1.1 文件概念 189
6.1.2 文件類型和屬性 190
6.1.3 文件存取方法 191
6.1.4 文件操作 193
實驗12 Linux文件操作 194
6.2 目錄 196
6.2.1 目錄項信息和結(jié)構(gòu) 196
6.2.2 目錄層次 198
6.2.3 目錄操作 199
6.3 文件結(jié)構(gòu) 200
6.3.1 文件邏輯結(jié)構(gòu) 200
6.3.2 文件物理結(jié)構(gòu) 200
6.4 文件系統(tǒng)功能及實現(xiàn) 201
6.4.1 磁盤信息分區(qū) 201
6.4.2 文件操作系統(tǒng)調(diào)用功能實現(xiàn) 202
6.4.3 文件共享 205
6.5 文件空間管理 208
6.5.1 文件空間分配方法 208
6.5.2 文件外存空間管理 212
6.6 內(nèi)存映射文件 216
實驗13 Linux內(nèi)存映射文件 217
6.7 虛擬文件系統(tǒng) 220
習(xí)題6 222
第7章 操作系統(tǒng)安全 224
7.1 操作系統(tǒng)安全概念 224
7.1.1 信息安全及威脅 224
7.1.2 信息保護 226
7.2 信息安全保護機制 227
習(xí)題7 230
第8章 多處理機與多計算機操作系統(tǒng) 231
8.1 多處理機操作系統(tǒng) 231
8.2 多計算機操作系統(tǒng) 232
習(xí)題8 235
參考文獻 236