第二章進(jìn)程和線程_第1頁(yè)
第二章進(jìn)程和線程_第2頁(yè)
第二章進(jìn)程和線程_第3頁(yè)
第二章進(jìn)程和線程_第4頁(yè)
第二章進(jìn)程和線程_第5頁(yè)
已閱讀5頁(yè),還剩140頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第第2章章 進(jìn)程和線程進(jìn)程和線程 第第2章章 進(jìn)程和線程進(jìn)程和線程 現(xiàn)代操作系統(tǒng)的重要特性是現(xiàn)代操作系統(tǒng)的重要特性是程序的程序的并發(fā)性和資源的共享性并發(fā)性和資源的共享性。這二者相互聯(lián)。這二者相互聯(lián)系、相互依賴。為了滿足多用戶并發(fā)計(jì)系、相互依賴。為了滿足多用戶并發(fā)計(jì)算的要求,現(xiàn)代操作系統(tǒng)是圍繞算的要求,現(xiàn)代操作系統(tǒng)是圍繞進(jìn)程進(jìn)程這這個(gè)概念設(shè)計(jì)和構(gòu)造的。個(gè)概念設(shè)計(jì)和構(gòu)造的。 傳統(tǒng)的操作系統(tǒng)中,程序不能獨(dú)立運(yùn)行,作傳統(tǒng)的操作系統(tǒng)中,程序不能獨(dú)立運(yùn)行,作為為資源分配資源分配和和獨(dú)立運(yùn)行獨(dú)立運(yùn)行的基本單位都是進(jìn)程的基本單位都是進(jìn)程 操作系統(tǒng)所具有的三大特征也是基于進(jìn)程而操作系統(tǒng)所具有的三大特征也是基于進(jìn)

2、程而形成的,應(yīng)從形成的,應(yīng)從進(jìn)程的角度進(jìn)程的角度來研究操作系統(tǒng)來研究操作系統(tǒng) 在操作系統(tǒng)中,進(jìn)程是一個(gè)極其重要的概念在操作系統(tǒng)中,進(jìn)程是一個(gè)極其重要的概念2.1 進(jìn)程概念進(jìn)程概念n2.1.1 多道程序設(shè)計(jì)多道程序設(shè)計(jì)n2.1.2 進(jìn)程概念進(jìn)程概念2.1.1 多道程序設(shè)計(jì)多道程序設(shè)計(jì) 在早期的單道程序或單用戶系統(tǒng)中,計(jì)算在早期的單道程序或單用戶系統(tǒng)中,計(jì)算機(jī)機(jī)按順序執(zhí)行按順序執(zhí)行程序,各個(gè)用戶程序也是順序執(zhí)程序,各個(gè)用戶程序也是順序執(zhí)行的。行的。I1C1P1P2I2C2 程序的順序執(zhí)行程序的順序執(zhí)行 1順序程序活動(dòng)的特點(diǎn)順序程序活動(dòng)的特點(diǎn)n程序執(zhí)行的程序執(zhí)行的順序性順序性n程序運(yùn)行環(huán)境的程序運(yùn)行

3、環(huán)境的封閉性封閉性 n程序執(zhí)行結(jié)果的程序執(zhí)行結(jié)果的可再現(xiàn)性可再現(xiàn)性 順序程序的封閉性和可再現(xiàn)性,為程順序程序的封閉性和可再現(xiàn)性,為程序員調(diào)試程序帶來了很大方便。但由序員調(diào)試程序帶來了很大方便。但由于資源獨(dú)占,使于資源獨(dú)占,使系統(tǒng)資源利用率非常系統(tǒng)資源利用率非常低。低。n2 多道程序設(shè)計(jì)多道程序設(shè)計(jì)n內(nèi)存中同時(shí)存放多道程序內(nèi)存中同時(shí)存放多道程序n程序并發(fā)執(zhí)行(下頁(yè)圖)程序并發(fā)執(zhí)行(下頁(yè)圖)n提高資源利用率和系統(tǒng)吞吐量提高資源利用率和系統(tǒng)吞吐量 多道批處理系統(tǒng)多道批處理系統(tǒng) 3程序并發(fā)執(zhí)行的特征程序并發(fā)執(zhí)行的特征 失去封閉性。失去封閉性。 由于程序的并發(fā)執(zhí)行,系統(tǒng)中的資源不再為一個(gè)程序獨(dú)占,由于程

4、序的并發(fā)執(zhí)行,系統(tǒng)中的資源不再為一個(gè)程序獨(dú)占,因此資源的狀態(tài)也不再由一個(gè)程序決定,而是由并發(fā)執(zhí)行的因此資源的狀態(tài)也不再由一個(gè)程序決定,而是由并發(fā)執(zhí)行的多道程序決定。多道程序決定。 失去對(duì)應(yīng)性:程序與計(jì)算不再一一對(duì)應(yīng)。失去對(duì)應(yīng)性:程序與計(jì)算不再一一對(duì)應(yīng)。 并發(fā)程序在執(zhí)行期間相互制約。并發(fā)程序在執(zhí)行期間相互制約。 程序并發(fā)執(zhí)行時(shí),由于資源共享,使得一些邏輯上相互獨(dú)立程序并發(fā)執(zhí)行時(shí),由于資源共享,使得一些邏輯上相互獨(dú)立的幾道程序之間發(fā)生了相互制約關(guān)系。相互制約將導(dǎo)致并發(fā)的幾道程序之間發(fā)生了相互制約關(guān)系。相互制約將導(dǎo)致并發(fā)程序具有程序具有“執(zhí)行執(zhí)行暫停暫停執(zhí)行執(zhí)行”這種間斷性的活動(dòng)規(guī)律。這種間斷性的活

5、動(dòng)規(guī)律。2.1.2 進(jìn)程概念進(jìn)程概念 1引入:用引入:用程序這個(gè)靜態(tài)概念已經(jīng)不能如實(shí)反映程程序這個(gè)靜態(tài)概念已經(jīng)不能如實(shí)反映程序并發(fā)執(zhí)行過程中的這些特征序并發(fā)執(zhí)行過程中的這些特征。2進(jìn)程概念進(jìn)程概念n進(jìn)程定義為進(jìn)程定義為:程序在并發(fā)環(huán)境中的執(zhí)行過程程序在并發(fā)環(huán)境中的執(zhí)行過程(p29) n進(jìn)程進(jìn)程最根本的屬性是最根本的屬性是動(dòng)態(tài)性動(dòng)態(tài)性和和并發(fā)性并發(fā)性。 最早使用進(jìn)程最早使用進(jìn)程(process)(process)概念進(jìn)行操作概念進(jìn)行操作系統(tǒng)設(shè)計(jì)的是美國(guó)的麻省理工學(xué)院在系統(tǒng)設(shè)計(jì)的是美國(guó)的麻省理工學(xué)院在MULTICSMULTICS系統(tǒng)和系統(tǒng)和IBMIBM公司的公司的CTSS/360CTSS/360系

6、統(tǒng)上系統(tǒng)上實(shí)現(xiàn)的。只是實(shí)現(xiàn)的。只是IBM/360IBM/360使用了另一個(gè)術(shù)語(yǔ)使用了另一個(gè)術(shù)語(yǔ)任務(wù)任務(wù)(task)(task),但兩者的實(shí)際含義是相同的。,但兩者的實(shí)際含義是相同的。 “進(jìn)程進(jìn)程”是操作系統(tǒng)中最基本、最是操作系統(tǒng)中最基本、最重要的概念之一,重要的概念之一,它對(duì)理解、描述和它對(duì)理解、描述和設(shè)計(jì)操作系統(tǒng)都有非常重要的意義設(shè)計(jì)操作系統(tǒng)都有非常重要的意義。進(jìn)程和程序的區(qū)別進(jìn)程和程序的區(qū)別(1)動(dòng)態(tài)性)動(dòng)態(tài)性n進(jìn)程進(jìn)程是程序的一次執(zhí)行,它是一個(gè)是程序的一次執(zhí)行,它是一個(gè)動(dòng)態(tài)的概動(dòng)態(tài)的概 念念;程序程序是完成某個(gè)特定功能的指令的有序序是完成某個(gè)特定功能的指令的有序序列,它是一個(gè)列,它是一個(gè)

7、靜態(tài)的概念靜態(tài)的概念。n程序可以作為一種軟件資源長(zhǎng)期保存。進(jìn)程是程序可以作為一種軟件資源長(zhǎng)期保存。進(jìn)程是把程序作為它的運(yùn)行實(shí)體,沒有程序,也就沒把程序作為它的運(yùn)行實(shí)體,沒有程序,也就沒有進(jìn)程。有進(jìn)程。 (2)并發(fā)性)并發(fā)性n進(jìn)程是可以并發(fā)執(zhí)行的進(jìn)程是可以并發(fā)執(zhí)行的系統(tǒng)中的多進(jìn)程可以按照自己獨(dú)立的、不可系統(tǒng)中的多進(jìn)程可以按照自己獨(dú)立的、不可預(yù)知的速度推進(jìn)。預(yù)知的速度推進(jìn)。n程序通常不能作為一個(gè)獨(dú)立運(yùn)行的單位而并程序通常不能作為一個(gè)獨(dú)立運(yùn)行的單位而并發(fā)執(zhí)行發(fā)執(zhí)行 (3)非對(duì)應(yīng)性)非對(duì)應(yīng)性 程序和進(jìn)程無一一對(duì)應(yīng)關(guān)系程序和進(jìn)程無一一對(duì)應(yīng)關(guān)系(4)異步性)異步性n 各進(jìn)程在并發(fā)執(zhí)行過程中相互制約,造成各

