關(guān)于我們
書(shū)單推薦
新書(shū)推薦
|
計(jì)算機(jī)操作系統(tǒng)原理
全書(shū)共分7章, 第1章結(jié)束操作系統(tǒng)的概念、功能、類型及其發(fā)展; 第2章至第7章介紹操作系統(tǒng)對(duì)進(jìn)程管理、進(jìn)程同步與互斥、調(diào)度與死鎖、存儲(chǔ)器管理、設(shè)備管理和文件管理等。作者結(jié)合多年的實(shí)踐教學(xué)經(jīng)驗(yàn), 編寫(xiě)了本教材, 其最大特色是各知識(shí)點(diǎn)簡(jiǎn)潔突出。
作者多年從事相關(guān)領(lǐng)域的教學(xué)與科研工作,本書(shū)是教學(xué)、科研和項(xiàng)目開(kāi)發(fā)的經(jīng)驗(yàn)和體會(huì)。本書(shū)配有PPT課件、課后習(xí)題等課程資源。
前言
Foreword計(jì)算機(jī)系統(tǒng)是由硬件與軟件緊密結(jié)合的統(tǒng)一整體。操作系統(tǒng)是硬件功能的首次擴(kuò)充,也是其他系統(tǒng)軟件和應(yīng)用軟件建立的基礎(chǔ)和支撐平臺(tái),在計(jì)算機(jī)系統(tǒng)中處于承上啟下的關(guān)鍵地位。操作系統(tǒng)是計(jì)算機(jī)系統(tǒng)的核心軟件,它管理和控制整個(gè)計(jì)算機(jī)系統(tǒng),使之高效、協(xié)調(diào)地運(yùn)轉(zhuǎn),為用戶提供方便的服務(wù)。操作系統(tǒng)的設(shè)計(jì)及實(shí)現(xiàn)對(duì)整個(gè)計(jì)算機(jī)的功能和性能起著至關(guān)重要的作用。學(xué)習(xí)操作系統(tǒng)不僅要掌握其基本概念和原理,更重要的是要了解在操作系統(tǒng)中如何實(shí)現(xiàn)這些原理,并學(xué)以致用,靈活運(yùn)用到實(shí)際工作中。操作系統(tǒng)是計(jì)算機(jī)專業(yè)的必修課程。掌握操作系統(tǒng)的基本概念、理解其工作原理,對(duì)于深入學(xué)習(xí)計(jì)算機(jī)乃至信息類專業(yè)知識(shí)、提升軟件開(kāi)發(fā)和項(xiàng)目設(shè)計(jì)能力都有著非常重要的作用。
本教材以《國(guó)家中長(zhǎng)期教育改革和發(fā)展規(guī)劃綱要(2010—2020年)》為指導(dǎo),針對(duì)計(jì)算機(jī)相關(guān)專業(yè)學(xué)生應(yīng)掌握的知識(shí)結(jié)構(gòu),參照教育部高等學(xué)校計(jì)算機(jī)類專業(yè)教學(xué)指導(dǎo)委員會(huì)關(guān)于操作系統(tǒng)課程的教學(xué)要求,參考國(guó)內(nèi)外比較成熟的教材,借鑒新理論和新技術(shù),結(jié)合當(dāng)前國(guó)內(nèi)普通高等院校學(xué)生的實(shí)際情況,根據(jù)作者多年的教學(xué)實(shí)踐經(jīng)驗(yàn)編寫(xiě)而成。教材以介紹操作系統(tǒng)的基本概念為主,闡述操作系統(tǒng)的基本原理、基本結(jié)構(gòu),剖析操作系統(tǒng)的工作過(guò)程、實(shí)現(xiàn)技術(shù)和運(yùn)行機(jī)制,希望通過(guò)這種方式,使學(xué)生更系統(tǒng)、直觀、深刻地理解操作系統(tǒng),并依據(jù)所學(xué)知識(shí),設(shè)計(jì)、開(kāi)發(fā)自己的操作系統(tǒng)或應(yīng)用系統(tǒng)。本教材力求結(jié)構(gòu)清晰、概念清楚,內(nèi)容由淺入深、易教易學(xué),立足于培養(yǎng)學(xué)生的實(shí)際應(yīng)用能力。
本教材共分7章。第1章緒論,概括介紹操作系統(tǒng)的基本概念、主要功能、發(fā)展過(guò)程、基本特征;第2章進(jìn)程管理,首先介紹CPU管理的功能,然后介紹進(jìn)程的概念,進(jìn)程的特征、狀態(tài)及其轉(zhuǎn)換,進(jìn)程的描述與管理,線程的概念;第3章進(jìn)程同步,首先介紹并發(fā)程序的有關(guān)技術(shù),講解進(jìn)程互斥、同步機(jī)制,信號(hào)量和管程機(jī)制,隨后介紹進(jìn)程通信;第4章調(diào)度與死鎖,介紹進(jìn)程調(diào)度算法和死鎖的基本概念、必要條件和處理方法;第5章存儲(chǔ)器管理,講述存儲(chǔ)器管理的基本概念、各種分配管理方法和虛擬存儲(chǔ)管理技術(shù);第6章設(shè)備管理,講解設(shè)備控制、設(shè)備分配和處理等問(wèn)題;第7章文件管理,介紹文件結(jié)構(gòu)、文件目錄和存儲(chǔ)空間管理等。每章均配備了適當(dāng)?shù)牧?xí)題,可幫助學(xué)生消化并掌握操作系統(tǒng)的知識(shí)。
本教材編寫(xiě)分工如下:第1~5章由段正杰編寫(xiě),第6、7章由劉華文編寫(xiě)。最后由劉華文負(fù)責(zé)統(tǒng)稿、審閱全書(shū)。本教材在編寫(xiě)過(guò)程中得到了相關(guān)老師的大力支持和幫助,在此向他們表示衷心的感謝!本教材內(nèi)容參考和引用了國(guó)內(nèi)外相關(guān)著作、教材,以及部分互聯(lián)網(wǎng)上的技術(shù)資料,在此,一并表示深深的感謝!
由于編者水平有限,錯(cuò)誤與不妥之處在所難免,希望廣大讀者批評(píng)指正,以便我們改進(jìn)、完善本教材,謝謝!
編者◆計(jì)算機(jī)操作系統(tǒng)原理
目錄Contents
第1章緒論1
1.1操作系統(tǒng)的概念1
1.1.1計(jì)算機(jī)體系結(jié)構(gòu)1
1.1.2操作系統(tǒng)的定義3
1.2操作系統(tǒng)的發(fā)展過(guò)程4
1.2.1操作系統(tǒng)的形成和發(fā)展4
1.2.2手工操作5
1.2.3批處理系統(tǒng)6
1.2.4分時(shí)系統(tǒng)7
1.2.5實(shí)時(shí)系統(tǒng)8
1.2.6通用操作系統(tǒng)9
1.2.7網(wǎng)絡(luò)操作系統(tǒng)9
1.2.8分布式操作系統(tǒng)10
1.2.9嵌入式系統(tǒng)11
1.3操作系統(tǒng)的功能和特征11
1.3.1操作系統(tǒng)的功能11
1.3.2操作系統(tǒng)的特征12
1.4操作系統(tǒng)的運(yùn)行環(huán)境13
1.4.1操作系統(tǒng)的結(jié)構(gòu)13
1.4.2處理機(jī)的執(zhí)行狀態(tài)15
1.4.3中斷及其處理15
1.5操作系統(tǒng)用戶接口17
1.5.1命令接口17
1.5.2程序接口18
1.5.3圖形接口19
1.6現(xiàn)代主流操作系統(tǒng)19
1.6.1UNIX操作系統(tǒng)191.6.2Linux操作系統(tǒng)20
1.6.3Windows系統(tǒng)20
習(xí)題21
◆計(jì)算機(jī)操作系統(tǒng)原理目錄第2章進(jìn)程管理22
2.1CPU管理22
2.1.1CPU管理的功能22
2.1.2程序的執(zhí)行23
2.2進(jìn)程的概念26
2.2.1進(jìn)程的定義26
2.2.2進(jìn)程的特征26
2.3進(jìn)程的狀態(tài)27
2.3.1進(jìn)程的基本狀態(tài)27
2.3.2進(jìn)程的狀態(tài)轉(zhuǎn)換27
2.3.3進(jìn)程的掛起狀態(tài)28
2.4進(jìn)程的描述29
2.4.1進(jìn)程結(jié)構(gòu)29
2.4.2進(jìn)程控制塊30
2.5進(jìn)程的組織30
2.6進(jìn)程的控制32
2.6.1操作系統(tǒng)內(nèi)核32
2.6.2進(jìn)程控制原語(yǔ)33
2.7線程35
2.7.1線程的引入35
2.7.2線程的類型37
習(xí)題38
第3章進(jìn)程同步40
3.1基本概念40
3.1.1進(jìn)程的制約關(guān)系40
3.1.2進(jìn)程互斥與同步40
3.2同步機(jī)制42
3.2.1軟件方法43
3.2.2硬件方法45
3.3信號(hào)量方法46
3.3.1信號(hào)量機(jī)制47
3.3.2信號(hào)量的分類47
3.3.3互斥與同步的實(shí)現(xiàn)50
3.4經(jīng)典的同步問(wèn)題52
3.4.1生產(chǎn)者消費(fèi)者問(wèn)題52
3.4.2讀者寫(xiě)者問(wèn)題54
3.4.3哲學(xué)家進(jìn)餐問(wèn)題56
3.5管程58
3.5.1管程的概念58
3.5.2條件變量59
3.5.3管程的應(yīng)用59
3.6進(jìn)程通信61
3.6.1共享存儲(chǔ)器系統(tǒng)61
3.6.2消息傳遞系統(tǒng)61
3.6.3管道通信系統(tǒng)63
習(xí)題64
第4章調(diào)度與死鎖66
4.1CPU調(diào)度66
4.2進(jìn)程調(diào)度68
4.3調(diào)度性能衡量69
4.4調(diào)度算法70
4.4.1先來(lái)先服務(wù)70
4.4.2短者優(yōu)先71
4.4.3高響應(yīng)比優(yōu)先71
4.4.4優(yōu)先權(quán)高者優(yōu)先72
4.4.5時(shí)間片輪轉(zhuǎn)73
4.4.6多級(jí)反饋隊(duì)列74
4.5死鎖75
4.5.1死鎖的基本概念75
4.5.2產(chǎn)生死鎖的原因76
4.5.3產(chǎn)生死鎖的必要條件77
4.5.4處理死鎖的基本方法77
4.5.5死鎖的預(yù)防78
4.5.6死鎖避免78
4.5.7死鎖檢測(cè)與解除82
習(xí)題84
第5章存儲(chǔ)器管理87
5.1存儲(chǔ)器管理概述87
5.1.1存儲(chǔ)體系87
5.1.2存儲(chǔ)管理功能88
5.1.3地址變換89
5.1.4存儲(chǔ)管理方式91
5.2單一連續(xù)分配管理91
5.3分區(qū)存儲(chǔ)管理93
5.3.1固定分區(qū)存儲(chǔ)管理93
5.3.2可變分區(qū)存儲(chǔ)管理95
5.3.3可重定位分區(qū)存儲(chǔ)管理99
5.4覆蓋與交換100
5.4.1覆蓋技術(shù)100
5.4.2交換技術(shù)101
5.5分頁(yè)存儲(chǔ)管理102
5.5.1基本概念102
5.5.2頁(yè)表104
5.5.3地址轉(zhuǎn)換105
5.5.4分頁(yè)存儲(chǔ)管理的改進(jìn)106
5.6分段存儲(chǔ)管理109
5.6.1基本概念109
5.6.2段表110
5.6.3地址轉(zhuǎn)換110
5.6.4段的保護(hù)和共享111
5.6.5分頁(yè)和分段的區(qū)別111
5.7段頁(yè)式存儲(chǔ)管理112
5.7.1基本概念112
5.7.2段表和頁(yè)表113
5.7.3地址變換114
5.8虛擬存儲(chǔ)管理114
5.8.1基本原理115
5.8.2請(qǐng)求分頁(yè)存儲(chǔ)管理116
5.8.3請(qǐng)求分段存儲(chǔ)管理121
習(xí)題123
第6章設(shè)備管理126
6.1設(shè)備層次結(jié)構(gòu)126
6.2設(shè)備管理概述127
6.2.1設(shè)備的分類127
6.2.2設(shè)備管理的目標(biāo)和任務(wù)128
6.2.3設(shè)備管理的主要功能129
6.3輸入輸出系統(tǒng)129
6.3.1I/O系統(tǒng)結(jié)構(gòu)129
6.3.2I/O設(shè)備控制器130
6.3.3I/O通道132
6.3.4設(shè)備的控制方式133
6.4設(shè)備分配與回收136
6.4.1數(shù)據(jù)結(jié)構(gòu)136
6.4.2設(shè)備分配因素137
6.4.3設(shè)備分配與回收139
6.5設(shè)備處理140
6.5.1設(shè)備驅(qū)動(dòng)程序140
6.5.2驅(qū)動(dòng)程序的處理過(guò)程141
6.6設(shè)備管理的實(shí)現(xiàn)技術(shù)142
6.6.1中斷技術(shù)142
6.6.2緩沖技術(shù)144
6.6.3假脫機(jī)技術(shù)147
6.7存儲(chǔ)設(shè)備148
6.7.1存儲(chǔ)設(shè)備類型149
6.7.2磁盤(pán)驅(qū)動(dòng)調(diào)度算法150
習(xí)題153
第7章文件管理154
7.1文件管理概述154
7.1.1文件與文件系統(tǒng)154
7.1.2文件的分類155
7.2文件結(jié)構(gòu)156
7.2.1文件的邏輯結(jié)構(gòu)157
7.2.2文件的物理結(jié)構(gòu)158
7.2.3文件的存取方法162
7.2.4記錄成組和分解163
7.3存儲(chǔ)空間管理164
7.3.1存儲(chǔ)空間的分配165
7.3.2存儲(chǔ)空間的管理165
7.4文件目錄168
7.4.1基本概念169
7.4.2文件目錄結(jié)構(gòu)170
7.5文件共享與安全174
7.5.1文件共享174
7.5.2文件安全175
7.6文件操作177
習(xí)題179
參考文獻(xiàn)181
第3章chapter3
進(jìn)程同步1.1微型計(jì)算機(jī)簡(jiǎn)介操作系統(tǒng)引入進(jìn)程后,雖然改善了資源的利用率,提高了系統(tǒng)的吞吐量,但是系統(tǒng)中的多個(gè)進(jìn)程由于競(jìng)爭(zhēng)使用系統(tǒng)資源,導(dǎo)致它們之間存在一定的相互依賴、相互制約的關(guān)系。為了有效地協(xié)調(diào)各個(gè)并發(fā)進(jìn)程間的關(guān)系,系統(tǒng)必須采用同步機(jī)制,確保進(jìn)程之間能正確地競(jìng)爭(zhēng)資源,并相互協(xié)調(diào)、相互合作。
3.1基本概念[4/5]3.1.1進(jìn)程的制約關(guān)系多道程序環(huán)境下,系統(tǒng)中存在著多個(gè)并發(fā)進(jìn)程。這些并發(fā)進(jìn)程之間可能相互獨(dú)立,即一個(gè)進(jìn)程的執(zhí)行不影響其他進(jìn)程的執(zhí)行,此時(shí)系統(tǒng)無(wú)須對(duì)這些并發(fā)進(jìn)程進(jìn)行特別控制;并發(fā)進(jìn)程之間也可能彼此相關(guān)、相互影響,即一個(gè)進(jìn)程的執(zhí)行可能影響其他進(jìn)程的執(zhí)行結(jié)果,此時(shí),系統(tǒng)就需要合理地控制和協(xié)調(diào)這些進(jìn)程的執(zhí)行。根據(jù)共享資源性質(zhì)的不同,并發(fā)進(jìn)程之間的關(guān)系可以分為間接制約關(guān)系和直接制約關(guān)系。
。1)間接制約關(guān)系:也稱“競(jìng)爭(zhēng)關(guān)系”,指系統(tǒng)中多個(gè)進(jìn)程訪問(wèn)相同的資源,其中一個(gè)進(jìn)程訪問(wèn)資源時(shí),其他需訪問(wèn)此資源的進(jìn)程必須等待,只有當(dāng)該進(jìn)程釋放該資源后,其他進(jìn)程才能訪問(wèn)。進(jìn)程的競(jìng)爭(zhēng)關(guān)系可通過(guò)進(jìn)程互斥方式來(lái)解決。
。2)直接制約關(guān)系:也稱“合作關(guān)系”,指系統(tǒng)中多個(gè)進(jìn)程需要相互合作才能完成同一任務(wù)。例如,假設(shè)輸入進(jìn)程和計(jì)算進(jìn)程共同使用一個(gè)單緩沖區(qū),那么當(dāng)輸入進(jìn)程將數(shù)據(jù)寫(xiě)入緩沖區(qū)后,計(jì)算進(jìn)程才能開(kāi)始計(jì)算;當(dāng)計(jì)算進(jìn)程將緩沖區(qū)中的數(shù)據(jù)取走后,輸入進(jìn)程才可以再次向緩沖區(qū)中寫(xiě)入數(shù)據(jù)。進(jìn)程的合作關(guān)系可通過(guò)進(jìn)程同步機(jī)制來(lái)實(shí)現(xiàn)。
3.1.2進(jìn)程互斥與同步[2]1.臨界資源及臨界區(qū)為了便于控制和管理競(jìng)爭(zhēng)資源,系統(tǒng)引入了臨界資源和臨界區(qū)的概念:
。1)臨界資源:指一次只允許一個(gè)進(jìn)程訪問(wèn)的資源。臨界資源在任何時(shí)刻都不允許兩個(gè)及以上并發(fā)進(jìn)程同時(shí)訪問(wèn)。系統(tǒng)中有許多獨(dú)占性硬件資源(如卡片輸入機(jī)和打印機(jī)等)和軟件資源(如變量、表格、隊(duì)列、棧和文件等)均屬于臨界資源。
。2)臨界區(qū):指進(jìn)程訪問(wèn)臨界資源的那段程序代碼。
系統(tǒng)若能保證進(jìn)程互斥地進(jìn)入各自的臨界區(qū),便可實(shí)現(xiàn)臨界資源的互斥訪問(wèn)。
2.進(jìn)程互斥
進(jìn)程互斥是指當(dāng)一個(gè)進(jìn)程進(jìn)入臨界區(qū)使用臨界資源時(shí),其他進(jìn)程必須等待。當(dāng)占用臨界資源的進(jìn)程退出臨界區(qū)后,另外一個(gè)進(jìn)程才被允許使用臨界資源。
◆計(jì)算機(jī)操作系統(tǒng)原理第◆3章進(jìn)程同步若要實(shí)現(xiàn)各進(jìn)程對(duì)臨界資源的互斥訪問(wèn),則需要保證各進(jìn)程互斥地進(jìn)入自己的臨界區(qū)。進(jìn)程在進(jìn)入臨界區(qū)之前,應(yīng)先對(duì)臨界資源進(jìn)行檢查,確認(rèn)該資源是否正在被訪問(wèn)。若臨界資源正被其他進(jìn)程訪問(wèn),則該進(jìn)程不能進(jìn)入臨界區(qū);若臨界資源空閑,該進(jìn)程便可以進(jìn)入臨界區(qū)對(duì)臨界資源進(jìn)行訪問(wèn),并將該資源的標(biāo)志設(shè)置為正在被訪問(wèn)。因此,進(jìn)程訪問(wèn)臨界資源前,應(yīng)增加一段用于進(jìn)行上述檢查的代碼,這段代碼稱為進(jìn)入臨界區(qū);臨界資源訪問(wèn)結(jié)束后,也要增加一段用于將臨界資源標(biāo)志恢復(fù)為未被訪問(wèn)的代碼,這段代碼稱為退出臨界區(qū)。臨界區(qū)的框架如下:do{
進(jìn)入臨界區(qū)
訪問(wèn)臨界資源
退出臨界區(qū)
其余代碼
}while(1);3.進(jìn)程同步
進(jìn)程同步是指多個(gè)進(jìn)程為了合作完成同一個(gè)任務(wù),在執(zhí)行次序上相互協(xié)調(diào)、相互合作,在一些關(guān)鍵點(diǎn)上還需要相互等待或相互通信。
進(jìn)程同步的例子在現(xiàn)實(shí)生活中隨處可見(jiàn),如司機(jī)與售票員的關(guān)系。公共汽車的司機(jī)負(fù)責(zé)開(kāi)車和到站停車,售票員負(fù)責(zé)售票和開(kāi)關(guān)車門(mén),他們之間是相互合作、相互配合的。例如車門(mén)關(guān)閉后才能啟動(dòng),到站停車后才能打開(kāi)車門(mén),即“啟動(dòng)汽車”在“關(guān)閉車門(mén)”之后,而“打開(kāi)車門(mén)”在“到站停車”之后。司機(jī)和售票員之間的活動(dòng)關(guān)系如圖31所示。
圖31司機(jī)與售票員的關(guān)系
若進(jìn)程P1和P2分別表示司機(jī)和售票員,當(dāng)它們并發(fā)向前推進(jìn)時(shí),則需滿足以下要求:
。1)若P1推進(jìn)到①,但P2未到達(dá)②時(shí),則P1應(yīng)等待,直到P2到達(dá)②為止。
。2)若P2推進(jìn)到④,但P1未到達(dá)③時(shí),則P2應(yīng)等待,直到P1到達(dá)③為止。
(3)若P1在①處等待,則當(dāng)P2到達(dá)②處時(shí),應(yīng)通知(喚醒)P1。
。4)若P2在④處等待,則當(dāng)P1到達(dá)③處時(shí),應(yīng)通知(喚醒)P2。
由此可知,為了協(xié)調(diào)進(jìn)程推進(jìn)次序,相互合作的并發(fā)進(jìn)程有時(shí)需要互相等待與互相喚醒。
4.同步與互斥的關(guān)系
同步與互斥是并發(fā)進(jìn)程之間兩種重要關(guān)系,其中互斥反映了進(jìn)程間的競(jìng)爭(zhēng)關(guān)系,而同步則反映了進(jìn)程間的合作關(guān)系。
進(jìn)程互斥是進(jìn)程同步的一種特殊情況。例如,某個(gè)進(jìn)程進(jìn)入臨界區(qū)時(shí),其他進(jìn)程不允許進(jìn)入臨界區(qū)。當(dāng)進(jìn)程完成任務(wù)離開(kāi)臨界區(qū),并歸還臨界資源后,喚醒其等待進(jìn)入臨界區(qū)的進(jìn)程。這說(shuō)明互斥的進(jìn)程也存在特殊的合作關(guān)系。因此,互斥是一種特殊的同步關(guān)系。
互斥所涉及的并發(fā)進(jìn)程之間只是競(jìng)爭(zhēng)獲得共享資源的使用權(quán),這種競(jìng)爭(zhēng)沒(méi)有固定的、必然的聯(lián)系,誰(shuí)競(jìng)爭(zhēng)到資源,誰(shuí)就擁有資源的使用權(quán),直到不需要時(shí)才歸還;而同步所涉及的并發(fā)進(jìn)程之間有一種必然的聯(lián)系,在進(jìn)程同步過(guò)程中,即使沒(méi)有進(jìn)程使用共享資源,尚未得到同步消息的進(jìn)程也不能去使用共享資源。
5.臨界區(qū)的管理準(zhǔn)則
為了實(shí)現(xiàn)進(jìn)程的同步與互斥,可以利用軟件方法或在系統(tǒng)中設(shè)置專門(mén)的同步機(jī)制,協(xié)調(diào)各個(gè)并發(fā)進(jìn)程。同步機(jī)制必須遵循以下4條準(zhǔn)則:
。1)閑則讓進(jìn):當(dāng)臨界資源處于空閑狀態(tài)時(shí),系統(tǒng)應(yīng)允許一個(gè)請(qǐng)求訪問(wèn)該臨界資源的進(jìn)程進(jìn)入自己的臨界區(qū),訪問(wèn)該臨界資源。
。2)忙則等待:當(dāng)臨界資源正在被訪問(wèn)時(shí),其他試圖進(jìn)入臨界區(qū)訪問(wèn)該臨界資源的進(jìn)程必須等待,以保證臨界資源的互斥訪問(wèn)。
。3)有限等待:對(duì)于等待訪問(wèn)臨界資源的進(jìn)程,系統(tǒng)應(yīng)保證這些等待進(jìn)程在有限時(shí)間內(nèi)能進(jìn)入臨界區(qū),訪問(wèn)臨界資源,以避免陷入“死等”狀態(tài)。
。4)讓權(quán)等待:當(dāng)進(jìn)程不能進(jìn)入臨界區(qū)訪問(wèn)臨界資源時(shí),應(yīng)立即釋放CPU,以免該進(jìn)程陷入“忙等”(即等待時(shí)占有CPU)狀態(tài)。
3.2同步機(jī)制
進(jìn)程同步機(jī)制的基本目標(biāo)是在功能上保證進(jìn)程能夠正確地互斥執(zhí)行各自的臨界區(qū),其具體的實(shí)現(xiàn)方法包括軟件方法、硬件方法、信號(hào)量方法和管程這四大類。
3.2.1軟件方法
軟件方法是指通過(guò)編寫(xiě)程序代碼方式進(jìn)入臨界區(qū),以訪問(wèn)臨界資源。此方法既適用于單CPU環(huán)境,也適用于多CPU環(huán)境,只需這些CPU共享一個(gè)存儲(chǔ)區(qū),且各個(gè)進(jìn)程對(duì)該存儲(chǔ)區(qū)串行訪問(wèn)即可。
下面通過(guò)程序偽代碼方式說(shuō)明實(shí)現(xiàn)進(jìn)程之間互斥訪問(wèn)臨界資源的軟件方法。
1.算法1
該算法的基本思想:若一個(gè)進(jìn)程申請(qǐng)使用臨界資源,應(yīng)先查看該資源當(dāng)前是否被一個(gè)進(jìn)程訪問(wèn)。若資源正在被訪問(wèn),則該進(jìn)程只能等待,否則進(jìn)入自己的臨界區(qū)執(zhí)行。下面是進(jìn)程P1和P2的程序偽代碼,其中inside1和inside2為布爾型變量,且初值均false,表示P1和P2均不在其臨界區(qū)內(nèi)。booleaninside1,inside2;
inside1=false;//P1不在其臨界區(qū)內(nèi)
inside2=false;//P2不在其臨界區(qū)內(nèi)
cobegin
processP1(){
while(inside2);
inside1=ture;
訪問(wèn)臨界資源;
inside1=false;
}
processP2(){
while(inside1);
inside2=ture;
訪問(wèn)臨界資源;
inside2=false;
}
coend該算法雖然實(shí)現(xiàn)了進(jìn)程互斥管理的“閑則讓進(jìn)”準(zhǔn)則,保證了每次只允許一個(gè)進(jìn)程進(jìn)入臨界區(qū),但違背了“忙則等待”準(zhǔn)則。例如,假設(shè)P1和P2先后執(zhí)行“while(inside2);”和“while(inside1);”,發(fā)現(xiàn)對(duì)方均不在臨界區(qū)內(nèi),則它們執(zhí)行“inside1=true;”和“inside2=true;”,并進(jìn)入了各自臨界區(qū)內(nèi),同時(shí)訪問(wèn)該臨界資源。
2.算法2
算法1違背了“忙則等待”準(zhǔn)則,沒(méi)有實(shí)現(xiàn)對(duì)臨界區(qū)的互斥訪問(wèn)。算法2對(duì)其進(jìn)行了改進(jìn),即進(jìn)程若想進(jìn)入臨界區(qū),必須搶先將自己的標(biāo)志設(shè)置為true,以防止對(duì)方再進(jìn)入臨界區(qū)。
算法2的程序偽代碼如下:booleaninside1,inside2;
inside1=false;//P1不在其臨界區(qū)內(nèi)
inside2=false;//P2不在其臨界區(qū)內(nèi)
cobegin
processP1(){
inside1=ture;
while(inside2);
訪問(wèn)臨界資源;
inside1=false;
}
processP2(){
inside2=ture;
while(inside1);
訪問(wèn)臨界資源;
inside2=false;
}
coend算法2雖然解決了“忙則等待”問(wèn)題,但存在著“有限等待”問(wèn)題。例如,當(dāng)P1和P2都判斷對(duì)方不在臨界區(qū)時(shí),P1執(zhí)行“inside1=true;”,此時(shí)P2同樣也執(zhí)行“inside2=true;”,然后P1和P2分別執(zhí)行“while(inside2);”和“while(inside1);”時(shí),均因?yàn)闂l件不滿足,而無(wú)法往下執(zhí)行,導(dǎo)致P1和P2將陷入無(wú)限等待狀態(tài)。
3.Peterson算法
Peterson采用了原語(yǔ)形式,提出了一種表述簡(jiǎn)單的算法,很好地解決了臨界區(qū)互斥的問(wèn)題,能滿足臨界區(qū)訪問(wèn)的四個(gè)條件。Peterson算法的基本思想:當(dāng)一個(gè)進(jìn)程需要進(jìn)入臨界區(qū),需先調(diào)用enter_section()函數(shù),判斷是否可以安全進(jìn)入臨界區(qū),若不能則等待;當(dāng)從臨界區(qū)退出后,調(diào)用leave_section()函數(shù),允許其他進(jìn)程進(jìn)入臨界區(qū)。Peterson算法流程如下:#defineFALSE0
#defineTRUE1
#defineN2//競(jìng)爭(zhēng)資源的進(jìn)程數(shù)目
intobserver;//輪到哪個(gè)進(jìn)程觀察要進(jìn)入臨界區(qū)的情況
intwanted_in(N);//各進(jìn)程希望進(jìn)入臨界區(qū)的標(biāo)志
enter_section(process)//進(jìn)入臨界區(qū)的互斥控制函數(shù)
intprocess;//進(jìn)程編號(hào),0或1
{
intother;//對(duì)方進(jìn)程號(hào)
other=1-process;
wanted_in\[process\]=TRUE;//本進(jìn)程要進(jìn)入臨界區(qū)
observer=process;//觀察進(jìn)入臨界區(qū)的情況,設(shè)置標(biāo)志位
while(observer==process&&wanted_in\[other\]);//等待,什么都不做
}
leaver_section(process)//退出臨界區(qū)函數(shù)
intprocess;
{
wanted_in\[process\]=FALSE;//離開(kāi)了臨界區(qū)
}3.2.2硬件方法
軟件方法相對(duì)復(fù)雜且容易出錯(cuò),因而現(xiàn)在系統(tǒng)較少采用。目前常用的是通過(guò)硬件方法實(shí)現(xiàn)同步互斥操作。
1.開(kāi)關(guān)中斷法
開(kāi)關(guān)中斷法采用中斷方式,借助硬件中斷機(jī)構(gòu)實(shí)現(xiàn)臨界區(qū)的管理。當(dāng)進(jìn)程進(jìn)入臨界區(qū)后,關(guān)閉系統(tǒng)中斷;離開(kāi)臨界區(qū)時(shí),重新開(kāi)啟系統(tǒng)中斷。由于進(jìn)程切換是由時(shí)鐘或其他中斷導(dǎo)致,因而當(dāng)中斷被屏蔽后,其他進(jìn)程無(wú)法獲得CPU調(diào)度,導(dǎo)致無(wú)法運(yùn)行,從而實(shí)現(xiàn)了臨界區(qū)的互斥訪問(wèn)。進(jìn)程進(jìn)入臨界區(qū)后,只要不自行掛起,就會(huì)連續(xù)地執(zhí)行,直至退出臨界區(qū),并在執(zhí)行開(kāi)中斷指令后,才可能重新調(diào)度,允許其他進(jìn)程進(jìn)入臨界區(qū)。do{
開(kāi)中斷
訪問(wèn)臨界資源
關(guān)中斷
其余代碼
}while(1);開(kāi)關(guān)中斷方法具有效率高、簡(jiǎn)單易行,且系統(tǒng)不會(huì)出現(xiàn)忙等現(xiàn)象;但其缺點(diǎn)也較明顯,如只適用于單CPU系統(tǒng)和系統(tǒng)效率較低,進(jìn)而影響系統(tǒng)處理緊迫事件的能力。多CPU系統(tǒng)中,禁止中斷只會(huì)影響當(dāng)前CPU,而其他CPU上并行執(zhí)行的進(jìn)程仍然能不受阻礙地進(jìn)入臨界區(qū)。
2.測(cè)試與設(shè)置方法
測(cè)試和設(shè)置(TestandSet,TS)方法利用指令讀取內(nèi)存中某個(gè)變量的值后,重新給它賦一個(gè)新值。TS指令定義如下:intTS(inttarget){
inttemp;
temp=target;
target=1;
return(temp);
}TS指令首先讀取當(dāng)前變量的值,作為參數(shù)返回,同時(shí)將其值置為1。由于該指令是原子操作,因此,它在執(zhí)行期間不允許被打斷,即所有語(yǔ)句要么全執(zhí)行,要么都不執(zhí)行。
TS指令可用來(lái)實(shí)現(xiàn)進(jìn)程互斥操作。具體地,設(shè)置一個(gè)共享變量(如lock),置其初值為0,表示臨界區(qū)內(nèi)沒(méi)有進(jìn)程。每個(gè)進(jìn)程在進(jìn)入臨界區(qū)之前,先使用TS指令測(cè)試該共享變量。若其值為0,則進(jìn)入臨界區(qū),并將其值置為1;若其值為1,則表明其他進(jìn)程已進(jìn)入臨界區(qū),此時(shí)該進(jìn)程需等待。進(jìn)程離開(kāi)臨界區(qū)時(shí),需將共享變量的值置為0。使用TS指令的互斥算法如下:while(1){
while(TS(lock));
訪問(wèn)臨界資源;
lock=0;
}盡管上面算法可以實(shí)現(xiàn)進(jìn)程互斥操作,但仍然存在“忙碌等待”,浪費(fèi)了CPU寶貴的資源,因而實(shí)際情況中較少使用。
3.swap指令
Swap指令也稱交換指令,其功能是交換兩個(gè)變量的值,具體實(shí)現(xiàn)如下:voidswap(inta,b){
inttemp;
temp=a;a=b;b=temp;
}Swap指令是原子操作,執(zhí)行期間是不可分割的。使用swap指令實(shí)現(xiàn)進(jìn)程互斥時(shí),需對(duì)臨界區(qū)(可表示為一組共享變量)定義一個(gè)全局變量(如lock),并對(duì)每個(gè)進(jìn)程定義一個(gè)局部變量(如key)。利用swap指令實(shí)現(xiàn)的進(jìn)程互斥算法具體實(shí)現(xiàn)如下:key=1;
do{
swap(&lock,&key);
whlie(key==1);
訪問(wèn)臨界資源;
lock=0;
其余代碼;
}while(1);進(jìn)程在進(jìn)入臨界區(qū)前,利用swap指令交換lock和key的值,檢查key的狀態(tài),判斷是否有進(jìn)程已進(jìn)入臨界區(qū)。若其他進(jìn)程已進(jìn)入,則該進(jìn)程不斷重復(fù)交換和檢查過(guò)程,直到其他進(jìn)程退出臨界區(qū)。
3.3信號(hào)量方法
由于硬件方法采用原語(yǔ)或指令形式,將修改和檢查作為一個(gè)不可分割的整體,因而比軟件方法具有明顯的優(yōu)勢(shì)。然而,進(jìn)入臨界區(qū)的進(jìn)程是隨機(jī)選擇的,使得部分進(jìn)程可能一直未被選擇,從而導(dǎo)致“饑餓”現(xiàn)象。為此,實(shí)際系統(tǒng)中常采用信號(hào)量機(jī)制和PV操作進(jìn)程互斥。
信號(hào)量機(jī)制是指兩個(gè)或多個(gè)進(jìn)程利用彼此之間收發(fā)的簡(jiǎn)單信號(hào)來(lái)實(shí)現(xiàn)并發(fā)執(zhí)行,其中進(jìn)程若未收到指定的信號(hào),則停留在特定的地方,直至收到了信號(hào)后才能繼續(xù)往下執(zhí)行。信號(hào)量機(jī)制目前是一種卓有成效的進(jìn)程同步機(jī)制,已被廣泛應(yīng)用于各種系統(tǒng)。
3.3.1信號(hào)量機(jī)制[2]1.信號(hào)量的概念信號(hào)量(Semaphore)是一種特殊變量,它用來(lái)表示系統(tǒng)中資源的使用情況,其值與臨界區(qū)內(nèi)所使用的臨界資源的狀態(tài)有關(guān)。如果信號(hào)量S是一個(gè)整型變量,則其值表示系統(tǒng)中某類資源的數(shù)目。S必須且只能設(shè)置一次初值,并大于或等于0。當(dāng)其值大于0時(shí),表示系統(tǒng)中對(duì)應(yīng)可用資源的數(shù)目;當(dāng)其值小于0時(shí),其絕對(duì)值表示等待該類資源的進(jìn)程的數(shù)目;當(dāng)其值等于0時(shí),表示系統(tǒng)中對(duì)應(yīng)資源已用完,且沒(méi)有進(jìn)程等待該類資源。
2.信號(hào)量的操作
信號(hào)量機(jī)制中,信號(hào)量的值僅能通過(guò)兩個(gè)標(biāo)準(zhǔn)的原語(yǔ)操作來(lái)改變,它們分別是P操作和V操作。信號(hào)量S的P、V操作表示為:P(S)和V(S),也稱為wait和signal。由于P、V操作是原語(yǔ),因此,它們?cè)趫?zhí)行的過(guò)程中不可中斷。
利用信號(hào)量和P、V操作既可以解決并發(fā)進(jìn)程對(duì)資源的競(jìng)爭(zhēng)問(wèn)題,又可以解決并發(fā)進(jìn)程的合作問(wèn)題。進(jìn)程在互斥訪問(wèn)臨界資源、進(jìn)入臨界區(qū)前,先執(zhí)行P操作,退出臨界區(qū)后應(yīng)執(zhí)行V操作。
3.3.2信號(hào)量的分類
信號(hào)量機(jī)制自提出以來(lái)得到了很大發(fā)展,已從最初的單信號(hào)量機(jī)制發(fā)展到多信號(hào)量機(jī)制。
1.單信號(hào)量機(jī)制
單信號(hào)量機(jī)制是指信號(hào)量所涉及的變量只有一個(gè)。根據(jù)變量的類型,單信號(hào)量機(jī)制包括互斥型信號(hào)量、整型信號(hào)量和記錄型信號(hào)量等,其中互斥型信號(hào)量最簡(jiǎn)單,而記錄型信號(hào)量表達(dá)能力最強(qiáng)。
(1)互斥型信號(hào)量
互斥型信號(hào)量也稱0/1信號(hào)量,它的值為0、1或FALSE、TRUE,表示當(dāng)前信號(hào)量所代表的臨界資源是否可用,其中1或TRUE表示臨界資源可用,而0或FALSE表示臨界資源當(dāng)前已被占用。
互斥型信號(hào)量定義為:booleanS;//互斥信號(hào)量的定義互斥型信號(hào)量的P、V操作描述如下:voidP(booleanS){
while(!S);//若信號(hào)量為FALSE,表示資源不可用,繼續(xù)測(cè)試
S=FALSE;//表示可以進(jìn)入臨界區(qū),同時(shí)不允許其他進(jìn)程進(jìn)入
}
voidV(booleanS){
S=TRUE;//允許其他進(jìn)程進(jìn)入臨界區(qū)
}(2)整型信號(hào)量
互斥型信號(hào)量雖然能保證進(jìn)程互斥地訪問(wèn)臨界資源,但不能反映臨界資源的數(shù)量。針對(duì)這個(gè)問(wèn)題,提出了整型信號(hào)量,即信號(hào)量的類型為整型。整型信號(hào)量S的初始值應(yīng)大于等于0,其值不僅能表示臨界資源是否空閑,還具有如下物理意義:
、賁>0:表示當(dāng)前有S個(gè)資源可用;
②S=0:表示當(dāng)前沒(méi)有資源可用,且沒(méi)有等待該資源的進(jìn)程;
、跾<0:表示當(dāng)前有|S|個(gè)進(jìn)程正在等待此資源。
整型信號(hào)量定義為:intS;//整型信號(hào)量定義整型信號(hào)量的P、V操作描述如下:voidP(intS){
S--;//表示申請(qǐng)一個(gè)資源
while(S<0);//若信號(hào)量為0,表示無(wú)資源可用,反復(fù)測(cè)試
}……
你還可能感興趣
我要評(píng)論
|