關(guān)于我們
書單推薦
新書推薦
|
計算機(jī)操作系統(tǒng)原理
全書共分7章, 第1章結(jié)束操作系統(tǒng)的概念、功能、類型及其發(fā)展; 第2章至第7章介紹操作系統(tǒng)對進(jìn)程管理、進(jìn)程同步與互斥、調(diào)度與死鎖、存儲器管理、設(shè)備管理和文件管理等。作者結(jié)合多年的實踐教學(xué)經(jīng)驗, 編寫了本教材, 其最大特色是各知識點簡潔突出。
作者多年從事相關(guān)領(lǐng)域的教學(xué)與科研工作,本書是教學(xué)、科研和項目開發(fā)的經(jīng)驗和體會。本書配有PPT課件、課后習(xí)題等課程資源。
前言
Foreword計算機(jī)系統(tǒng)是由硬件與軟件緊密結(jié)合的統(tǒng)一整體。操作系統(tǒng)是硬件功能的首次擴(kuò)充,也是其他系統(tǒng)軟件和應(yīng)用軟件建立的基礎(chǔ)和支撐平臺,在計算機(jī)系統(tǒng)中處于承上啟下的關(guān)鍵地位。操作系統(tǒng)是計算機(jī)系統(tǒng)的核心軟件,它管理和控制整個計算機(jī)系統(tǒng),使之高效、協(xié)調(diào)地運轉(zhuǎn),為用戶提供方便的服務(wù)。操作系統(tǒng)的設(shè)計及實現(xiàn)對整個計算機(jī)的功能和性能起著至關(guān)重要的作用。學(xué)習(xí)操作系統(tǒng)不僅要掌握其基本概念和原理,更重要的是要了解在操作系統(tǒng)中如何實現(xiàn)這些原理,并學(xué)以致用,靈活運用到實際工作中。操作系統(tǒng)是計算機(jī)專業(yè)的必修課程。掌握操作系統(tǒng)的基本概念、理解其工作原理,對于深入學(xué)習(xí)計算機(jī)乃至信息類專業(yè)知識、提升軟件開發(fā)和項目設(shè)計能力都有著非常重要的作用。
本教材以《國家中長期教育改革和發(fā)展規(guī)劃綱要(2010—2020年)》為指導(dǎo),針對計算機(jī)相關(guān)專業(yè)學(xué)生應(yīng)掌握的知識結(jié)構(gòu),參照教育部高等學(xué)校計算機(jī)類專業(yè)教學(xué)指導(dǎo)委員會關(guān)于操作系統(tǒng)課程的教學(xué)要求,參考國內(nèi)外比較成熟的教材,借鑒新理論和新技術(shù),結(jié)合當(dāng)前國內(nèi)普通高等院校學(xué)生的實際情況,根據(jù)作者多年的教學(xué)實踐經(jīng)驗編寫而成。教材以介紹操作系統(tǒng)的基本概念為主,闡述操作系統(tǒng)的基本原理、基本結(jié)構(gòu),剖析操作系統(tǒng)的工作過程、實現(xiàn)技術(shù)和運行機(jī)制,希望通過這種方式,使學(xué)生更系統(tǒng)、直觀、深刻地理解操作系統(tǒng),并依據(jù)所學(xué)知識,設(shè)計、開發(fā)自己的操作系統(tǒng)或應(yīng)用系統(tǒng)。本教材力求結(jié)構(gòu)清晰、概念清楚,內(nèi)容由淺入深、易教易學(xué),立足于培養(yǎng)學(xué)生的實際應(yīng)用能力。
本教材共分7章。第1章緒論,概括介紹操作系統(tǒng)的基本概念、主要功能、發(fā)展過程、基本特征;第2章進(jìn)程管理,首先介紹CPU管理的功能,然后介紹進(jìn)程的概念,進(jìn)程的特征、狀態(tài)及其轉(zhuǎn)換,進(jìn)程的描述與管理,線程的概念;第3章進(jìn)程同步,首先介紹并發(fā)程序的有關(guān)技術(shù),講解進(jìn)程互斥、同步機(jī)制,信號量和管程機(jī)制,隨后介紹進(jìn)程通信;第4章調(diào)度與死鎖,介紹進(jìn)程調(diào)度算法和死鎖的基本概念、必要條件和處理方法;第5章存儲器管理,講述存儲器管理的基本概念、各種分配管理方法和虛擬存儲管理技術(shù);第6章設(shè)備管理,講解設(shè)備控制、設(shè)備分配和處理等問題;第7章文件管理,介紹文件結(jié)構(gòu)、文件目錄和存儲空間管理等。每章均配備了適當(dāng)?shù)牧?xí)題,可幫助學(xué)生消化并掌握操作系統(tǒng)的知識。
本教材編寫分工如下:第1~5章由段正杰編寫,第6、7章由劉華文編寫。最后由劉華文負(fù)責(zé)統(tǒng)稿、審閱全書。本教材在編寫過程中得到了相關(guān)老師的大力支持和幫助,在此向他們表示衷心的感謝!本教材內(nèi)容參考和引用了國內(nèi)外相關(guān)著作、教材,以及部分互聯(lián)網(wǎng)上的技術(shù)資料,在此,一并表示深深的感謝!
由于編者水平有限,錯誤與不妥之處在所難免,希望廣大讀者批評指正,以便我們改進(jìn)、完善本教材,謝謝!
編者◆計算機(jī)操作系統(tǒng)原理
目錄Contents
第1章緒論1
1.1操作系統(tǒng)的概念1
1.1.1計算機(jī)體系結(jié)構(gòu)1
1.1.2操作系統(tǒng)的定義3
1.2操作系統(tǒng)的發(fā)展過程4
1.2.1操作系統(tǒng)的形成和發(fā)展4
1.2.2手工操作5
1.2.3批處理系統(tǒng)6
1.2.4分時系統(tǒng)7
1.2.5實時系統(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)的運行環(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ī)操作系統(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)程控制原語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信號量方法46
3.3.1信號量機(jī)制47
3.3.2信號量的分類47
3.3.3互斥與同步的實現(xiàn)50
3.4經(jīng)典的同步問題52
3.4.1生產(chǎn)者消費者問題52
3.4.2讀者寫者問題54
3.4.3哲學(xué)家進(jì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共享存儲器系統(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先來先服務(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時間片輪轉(zhuǎn)73
4.4.6多級反饋隊列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死鎖檢測與解除82
習(xí)題84
第5章存儲器管理87
5.1存儲器管理概述87
5.1.1存儲體系87
5.1.2存儲管理功能88
5.1.3地址變換89
5.1.4存儲管理方式91
5.2單一連續(xù)分配管理91
5.3分區(qū)存儲管理93
5.3.1固定分區(qū)存儲管理93
5.3.2可變分區(qū)存儲管理95
5.3.3可重定位分區(qū)存儲管理99
5.4覆蓋與交換100
5.4.1覆蓋技術(shù)100
5.4.2交換技術(shù)101
5.5分頁存儲管理102
5.5.1基本概念102
5.5.2頁表104
5.5.3地址轉(zhuǎn)換105
5.5.4分頁存儲管理的改進(jìn)106
5.6分段存儲管理109
5.6.1基本概念109
5.6.2段表110
5.6.3地址轉(zhuǎn)換110
5.6.4段的保護(hù)和共享111
5.6.5分頁和分段的區(qū)別111
5.7段頁式存儲管理112
5.7.1基本概念112
5.7.2段表和頁表113
5.7.3地址變換114
5.8虛擬存儲管理114
5.8.1基本原理115
5.8.2請求分頁存儲管理116
5.8.3請求分段存儲管理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ū)動程序140
6.5.2驅(qū)動程序的處理過程141
6.6設(shè)備管理的實現(xiàn)技術(shù)142
6.6.1中斷技術(shù)142
6.6.2緩沖技術(shù)144
6.6.3假脫機(jī)技術(shù)147
6.7存儲設(shè)備148
6.7.1存儲設(shè)備類型149
6.7.2磁盤驅(qū)動調(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存儲空間管理164
7.3.1存儲空間的分配165
7.3.2存儲空間的管理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ī)簡介操作系統(tǒng)引入進(jìn)程后,雖然改善了資源的利用率,提高了系統(tǒng)的吞吐量,但是系統(tǒng)中的多個進(jìn)程由于競爭使用系統(tǒng)資源,導(dǎo)致它們之間存在一定的相互依賴、相互制約的關(guān)系。為了有效地協(xié)調(diào)各個并發(fā)進(jìn)程間的關(guān)系,系統(tǒng)必須采用同步機(jī)制,確保進(jìn)程之間能正確地競爭資源,并相互協(xié)調(diào)、相互合作。
3.1基本概念[4/5]3.1.1進(jìn)程的制約關(guān)系多道程序環(huán)境下,系統(tǒng)中存在著多個并發(fā)進(jìn)程。這些并發(fā)進(jìn)程之間可能相互獨立,即一個進(jìn)程的執(zhí)行不影響其他進(jìn)程的執(zhí)行,此時系統(tǒng)無須對這些并發(fā)進(jìn)程進(jìn)行特別控制;并發(fā)進(jìn)程之間也可能彼此相關(guān)、相互影響,即一個進(jìn)程的執(zhí)行可能影響其他進(jìn)程的執(zhí)行結(jié)果,此時,系統(tǒng)就需要合理地控制和協(xié)調(diào)這些進(jìn)程的執(zhí)行。根據(jù)共享資源性質(zhì)的不同,并發(fā)進(jìn)程之間的關(guān)系可以分為間接制約關(guān)系和直接制約關(guān)系。
。1)間接制約關(guān)系:也稱“競爭關(guān)系”,指系統(tǒng)中多個進(jìn)程訪問相同的資源,其中一個進(jìn)程訪問資源時,其他需訪問此資源的進(jìn)程必須等待,只有當(dāng)該進(jìn)程釋放該資源后,其他進(jìn)程才能訪問。進(jìn)程的競爭關(guān)系可通過進(jìn)程互斥方式來解決。
。2)直接制約關(guān)系:也稱“合作關(guān)系”,指系統(tǒng)中多個進(jìn)程需要相互合作才能完成同一任務(wù)。例如,假設(shè)輸入進(jìn)程和計算進(jìn)程共同使用一個單緩沖區(qū),那么當(dāng)輸入進(jìn)程將數(shù)據(jù)寫入緩沖區(qū)后,計算進(jìn)程才能開始計算;當(dāng)計算進(jìn)程將緩沖區(qū)中的數(shù)據(jù)取走后,輸入進(jìn)程才可以再次向緩沖區(qū)中寫入數(shù)據(jù)。進(jìn)程的合作關(guān)系可通過進(jìn)程同步機(jī)制來實現(xiàn)。
3.1.2進(jìn)程互斥與同步[2]1.臨界資源及臨界區(qū)為了便于控制和管理競爭資源,系統(tǒng)引入了臨界資源和臨界區(qū)的概念:
(1)臨界資源:指一次只允許一個進(jìn)程訪問的資源。臨界資源在任何時刻都不允許兩個及以上并發(fā)進(jìn)程同時訪問。系統(tǒng)中有許多獨占性硬件資源(如卡片輸入機(jī)和打印機(jī)等)和軟件資源(如變量、表格、隊列、棧和文件等)均屬于臨界資源。
。2)臨界區(qū):指進(jìn)程訪問臨界資源的那段程序代碼。
系統(tǒng)若能保證進(jìn)程互斥地進(jìn)入各自的臨界區(qū),便可實現(xiàn)臨界資源的互斥訪問。
2.進(jìn)程互斥
進(jìn)程互斥是指當(dāng)一個進(jìn)程進(jìn)入臨界區(qū)使用臨界資源時,其他進(jìn)程必須等待。當(dāng)占用臨界資源的進(jìn)程退出臨界區(qū)后,另外一個進(jìn)程才被允許使用臨界資源。
◆計算機(jī)操作系統(tǒng)原理第◆3章進(jìn)程同步若要實現(xiàn)各進(jìn)程對臨界資源的互斥訪問,則需要保證各進(jìn)程互斥地進(jìn)入自己的臨界區(qū)。進(jìn)程在進(jìn)入臨界區(qū)之前,應(yīng)先對臨界資源進(jìn)行檢查,確認(rèn)該資源是否正在被訪問。若臨界資源正被其他進(jìn)程訪問,則該進(jìn)程不能進(jìn)入臨界區(qū);若臨界資源空閑,該進(jìn)程便可以進(jìn)入臨界區(qū)對臨界資源進(jìn)行訪問,并將該資源的標(biāo)志設(shè)置為正在被訪問。因此,進(jìn)程訪問臨界資源前,應(yīng)增加一段用于進(jìn)行上述檢查的代碼,這段代碼稱為進(jìn)入臨界區(qū);臨界資源訪問結(jié)束后,也要增加一段用于將臨界資源標(biāo)志恢復(fù)為未被訪問的代碼,這段代碼稱為退出臨界區(qū)。臨界區(qū)的框架如下:do{
進(jìn)入臨界區(qū)
訪問臨界資源
退出臨界區(qū)
其余代碼
}while(1);3.進(jìn)程同步
進(jìn)程同步是指多個進(jìn)程為了合作完成同一個任務(wù),在執(zhí)行次序上相互協(xié)調(diào)、相互合作,在一些關(guān)鍵點上還需要相互等待或相互通信。
進(jìn)程同步的例子在現(xiàn)實生活中隨處可見,如司機(jī)與售票員的關(guān)系。公共汽車的司機(jī)負(fù)責(zé)開車和到站停車,售票員負(fù)責(zé)售票和開關(guān)車門,他們之間是相互合作、相互配合的。例如車門關(guān)閉后才能啟動,到站停車后才能打開車門,即“啟動汽車”在“關(guān)閉車門”之后,而“打開車門”在“到站停車”之后。司機(jī)和售票員之間的活動關(guān)系如圖31所示。
圖31司機(jī)與售票員的關(guān)系
若進(jìn)程P1和P2分別表示司機(jī)和售票員,當(dāng)它們并發(fā)向前推進(jìn)時,則需滿足以下要求:
(1)若P1推進(jìn)到①,但P2未到達(dá)②時,則P1應(yīng)等待,直到P2到達(dá)②為止。
。2)若P2推進(jìn)到④,但P1未到達(dá)③時,則P2應(yīng)等待,直到P1到達(dá)③為止。
。3)若P1在①處等待,則當(dāng)P2到達(dá)②處時,應(yīng)通知(喚醒)P1。
。4)若P2在④處等待,則當(dāng)P1到達(dá)③處時,應(yīng)通知(喚醒)P2。
由此可知,為了協(xié)調(diào)進(jìn)程推進(jìn)次序,相互合作的并發(fā)進(jìn)程有時需要互相等待與互相喚醒。
4.同步與互斥的關(guān)系
同步與互斥是并發(fā)進(jìn)程之間兩種重要關(guān)系,其中互斥反映了進(jìn)程間的競爭關(guān)系,而同步則反映了進(jìn)程間的合作關(guān)系。
進(jìn)程互斥是進(jìn)程同步的一種特殊情況。例如,某個進(jìn)程進(jìn)入臨界區(qū)時,其他進(jìn)程不允許進(jìn)入臨界區(qū)。當(dāng)進(jìn)程完成任務(wù)離開臨界區(qū),并歸還臨界資源后,喚醒其等待進(jìn)入臨界區(qū)的進(jìn)程。這說明互斥的進(jìn)程也存在特殊的合作關(guān)系。因此,互斥是一種特殊的同步關(guān)系。
互斥所涉及的并發(fā)進(jìn)程之間只是競爭獲得共享資源的使用權(quán),這種競爭沒有固定的、必然的聯(lián)系,誰競爭到資源,誰就擁有資源的使用權(quán),直到不需要時才歸還;而同步所涉及的并發(fā)進(jìn)程之間有一種必然的聯(lián)系,在進(jìn)程同步過程中,即使沒有進(jìn)程使用共享資源,尚未得到同步消息的進(jìn)程也不能去使用共享資源。
5.臨界區(qū)的管理準(zhǔn)則
為了實現(xiàn)進(jìn)程的同步與互斥,可以利用軟件方法或在系統(tǒng)中設(shè)置專門的同步機(jī)制,協(xié)調(diào)各個并發(fā)進(jìn)程。同步機(jī)制必須遵循以下4條準(zhǔn)則:
(1)閑則讓進(jìn):當(dāng)臨界資源處于空閑狀態(tài)時,系統(tǒng)應(yīng)允許一個請求訪問該臨界資源的進(jìn)程進(jìn)入自己的臨界區(qū),訪問該臨界資源。
。2)忙則等待:當(dāng)臨界資源正在被訪問時,其他試圖進(jìn)入臨界區(qū)訪問該臨界資源的進(jìn)程必須等待,以保證臨界資源的互斥訪問。
。3)有限等待:對于等待訪問臨界資源的進(jìn)程,系統(tǒng)應(yīng)保證這些等待進(jìn)程在有限時間內(nèi)能進(jìn)入臨界區(qū),訪問臨界資源,以避免陷入“死等”狀態(tài)。
。4)讓權(quán)等待:當(dāng)進(jìn)程不能進(jìn)入臨界區(qū)訪問臨界資源時,應(yīng)立即釋放CPU,以免該進(jìn)程陷入“忙等”(即等待時占有CPU)狀態(tài)。
3.2同步機(jī)制
進(jìn)程同步機(jī)制的基本目標(biāo)是在功能上保證進(jìn)程能夠正確地互斥執(zhí)行各自的臨界區(qū),其具體的實現(xiàn)方法包括軟件方法、硬件方法、信號量方法和管程這四大類。
3.2.1軟件方法
軟件方法是指通過編寫程序代碼方式進(jìn)入臨界區(qū),以訪問臨界資源。此方法既適用于單CPU環(huán)境,也適用于多CPU環(huán)境,只需這些CPU共享一個存儲區(qū),且各個進(jìn)程對該存儲區(qū)串行訪問即可。
下面通過程序偽代碼方式說明實現(xiàn)進(jìn)程之間互斥訪問臨界資源的軟件方法。
1.算法1
該算法的基本思想:若一個進(jìn)程申請使用臨界資源,應(yīng)先查看該資源當(dāng)前是否被一個進(jì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;
訪問臨界資源;
inside1=false;
}
processP2(){
while(inside1);
inside2=ture;
訪問臨界資源;
inside2=false;
}
coend該算法雖然實現(xiàn)了進(jìn)程互斥管理的“閑則讓進(jìn)”準(zhǔn)則,保證了每次只允許一個進(jìn)程進(jìn)入臨界區(qū),但違背了“忙則等待”準(zhǔn)則。例如,假設(shè)P1和P2先后執(zhí)行“while(inside2);”和“while(inside1);”,發(fā)現(xiàn)對方均不在臨界區(qū)內(nèi),則它們執(zhí)行“inside1=true;”和“inside2=true;”,并進(jìn)入了各自臨界區(qū)內(nèi),同時訪問該臨界資源。
2.算法2
算法1違背了“忙則等待”準(zhǔn)則,沒有實現(xiàn)對臨界區(qū)的互斥訪問。算法2對其進(jìn)行了改進(jìn),即進(jìn)程若想進(jìn)入臨界區(qū),必須搶先將自己的標(biāo)志設(shè)置為true,以防止對方再進(jìn)入臨界區(qū)。
算法2的程序偽代碼如下:booleaninside1,inside2;
inside1=false;//P1不在其臨界區(qū)內(nèi)
inside2=false;//P2不在其臨界區(qū)內(nèi)
cobegin
processP1(){
inside1=ture;
while(inside2);
訪問臨界資源;
inside1=false;
}
processP2(){
inside2=ture;
while(inside1);
訪問臨界資源;
inside2=false;
}
coend算法2雖然解決了“忙則等待”問題,但存在著“有限等待”問題。例如,當(dāng)P1和P2都判斷對方不在臨界區(qū)時,P1執(zhí)行“inside1=true;”,此時P2同樣也執(zhí)行“inside2=true;”,然后P1和P2分別執(zhí)行“while(inside2);”和“while(inside1);”時,均因為條件不滿足,而無法往下執(zhí)行,導(dǎo)致P1和P2將陷入無限等待狀態(tài)。
3.Peterson算法
Peterson采用了原語形式,提出了一種表述簡單的算法,很好地解決了臨界區(qū)互斥的問題,能滿足臨界區(qū)訪問的四個條件。Peterson算法的基本思想:當(dāng)一個進(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ìn)程數(shù)目
intobserver;//輪到哪個進(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)程編號,0或1
{
intother;//對方進(jìn)程號
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;//離開了臨界區(qū)
}3.2.2硬件方法
軟件方法相對復(fù)雜且容易出錯,因而現(xiàn)在系統(tǒng)較少采用。目前常用的是通過硬件方法實現(xiàn)同步互斥操作。
1.開關(guān)中斷法
開關(guān)中斷法采用中斷方式,借助硬件中斷機(jī)構(gòu)實現(xiàn)臨界區(qū)的管理。當(dāng)進(jìn)程進(jìn)入臨界區(qū)后,關(guān)閉系統(tǒng)中斷;離開臨界區(qū)時,重新開啟系統(tǒng)中斷。由于進(jìn)程切換是由時鐘或其他中斷導(dǎo)致,因而當(dāng)中斷被屏蔽后,其他進(jìn)程無法獲得CPU調(diào)度,導(dǎo)致無法運行,從而實現(xiàn)了臨界區(qū)的互斥訪問。進(jìn)程進(jìn)入臨界區(qū)后,只要不自行掛起,就會連續(xù)地執(zhí)行,直至退出臨界區(qū),并在執(zhí)行開中斷指令后,才可能重新調(diào)度,允許其他進(jìn)程進(jìn)入臨界區(qū)。do{
開中斷
訪問臨界資源
關(guān)中斷
其余代碼
}while(1);開關(guān)中斷方法具有效率高、簡單易行,且系統(tǒng)不會出現(xiàn)忙等現(xiàn)象;但其缺點也較明顯,如只適用于單CPU系統(tǒng)和系統(tǒng)效率較低,進(jìn)而影響系統(tǒng)處理緊迫事件的能力。多CPU系統(tǒng)中,禁止中斷只會影響當(dāng)前CPU,而其他CPU上并行執(zhí)行的進(jìn)程仍然能不受阻礙地進(jìn)入臨界區(qū)。
2.測試與設(shè)置方法
測試和設(shè)置(TestandSet,TS)方法利用指令讀取內(nèi)存中某個變量的值后,重新給它賦一個新值。TS指令定義如下:intTS(inttarget){
inttemp;
temp=target;
target=1;
return(temp);
}TS指令首先讀取當(dāng)前變量的值,作為參數(shù)返回,同時將其值置為1。由于該指令是原子操作,因此,它在執(zhí)行期間不允許被打斷,即所有語句要么全執(zhí)行,要么都不執(zhí)行。
TS指令可用來實現(xiàn)進(jìn)程互斥操作。具體地,設(shè)置一個共享變量(如lock),置其初值為0,表示臨界區(qū)內(nèi)沒有進(jìn)程。每個進(jìn)程在進(jìn)入臨界區(qū)之前,先使用TS指令測試該共享變量。若其值為0,則進(jìn)入臨界區(qū),并將其值置為1;若其值為1,則表明其他進(jìn)程已進(jìn)入臨界區(qū),此時該進(jìn)程需等待。進(jìn)程離開臨界區(qū)時,需將共享變量的值置為0。使用TS指令的互斥算法如下:while(1){
while(TS(lock));
訪問臨界資源;
lock=0;
}盡管上面算法可以實現(xiàn)進(jìn)程互斥操作,但仍然存在“忙碌等待”,浪費了CPU寶貴的資源,因而實際情況中較少使用。
3.swap指令
Swap指令也稱交換指令,其功能是交換兩個變量的值,具體實現(xiàn)如下:voidswap(inta,b){
inttemp;
temp=a;a=b;b=temp;
}Swap指令是原子操作,執(zhí)行期間是不可分割的。使用swap指令實現(xiàn)進(jìn)程互斥時,需對臨界區(qū)(可表示為一組共享變量)定義一個全局變量(如lock),并對每個進(jìn)程定義一個局部變量(如key)。利用swap指令實現(xiàn)的進(jìn)程互斥算法具體實現(xiàn)如下:key=1;
do{
swap(&lock,&key);
whlie(key==1);
訪問臨界資源;
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ù)交換和檢查過程,直到其他進(jìn)程退出臨界區(qū)。
3.3信號量方法
由于硬件方法采用原語或指令形式,將修改和檢查作為一個不可分割的整體,因而比軟件方法具有明顯的優(yōu)勢。然而,進(jìn)入臨界區(qū)的進(jìn)程是隨機(jī)選擇的,使得部分進(jìn)程可能一直未被選擇,從而導(dǎo)致“饑餓”現(xiàn)象。為此,實際系統(tǒng)中常采用信號量機(jī)制和PV操作進(jìn)程互斥。
信號量機(jī)制是指兩個或多個進(jìn)程利用彼此之間收發(fā)的簡單信號來實現(xiàn)并發(fā)執(zhí)行,其中進(jìn)程若未收到指定的信號,則停留在特定的地方,直至收到了信號后才能繼續(xù)往下執(zhí)行。信號量機(jī)制目前是一種卓有成效的進(jìn)程同步機(jī)制,已被廣泛應(yīng)用于各種系統(tǒng)。
3.3.1信號量機(jī)制[2]1.信號量的概念信號量(Semaphore)是一種特殊變量,它用來表示系統(tǒng)中資源的使用情況,其值與臨界區(qū)內(nèi)所使用的臨界資源的狀態(tài)有關(guān)。如果信號量S是一個整型變量,則其值表示系統(tǒng)中某類資源的數(shù)目。S必須且只能設(shè)置一次初值,并大于或等于0。當(dāng)其值大于0時,表示系統(tǒng)中對應(yīng)可用資源的數(shù)目;當(dāng)其值小于0時,其絕對值表示等待該類資源的進(jìn)程的數(shù)目;當(dāng)其值等于0時,表示系統(tǒng)中對應(yīng)資源已用完,且沒有進(jìn)程等待該類資源。
2.信號量的操作
信號量機(jī)制中,信號量的值僅能通過兩個標(biāo)準(zhǔn)的原語操作來改變,它們分別是P操作和V操作。信號量S的P、V操作表示為:P(S)和V(S),也稱為wait和signal。由于P、V操作是原語,因此,它們在執(zhí)行的過程中不可中斷。
利用信號量和P、V操作既可以解決并發(fā)進(jìn)程對資源的競爭問題,又可以解決并發(fā)進(jìn)程的合作問題。進(jìn)程在互斥訪問臨界資源、進(jìn)入臨界區(qū)前,先執(zhí)行P操作,退出臨界區(qū)后應(yīng)執(zhí)行V操作。
3.3.2信號量的分類
信號量機(jī)制自提出以來得到了很大發(fā)展,已從最初的單信號量機(jī)制發(fā)展到多信號量機(jī)制。
1.單信號量機(jī)制
單信號量機(jī)制是指信號量所涉及的變量只有一個。根據(jù)變量的類型,單信號量機(jī)制包括互斥型信號量、整型信號量和記錄型信號量等,其中互斥型信號量最簡單,而記錄型信號量表達(dá)能力最強(qiáng)。
。1)互斥型信號量
互斥型信號量也稱0/1信號量,它的值為0、1或FALSE、TRUE,表示當(dāng)前信號量所代表的臨界資源是否可用,其中1或TRUE表示臨界資源可用,而0或FALSE表示臨界資源當(dāng)前已被占用。
互斥型信號量定義為:booleanS;//互斥信號量的定義互斥型信號量的P、V操作描述如下:voidP(booleanS){
while(!S);//若信號量為FALSE,表示資源不可用,繼續(xù)測試
S=FALSE;//表示可以進(jìn)入臨界區(qū),同時不允許其他進(jìn)程進(jìn)入
}
voidV(booleanS){
S=TRUE;//允許其他進(jìn)程進(jìn)入臨界區(qū)
}(2)整型信號量
互斥型信號量雖然能保證進(jìn)程互斥地訪問臨界資源,但不能反映臨界資源的數(shù)量。針對這個問題,提出了整型信號量,即信號量的類型為整型。整型信號量S的初始值應(yīng)大于等于0,其值不僅能表示臨界資源是否空閑,還具有如下物理意義:
①S>0:表示當(dāng)前有S個資源可用;
、赟=0:表示當(dāng)前沒有資源可用,且沒有等待該資源的進(jìn)程;
③S<0:表示當(dāng)前有|S|個進(jìn)程正在等待此資源。
整型信號量定義為:intS;//整型信號量定義整型信號量的P、V操作描述如下:voidP(intS){
S--;//表示申請一個資源
while(S<0);//若信號量為0,表示無資源可用,反復(fù)測試
}……
你還可能感興趣
我要評論
|