8、進(jìn)程在并發(fā)執(zhí)行過程中相互制約,造成各自前進(jìn)速度的不可預(yù)測(cè)性。各自前進(jìn)速度的不可預(yù)測(cè)性。n 程序是靜態(tài)的,不具備異步特征程序是靜態(tài)的,不具備異步特征 3進(jìn)程的基本特征進(jìn)程的基本特征 (1)動(dòng)態(tài)性)動(dòng)態(tài)性 進(jìn)程是程序的一次執(zhí)行過程,它是臨時(shí)的、有生命期進(jìn)程是程序的一次執(zhí)行過程,它是臨時(shí)的、有生命期的。表現(xiàn)在它由創(chuàng)建而產(chǎn)生,完成任務(wù)后被撤消。的。表現(xiàn)在它由創(chuàng)建而產(chǎn)生,完成任務(wù)后被撤消。(2)并發(fā)性)并發(fā)性 進(jìn)程是可以并發(fā)執(zhí)行的。系統(tǒng)中的各個(gè)進(jìn)程可以按照進(jìn)程是可以并發(fā)執(zhí)行的。系統(tǒng)中的各個(gè)進(jìn)程可以按照自己獨(dú)立的、不可預(yù)知的速度推進(jìn)。自己獨(dú)立的、不可預(yù)知的速度推進(jìn)。(3)調(diào)度性)調(diào)度性 進(jìn)程是系統(tǒng)進(jìn)行資源

9、分配和調(diào)度的一個(gè)獨(dú)立單位進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位2.2 進(jìn)程的狀態(tài)和組成進(jìn)程的狀態(tài)和組成2.2.1 進(jìn)程的狀態(tài)及其轉(zhuǎn)換進(jìn)程的狀態(tài)及其轉(zhuǎn)換2.2.2 進(jìn)程描述進(jìn)程描述2.2.3 進(jìn)程隊(duì)列進(jìn)程隊(duì)列2.2.1 進(jìn)程的狀態(tài)及其轉(zhuǎn)換進(jìn)程的狀態(tài)及其轉(zhuǎn)換1進(jìn)程的基本狀態(tài)進(jìn)程的基本狀態(tài)(1)(1)就緒(就緒(ReadyReady)狀態(tài):)狀態(tài):一個(gè)進(jìn)程已經(jīng)具備運(yùn)行條件,但由于無一個(gè)進(jìn)程已經(jīng)具備運(yùn)行條件,但由于無CPUCPU暫暫時(shí)不能運(yùn)行的狀態(tài)(當(dāng)調(diào)度給其時(shí)不能運(yùn)行的狀態(tài)(當(dāng)調(diào)度給其CPUCPU時(shí),立即時(shí),立即可以運(yùn)行)可以運(yùn)行)(2)(2)執(zhí)行狀態(tài)執(zhí)行狀態(tài)(Running)(Running)

10、 進(jìn)程占有進(jìn)程占有CPU,并在,并在CPU上運(yùn)行上運(yùn)行(3)(3)阻塞狀態(tài)阻塞狀態(tài)(blocked) (blocked) 又稱等待態(tài)。又稱等待態(tài)。 指進(jìn)程因等待某種事件的發(fā)生而暫時(shí)不指進(jìn)程因等待某種事件的發(fā)生而暫時(shí)不能運(yùn)行的狀態(tài)。能運(yùn)行的狀態(tài)。 (即使(即使CPUCPU空閑,該進(jìn)程也不可運(yùn)行)空閑,該進(jìn)程也不可運(yùn)行) 上述三種狀態(tài)是進(jìn)程上述三種狀態(tài)是進(jìn)程最基本最基本的狀態(tài),在實(shí)際的的狀態(tài),在實(shí)際的操作系統(tǒng)實(shí)現(xiàn)中,進(jìn)程遠(yuǎn)不止這三種狀態(tài)。進(jìn)操作系統(tǒng)實(shí)現(xiàn)中,進(jìn)程遠(yuǎn)不止這三種狀態(tài)。進(jìn)程從無到有是由創(chuàng)建而產(chǎn)生,故它的起點(diǎn)應(yīng)為程從無到有是由創(chuàng)建而產(chǎn)生,故它的起點(diǎn)應(yīng)為新建狀態(tài)(新建狀態(tài)(NewNew) ,當(dāng)

11、進(jìn)程運(yùn)行完成時(shí)要消亡,當(dāng)進(jìn)程運(yùn)行完成時(shí)要消亡,此時(shí)的狀態(tài)為此時(shí)的狀態(tài)為終止?fàn)顟B(tài)(終止?fàn)顟B(tài)(TerminatedTerminated)運(yùn)行運(yùn)行狀態(tài)狀態(tài)就緒就緒狀態(tài)狀態(tài)阻塞阻塞狀態(tài)狀態(tài)等待某事件發(fā)生等待某事件發(fā)生(如等待(如等待I/O)所等待事件發(fā)生所等待事件發(fā)生(如(如I/O完成)完成)分到分到CPU時(shí)間片到時(shí)間片到 三種狀態(tài)的相互轉(zhuǎn)換如下圖所示:三種狀態(tài)的相互轉(zhuǎn)換如下圖所示:圖圖2-1 進(jìn)程狀態(tài)及其轉(zhuǎn)換進(jìn)程狀態(tài)及其轉(zhuǎn)換圖圖2-2 2-2 進(jìn)程的進(jìn)程的5 5種基本狀態(tài)及其轉(zhuǎn)換種基本狀態(tài)及其轉(zhuǎn)換2進(jìn)程狀態(tài)的轉(zhuǎn)換進(jìn)程狀態(tài)的轉(zhuǎn)換 在進(jìn)程運(yùn)行過程中,由于進(jìn)程自身進(jìn)展情況及外界環(huán)境在進(jìn)程運(yùn)行過程中,由于進(jìn)

12、程自身進(jìn)展情況及外界環(huán)境的變化,進(jìn)程的狀態(tài)可以依據(jù)一定的條件相互轉(zhuǎn)換:的變化,進(jìn)程的狀態(tài)可以依據(jù)一定的條件相互轉(zhuǎn)換:新建新建就緒就緒就緒就緒運(yùn)行運(yùn)行運(yùn)行運(yùn)行阻塞阻塞阻塞阻塞就緒就緒運(yùn)行運(yùn)行就緒就緒運(yùn)行運(yùn)行終止終止n就緒就緒 - - 運(yùn)行運(yùn)行n調(diào)度程序選擇一個(gè)新的進(jìn)程運(yùn)行調(diào)度程序選擇一個(gè)新的進(jìn)程運(yùn)行n運(yùn)行運(yùn)行 - - 就緒就緒n運(yùn)行進(jìn)程用完了時(shí)間片運(yùn)行進(jìn)程用完了時(shí)間片n運(yùn)行進(jìn)程被中斷,因?yàn)橐桓邇?yōu)先級(jí)進(jìn)程處于運(yùn)行進(jìn)程被中斷,因?yàn)橐桓邇?yōu)先級(jí)進(jìn)程處于就緒狀態(tài)就緒狀態(tài)n運(yùn)行運(yùn)行 - - 阻塞阻塞n當(dāng)一進(jìn)程必須等待時(shí)當(dāng)一進(jìn)程必須等待時(shí)nOS尚未完成服務(wù)尚未完成服務(wù)n對(duì)一資源的訪問尚不能進(jìn)行對(duì)一資源的訪問尚

13、不能進(jìn)行n初始化初始化I/O 且必須等待結(jié)果且必須等待結(jié)果n等待某一進(jìn)程提供輸入等待某一進(jìn)程提供輸入n阻塞阻塞 - - 就緒就緒n當(dāng)所等待的事件發(fā)生時(shí)當(dāng)所等待的事件發(fā)生時(shí)【思考題思考題】1 1如果系統(tǒng)中有如果系統(tǒng)中有N N個(gè)進(jìn)程,運(yùn)行的進(jìn)程最多幾個(gè),個(gè)進(jìn)程,運(yùn)行的進(jìn)程最多幾個(gè),最少幾個(gè);就緒進(jìn)程最多幾個(gè)最少幾個(gè);等待最少幾個(gè);就緒進(jìn)程最多幾個(gè)最少幾個(gè);等待進(jìn)程最多幾個(gè),最少幾個(gè)?進(jìn)程最多幾個(gè),最少幾個(gè)?2. 2. 有沒有這樣的狀態(tài)轉(zhuǎn)換,為什么?有沒有這樣的狀態(tài)轉(zhuǎn)換,為什么? 阻塞阻塞運(yùn)行;運(yùn)行; 就緒就緒阻塞阻塞3. 3. 一個(gè)狀態(tài)轉(zhuǎn)換的發(fā)生,是否一定導(dǎo)致另一個(gè)轉(zhuǎn)一個(gè)狀態(tài)轉(zhuǎn)換的發(fā)生,是否一定導(dǎo)

14、致另一個(gè)轉(zhuǎn)換發(fā)生,列出所有的可能換發(fā)生,列出所有的可能2.2.2 進(jìn)程描述進(jìn)程描述1進(jìn)程映像進(jìn)程映像n進(jìn)程映像進(jìn)程映像由它的由它的(用戶)地址空間(用戶)地址空間內(nèi)容、硬件寄存器內(nèi)容、硬件寄存器內(nèi)容和與該進(jìn)程有內(nèi)容和與該進(jìn)程有關(guān)的核心數(shù)據(jù)結(jié)構(gòu)關(guān)的核心數(shù)據(jù)結(jié)構(gòu)組成組成。 圖圖2-3 進(jìn)程映像模型進(jìn)程映像模型 2進(jìn)程控制塊的組成進(jìn)程控制塊的組成n進(jìn)程控制塊進(jìn)程控制塊(PCB)有時(shí)也稱進(jìn)程描述塊)有時(shí)也稱進(jìn)程描述塊(Process Descriptor),它是進(jìn)程組成),它是進(jìn)程組成中中最關(guān)鍵最關(guān)鍵的部分,其中含有進(jìn)程的描述信的部分,其中含有進(jìn)程的描述信息和控制信息,是進(jìn)程動(dòng)態(tài)特性的集中反息和控制信

