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