15、息,是進(jìn)程動(dòng)態(tài)特性的集中反映,是系統(tǒng)對(duì)進(jìn)程施行識(shí)別和控制的依據(jù)映,是系統(tǒng)對(duì)進(jìn)程施行識(shí)別和控制的依據(jù)。進(jìn)程控制塊一般包括以下內(nèi)容:進(jìn)程控制塊一般包括以下內(nèi)容:n進(jìn)程名進(jìn)程名n特征信息特征信息n進(jìn)程狀態(tài)信息進(jìn)程狀態(tài)信息n調(diào)度優(yōu)先權(quán)調(diào)度優(yōu)先權(quán)n通信信息通信信息n現(xiàn)場(chǎng)保護(hù)區(qū)現(xiàn)場(chǎng)保護(hù)區(qū)n資源需求資源需求n進(jìn)程實(shí)體信息進(jìn)程實(shí)體信息n族系關(guān)系族系關(guān)系n其他信息其他信息3進(jìn)程控制塊的作用進(jìn)程控制塊的作用n每個(gè)進(jìn)程有每個(gè)進(jìn)程有惟一惟一的進(jìn)程控制塊的進(jìn)程控制塊n系統(tǒng)利用系統(tǒng)利用PCB來控制和管理進(jìn)程來控制和管理進(jìn)程nPCB是進(jìn)程存在的唯一標(biāo)志是進(jìn)程存在的唯一標(biāo)志2.2.3 進(jìn)程隊(duì)列進(jìn)程隊(duì)列 為了便于查找,系統(tǒng)把所

16、有的為了便于查找,系統(tǒng)把所有的PCBPCB用用適當(dāng)?shù)姆绞浇M織起來,一般大概有以下三適當(dāng)?shù)姆绞浇M織起來,一般大概有以下三種形式:種形式:(1) (1) 線性方式線性方式 (2) (2) 鏈接方式鏈接方式(3) (3) 索引方式索引方式 1線性方式線性方式 圖圖2-4 PCB線性隊(duì)列示意圖線性隊(duì)列示意圖 優(yōu)點(diǎn)是簡(jiǎn)單,容易實(shí)現(xiàn)。缺點(diǎn)是系統(tǒng)開銷大優(yōu)點(diǎn)是簡(jiǎn)單,容易實(shí)現(xiàn)。缺點(diǎn)是系統(tǒng)開銷大。查找查找一個(gè)指定的一個(gè)指定的PCB較費(fèi)時(shí)間,較費(fèi)時(shí)間,平均要花費(fèi)半個(gè)平均要花費(fèi)半個(gè)PCB表表長(zhǎng)的時(shí)間長(zhǎng)的時(shí)間。早期的早期的UNIX系統(tǒng)就是采用這種形式的表。系統(tǒng)就是采用這種形式的表。2鏈接方式鏈接方式l把處于把處于同一狀

17、態(tài)同一狀態(tài)的進(jìn)程按照一定方式鏈接成一個(gè)的進(jìn)程按照一定方式鏈接成一個(gè)隊(duì)列隊(duì)列。就緒隊(duì)列就緒隊(duì)列阻塞隊(duì)列:根據(jù)阻塞的原因不同組織成多個(gè)阻塞隊(duì)列阻塞隊(duì)列:根據(jù)阻塞的原因不同組織成多個(gè)阻塞隊(duì)列等待磁盤等待磁盤I/OI/O隊(duì)列隊(duì)列等待磁帶等待磁帶I/OI/O隊(duì)列隊(duì)列l(wèi)每一個(gè)隊(duì)列有一個(gè)每一個(gè)隊(duì)列有一個(gè)專用隊(duì)列指針專用隊(duì)列指針指出該隊(duì)列中第指出該隊(duì)列中第一個(gè)進(jìn)程一個(gè)進(jìn)程PCBPCB所在位置。所在位置。圖圖2-5 PCB鏈接隊(duì)列示意圖鏈接隊(duì)列示意圖 3、索引方式、索引方式 l用用索引表索引表記載進(jìn)程的記載進(jìn)程的PCBPCB地址地址l對(duì)具有對(duì)具有相同狀態(tài)相同狀態(tài)的進(jìn)程,分別設(shè)置各自的的進(jìn)程,分別設(shè)置各自的PCB

18、PCB索引表索引表就緒索引表就緒索引表阻塞索引表阻塞索引表圖圖2-6 PCB索引結(jié)構(gòu)示意圖索引結(jié)構(gòu)示意圖l由于由于單單CPUCPU的計(jì)算機(jī)系統(tǒng)中,任何時(shí)候只有一個(gè)的計(jì)算機(jī)系統(tǒng)中,任何時(shí)候只有一個(gè)進(jìn)程處于運(yùn)行狀態(tài)。進(jìn)程處于運(yùn)行狀態(tài)。l系統(tǒng)專門設(shè)置系統(tǒng)專門設(shè)置一個(gè)指針一個(gè)指針指向當(dāng)前運(yùn)行進(jìn)程的指向當(dāng)前運(yùn)行進(jìn)程的PCBPCB。lUNIXUNIX系統(tǒng)中就有一個(gè)系統(tǒng)中就有一個(gè)CURPROCURPRO指針,指向現(xiàn)運(yùn)行進(jìn)指針,指向現(xiàn)運(yùn)行進(jìn)程的程的PCBPCB。2.3 進(jìn)程管理進(jìn)程管理n2.3.1 進(jìn)程圖進(jìn)程圖n2.3.2 進(jìn)程創(chuàng)建進(jìn)程創(chuàng)建n2.3.3 進(jìn)程終止進(jìn)程終止n2.3.4 進(jìn)程阻塞進(jìn)程阻塞n2.3.

19、5 進(jìn)程喚醒進(jìn)程喚醒2.3.1 進(jìn)程圖進(jìn)程圖 進(jìn)程圖進(jìn)程圖(進(jìn)程家族圖)進(jìn)程家族圖)-Process Graph 描述進(jìn)程描述進(jìn)程家族關(guān)系家族關(guān)系的有向樹的有向樹一棵進(jìn)程樹表示一個(gè)家族,根結(jié)點(diǎn)是祖先。一棵進(jìn)程樹表示一個(gè)家族,根結(jié)點(diǎn)是祖先。一個(gè)子進(jìn)程只有一個(gè)父進(jìn)程一個(gè)子進(jìn)程只有一個(gè)父進(jìn)程AB : A是是B的父進(jìn)程的父進(jìn)程 B是是A的子進(jìn)程。的子進(jìn)程。 圖圖2-7 進(jìn)程創(chuàng)建的層次關(guān)系進(jìn)程創(chuàng)建的層次關(guān)系2.3.2 進(jìn)程創(chuàng)建進(jìn)程創(chuàng)建1、引起創(chuàng)建進(jìn)程的事件:、引起創(chuàng)建進(jìn)程的事件: (1)用戶登錄:)用戶登錄:分時(shí)系統(tǒng)分時(shí)系統(tǒng)用戶在終端上登用戶在終端上登錄錄(2)作業(yè)調(diào)度:)作業(yè)調(diào)度:批處理系統(tǒng)批處理系統(tǒng)

20、中為每個(gè)提交的作業(yè)創(chuàng)中為每個(gè)提交的作業(yè)創(chuàng)建一個(gè)進(jìn)程;建一個(gè)進(jìn)程; (3)OS提供服務(wù):運(yùn)行中的用戶提出某種請(qǐng)求提供服務(wù):運(yùn)行中的用戶提出某種請(qǐng)求(4)派生新進(jìn)程)派生新進(jìn)程:應(yīng)用進(jìn)程自己創(chuàng)建一個(gè)進(jìn)程,:應(yīng)用進(jìn)程自己創(chuàng)建一個(gè)進(jìn)程,使新進(jìn)程以并發(fā)方式完成特定任務(wù)。使新進(jìn)程以并發(fā)方式完成特定任務(wù)。 2、進(jìn)程的創(chuàng)建(創(chuàng)建原語(yǔ))、進(jìn)程的創(chuàng)建(創(chuàng)建原語(yǔ)) PCB是進(jìn)程存在的唯一標(biāo)識(shí),所以創(chuàng)建一個(gè)進(jìn)程是進(jìn)程存在的唯一標(biāo)識(shí),所以創(chuàng)建一個(gè)進(jìn)程的主要任務(wù)是為其的主要任務(wù)是為其建立一個(gè)建立一個(gè)PCB。 使用使用創(chuàng)建原語(yǔ)創(chuàng)建原語(yǔ)創(chuàng)建進(jìn)程的過程:創(chuàng)建進(jìn)程的過程:(1)申請(qǐng)一個(gè)空閑的)申請(qǐng)一個(gè)空閑的PCB(2)為新進(jìn)程分

21、配資源:)為新進(jìn)程分配資源:(3)初始化)初始化PCB:(4)將新進(jìn)程)將新進(jìn)程插入就緒隊(duì)列。插入就緒隊(duì)列。UNIX/Linux中的中的fork()系統(tǒng)調(diào)用實(shí)現(xiàn)進(jìn)程創(chuàng)建功能。系統(tǒng)調(diào)用實(shí)現(xiàn)進(jìn)程創(chuàng)建功能。下面這個(gè)下面這個(gè)C程序展示了程序展示了UNIX系統(tǒng)中父進(jìn)程創(chuàng)建子進(jìn)程及各系統(tǒng)中父進(jìn)程創(chuàng)建子進(jìn)程及各自分開活動(dòng)的情況自分開活動(dòng)的情況#include void main(int argc,char *argv) int pid; pid = fork(); /* fork another process */ if (pid 0) /* error occurred */ fprintf(stder

22、r, Fork Failed); exit(-1); else if (pid = 0) /* child process */ execlp( /bin/ls, ls,NULL); else /* parent process */ /* parent will wait for the child to complete */ wait(NULL); printf( Child Complete ); exit(0); 2.3.3 進(jìn)程終止進(jìn)程終止(撤消原語(yǔ))(撤消原語(yǔ)) 1、引起進(jìn)程終止的事件、引起進(jìn)程終止的事件(1)正常終止)正常終止(2)異常終止)異常終止(3)外部干擾:進(jìn)程應(yīng)外界的

23、請(qǐng)求而終止運(yùn)行)外部干擾:進(jìn)程應(yīng)外界的請(qǐng)求而終止運(yùn)行所謂撤消,是指撤消進(jìn)程存在的標(biāo)志所謂撤消,是指撤消進(jìn)程存在的標(biāo)志進(jìn)程控制塊進(jìn)程控制塊,從而使其從系統(tǒng)中消亡。,從而使其從系統(tǒng)中消亡。2、終止進(jìn)程的主要操作過程、終止進(jìn)程的主要操作過程n找到指定進(jìn)程的找到指定進(jìn)程的PCB,終止該進(jìn)程的運(yùn)行,終止該進(jìn)程的運(yùn)行n回收該進(jìn)程所占用的全部資源回收該進(jìn)程所占用的全部資源n終止其所有子孫進(jìn)程,回收它們所占用的全終止其所有子孫進(jìn)程,回收它們所占用的全部資源。部資源。n將被終止進(jìn)程的將被終止進(jìn)程的PCB從原來隊(duì)列中摘走從原來隊(duì)列中摘走2.3.4 進(jìn)程阻塞(進(jìn)程阻塞(阻塞原語(yǔ)阻塞原語(yǔ))1 1、引起進(jìn)程阻塞的事件、

24、引起進(jìn)程阻塞的事件 處于運(yùn)行狀態(tài)的進(jìn)程,在其運(yùn)行過程中期待某一處于運(yùn)行狀態(tài)的進(jìn)程,在其運(yùn)行過程中期待某一事件發(fā)生,事件發(fā)生,當(dāng)被等待的事件還沒有發(fā)生時(shí)當(dāng)被等待的事件還沒有發(fā)生時(shí),由進(jìn)程,由進(jìn)程自自己己執(zhí)行阻塞原語(yǔ),使自己由運(yùn)行態(tài)變?yōu)樽枞麘B(tài)。執(zhí)行阻塞原語(yǔ),使自己由運(yùn)行態(tài)變?yōu)樽枞麘B(tài)。等待鍵盤輸入;等待鍵盤輸入;等待磁盤的數(shù)據(jù)傳輸完成;等待磁盤的數(shù)據(jù)傳輸完成;等待其它進(jìn)程發(fā)送一個(gè)信息等待其它進(jìn)程發(fā)送一個(gè)信息當(dāng)某進(jìn)程期待的事件已經(jīng)到來時(shí),喚醒進(jìn)程。當(dāng)某進(jìn)程期待的事件已經(jīng)到來時(shí),喚醒進(jìn)程。2 2、進(jìn)程阻塞的過程、進(jìn)程阻塞的過程n立即停止當(dāng)前進(jìn)程的執(zhí)行立即停止當(dāng)前進(jìn)程的執(zhí)行n將現(xiàn)行進(jìn)程的將現(xiàn)行進(jìn)程的CPU

25、現(xiàn)場(chǎng)保存現(xiàn)場(chǎng)保存n將該進(jìn)程的現(xiàn)行狀態(tài)由將該進(jìn)程的現(xiàn)行狀態(tài)由“運(yùn)行運(yùn)行”改為改為“阻塞阻塞”n轉(zhuǎn)到進(jìn)程調(diào)度程序轉(zhuǎn)到進(jìn)程調(diào)度程序2.3.5 進(jìn)程喚醒進(jìn)程喚醒 (喚醒原語(yǔ))(喚醒原語(yǔ))n處于阻塞狀態(tài)的進(jìn)程處于阻塞狀態(tài)的進(jìn)程不能喚醒自己不能喚醒自己,必須由它的合作,必須由它的合作進(jìn)程用喚醒原語(yǔ)喚醒它。進(jìn)程用喚醒原語(yǔ)喚醒它。n喚醒原語(yǔ)執(zhí)行過程如下:?jiǎn)拘言Z(yǔ)執(zhí)行過程如下: 把阻塞進(jìn)程從相應(yīng)的阻塞隊(duì)列中摘下。把阻塞進(jìn)程從相應(yīng)的阻塞隊(duì)列中摘下。 將現(xiàn)行狀態(tài)改為就緒狀態(tài),然后把該進(jìn)程插入就將現(xiàn)行狀態(tài)改為就緒狀態(tài),然后把該進(jìn)程插入就緒隊(duì)列中。緒隊(duì)列中。 如果被喚醒的進(jìn)程比當(dāng)前運(yùn)行進(jìn)程的優(yōu)先級(jí)更高,如果被喚醒的進(jìn)程

26、比當(dāng)前運(yùn)行進(jìn)程的優(yōu)先級(jí)更高,則設(shè)置重新調(diào)度標(biāo)志。則設(shè)置重新調(diào)度標(biāo)志。 2.4 線線 程程n2.4.1 線程概念線程概念n2.4.2 線程的實(shí)現(xiàn)線程的實(shí)現(xiàn)2.4.1 線程概念線程概念n現(xiàn)代操作系統(tǒng)中,進(jìn)程現(xiàn)代操作系統(tǒng)中,進(jìn)程只只作為資源擁有作為資源擁有者,而調(diào)度和運(yùn)行的屬性賦予新的實(shí)者,而調(diào)度和運(yùn)行的屬性賦予新的實(shí)體體線程線程。n線程(線程(Thread)是進(jìn)程中實(shí)施調(diào)度和分是進(jìn)程中實(shí)施調(diào)度和分派的基本單位派的基本單位補(bǔ)充:線程引入補(bǔ)充:線程引入 進(jìn)程的兩個(gè)基本屬性:進(jìn)程的兩個(gè)基本屬性:n資源的擁有者:資源的擁有者: 給每個(gè)進(jìn)程分配一虛擬地址空間,保存進(jìn)程映給每個(gè)進(jìn)程分配一虛擬地址空間,保存進(jìn)程

27、映像,控制一些資源(文件,像,控制一些資源(文件,I/OI/O設(shè)備),有狀態(tài)、設(shè)備),有狀態(tài)、優(yōu)先級(jí)、調(diào)度優(yōu)先級(jí)、調(diào)度n調(diào)度單位:調(diào)度單位: 進(jìn)程是一個(gè)執(zhí)行軌跡進(jìn)程是一個(gè)執(zhí)行軌跡 以上兩個(gè)屬性構(gòu)成進(jìn)程并發(fā)執(zhí)行的基礎(chǔ)以上兩個(gè)屬性構(gòu)成進(jìn)程并發(fā)執(zhí)行的基礎(chǔ)系統(tǒng)必須完成的操作:系統(tǒng)必須完成的操作: n創(chuàng)建進(jìn)程創(chuàng)建進(jìn)程n撤消進(jìn)程撤消進(jìn)程n進(jìn)程切換進(jìn)程切換缺點(diǎn):缺點(diǎn): 時(shí)間空間開銷大,限制并發(fā)度的提高時(shí)間空間開銷大,限制并發(fā)度的提高將進(jìn)程的上述兩個(gè)屬性分開,線程因而產(chǎn)將進(jìn)程的上述兩個(gè)屬性分開,線程因而產(chǎn)生。生。線程的引入(續(xù)線程的引入(續(xù)1)n引入進(jìn)程的目的引入進(jìn)程的目的是為了使多個(gè)程序并發(fā)是為了使多個(gè)程序

28、并發(fā)執(zhí)行,以改善資源利用率、提高系統(tǒng)吞執(zhí)行,以改善資源利用率、提高系統(tǒng)吞吐量。吐量。n線程的引入是為了線程的引入是為了減少程序并發(fā)執(zhí)行時(shí)減少程序并發(fā)執(zhí)行時(shí)的所付出的時(shí)空開銷。的所付出的時(shí)空開銷。線程的引入(續(xù)線程的引入(續(xù)2)1線程的組成線程的組成n每個(gè)線程有一個(gè)每個(gè)線程有一個(gè)thread結(jié)構(gòu),即結(jié)構(gòu),即線程控制塊,用線程控制塊,用于保存自己私有于保存自己私有的信息,主要由的信息,主要由以下以下4個(gè)基本部分個(gè)基本部分組成:組成:圖圖2-8 thread結(jié)構(gòu)示意圖結(jié)構(gòu)示意圖n線程必須在某個(gè)進(jìn)程內(nèi)執(zhí)行線程必須在某個(gè)進(jìn)程內(nèi)執(zhí)行n一個(gè)進(jìn)程可以包含一個(gè)線程或多個(gè)線程一個(gè)進(jìn)程可以包含一個(gè)線程或多個(gè)線程圖圖

29、2-9 單線程和多線程的進(jìn)程模型單線程和多線程的進(jìn)程模型 2線程的狀態(tài)線程的狀態(tài)與進(jìn)程相似,線程也有若干種狀態(tài):與進(jìn)程相似,線程也有若干種狀態(tài):n運(yùn)行狀態(tài):線程在運(yùn)行狀態(tài):線程在CPU上執(zhí)行上執(zhí)行n就緒狀態(tài):具備運(yùn)行條件,一旦分到就緒狀態(tài):具備運(yùn)行條件,一旦分到CPU,可,可 以馬上投入運(yùn)行以馬上投入運(yùn)行 n阻塞狀態(tài):線程在等待某個(gè)事件發(fā)生阻塞狀態(tài):線程在等待某個(gè)事件發(fā)生n終止?fàn)顟B(tài):線程完成任務(wù)后終止?fàn)顟B(tài):線程完成任務(wù)后線程的狀態(tài)轉(zhuǎn)換是在一定的條件下實(shí)現(xiàn)的線程的狀態(tài)轉(zhuǎn)換是在一定的條件下實(shí)現(xiàn)的 3線程的管理線程的管理n線程創(chuàng)建:調(diào)用thread_create創(chuàng)建新線程,建立 thread結(jié)構(gòu),分

30、配棧結(jié)構(gòu)等,設(shè)置為 就緒狀態(tài),放入就緒隊(duì)列n線程終止:線程完成工作后,調(diào)用thread_exit終 止自身n線程等待:調(diào)用thread_wait等待指定線程終止, 此時(shí)該線程處于阻塞狀態(tài),指定線程 終止時(shí)轉(zhuǎn)為就緒態(tài)n線程讓權(quán):調(diào)用thread_yield放棄CPU,讓給另外 的線程運(yùn)行4線程和進(jìn)程的關(guān)系線程和進(jìn)程的關(guān)系 一個(gè)進(jìn)程可以有多個(gè)線程,但至少要有一個(gè)線程;而一個(gè)進(jìn)程可以有多個(gè)線程,但至少要有一個(gè)線程;而一個(gè)線程只能在一個(gè)進(jìn)程的地址空間內(nèi)活動(dòng)。一個(gè)線程只能在一個(gè)進(jìn)程的地址空間內(nèi)活動(dòng)。 資源分配給進(jìn)程資源分配給進(jìn)程,同一進(jìn)程的所有線程共享該進(jìn)程的,同一進(jìn)程的所有線程共享該進(jìn)程的所有資源。所

31、有資源。 處理機(jī)分配給線程處理機(jī)分配給線程,即真正在處理機(jī)上運(yùn)行的是線程。,即真正在處理機(jī)上運(yùn)行的是線程。 線程在執(zhí)行過程中需要協(xié)作同步。不同進(jìn)程的線程間線程在執(zhí)行過程中需要協(xié)作同步。不同進(jìn)程的線程間要利用消息通信的辦法實(shí)現(xiàn)同步。要利用消息通信的辦法實(shí)現(xiàn)同步。由于線程擁有較少的資源,但又具有傳統(tǒng)進(jìn)程由于線程擁有較少的資源,但又具有傳統(tǒng)進(jìn)程的許多特性,有的把線程叫做的許多特性,有的把線程叫做輕型進(jìn)程輕型進(jìn)程(light light weight processweight process,LWPLWP),而把傳統(tǒng)的進(jìn)程叫做),而把傳統(tǒng)的進(jìn)程叫做重重型進(jìn)程型進(jìn)程(heavy weight proc

32、ess,HWP)(heavy weight process,HWP),可把它看,可把它看成擁有一個(gè)線程的進(jìn)程。成擁有一個(gè)線程的進(jìn)程。5引入線程的好處引入線程的好處 易于調(diào)度。易于調(diào)度。 提高并發(fā)性。提高并發(fā)性。 開銷少。開銷少。 利于充分發(fā)揮多處理器的功能。利于充分發(fā)揮多處理器的功能。 線程的引用使系統(tǒng)設(shè)計(jì)變得復(fù)雜。線程的引用使系統(tǒng)設(shè)計(jì)變得復(fù)雜。無論是采用多進(jìn)程還是一個(gè)進(jìn)程的多線無論是采用多進(jìn)程還是一個(gè)進(jìn)程的多線程來實(shí)現(xiàn)其并發(fā)性都是合理的。用哪一程來實(shí)現(xiàn)其并發(fā)性都是合理的。用哪一種結(jié)構(gòu)更有效,則取決于應(yīng)用程序的要種結(jié)構(gòu)更有效,則取決于應(yīng)用程序的要求。求。n很多系統(tǒng)中已經(jīng)實(shí)現(xiàn)線程,如很多系統(tǒng)中已

33、經(jīng)實(shí)現(xiàn)線程,如Solaris2,Windows 2000,Linux,Java語(yǔ)言語(yǔ)言n實(shí)現(xiàn)線程的方式主要有:實(shí)現(xiàn)線程的方式主要有:n在用戶空間實(shí)現(xiàn)在用戶空間實(shí)現(xiàn)n在核心空間實(shí)現(xiàn)在核心空間實(shí)現(xiàn)n組合方式:將用戶級(jí)線程和核心級(jí)線程結(jié)合組合方式:將用戶級(jí)線程和核心級(jí)線程結(jié)合 在一起,取長(zhǎng)補(bǔ)短在一起,取長(zhǎng)補(bǔ)短2.4.2 線程的實(shí)現(xiàn)線程的實(shí)現(xiàn)1、在用戶空間實(shí)現(xiàn)線程、在用戶空間實(shí)現(xiàn)線程把線程庫(kù)整個(gè)地放在用戶空間,核心對(duì)線程一無所知。把線程庫(kù)整個(gè)地放在用戶空間,核心對(duì)線程一無所知。在用戶空間實(shí)現(xiàn)線程的優(yōu)點(diǎn)在用戶空間實(shí)現(xiàn)線程的優(yōu)點(diǎn) 線程切換速度很快。線程切換速度很快。 調(diào)度算法可以是應(yīng)用程序?qū)S玫摹U{(diào)度算法

34、可以是應(yīng)用程序?qū)S玫摹?用戶級(jí)線程可以運(yùn)行在任何操作系統(tǒng)用戶級(jí)線程可以運(yùn)行在任何操作系統(tǒng) 上,包括不支持線程機(jī)制的操作系統(tǒng)。上,包括不支持線程機(jī)制的操作系統(tǒng)。用戶級(jí)線程的主要缺點(diǎn)用戶級(jí)線程的主要缺點(diǎn) 系統(tǒng)調(diào)用的阻塞問題。系統(tǒng)調(diào)用的阻塞問題。 在單純用戶級(jí)線程方式中,多線程應(yīng)用在單純用戶級(jí)線程方式中,多線程應(yīng)用程序不具有多處理器的優(yōu)點(diǎn)。程序不具有多處理器的優(yōu)點(diǎn)。2. 在核心空間實(shí)現(xiàn)線程在核心空間實(shí)現(xiàn)線程 核心知道線程存在,并對(duì)它核心知道線程存在,并對(duì)它們實(shí)施管理們實(shí)施管理在多處理器系統(tǒng)中,核心可在多處理器系統(tǒng)中,核心可以同時(shí)調(diào)度同一進(jìn)程的多個(gè)以同時(shí)調(diào)度同一進(jìn)程的多個(gè)線程線程如果一個(gè)進(jìn)程的某個(gè)線程

35、阻如果一個(gè)進(jìn)程的某個(gè)線程阻塞了,核心可以調(diào)度同一個(gè)塞了,核心可以調(diào)度同一個(gè)進(jìn)程的另一個(gè)線程。進(jìn)程的另一個(gè)線程。n優(yōu)點(diǎn):核心線程本身也可以優(yōu)點(diǎn):核心線程本身也可以是多線程的。是多線程的。n缺點(diǎn):控制轉(zhuǎn)移開銷大缺點(diǎn):控制轉(zhuǎn)移開銷大3. 組合方式組合方式n把用戶級(jí)線程和核心級(jí)線程兩種方式結(jié)合把用戶級(jí)線程和核心級(jí)線程兩種方式結(jié)合在一起,吸收二者優(yōu)點(diǎn),克服各自不足在一起,吸收二者優(yōu)點(diǎn),克服各自不足n核心只知道核心級(jí)線程,也只對(duì)它們實(shí)施核心只知道核心級(jí)線程,也只對(duì)它們實(shí)施調(diào)度調(diào)度n實(shí)現(xiàn)組合方式有不同的模型:實(shí)現(xiàn)組合方式有不同的模型:n多對(duì)一模型多對(duì)一模型n一對(duì)一模型一對(duì)一模型n多對(duì)多模型多對(duì)多模型2.5

36、進(jìn)程的同步和通信進(jìn)程的同步和通信n2.5.1 進(jìn)程的同步與互斥進(jìn)程的同步與互斥n2.5.2 臨界資源和臨界區(qū)臨界資源和臨界區(qū)n2.5.3 互斥實(shí)現(xiàn)方式互斥實(shí)現(xiàn)方式n2.5.4 信號(hào)量信號(hào)量n2.5.5 信號(hào)量的一般應(yīng)用信號(hào)量的一般應(yīng)用 由于進(jìn)程的由于進(jìn)程的異步性異步性,在爭(zhēng)用資源時(shí),常會(huì),在爭(zhēng)用資源時(shí),常會(huì)出現(xiàn)以下的問題:出現(xiàn)以下的問題:1、系統(tǒng)混亂;、系統(tǒng)混亂;2、數(shù)據(jù)處理的不可再現(xiàn)性。、數(shù)據(jù)處理的不可再現(xiàn)性。為了使并發(fā)執(zhí)行的諸進(jìn)程之間能有效地為了使并發(fā)執(zhí)行的諸進(jìn)程之間能有效地共享資共享資源和相互合作源和相互合作,從而使程序的執(zhí)行具有,從而使程序的執(zhí)行具有可再現(xiàn)可再現(xiàn)性性,必須提供進(jìn)程同步機(jī)

37、制。,必須提供進(jìn)程同步機(jī)制。進(jìn)程的相互關(guān)系主要分為如下三種形式:進(jìn)程的相互關(guān)系主要分為如下三種形式: 互斥:競(jìng)爭(zhēng)關(guān)系互斥:競(jìng)爭(zhēng)關(guān)系 同步:協(xié)作關(guān)系同步:協(xié)作關(guān)系 通信:信息交流通信:信息交流2.5.1 進(jìn)程的同步與互斥進(jìn)程的同步與互斥1同步(書中例子)同步(書中例子)n定義:定義:進(jìn)程間共同完成一項(xiàng)任務(wù)時(shí)直接發(fā)進(jìn)程間共同完成一項(xiàng)任務(wù)時(shí)直接發(fā)生相互作用的關(guān)系,這些進(jìn)程在執(zhí)行時(shí)間生相互作用的關(guān)系,這些進(jìn)程在執(zhí)行時(shí)間次序上必須遵循確定的規(guī)律次序上必須遵循確定的規(guī)律(有一定約束有一定約束)。n相互合作關(guān)系相互合作關(guān)系n直接相互制約直接相互制約在現(xiàn)實(shí)生活中,同步的例子:在現(xiàn)實(shí)生活中,同步的例子:例如,在

38、一輛公共汽車上,例如,在一輛公共汽車上,司機(jī)的職責(zé)司機(jī)的職責(zé)是駕是駕駛車輛;駛車輛;售票員的工作售票員的工作是售票、開關(guān)車門,是售票、開關(guān)車門,各有各的職責(zé)范圍。但兩者的工作又需要相各有各的職責(zé)范圍。但兩者的工作又需要相互配合、協(xié)調(diào)。當(dāng)汽車到站時(shí),司機(jī)將車輛互配合、協(xié)調(diào)。當(dāng)汽車到站時(shí),司機(jī)將車輛停穩(wěn)后,售票員才能將車門打開讓乘客上下停穩(wěn)后,售票員才能將車門打開讓乘客上下車,然后關(guān)車門,只有在得到車門已經(jīng)關(guān)好車,然后關(guān)車門,只有在得到車門已經(jīng)關(guān)好的信號(hào)后,司機(jī)才能開動(dòng)汽車?yán)^續(xù)前進(jìn)。所的信號(hào)后,司機(jī)才能開動(dòng)汽車?yán)^續(xù)前進(jìn)。所以,以,在司機(jī)停止、啟動(dòng)汽車和售票員開關(guān)門在司機(jī)停止、啟動(dòng)汽車和售票員開關(guān)門

39、之間有兩個(gè)同步的過程。之間有兩個(gè)同步的過程。 到站停車到站停車 開開 車車 開開 車車 門門 關(guān)關(guān) 車車 門門 售售 票票 正常行車正常行車。售票員售票員司機(jī)司機(jī)n定義:定義:邏輯上本來完全獨(dú)立的若干進(jìn)程,由于競(jìng)邏輯上本來完全獨(dú)立的若干進(jìn)程,由于競(jìng)爭(zhēng)同一個(gè)資源而產(chǎn)生的相互制約關(guān)系。爭(zhēng)同一個(gè)資源而產(chǎn)生的相互制約關(guān)系。n它們的它們的運(yùn)行不具有時(shí)間次序的特征運(yùn)行不具有時(shí)間次序的特征:誰(shuí)先向系統(tǒng):誰(shuí)先向系統(tǒng)提出申請(qǐng),誰(shuí)就先執(zhí)行提出申請(qǐng),誰(shuí)就先執(zhí)行n相互競(jìng)爭(zhēng)關(guān)系相互競(jìng)爭(zhēng)關(guān)系n間接相互制約間接相互制約 2互斥(書中例子)互斥(書中例子) 同步和互斥的實(shí)質(zhì)都是對(duì)進(jìn)程在執(zhí)行時(shí)同步和互斥的實(shí)質(zhì)都是對(duì)進(jìn)程在執(zhí)行時(shí)

40、序上的某種限制序上的某種限制 ,廣,廣 義上,義上,互斥是一種特互斥是一種特殊的同步。殊的同步。 進(jìn)程同步進(jìn)程同步:指多個(gè)相關(guān)進(jìn)程在執(zhí)行次序:指多個(gè)相關(guān)進(jìn)程在執(zhí)行次序上協(xié)調(diào)。用于保證這種關(guān)系的相應(yīng)機(jī)制稱為上協(xié)調(diào)。用于保證這種關(guān)系的相應(yīng)機(jī)制稱為進(jìn)程同步機(jī)制進(jìn)程同步機(jī)制。2.5.2 臨界資源和臨界區(qū)臨界資源和臨界區(qū)1臨界資源和臨界區(qū)臨界資源和臨界區(qū)n一次僅允許一個(gè)進(jìn)程使用的資源稱為一次僅允許一個(gè)進(jìn)程使用的資源稱為臨界資源臨界資源(Critical Resource)。n如:進(jìn)程、共享一臺(tái)打印機(jī),若讓它們交替使如:進(jìn)程、共享一臺(tái)打印機(jī),若讓它們交替使用用, , 則得到的結(jié)果肯定不是我們希望的。則得到

41、的結(jié)果肯定不是我們希望的。n臨界資源可能是硬件,也可能是軟件臨界資源可能是硬件,也可能是軟件:變量,數(shù)據(jù),:變量,數(shù)據(jù),表格,隊(duì)列等。表格,隊(duì)列等。n并發(fā)進(jìn)程對(duì)臨界資源的訪問必須作某種限制,否則并發(fā)進(jìn)程對(duì)臨界資源的訪問必須作某種限制,否則就可能出就可能出與時(shí)間有關(guān)的錯(cuò)誤與時(shí)間有關(guān)的錯(cuò)誤,如:聯(lián)網(wǎng)售票。,如:聯(lián)網(wǎng)售票。臨界區(qū)臨界區(qū) 在每個(gè)進(jìn)程中訪問臨界資源的在每個(gè)進(jìn)程中訪問臨界資源的那段程序那段程序叫做叫做臨界臨界區(qū)(區(qū)(Critical Section),簡(jiǎn)稱,簡(jiǎn)稱CS區(qū)區(qū)。各進(jìn)程要互斥地進(jìn)入自己的臨界區(qū)。各進(jìn)程要互斥地進(jìn)入自己的臨界區(qū)?!咀⒁庾⒁狻浚号R界區(qū)是對(duì)某一臨界資源而言的,臨界區(qū)是對(duì)某

42、一臨界資源而言的,對(duì)于不對(duì)于不同臨界資源的臨界區(qū),它們之間不存在互斥同臨界資源的臨界區(qū),它們之間不存在互斥。例如:例如:有程序段有程序段A、B是關(guān)于變量是關(guān)于變量X的臨界區(qū),而的臨界區(qū),而C、D是關(guān)于變量是關(guān)于變量Y的臨界區(qū),那么,的臨界區(qū),那么,A、B之間需要互斥之間需要互斥執(zhí)行,執(zhí)行,C、D之間也要互斥執(zhí)行,而之間也要互斥執(zhí)行,而A與與C、B與與D之間之間不用互斥執(zhí)行。不用互斥執(zhí)行。 2進(jìn)程的一般結(jié)構(gòu)進(jìn)程的一般結(jié)構(gòu)圖圖2-10 典型進(jìn)程的一般結(jié)構(gòu)典型進(jìn)程的一般結(jié)構(gòu) 進(jìn)程互斥進(jìn)入臨界區(qū)都要進(jìn)程互斥進(jìn)入臨界區(qū)都要遵循一種通用模式:遵循一種通用模式:進(jìn)入前要申請(qǐng),進(jìn)入前要申請(qǐng),獲準(zhǔn)后方可進(jìn)入;獲

43、準(zhǔn)后方可進(jìn)入;執(zhí)行后要退出執(zhí)行后要退出 (釋放釋放) ,然后才可以執(zhí)行其他代碼然后才可以執(zhí)行其他代碼3臨界區(qū)進(jìn)入準(zhǔn)則(安全使用臨界資源)臨界區(qū)進(jìn)入準(zhǔn)則(安全使用臨界資源) 如果若干進(jìn)程要求進(jìn)入空閑的臨界區(qū),一次僅如果若干進(jìn)程要求進(jìn)入空閑的臨界區(qū),一次僅允許一個(gè)進(jìn)程進(jìn)入。允許一個(gè)進(jìn)程進(jìn)入。(空閑讓進(jìn))(空閑讓進(jìn)) 任何時(shí)候,處于臨界區(qū)內(nèi)的進(jìn)程不可多于一個(gè)。任何時(shí)候,處于臨界區(qū)內(nèi)的進(jìn)程不可多于一個(gè)。 (忙則等待)(忙則等待) 進(jìn)入臨界區(qū)的進(jìn)程要在有限時(shí)間內(nèi)退出。進(jìn)入臨界區(qū)的進(jìn)程要在有限時(shí)間內(nèi)退出。 (有限等待)(有限等待) 如果進(jìn)程不能進(jìn)入自己的臨界區(qū),則應(yīng)讓出如果進(jìn)程不能進(jìn)入自己的臨界區(qū),則應(yīng)讓

44、出CPU,避免進(jìn)程出現(xiàn),避免進(jìn)程出現(xiàn)“忙等忙等”現(xiàn)象?,F(xiàn)象。(讓權(quán)等待)(讓權(quán)等待) 圖圖2-11 互斥使用臨界區(qū)互斥使用臨界區(qū)2.5.3 互斥實(shí)現(xiàn)方式互斥實(shí)現(xiàn)方式n從實(shí)現(xiàn)機(jī)制方面來說,分為:從實(shí)現(xiàn)機(jī)制方面來說,分為:n硬件方法硬件方法n軟件方法軟件方法1利用硬件方法解決進(jìn)程互斥問題利用硬件方法解決進(jìn)程互斥問題(1)禁止中斷:進(jìn)程進(jìn)入臨界區(qū)后關(guān)閉中)禁止中斷:進(jìn)程進(jìn)入臨界區(qū)后關(guān)閉中 斷,離開后開放中斷。斷,離開后開放中斷。(2)專用機(jī)器指令:利用)專用機(jī)器指令:利用TSL指令解決進(jìn)指令解決進(jìn)程互斥進(jìn)入臨界區(qū)問題程互斥進(jìn)入臨界區(qū)問題2原語(yǔ)原語(yǔ)n是機(jī)器指令的延伸,往往是為完成某些特定是機(jī)器指令的延

45、伸,往往是為完成某些特定的功能而編制的一段系統(tǒng)程序。原語(yǔ)操作也的功能而編制的一段系統(tǒng)程序。原語(yǔ)操作也稱做稱做“原子操作原子操作”(atomic action),),即一即一個(gè)操作中的所有動(dòng)作要么全做,要么全不做。個(gè)操作中的所有動(dòng)作要么全做,要么全不做。n執(zhí)行原語(yǔ)操作時(shí),要屏蔽中斷,以保證其操執(zhí)行原語(yǔ)操作時(shí),要屏蔽中斷,以保證其操作的不可分割性。作的不可分割性。n如如P、V操作等。操作等。3利用軟件方法解決進(jìn)程互斥問題利用軟件方法解決進(jìn)程互斥問題 為每類臨界區(qū)設(shè)置一把鎖,該鎖有打開和關(guān)為每類臨界區(qū)設(shè)置一把鎖,該鎖有打開和關(guān)閉兩種狀態(tài)閉兩種狀態(tài)。n關(guān)鎖原語(yǔ)關(guān)鎖原語(yǔ)lock (W): while (

46、W=1); W=1;n開鎖原語(yǔ)開鎖原語(yǔ)unlock (W): W =0;W=1表示關(guān)鎖表示關(guān)鎖W=0表示開鎖表示開鎖 A、B兩個(gè)進(jìn)程互斥使用一臺(tái)打印機(jī),兩個(gè)進(jìn)程互斥使用一臺(tái)打印機(jī),W初值為初值為02.5.4 信號(hào)量信號(hào)量1965年,荷蘭學(xué)者年,荷蘭學(xué)者E.W.Dijkstra提出。提出。 整型信號(hào)量整型信號(hào)量 (多用于進(jìn)程互斥(多用于進(jìn)程互斥, 忙則等待忙則等待) 結(jié)構(gòu)型信號(hào)量結(jié)構(gòu)型信號(hào)量(多用于進(jìn)程同步(多用于進(jìn)程同步,讓權(quán)等待讓權(quán)等待) 二值信號(hào)量二值信號(hào)量(只有(只有0、1兩個(gè)值兩個(gè)值) 現(xiàn)在,信號(hào)量機(jī)制已廣泛應(yīng)用于現(xiàn)在,信號(hào)量機(jī)制已廣泛應(yīng)用于單處理機(jī)、多單處理機(jī)、多處理機(jī)及計(jì)算機(jī)網(wǎng)絡(luò)處

47、理機(jī)及計(jì)算機(jī)網(wǎng)絡(luò)中中.1整型信號(hào)量整型信號(hào)量 除初始化外,僅能通過兩個(gè)標(biāo)準(zhǔn)的原子操作來訪問。除初始化外,僅能通過兩個(gè)標(biāo)準(zhǔn)的原子操作來訪問。n兩個(gè)原子操作為:兩個(gè)原子操作為:P操作、操作、 V操作操作nP操作操作最初源于荷蘭語(yǔ)最初源于荷蘭語(yǔ)proberen,表示測(cè)試;,表示測(cè)試;V操操作作源于荷蘭語(yǔ)源于荷蘭語(yǔ)verhogen,表示增加。,表示增加。n有些書上將有些書上將P操作稱做操作稱做wait或者或者DOWN操作,將操作,將V操作稱做操作稱做signal或者或者UP操作。操作。n典型的典型的P和和V操作的偽代碼如下操作的偽代碼如下 P(s) while s=0 ; s- ; V(s) s+;

48、n以上操作均為以上操作均為不可中斷不可中斷的原語(yǔ)操作的原語(yǔ)操作 設(shè)置一互斥信號(hào)量設(shè)置一互斥信號(hào)量mutex,初值為初值為1,然后,然后將各進(jìn)程的將各進(jìn)程的CS置于置于P(mutex) 和和V(mutex)之間即可。之間即可。 do P(mutex); 臨界區(qū)臨界區(qū) V(mutex); 其他代碼區(qū)其他代碼區(qū)while(1);利用信號(hào)量實(shí)現(xiàn)互斥利用信號(hào)量實(shí)現(xiàn)互斥2結(jié)構(gòu)型信號(hào)量(記錄型信號(hào)量)結(jié)構(gòu)型信號(hào)量(記錄型信號(hào)量)n因其采用了因其采用了結(jié)構(gòu)型的數(shù)據(jù)結(jié)構(gòu)結(jié)構(gòu)型的數(shù)據(jù)結(jié)構(gòu)而得名。而得名。n整型信號(hào)機(jī)制使進(jìn)程處于整型信號(hào)機(jī)制使進(jìn)程處于“忙式等待忙式等待”狀態(tài),消耗狀態(tài),消耗CPU時(shí)間。結(jié)構(gòu)型信號(hào)量采

49、時(shí)間。結(jié)構(gòu)型信號(hào)量采取取“讓權(quán)等待讓權(quán)等待”策略策略n以后沒有特殊說明,凡稱信號(hào)量就指結(jié)以后沒有特殊說明,凡稱信號(hào)量就指結(jié)構(gòu)型信號(hào)量。構(gòu)型信號(hào)量。n結(jié)構(gòu)型信號(hào)量結(jié)構(gòu)型信號(hào)量一般是由兩個(gè)成員組成的數(shù)一般是由兩個(gè)成員組成的數(shù)據(jù)結(jié)構(gòu)。其中一個(gè)成員是整型變量,表示據(jù)結(jié)構(gòu)。其中一個(gè)成員是整型變量,表示該信號(hào)量的值;另一個(gè)是指向該信號(hào)量的值;另一個(gè)是指向PCB的指針。的指針。 typedef struct int value; struct PCB *list; semaphore;P操作的定義如下:操作的定義如下: void P(semaphore S) S.value- ; if(S.value0)

50、把這個(gè)進(jìn)程加到把這個(gè)進(jìn)程加到S.list隊(duì)列;隊(duì)列; block( ); nV操作的定義如下:操作的定義如下: void V(semaphore S) S.value+; if(S.value0: 某類資源可用單元數(shù)。某類資源可用單元數(shù)。 P(S):請(qǐng)求分配一個(gè)單元的資源。請(qǐng)求分配一個(gè)單元的資源。S.Value=0: 無資源可用,無資源可用,|S.Value|表示等待隊(duì)列表示等待隊(duì)列 中的進(jìn)程數(shù)。中的進(jìn)程數(shù)。 V(S):釋放一個(gè)單位資源、激活等待隊(duì)中的進(jìn)程。釋放一個(gè)單位資源、激活等待隊(duì)中的進(jìn)程。信號(hào)量的值與相應(yīng)資源的使用情況有關(guān)信號(hào)量的值與相應(yīng)資源的使用情況有關(guān)圖圖2-17 信號(hào)量的一般結(jié)構(gòu)及

51、信號(hào)量的一般結(jié)構(gòu)及PCB隊(duì)列隊(duì)列 對(duì)信號(hào)量的操作有如下嚴(yán)格限制:對(duì)信號(hào)量的操作有如下嚴(yán)格限制:1. 信號(hào)量可以賦初值,且初值為非負(fù)數(shù)。信號(hào)量可以賦初值,且初值為非負(fù)數(shù)。2. 信號(hào)量的值可以修改,但只能由信號(hào)量的值可以修改,但只能由P和和V操作來訪問操作來訪問 3二值信號(hào)量二值信號(hào)量n結(jié)構(gòu)型信號(hào)量的取值可以是正數(shù)、結(jié)構(gòu)型信號(hào)量的取值可以是正數(shù)、0或者負(fù)數(shù)或者負(fù)數(shù)n二值信號(hào)量的值只能是二值信號(hào)量的值只能是0或或12.5.5 信號(hào)量的一般應(yīng)用信號(hào)量的一般應(yīng)用 1用信號(hào)量實(shí)現(xiàn)進(jìn)程互斥用信號(hào)量實(shí)現(xiàn)進(jìn)程互斥 Pa: Pb: P(mutex) P(mutex) 分配打印機(jī)分配打印機(jī) 釋放打印機(jī)釋放打印機(jī) (

52、讀寫分配表)(讀寫分配表) (讀寫分配表)(讀寫分配表) V(mutex) V(mutex) 打印機(jī)分配表的互斥使用情況打印機(jī)分配表的互斥使用情況 利用信號(hào)量實(shí)現(xiàn)互斥的一般模型是:利用信號(hào)量實(shí)現(xiàn)互斥的一般模型是: 進(jìn)程進(jìn)程P1 進(jìn)程進(jìn)程P2 進(jìn)程進(jìn)程Pn P(mutex); P(mutex); P(mutex); 臨界區(qū)臨界區(qū) 臨界區(qū)臨界區(qū) 臨界區(qū)臨界區(qū) V(mutex); V(mutex); V(mutex); 其中,其中,信號(hào)量信號(hào)量mutex用于互斥,初值為用于互斥,初值為1使用使用P, V操作實(shí)現(xiàn)互斥時(shí)應(yīng)注意兩點(diǎn):操作實(shí)現(xiàn)互斥時(shí)應(yīng)注意兩點(diǎn): 在每個(gè)程序中用于實(shí)現(xiàn)互斥的在每個(gè)程序中用于實(shí)

53、現(xiàn)互斥的P(mutex)和和V(mutex)必須成對(duì)出現(xiàn)必須成對(duì)出現(xiàn),即先做,即先做P,進(jìn),進(jìn)入臨界區(qū);后做入臨界區(qū);后做V,退出臨界區(qū)。,退出臨界區(qū)。 互斥信號(hào)量互斥信號(hào)量mutex的的初值一般為初值一般為1。2用信號(hào)量實(shí)現(xiàn)進(jìn)程簡(jiǎn)單用信號(hào)量實(shí)現(xiàn)進(jìn)程簡(jiǎn)單同步同步圖圖2-18 簡(jiǎn)單供者和用者對(duì)緩沖區(qū)的使用關(guān)系簡(jiǎn)單供者和用者對(duì)緩沖區(qū)的使用關(guān)系n供者和用者間要交換兩個(gè)消息:緩沖區(qū)空和供者和用者間要交換兩個(gè)消息:緩沖區(qū)空和緩沖區(qū)滿的狀態(tài)。緩沖區(qū)滿的狀態(tài)。n設(shè)置兩個(gè)信號(hào)量:設(shè)置兩個(gè)信號(hào)量:nS1表示緩沖區(qū)是否空(表示緩沖區(qū)是否空(0表示不空,表示不空,1表示空)。表示空)。nS2表示緩沖區(qū)是否滿(表示緩

54、沖區(qū)是否滿(0表示不滿,表示不滿,1表示滿)。表示滿)。n規(guī)定規(guī)定S1和和S2的初值分別為的初值分別為1和和0 供者進(jìn)程供者進(jìn)程 用者進(jìn)程用者進(jìn)程 L1: P(S1) L2: 啟動(dòng)讀卡機(jī)啟動(dòng)讀卡機(jī) P(S2) ; 從緩沖區(qū)取出信息從緩沖區(qū)取出信息 收到輸入結(jié)束中斷收到輸入結(jié)束中斷 V(S1); V(S2); 加工并且存盤加工并且存盤 goto L1; goto L2;用用P和和V操作實(shí)現(xiàn)同步時(shí)應(yīng)注意如下三點(diǎn):操作實(shí)現(xiàn)同步時(shí)應(yīng)注意如下三點(diǎn): 分析進(jìn)程間的制約關(guān)系,確定信號(hào)量種類。分析進(jìn)程間的制約關(guān)系,確定信號(hào)量種類。 信號(hào)量的初值與相應(yīng)資源的數(shù)量有關(guān),也與信號(hào)量的初值與相應(yīng)資源的數(shù)量有關(guān),也與P

55、, V操操作在程序代碼中出現(xiàn)的位置有關(guān)。作在程序代碼中出現(xiàn)的位置有關(guān)。 同一信號(hào)量的同一信號(hào)量的P, V操作要操作要“成對(duì)成對(duì)”出現(xiàn),但是,它出現(xiàn),但是,它們分別出現(xiàn)在不同的進(jìn)程代碼中。們分別出現(xiàn)在不同的進(jìn)程代碼中。2.6 經(jīng)典進(jìn)程同步問題經(jīng)典進(jìn)程同步問題1生產(chǎn)者生產(chǎn)者-消費(fèi)者問題消費(fèi)者問題n如果一個(gè)進(jìn)程能產(chǎn)生并釋放資源,則該進(jìn)如果一個(gè)進(jìn)程能產(chǎn)生并釋放資源,則該進(jìn)程稱做程稱做生產(chǎn)者生產(chǎn)者;如果一個(gè)進(jìn)程單純使用;如果一個(gè)進(jìn)程單純使用(消耗)資源,則該進(jìn)程稱做(消耗)資源,則該進(jìn)程稱做消費(fèi)者消費(fèi)者。生產(chǎn)者生產(chǎn)者-消費(fèi)者問題表述如下消費(fèi)者問題表述如下:n一組一組生產(chǎn)者進(jìn)程和生產(chǎn)者進(jìn)程和一組一組消費(fèi)者

56、進(jìn)程(設(shè)每組消費(fèi)者進(jìn)程(設(shè)每組有多個(gè)進(jìn)程)通過緩沖區(qū)發(fā)生聯(lián)系。生產(chǎn)者有多個(gè)進(jìn)程)通過緩沖區(qū)發(fā)生聯(lián)系。生產(chǎn)者進(jìn)程將生產(chǎn)的產(chǎn)品(數(shù)據(jù)、消息等統(tǒng)稱為產(chǎn)進(jìn)程將生產(chǎn)的產(chǎn)品(數(shù)據(jù)、消息等統(tǒng)稱為產(chǎn)品)送入緩沖區(qū),消費(fèi)者進(jìn)程從中取出產(chǎn)品。品)送入緩沖區(qū),消費(fèi)者進(jìn)程從中取出產(chǎn)品。假定緩沖區(qū)共有假定緩沖區(qū)共有N個(gè),可把它們?cè)O(shè)想成一個(gè)個(gè),可把它們?cè)O(shè)想成一個(gè)環(huán)形緩沖池。環(huán)形緩沖池。 生產(chǎn)者生產(chǎn)者-消費(fèi)者問題環(huán)形緩沖池消費(fèi)者問題環(huán)形緩沖池它們應(yīng)滿足如下它們應(yīng)滿足如下同步條件同步條件: 任一時(shí)刻所有生產(chǎn)者存任一時(shí)刻所有生產(chǎn)者存放產(chǎn)品的單元數(shù)不能超過放產(chǎn)品的單元數(shù)不能超過緩沖區(qū)的總?cè)萘浚ň彌_區(qū)的總?cè)萘浚∟ )。)。 所有消

57、費(fèi)者取出產(chǎn)品的所有消費(fèi)者取出產(chǎn)品的總量不能超過所有生產(chǎn)者總量不能超過所有生產(chǎn)者當(dāng)前生產(chǎn)產(chǎn)品的總量。當(dāng)前生產(chǎn)產(chǎn)品的總量。在此問題中:在此問題中:(1)生產(chǎn)者之間要)生產(chǎn)者之間要互斥互斥使用緩沖區(qū);使用緩沖區(qū); 消費(fèi)者之間要消費(fèi)者之間要互斥互斥使用緩沖區(qū);使用緩沖區(qū); 生產(chǎn)者、消費(fèi)者之間要生產(chǎn)者、消費(fèi)者之間要互斥互斥使用緩沖區(qū)。使用緩沖區(qū)。(2) 生產(chǎn)者、消費(fèi)者之間有生產(chǎn)者、消費(fèi)者之間有的關(guān)系。的關(guān)系。1.設(shè)緩沖區(qū)的編號(hào)為設(shè)緩沖區(qū)的編號(hào)為0N-1,in和和out分別是生產(chǎn)者進(jìn)程和分別是生產(chǎn)者進(jìn)程和消費(fèi)者進(jìn)程使用的指針,指消費(fèi)者進(jìn)程使用的指針,指向下面可用的緩沖區(qū),初值向下面可用的緩沖區(qū),初值都是都

58、是0。2.設(shè)置三個(gè)信號(hào)量:設(shè)置三個(gè)信號(hào)量: full:表示放有產(chǎn)品的緩沖區(qū)數(shù),其初值為表示放有產(chǎn)品的緩沖區(qū)數(shù),其初值為0。empty:表示可供使用的緩沖區(qū)數(shù),其初值為表示可供使用的緩沖區(qū)數(shù),其初值為N。mutex:互斥信號(hào)量,初值為互斥信號(hào)量,初值為1,表示各進(jìn)程互斥進(jìn),表示各進(jìn)程互斥進(jìn)入臨界區(qū),保證任何時(shí)候只有一個(gè)進(jìn)程使用緩沖區(qū)。入臨界區(qū),保證任何時(shí)候只有一個(gè)進(jìn)程使用緩沖區(qū)。生產(chǎn)者進(jìn)程生產(chǎn)者進(jìn)程Producer: 消費(fèi)者進(jìn)程消費(fèi)者進(jìn)程Consumer: while(TRUE) while(TRUE) P(empty); P(full); P(mutex); P(mutex); 產(chǎn)品送往產(chǎn)品送

59、往buffer(in); 從從buffer(out)中取出產(chǎn)品;中取出產(chǎn)品; in=(in+1)mod N; out=(out+1)mod N; /*以以N為模為模*/ /*以以N為模為模*/ V(mutex); V(mutex); V(full); V(empty); P(mutex);P(full);P(mutex);P(empty); 讀者讀者-寫者問題也是一個(gè)著名的進(jìn)程寫者問題也是一個(gè)著名的進(jìn)程互斥互斥訪問訪問有限資源的同步問題。例如,一個(gè)航班預(yù)訂系統(tǒng)有有限資源的同步問題。例如,一個(gè)航班預(yù)訂系統(tǒng)有一個(gè)大型數(shù)據(jù)庫(kù),很多競(jìng)爭(zhēng)進(jìn)程要對(duì)它進(jìn)行讀、寫。一個(gè)大型數(shù)據(jù)庫(kù),很多競(jìng)爭(zhēng)進(jìn)程要對(duì)它進(jìn)行讀、寫

60、。允許多個(gè)進(jìn)程允許多個(gè)進(jìn)程同時(shí)讀同時(shí)讀該數(shù)據(jù)庫(kù),但是在任何時(shí)候如該數(shù)據(jù)庫(kù),但是在任何時(shí)候如果果有一個(gè)進(jìn)程寫有一個(gè)進(jìn)程寫(即修改)數(shù)據(jù)庫(kù),那么就(即修改)數(shù)據(jù)庫(kù),那么就不允許不允許其他進(jìn)程訪問它其他進(jìn)程訪問它 既不允許寫,也不允許讀。既不允許寫,也不允許讀。2讀者讀者-寫者問題寫者問題 設(shè)置兩個(gè)信號(hào)量:讀互斥信號(hào)量設(shè)置兩個(gè)信號(hào)量:讀互斥信號(hào)量rmutex和寫和寫互斥信號(hào)量互斥信號(hào)量wmutex。另外設(shè)立一個(gè)讀計(jì)數(shù)。另外設(shè)立一個(gè)讀計(jì)數(shù)器器readcount,它是一個(gè)整型變量,初值為,它是一個(gè)整型變量,初值為0。nrmutex:用于讀者互斥地訪問:用于讀者互斥地訪問readcount,初值為初值為1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論