操作系統(tǒng)原理與實(shí)踐教程03_第1頁
操作系統(tǒng)原理與實(shí)踐教程03_第2頁
操作系統(tǒng)原理與實(shí)踐教程03_第3頁
操作系統(tǒng)原理與實(shí)踐教程03_第4頁
操作系統(tǒng)原理與實(shí)踐教程03_第5頁
已閱讀5頁,還剩70頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、三兩草上傳3.1 3.1 進(jìn)程的概念進(jìn)程的概念3.1.1 3.1.1 進(jìn)程的引入進(jìn)程的引入 1.1.進(jìn)程的引入進(jìn)程的引入: : 多道程序在執(zhí)行時(shí),需要共享系統(tǒng)資源,從而導(dǎo)致各程多道程序在執(zhí)行時(shí),需要共享系統(tǒng)資源,從而導(dǎo)致各程序在執(zhí)行過程中出現(xiàn)相互制約的關(guān)系,程序的執(zhí)行表現(xiàn)出間序在執(zhí)行過程中出現(xiàn)相互制約的關(guān)系,程序的執(zhí)行表現(xiàn)出間斷性的特征。這些特征都是在程序的執(zhí)行過程中發(fā)生的,是斷性的特征。這些特征都是在程序的執(zhí)行過程中發(fā)生的,是動(dòng)態(tài)的過程,而傳統(tǒng)的程序本身是一組指令的集合,是一個(gè)動(dòng)態(tài)的過程,而傳統(tǒng)的程序本身是一組指令的集合,是一個(gè)靜態(tài)的概念,無法描述程序在內(nèi)存中的執(zhí)行情況,即我們無靜態(tài)的概念,

2、無法描述程序在內(nèi)存中的執(zhí)行情況,即我們無法從程序的字面上看出它何時(shí)執(zhí)行,何時(shí)停頓,也無法看出法從程序的字面上看出它何時(shí)執(zhí)行,何時(shí)停頓,也無法看出它與其它執(zhí)行程序的關(guān)系,因此,程序這個(gè)靜態(tài)概念已不能它與其它執(zhí)行程序的關(guān)系,因此,程序這個(gè)靜態(tài)概念已不能如實(shí)反映程序并發(fā)執(zhí)行過程的特征。為了深刻描述程序動(dòng)態(tài)如實(shí)反映程序并發(fā)執(zhí)行過程的特征。為了深刻描述程序動(dòng)態(tài)執(zhí)行過程的性質(zhì),人們引入執(zhí)行過程的性質(zhì),人們引入“進(jìn)程(進(jìn)程(ProcessProcess)”概念。概念。 3.1 3.1 進(jìn)程的概念進(jìn)程的概念2.2.進(jìn)程的概念進(jìn)程的概念: :n 進(jìn)程的概念是進(jìn)程的概念是6060年代初首先由麻省理工學(xué)院的年代初首

3、先由麻省理工學(xué)院的MULTICSMULTICS系統(tǒng)系統(tǒng)和和IBMIBM公司的公司的CTSS/360CTSS/360系統(tǒng)引入的。系統(tǒng)引入的。n 進(jìn)程是一個(gè)具有獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合的一次運(yùn)進(jìn)程是一個(gè)具有獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合的一次運(yùn)行活動(dòng)。它可以申請(qǐng)和擁有系統(tǒng)資源,是一個(gè)動(dòng)態(tài)的概念,行活動(dòng)。它可以申請(qǐng)和擁有系統(tǒng)資源,是一個(gè)動(dòng)態(tài)的概念,是一個(gè)活動(dòng)的實(shí)體。它不只是程序的代碼,還包括當(dāng)前的活是一個(gè)活動(dòng)的實(shí)體。它不只是程序的代碼,還包括當(dāng)前的活動(dòng),通過程序計(jì)數(shù)器的值和處理寄存器的內(nèi)容來表示。動(dòng),通過程序計(jì)數(shù)器的值和處理寄存器的內(nèi)容來表示。n 進(jìn)程是操作系統(tǒng)中最基本、重要的概念。是多道程序

4、系統(tǒng)出進(jìn)程是操作系統(tǒng)中最基本、重要的概念。是多道程序系統(tǒng)出現(xiàn)后,為了刻畫系統(tǒng)內(nèi)部出現(xiàn)的動(dòng)態(tài)情況,描述系統(tǒng)內(nèi)部各現(xiàn)后,為了刻畫系統(tǒng)內(nèi)部出現(xiàn)的動(dòng)態(tài)情況,描述系統(tǒng)內(nèi)部各道程序的活動(dòng)規(guī)律引進(jìn)的一個(gè)概念道程序的活動(dòng)規(guī)律引進(jìn)的一個(gè)概念, ,所有多道程序設(shè)計(jì)操作系所有多道程序設(shè)計(jì)操作系統(tǒng)都建立在進(jìn)程的基礎(chǔ)上。統(tǒng)都建立在進(jìn)程的基礎(chǔ)上。3.1 3.1 進(jìn)程的概念進(jìn)程的概念n 操作系統(tǒng)引入進(jìn)程的概念的原因操作系統(tǒng)引入進(jìn)程的概念的原因: :從理論角度看,是對(duì)正在運(yùn)行的程序過程的抽象;從理論角度看,是對(duì)正在運(yùn)行的程序過程的抽象;從實(shí)現(xiàn)角度看,是一種數(shù)據(jù)結(jié)構(gòu),目的在于清晰地刻劃動(dòng)態(tài)系統(tǒng)的內(nèi)從實(shí)現(xiàn)角度看,是一種數(shù)據(jù)結(jié)構(gòu),

5、目的在于清晰地刻劃動(dòng)態(tài)系統(tǒng)的內(nèi)在規(guī)律,有效管理和調(diào)度進(jìn)入在規(guī)律,有效管理和調(diào)度進(jìn)入計(jì)算機(jī)系統(tǒng)主存儲(chǔ)器運(yùn)行的程序。計(jì)算機(jī)系統(tǒng)主存儲(chǔ)器運(yùn)行的程序。n 進(jìn)程的特征進(jìn)程的特征動(dòng)態(tài)性:進(jìn)程的實(shí)質(zhì)是程序的一次執(zhí)行過程,進(jìn)程是動(dòng)態(tài)產(chǎn)生,動(dòng)態(tài)動(dòng)態(tài)性:進(jìn)程的實(shí)質(zhì)是程序的一次執(zhí)行過程,進(jìn)程是動(dòng)態(tài)產(chǎn)生,動(dòng)態(tài)消亡的。消亡的。并發(fā)性:任何進(jìn)程都可以同其他進(jìn)程一起并發(fā)執(zhí)行并發(fā)性:任何進(jìn)程都可以同其他進(jìn)程一起并發(fā)執(zhí)行獨(dú)立性:進(jìn)程是一個(gè)能獨(dú)立運(yùn)行的基本單位,同時(shí)也是系統(tǒng)分配資源獨(dú)立性:進(jìn)程是一個(gè)能獨(dú)立運(yùn)行的基本單位,同時(shí)也是系統(tǒng)分配資源和調(diào)度的獨(dú)立單位;和調(diào)度的獨(dú)立單位;異步性:由于進(jìn)程間的相互制約,使進(jìn)程具有執(zhí)行的間斷性,

6、即進(jìn)程異步性:由于進(jìn)程間的相互制約,使進(jìn)程具有執(zhí)行的間斷性,即進(jìn)程按各自獨(dú)立的、不可預(yù)知的速度向前推進(jìn)按各自獨(dú)立的、不可預(yù)知的速度向前推進(jìn)結(jié)構(gòu)特征:進(jìn)程由程序、數(shù)據(jù)和進(jìn)程控制塊三部分組成。結(jié)構(gòu)特征:進(jìn)程由程序、數(shù)據(jù)和進(jìn)程控制塊三部分組成。3.1 3.1 進(jìn)程的概念進(jìn)程的概念n 進(jìn)程與程序的關(guān)系進(jìn)程與程序的關(guān)系程序是指令的有序集合,其本身沒有任何運(yùn)行的含義,是程序是指令的有序集合,其本身沒有任何運(yùn)行的含義,是一個(gè)靜態(tài)的概念。而進(jìn)程是程序在處理機(jī)上的一次執(zhí)行過一個(gè)靜態(tài)的概念。而進(jìn)程是程序在處理機(jī)上的一次執(zhí)行過程,它是一個(gè)動(dòng)態(tài)的概念。程,它是一個(gè)動(dòng)態(tài)的概念。程序可以作為一種軟件資料長(zhǎng)期存在,而進(jìn)程是

7、有一定生程序可以作為一種軟件資料長(zhǎng)期存在,而進(jìn)程是有一定生命期的。程序是永久的,進(jìn)程是暫時(shí)的。命期的。程序是永久的,進(jìn)程是暫時(shí)的。進(jìn)程更能真實(shí)地描述并發(fā),而程序不能;進(jìn)程是由程序和進(jìn)程更能真實(shí)地描述并發(fā),而程序不能;進(jìn)程是由程序和數(shù)據(jù)兩部分組成的。數(shù)據(jù)兩部分組成的。進(jìn)程具有創(chuàng)建其他進(jìn)程的功能,而程序沒有。進(jìn)程具有創(chuàng)建其他進(jìn)程的功能,而程序沒有。同一程序同時(shí)運(yùn)行于若干個(gè)數(shù)據(jù)集合上,它將屬于若干個(gè)同一程序同時(shí)運(yùn)行于若干個(gè)數(shù)據(jù)集合上,它將屬于若干個(gè)不同的進(jìn)程。也就是說同一程序可以對(duì)應(yīng)多個(gè)進(jìn)程。不同的進(jìn)程。也就是說同一程序可以對(duì)應(yīng)多個(gè)進(jìn)程。 3.1 3.1 進(jìn)程的概念進(jìn)程的概念3.1.2 3.1.2

8、進(jìn)程的狀態(tài)進(jìn)程的狀態(tài) 一個(gè)進(jìn)程從創(chuàng)建而產(chǎn)生至撤銷而消亡的整個(gè)生命周期,可用一組一個(gè)進(jìn)程從創(chuàng)建而產(chǎn)生至撤銷而消亡的整個(gè)生命周期,可用一組狀態(tài)加以刻劃,狀態(tài)加以刻劃,, ,按進(jìn)程在執(zhí)行過程中的狀況至少定義三種不同的進(jìn)程狀按進(jìn)程在執(zhí)行過程中的狀況至少定義三種不同的進(jìn)程狀態(tài):態(tài):l運(yùn)行態(tài)運(yùn)行態(tài)(RunningRunning)是指當(dāng)前進(jìn)程已經(jīng)分配到)是指當(dāng)前進(jìn)程已經(jīng)分配到CPUCPU,它的程序正在處理機(jī),它的程序正在處理機(jī)上執(zhí)行的狀態(tài)。上執(zhí)行的狀態(tài)。l就緒狀態(tài)就緒狀態(tài)(ReadyReady)是指已具備運(yùn)行條件,但因?yàn)槠渌M(jìn)程正在占用)是指已具備運(yùn)行條件,但因?yàn)槠渌M(jìn)程正在占用CPU,CPU,使它暫時(shí)不能

9、運(yùn)行而處于等待分配使它暫時(shí)不能運(yùn)行而處于等待分配CPUCPU的狀態(tài)。的狀態(tài)。l阻塞狀態(tài)阻塞狀態(tài)(BlockedBlocked)是指進(jìn)程因等待某種事件發(fā)生(例如等待)是指進(jìn)程因等待某種事件發(fā)生(例如等待I/OI/O操作操作完成,等待其他進(jìn)程發(fā)來的信號(hào))而暫時(shí)不能運(yùn)行的狀態(tài),也就是說,完成,等待其他進(jìn)程發(fā)來的信號(hào))而暫時(shí)不能運(yùn)行的狀態(tài),也就是說,處于阻塞狀態(tài)的進(jìn)程尚不具備運(yùn)行條件,即使處于阻塞狀態(tài)的進(jìn)程尚不具備運(yùn)行條件,即使CPUCPU空閑它也無法使用??臻e它也無法使用。3.1 3.1 進(jìn)程的概念進(jìn)程的概念3.1 3.1 進(jìn)程的概念進(jìn)程的概念n 引起進(jìn)程狀態(tài)轉(zhuǎn)換的具體原因引起進(jìn)程狀態(tài)轉(zhuǎn)換的具體原因

10、n運(yùn)行態(tài)運(yùn)行態(tài)等待態(tài):等待使用資源或某事件發(fā)生等待態(tài):等待使用資源或某事件發(fā)生 ;n等待態(tài)等待態(tài)就緒態(tài):資源得到滿足或事件發(fā)生就緒態(tài):資源得到滿足或事件發(fā)生 ;n運(yùn)行態(tài)運(yùn)行態(tài)就緒態(tài):運(yùn)行時(shí)間片到;出現(xiàn)有更高優(yōu)先權(quán)就緒態(tài):運(yùn)行時(shí)間片到;出現(xiàn)有更高優(yōu)先權(quán)進(jìn)程。進(jìn)程。n就緒態(tài)就緒態(tài)運(yùn)行態(tài):運(yùn)行態(tài):CPUCPU空閑時(shí)選擇一個(gè)就緒進(jìn)程??臻e時(shí)選擇一個(gè)就緒進(jìn)程。3.1 3.1 進(jìn)程的概念進(jìn)程的概念n 進(jìn)程五態(tài)模型及其轉(zhuǎn)換進(jìn)程五態(tài)模型及其轉(zhuǎn)換運(yùn)行態(tài)就緒態(tài)等待態(tài)選中落選出現(xiàn)等待事件等待事件結(jié)束新建態(tài)終止態(tài)3.1 3.1 進(jìn)程的概念進(jìn)程的概念n 新建態(tài)對(duì)應(yīng)進(jìn)程剛被創(chuàng)建的狀態(tài)。為一個(gè)新進(jìn)程創(chuàng)建新建態(tài)對(duì)應(yīng)進(jìn)程剛被創(chuàng)

11、建的狀態(tài)。為一個(gè)新進(jìn)程創(chuàng)建必要的管理信息,它并沒有被提交執(zhí)行,而是在等待必要的管理信息,它并沒有被提交執(zhí)行,而是在等待操作系統(tǒng)完成創(chuàng)建進(jìn)程的必要操作。操作系統(tǒng)完成創(chuàng)建進(jìn)程的必要操作。n 進(jìn)程的終止,首先進(jìn)程的終止,首先, ,等待操作系統(tǒng)進(jìn)行善后,然后等待操作系統(tǒng)進(jìn)行善后,然后, ,退退出主存。進(jìn)入終止態(tài)的進(jìn)程不再執(zhí)行,但依然臨時(shí)保出主存。進(jìn)入終止態(tài)的進(jìn)程不再執(zhí)行,但依然臨時(shí)保留在系統(tǒng)中等待善后。一旦其他進(jìn)程完成了對(duì)終止態(tài)留在系統(tǒng)中等待善后。一旦其他進(jìn)程完成了對(duì)終止態(tài)進(jìn)程的信息抽取之后,系統(tǒng)將刪除該進(jìn)程。進(jìn)程的信息抽取之后,系統(tǒng)將刪除該進(jìn)程。 3.1 3.1 進(jìn)程的概念進(jìn)程的概念n 掛起狀態(tài)的引

12、入掛起狀態(tài)的引入掛起等待事件結(jié)束出現(xiàn)等待事件解除掛起掛起落選選中運(yùn)行態(tài)就緒態(tài)等待事件結(jié)束終止態(tài)新建態(tài)掛起就緒態(tài)解除掛起掛起掛起等待態(tài)等待態(tài)提交提交3.1 3.1 進(jìn)程的概念進(jìn)程的概念l例題:例題: 1 1如果系統(tǒng)中有如果系統(tǒng)中有N N個(gè)進(jìn)程,運(yùn)行的進(jìn)程最多幾個(gè),最少幾個(gè);個(gè)進(jìn)程,運(yùn)行的進(jìn)程最多幾個(gè),最少幾個(gè);就緒進(jìn)程最多幾個(gè)最少幾個(gè);等待進(jìn)程最多幾個(gè),最少幾個(gè)?就緒進(jìn)程最多幾個(gè)最少幾個(gè);等待進(jìn)程最多幾個(gè),最少幾個(gè)? 解答解答 :在單處理機(jī)系統(tǒng)中,處于運(yùn)行狀態(tài)的進(jìn)程最多為:在單處理機(jī)系統(tǒng)中,處于運(yùn)行狀態(tài)的進(jìn)程最多為1 1個(gè),個(gè),最少為最少為0 0個(gè);處于就緒進(jìn)程最多為個(gè);處于就緒進(jìn)程最多為N-1

13、N-1個(gè),最少為個(gè),最少為0 0個(gè);處于阻個(gè);處于阻塞的進(jìn)程最多為塞的進(jìn)程最多為N N個(gè),最少為個(gè),最少為0 0個(gè)。個(gè)。 2. 2. 有沒有這樣的狀態(tài)轉(zhuǎn)換,為什么?有沒有這樣的狀態(tài)轉(zhuǎn)換,為什么? (1 1) 等待等待運(yùn)行;運(yùn)行; (2 2) 就緒就緒等待等待3.1 3.1 進(jìn)程的概念進(jìn)程的概念3.1.3 3.1.3 進(jìn)程的描述進(jìn)程的描述進(jìn)程控制塊進(jìn)程控制塊l進(jìn)程在內(nèi)存的活動(dòng)可以用進(jìn)程上下文(進(jìn)程在內(nèi)存的活動(dòng)可以用進(jìn)程上下文(Process ContextProcess Context)來描述。在操作系統(tǒng)中,把進(jìn)程的物理實(shí)體和支持進(jìn)程運(yùn)行來描述。在操作系統(tǒng)中,把進(jìn)程的物理實(shí)體和支持進(jìn)程運(yùn)行的環(huán)境

14、合稱為進(jìn)程上下文。進(jìn)程的運(yùn)行被認(rèn)為是在進(jìn)程的上的環(huán)境合稱為進(jìn)程上下文。進(jìn)程的運(yùn)行被認(rèn)為是在進(jìn)程的上下文中執(zhí)行的。在操作系統(tǒng)中,進(jìn)程的上下文由用戶級(jí)上下下文中執(zhí)行的。在操作系統(tǒng)中,進(jìn)程的上下文由用戶級(jí)上下文、系統(tǒng)級(jí)上下文和寄存器上下文組成。文、系統(tǒng)級(jí)上下文和寄存器上下文組成。l進(jìn)程控制塊(進(jìn)程控制塊(PCBPCB)是進(jìn)程組成中最關(guān)鍵的部分,是系統(tǒng)對(duì)進(jìn))是進(jìn)程組成中最關(guān)鍵的部分,是系統(tǒng)對(duì)進(jìn)程進(jìn)行控制和管理的依據(jù),是進(jìn)程存在的唯一標(biāo)志。當(dāng)系統(tǒng)程進(jìn)行控制和管理的依據(jù),是進(jìn)程存在的唯一標(biāo)志。當(dāng)系統(tǒng)創(chuàng)建一個(gè)新進(jìn)程就要為它創(chuàng)建一個(gè)創(chuàng)建一個(gè)新進(jìn)程就要為它創(chuàng)建一個(gè)PCB;PCB;當(dāng)進(jìn)程終止后,系統(tǒng)當(dāng)進(jìn)程終止后,

15、系統(tǒng)收回其收回其PCBPCB,該進(jìn)程在系統(tǒng)中就不存在了,該進(jìn)程在系統(tǒng)中就不存在了 。l進(jìn)程與進(jìn)程與PCBPCB是一一對(duì)應(yīng)的。是一一對(duì)應(yīng)的。3.1 3.1 進(jìn)程的概念進(jìn)程的概念l進(jìn)程控制塊的組成:進(jìn)程控制塊的組成:進(jìn)程名進(jìn)程名特征信息特征信息進(jìn)程狀態(tài)信息進(jìn)程狀態(tài)信息調(diào)度優(yōu)先權(quán)調(diào)度優(yōu)先權(quán)通信信息通信信息現(xiàn)場(chǎng)保護(hù)區(qū)現(xiàn)場(chǎng)保護(hù)區(qū)資源需求資源需求進(jìn)程實(shí)體信息進(jìn)程實(shí)體信息族系關(guān)系族系關(guān)系其他信息其他信息3.1 3.1 進(jìn)程的概念進(jìn)程的概念3.1 3.1 進(jìn)程的概念進(jìn)程的概念l進(jìn)程控制塊的組織:進(jìn)程控制塊的組織:3.1 3.1 進(jìn)程的概念進(jìn)程的概念3.1.4 3.1.4 實(shí)例研究實(shí)例研究LinuxLinux進(jìn)

16、程進(jìn)程l在在LinuxLinux內(nèi)核中,代表一個(gè)進(jìn)程的內(nèi)核數(shù)據(jù)結(jié)構(gòu)是內(nèi)核中,代表一個(gè)進(jìn)程的內(nèi)核數(shù)據(jù)結(jié)構(gòu)是structstruct task_structtask_struct,它就是前面提到的具有實(shí)際意義的進(jìn)程控制,它就是前面提到的具有實(shí)際意義的進(jìn)程控制塊,塊,LinuxLinux把它命名為把它命名為task_structtask_struct結(jié)構(gòu),原代碼見結(jié)構(gòu),原代碼見include/include/linux/sched.hlinux/sched.h文件。文件。l每一個(gè)可以獨(dú)立調(diào)度的進(jìn)程必須擁有它自己的進(jìn)程控制塊,每一個(gè)可以獨(dú)立調(diào)度的進(jìn)程必須擁有它自己的進(jìn)程控制塊,或者說進(jìn)程和進(jìn)程控制塊之

17、間是一一對(duì)應(yīng)的?;蛘哒f進(jìn)程和進(jìn)程控制塊之間是一一對(duì)應(yīng)的。lLinuxLinux定義了五種進(jìn)程狀態(tài):定義了五種進(jìn)程狀態(tài):TASK_RUNNINGTASK_RUNNING、TASK_INTERRUPTIBLETASK_INTERRUPTIBLE 、TASK_UNINTERRUPTIBLETASK_UNINTERRUPTIBLE 、TASK_MOMBIETASK_MOMBIE 和TASK_STOPPEDTASK_STOPPED 。3.1 3.1 進(jìn)程的概念進(jìn)程的概念lTASK_RUNNINGTASK_RUNNING狀態(tài)狀態(tài):該狀態(tài)表示進(jìn)程要么在:該狀態(tài)表示進(jìn)程要么在CPUCPU上執(zhí)行,要上執(zhí)行,要么

18、在就緒隊(duì)列中等待調(diào)度程序調(diào)度執(zhí)行。么在就緒隊(duì)列中等待調(diào)度程序調(diào)度執(zhí)行。lTASK_INTERRUPTIBLETASK_INTERRUPTIBLE狀態(tài)狀態(tài):該狀態(tài)表示進(jìn)程處于可中斷的:該狀態(tài)表示進(jìn)程處于可中斷的等待狀態(tài),也就是說處于等待隊(duì)列中的進(jìn)程,可被其他進(jìn)等待狀態(tài),也就是說處于等待隊(duì)列中的進(jìn)程,可被其他進(jìn)程產(chǎn)生的一個(gè)信號(hào)或一個(gè)硬件中斷所喚醒,使其狀態(tài)變?yōu)槌坍a(chǎn)生的一個(gè)信號(hào)或一個(gè)硬件中斷所喚醒,使其狀態(tài)變?yōu)門ASK_RUNNINGTASK_RUNNING狀態(tài)。狀態(tài)。lTASK_UNINTERRUPTIBLETASK_UNINTERRUPTIBLE狀態(tài)狀態(tài):該狀態(tài)表示進(jìn)程處于不可中:該狀態(tài)表示進(jìn)程

19、處于不可中斷的等待狀態(tài)。不可中斷的等待狀態(tài)是指等待進(jìn)程不能被斷的等待狀態(tài)。不可中斷的等待狀態(tài)是指等待進(jìn)程不能被其他進(jìn)程產(chǎn)生的一個(gè)信號(hào)所喚醒或改變成另一個(gè)狀態(tài)。當(dāng)其他進(jìn)程產(chǎn)生的一個(gè)信號(hào)所喚醒或改變成另一個(gè)狀態(tài)。當(dāng)進(jìn)程打開一個(gè)設(shè)備文件時(shí),才會(huì)用到這種狀態(tài)。進(jìn)程打開一個(gè)設(shè)備文件時(shí),才會(huì)用到這種狀態(tài)。3.1 3.1 進(jìn)程的概念進(jìn)程的概念l TASK_MOMBIETASK_MOMBIE狀態(tài)狀態(tài):該狀態(tài)表示進(jìn)程中止執(zhí)行,并且:該狀態(tài)表示進(jìn)程中止執(zhí)行,并且釋放了運(yùn)行時(shí)的大部分資源,但尚未釋放自己的進(jìn)釋放了運(yùn)行時(shí)的大部分資源,但尚未釋放自己的進(jìn)程控制塊時(shí)所處的一種狀態(tài)。程控制塊時(shí)所處的一種狀態(tài)。l TASK_

20、STOPPEDTASK_STOPPED狀態(tài)狀態(tài):該狀態(tài)表示進(jìn)程的執(zhí)行被暫停。:該狀態(tài)表示進(jìn)程的執(zhí)行被暫停。當(dāng)一個(gè)進(jìn)程被另一個(gè)進(jìn)程監(jiān)控時(shí),任何信號(hào)都可以當(dāng)一個(gè)進(jìn)程被另一個(gè)進(jìn)程監(jiān)控時(shí),任何信號(hào)都可以把這個(gè)進(jìn)程的狀態(tài)變成暫停狀態(tài)。另外,當(dāng)進(jìn)程收把這個(gè)進(jìn)程的狀態(tài)變成暫停狀態(tài)。另外,當(dāng)進(jìn)程收到信號(hào)到信號(hào)SIGSTOPSIGSTOP、SIGTSTPSIGTSTP、SIGTTINSIGTTIN和和SIGTOUSIGTOU時(shí),也時(shí),也將轉(zhuǎn)變成暫停狀態(tài)。將轉(zhuǎn)變成暫停狀態(tài)。3.1 3.1 進(jìn)程的概念進(jìn)程的概念僵死TASK_ZOMBIE就緒TASK_RUNNING不可中斷TASK_UNINTERRUPTIBLE可中

21、斷TASK_INTERRUPTIBLE停止TASK_STOPPED占有CPU運(yùn)行調(diào)度schedulle 時(shí)間片到申請(qǐng)資源未果,調(diào)用interruptible_sleep_on()申請(qǐng)資源未果,調(diào)用sleep_on()申請(qǐng)資源可用后wake_up()申請(qǐng)資源可用,收到信號(hào)、wake_up()wake_up_interruptible()創(chuàng)建do_fork()執(zhí)行do_exit()跟蹤系統(tǒng)調(diào)用,執(zhí)行syscall_trace()sys_exit()schedulle()收到SIG_KILL或SIG_CONT后,執(zhí)行wake_up()3.2 3.2 進(jìn)程控制進(jìn)程控制3.2.1 3.2.1 進(jìn)程控制機(jī)

22、構(gòu)進(jìn)程控制機(jī)構(gòu) 1.1.操作系統(tǒng)內(nèi)核操作系統(tǒng)內(nèi)核 n 操作系統(tǒng)內(nèi)核就是操作系統(tǒng)的核心,它是基于硬件的第一層操作系統(tǒng)內(nèi)核就是操作系統(tǒng)的核心,它是基于硬件的第一層軟件擴(kuò)展,提供操作系統(tǒng)最基本的功能,是操作系統(tǒng)工作的軟件擴(kuò)展,提供操作系統(tǒng)最基本的功能,是操作系統(tǒng)工作的基礎(chǔ)?;A(chǔ)。n現(xiàn)代操作系統(tǒng)設(shè)計(jì)中,通常將一些與硬件相關(guān)的模塊,如中現(xiàn)代操作系統(tǒng)設(shè)計(jì)中,通常將一些與硬件相關(guān)的模塊,如中斷處理程序、各種常用設(shè)備的驅(qū)動(dòng)程序以及運(yùn)行頻率較高的斷處理程序、各種常用設(shè)備的驅(qū)動(dòng)程序以及運(yùn)行頻率較高的模塊等,將它們常駐內(nèi)存,以提高操作系統(tǒng)的運(yùn)行效率,并模塊等,將它們常駐內(nèi)存,以提高操作系統(tǒng)的運(yùn)行效率,并對(duì)它們加以特

23、殊的保護(hù)。通常把這一部分程序稱為操作系統(tǒng)對(duì)它們加以特殊的保護(hù)。通常把這一部分程序稱為操作系統(tǒng)的內(nèi)核。的內(nèi)核。3.2 3.2 進(jìn)程控制進(jìn)程控制2.2.原語原語 n原語(原語(primitiveprimitive)是機(jī)器指令的延伸,是由若干條指令)是機(jī)器指令的延伸,是由若干條指令構(gòu)成,用于完成特定功能的過程。原語是操作系統(tǒng)核心,構(gòu)成,用于完成特定功能的過程。原語是操作系統(tǒng)核心,它不是由進(jìn)程而是由一組程序模塊所組成,是操作系統(tǒng)的它不是由進(jìn)程而是由一組程序模塊所組成,是操作系統(tǒng)的一個(gè)組成部分,它必須在管態(tài)(一種機(jī)器狀態(tài)一個(gè)組成部分,它必須在管態(tài)(一種機(jī)器狀態(tài)) )下執(zhí)行下執(zhí)行. .n原語都是原子操作原

24、語都是原子操作. .所謂原子操作是指一個(gè)操作中所有動(dòng)所謂原子操作是指一個(gè)操作中所有動(dòng)作,要么全做,要么全不做,即原子操作是一個(gè)不可分割作,要么全做,要么全不做,即原子操作是一個(gè)不可分割的操作。的操作。 3.2 3.2 進(jìn)程控制進(jìn)程控制3.2.2 3.2.2 進(jìn)程控制進(jìn)程控制 1.1.進(jìn)程的創(chuàng)建進(jìn)程的創(chuàng)建 n進(jìn)程在執(zhí)行過程中,能通過進(jìn)程在執(zhí)行過程中,能通過系統(tǒng)調(diào)用創(chuàng)建多個(gè)新進(jìn)程,系統(tǒng)調(diào)用創(chuàng)建多個(gè)新進(jìn)程,創(chuàng)建進(jìn)程稱為父進(jìn)程,而新創(chuàng)建進(jìn)程稱為父進(jìn)程,而新進(jìn)程稱為該進(jìn)程的子進(jìn)程。進(jìn)程稱為該進(jìn)程的子進(jìn)程。這些新進(jìn)程仍然可以再創(chuàng)建這些新進(jìn)程仍然可以再創(chuàng)建其他進(jìn)程,從而形成了進(jìn)程其他進(jìn)程,從而形成了進(jìn)程樹樹

25、 。根ABCGFED祖先3.2 3.2 進(jìn)程控制進(jìn)程控制 1.1.進(jìn)程的創(chuàng)建進(jìn)程的創(chuàng)建 n創(chuàng)建進(jìn)程必須調(diào)用創(chuàng)建原語來實(shí)現(xiàn)。創(chuàng)建原語的主要功能創(chuàng)建進(jìn)程必須調(diào)用創(chuàng)建原語來實(shí)現(xiàn)。創(chuàng)建原語的主要功能是創(chuàng)建一個(gè)指定標(biāo)識(shí)符的進(jìn)程,形成進(jìn)程的是創(chuàng)建一個(gè)指定標(biāo)識(shí)符的進(jìn)程,形成進(jìn)程的PCBPCB。n一個(gè)典型的進(jìn)程創(chuàng)建原語可描述如下:一個(gè)典型的進(jìn)程創(chuàng)建原語可描述如下:Create (s0,m0,pi) p=Get_New_PCB(); /分配新的分配新的PCB pid=Get_New_PID(); /分配進(jìn)程的分配進(jìn)程的PID pID=pid; /設(shè)置進(jìn)程的設(shè)置進(jìn)程的PID p-CPU_State=s0; /CP

26、U的狀態(tài)的狀態(tài) p -Memory=m0; /內(nèi)存內(nèi)存 p -Priority=pi; /優(yōu)先級(jí)優(yōu)先級(jí) p -Status.Type=Ready; /進(jìn)程狀態(tài)進(jìn)程狀態(tài) p -Status.List=RL; /進(jìn)程隊(duì)列進(jìn)程隊(duì)列 Insert(RL,p); /將進(jìn)程將進(jìn)程p插入就緒隊(duì)列插入就緒隊(duì)列 Scheduler(); /調(diào)度程序調(diào)度程序 3.2 3.2 進(jìn)程控制進(jìn)程控制 2.2.進(jìn)程的阻塞進(jìn)程的阻塞 n正在運(yùn)行的進(jìn)程因?yàn)樘岢龇?wù)請(qǐng)求(如正在運(yùn)行的進(jìn)程因?yàn)樘岢龇?wù)請(qǐng)求(如I/OI/O操作)未被操作操作)未被操作系統(tǒng)立即滿足,或者所需數(shù)據(jù)尚未到達(dá)等原因,只能轉(zhuǎn)變系統(tǒng)立即滿足,或者所需數(shù)據(jù)尚未到達(dá)

27、等原因,只能轉(zhuǎn)變?yōu)樽枞麪顟B(tài),等待相應(yīng)事件出現(xiàn)后再把它喚醒。為阻塞狀態(tài),等待相應(yīng)事件出現(xiàn)后再把它喚醒。n阻塞原語可描述如下:阻塞原語可描述如下:Block( ) p=Get_PCB(); /獲取當(dāng)前進(jìn)程的進(jìn)程控制塊獲取當(dāng)前進(jìn)程的進(jìn)程控制塊 s=p-Status.Type; /保存當(dāng)前進(jìn)程的狀態(tài)保存當(dāng)前進(jìn)程的狀態(tài) cpu=p-Processor_ID; /處理機(jī)狀態(tài)處理機(jī)狀態(tài) p-CPU_State=Interrupt(cpu); /保存處理機(jī)現(xiàn)場(chǎng)保存處理機(jī)現(xiàn)場(chǎng) p-Status.Type=Blocked; /將進(jìn)程的狀態(tài)改為阻塞將進(jìn)程的狀態(tài)改為阻塞 Insert(BL,p); /將進(jìn)程插入等待隊(duì)

28、列將進(jìn)程插入等待隊(duì)列 Scheduler();3.2 3.2 進(jìn)程控制進(jìn)程控制 3.3.進(jìn)程的喚醒進(jìn)程的喚醒 n當(dāng)阻塞的進(jìn)程所等待的事件出現(xiàn)時(shí)(如所需數(shù)據(jù)已到達(dá),當(dāng)阻塞的進(jìn)程所等待的事件出現(xiàn)時(shí)(如所需數(shù)據(jù)已到達(dá),或者等待的或者等待的I/OI/O操作已經(jīng)完成),則由另外的與阻塞進(jìn)程相操作已經(jīng)完成),則由另外的與阻塞進(jìn)程相關(guān)的進(jìn)程(如完成關(guān)的進(jìn)程(如完成I/OI/O操作的進(jìn)程)調(diào)用喚醒原語,將等待操作的進(jìn)程)調(diào)用喚醒原語,將等待該事件的進(jìn)程喚醒。阻塞進(jìn)程不能喚醒自己。該事件的進(jìn)程喚醒。阻塞進(jìn)程不能喚醒自己。n喚醒原語的執(zhí)行過程如下:?jiǎn)拘言Z的執(zhí)行過程如下: Wakeup( pid ) P=Get_

29、PCB(pid); /獲取進(jìn)程控制塊獲取進(jìn)程控制塊 Remove(p-Status.List,p); /從阻塞隊(duì)列中移出進(jìn)程從阻塞隊(duì)列中移出進(jìn)程p p-Status.Type=Ready; /進(jìn)程的狀態(tài)改為就緒進(jìn)程的狀態(tài)改為就緒 Insert (RL,p); /將進(jìn)程插入到就緒隊(duì)列將進(jìn)程插入到就緒隊(duì)列 Scheduler (); /調(diào)度程序調(diào)度程序3.2 3.2 進(jìn)程控制進(jìn)程控制 4.4.進(jìn)程的終止進(jìn)程的終止 n進(jìn)程完成了任務(wù),或者在執(zhí)行過程發(fā)生異常,這時(shí)系統(tǒng)就進(jìn)程完成了任務(wù),或者在執(zhí)行過程發(fā)生異常,這時(shí)系統(tǒng)就要終止當(dāng)前進(jìn)程的執(zhí)行。終止進(jìn)程的執(zhí)行,可用進(jìn)程終止要終止當(dāng)前進(jìn)程的執(zhí)行。終止進(jìn)程的執(zhí)

30、行,可用進(jìn)程終止原語來實(shí)現(xiàn)。原語來實(shí)現(xiàn)。n一個(gè)典型進(jìn)程終止原語如下:一個(gè)典型進(jìn)程終止原語如下:Destroy ( pid ) P=Get_PCB(pid); /獲取進(jìn)程控制塊獲取進(jìn)程控制塊 Kill_Tree(p); /刪除整個(gè)進(jìn)程樹刪除整個(gè)進(jìn)程樹 Scheduler(); /調(diào)度器調(diào)度器3.2 3.2 進(jìn)程控制進(jìn)程控制Kill_Tree ( P ) for ( each q in p-Creation.Tree.Child) Kill_Tree(q); /刪除當(dāng)前進(jìn)程的所有子進(jìn)程刪除當(dāng)前進(jìn)程的所有子進(jìn)程qif (p-Status.Type=Running) cpu =p-Processor_

31、ID; Interrupt (cpu);Remove (p-Status.List,p);Release_all(p-Memory);Release_all (p-Other_Resources);Close_all(p-Open_Files);Delete_PCB(p);3.2 3.2 進(jìn)程控制進(jìn)程控制3.2.3 3.2.3 實(shí)例研究:實(shí)例研究:LinuxLinux和和WindowsWindows系統(tǒng)創(chuàng)建進(jìn)程系統(tǒng)創(chuàng)建進(jìn)程 1.Linux1.Linux系統(tǒng)中進(jìn)程創(chuàng)建系統(tǒng)中進(jìn)程創(chuàng)建forkfork u在在LinuxLinux系統(tǒng)中,用戶或系統(tǒng)可以使用系統(tǒng)調(diào)用系統(tǒng)中,用戶或系統(tǒng)可以使用系統(tǒng)調(diào)用fo

32、rkfork來創(chuàng)建來創(chuàng)建一個(gè)新的進(jìn)程。一個(gè)新的進(jìn)程。forkfork的函數(shù)原形為:的函數(shù)原形為: pid_tpid_t fork() fork()u當(dāng)一個(gè)進(jìn)程調(diào)用當(dāng)一個(gè)進(jìn)程調(diào)用forkfork創(chuàng)建一個(gè)子進(jìn)程后,父進(jìn)程和子進(jìn)程創(chuàng)建一個(gè)子進(jìn)程后,父進(jìn)程和子進(jìn)程都在自己獨(dú)立的地址空間內(nèi)執(zhí)行。它們之間不共享任何地都在自己獨(dú)立的地址空間內(nèi)執(zhí)行。它們之間不共享任何地址空間,但是父子進(jìn)程具有相同的程序代碼、數(shù)據(jù)和堆棧址空間,但是父子進(jìn)程具有相同的程序代碼、數(shù)據(jù)和堆棧段,段, 因此,為了區(qū)別運(yùn)行中的父子進(jìn)程,因此,為了區(qū)別運(yùn)行中的父子進(jìn)程,forkfork系統(tǒng)調(diào)用向系統(tǒng)調(diào)用向父子進(jìn)程返回不同的值。它向子進(jìn)程返

33、回父子進(jìn)程返回不同的值。它向子進(jìn)程返回0 0,而向父進(jìn)程返,而向父進(jìn)程返回子進(jìn)程的回子進(jìn)程的PIDPID。3.2 3.2 進(jìn)程控制進(jìn)程控制.Beforefork()After.forkfork執(zhí)行前執(zhí)行前一個(gè)控制流進(jìn)入內(nèi)核一個(gè)控制流進(jìn)入內(nèi)核forkfork模塊模塊。Beforefork()After。Beforefork()Afterforkforkfork執(zhí)行后執(zhí)行后調(diào)用后,從調(diào)用后,從forkfork返回兩個(gè)控制流返回兩個(gè)控制流父進(jìn)程父進(jìn)程子進(jìn)程子進(jìn)程/* - The file create.c introduces the use of fork. -*/ #include main()

34、 int pid; printf(“Before: my pid is %d .n”,getpid(); pid=fork(); /create new process if (pid = -1) /出錯(cuò)處理出錯(cuò)處理 perror(“Can not fork process!”); /error else if (pid =0) /子進(jìn)程代碼子進(jìn)程代碼 printf(“I am the child. My pid is %d .n”, getpid();else /父進(jìn)程代碼父進(jìn)程代碼 printf(“I am the parent. My child is %d .n”,pid); 3.2

35、3.2 進(jìn)程控制進(jìn)程控制2.Windows2.Windows系統(tǒng)中進(jìn)程的創(chuàng)建系統(tǒng)中進(jìn)程的創(chuàng)建CreateProcessCreateProcess u在在windowswindows系統(tǒng),一個(gè)進(jìn)程可以調(diào)用系統(tǒng),一個(gè)進(jìn)程可以調(diào)用win32 APIwin32 API的的CreateProcessCreateProcess函數(shù)來創(chuàng)建一個(gè)新的進(jìn)程及其主線程,以執(zhí)函數(shù)來創(chuàng)建一個(gè)新的進(jìn)程及其主線程,以執(zhí)行指定的任務(wù)。在利用行指定的任務(wù)。在利用CreateProcessCreateProcess建立進(jìn)程時(shí),操作系建立進(jìn)程時(shí),操作系統(tǒng)要為新進(jìn)程分配新的地址空間和資源,建立新的主線程。統(tǒng)要為新進(jìn)程分配新的地址空間

36、和資源,建立新的主線程。一旦新進(jìn)程建立,父進(jìn)程仍然使用原來的地址空間繼續(xù)執(zhí)一旦新進(jìn)程建立,父進(jìn)程仍然使用原來的地址空間繼續(xù)執(zhí)行,而新進(jìn)程則在新的地址空間執(zhí)行一個(gè)新的程序。行,而新進(jìn)程則在新的地址空間執(zhí)行一個(gè)新的程序。uCreateProcessCreateProcess含有含有1010個(gè)參數(shù)來指定建立進(jìn)程的方式,具體個(gè)參數(shù)來指定建立進(jìn)程的方式,具體參數(shù)的含義可參考相關(guān)的參數(shù)的含義可參考相關(guān)的Win32 APIWin32 API手冊(cè)。手冊(cè)。 #include #include #include STARTUPINFO startInfo; PROCESS_INFORMATION processI

37、nfo; strcpy(lpCommandLine,“c:WINNTSYSTEM32NOTEPAD.EXE temp.txt”);ZeroMemory(&startupInfo,sizeof(startInfo);startInfo.cb=sizeof(startInfo);if (! CreateProcess(NULL,lpCommandLine,NULL,NULL,FALSE, HIGH_PRIORTY_CLASS CREATE_NEW_CONSOLE, NULL, NULL,&startInfo, &processInfo) fprintf(stderr,”Cr

38、eateProcess failed!”); ExitProcess(1);CloseHandle(&processInfo.hThread);3.3 3.3 線程線程3.3.1 3.3.1 線程的概念線程的概念1.1.單線程程序的缺點(diǎn):?jiǎn)尉€程程序的缺點(diǎn):進(jìn)程切換開銷大進(jìn)程切換開銷大進(jìn)程通信代價(jià)大進(jìn)程通信代價(jià)大進(jìn)程之間的并發(fā)性粒度較粗,并發(fā)度不高進(jìn)程之間的并發(fā)性粒度較粗,并發(fā)度不高不適合并行計(jì)算和分布并行計(jì)算的要求不適合并行計(jì)算和分布并行計(jì)算的要求不適合客戶不適合客戶/ /服務(wù)器計(jì)算的要求。服務(wù)器計(jì)算的要求。3.3 3.3 線程線程2.2.線程概念:線程概念:n線程(線程(Thread

39、Thread)是進(jìn)程內(nèi)的一個(gè)執(zhí)行單位或進(jìn)程內(nèi)的一個(gè))是進(jìn)程內(nèi)的一個(gè)執(zhí)行單位或進(jìn)程內(nèi)的一個(gè)可調(diào)度的實(shí)體,是可調(diào)度的實(shí)體,是CPUCPU使用的基本單元。它由線程使用的基本單元。它由線程IDID、程序、程序計(jì)數(shù)器、寄存器集合和堆棧組成。它與屬于同一進(jìn)程的其計(jì)數(shù)器、寄存器集合和堆棧組成。它與屬于同一進(jìn)程的其他線程共享其代碼段、數(shù)據(jù)段和其他操作系統(tǒng)資源(如打他線程共享其代碼段、數(shù)據(jù)段和其他操作系統(tǒng)資源(如打開文件和信號(hào))。開文件和信號(hào))。n在引入線程的現(xiàn)代操作系統(tǒng)中,進(jìn)程是資源分配的單位,在引入線程的現(xiàn)代操作系統(tǒng)中,進(jìn)程是資源分配的單位,而線程是處理機(jī)調(diào)度的單位。一個(gè)進(jìn)程可以創(chuàng)建一個(gè)或多而線程是處理機(jī)調(diào)

40、度的單位。一個(gè)進(jìn)程可以創(chuàng)建一個(gè)或多個(gè)線程,因而一個(gè)進(jìn)程中的多個(gè)線程就會(huì)爭(zhēng)奪個(gè)線程,因而一個(gè)進(jìn)程中的多個(gè)線程就會(huì)爭(zhēng)奪CPUCPU,在不同,在不同的狀態(tài)之間進(jìn)行轉(zhuǎn)換。也就是說,與進(jìn)程類似,線程也是的狀態(tài)之間進(jìn)行轉(zhuǎn)換。也就是說,與進(jìn)程類似,線程也是一個(gè)動(dòng)態(tài)的概念,也有一個(gè)從創(chuàng)建到消亡的生命過程,在一個(gè)動(dòng)態(tài)的概念,也有一個(gè)從創(chuàng)建到消亡的生命過程,在這一過程中它具多種狀態(tài),如運(yùn)行、就緒、阻塞和終止等這一過程中它具多種狀態(tài),如運(yùn)行、就緒、阻塞和終止等幾個(gè)狀態(tài)。幾個(gè)狀態(tài)。3.3 3.3 線程線程3.3 3.3 線程線程n線程應(yīng)用舉例:線程應(yīng)用舉例: 例例1 1:LANLAN中的一個(gè)文件服務(wù)器,在一段時(shí)間內(nèi)需

41、要處理幾中的一個(gè)文件服務(wù)器,在一段時(shí)間內(nèi)需要處理幾個(gè)文件請(qǐng)求。有效的方法是:為每一個(gè)請(qǐng)求創(chuàng)建一個(gè)線程。個(gè)文件請(qǐng)求。有效的方法是:為每一個(gè)請(qǐng)求創(chuàng)建一個(gè)線程。 例例2 2:一個(gè)線程顯示菜單,并讀入用戶輸入;另一個(gè)線程執(zhí):一個(gè)線程顯示菜單,并讀入用戶輸入;另一個(gè)線程執(zhí)行用戶命令。行用戶命令。 例例3 3:考慮一個(gè)應(yīng)用:由幾個(gè)獨(dú)立部分組成,這幾個(gè)部分不:考慮一個(gè)應(yīng)用:由幾個(gè)獨(dú)立部分組成,這幾個(gè)部分不需要順序執(zhí)行,則每個(gè)部分可以以線程方式實(shí)現(xiàn)。當(dāng)一個(gè)需要順序執(zhí)行,則每個(gè)部分可以以線程方式實(shí)現(xiàn)。當(dāng)一個(gè)線程因線程因I/OI/O阻塞時(shí),可以切換到同一應(yīng)用的另一個(gè)線程。阻塞時(shí),可以切換到同一應(yīng)用的另一個(gè)線程。3

42、.3 3.3 線程線程n多線程編程具有以下優(yōu)點(diǎn):多線程編程具有以下優(yōu)點(diǎn):(1)響應(yīng)程度高)響應(yīng)程度高 (2)資源共享)資源共享 (3)經(jīng)濟(jì))經(jīng)濟(jì) (4)多處理器體系結(jié)構(gòu)的利用)多處理器體系結(jié)構(gòu)的利用 3.3 3.3 線程線程3. 3. 進(jìn)程與線程的比較進(jìn)程與線程的比較n地址空間:不同進(jìn)程的地址空間是獨(dú)立的,而同一進(jìn)程內(nèi)的地址空間:不同進(jìn)程的地址空間是獨(dú)立的,而同一進(jìn)程內(nèi)的線程共享同一地址空間。一個(gè)進(jìn)程的線程在另一個(gè)進(jìn)程內(nèi)是線程共享同一地址空間。一個(gè)進(jìn)程的線程在另一個(gè)進(jìn)程內(nèi)是不可見的。不可見的。n調(diào)度:在支持線程的操作系統(tǒng)中,進(jìn)程是資源分配的基本單調(diào)度:在支持線程的操作系統(tǒng)中,進(jìn)程是資源分配的基

43、本單位,而線程是處理機(jī)調(diào)度的基本單位。位,而線程是處理機(jī)調(diào)度的基本單位。n并發(fā)性:同一進(jìn)程內(nèi)的線程可以并發(fā)執(zhí)行并發(fā)性:同一進(jìn)程內(nèi)的線程可以并發(fā)執(zhí)行, ,不同進(jìn)程間的線程不同進(jìn)程間的線程也可以并發(fā)執(zhí)行也可以并發(fā)執(zhí)行, ,并發(fā)能力進(jìn)一步增強(qiáng)。并發(fā)能力進(jìn)一步增強(qiáng)。n系統(tǒng)開銷:系統(tǒng)開銷:進(jìn)程切換時(shí)將涉及到有關(guān)資源指針的保存以及地進(jìn)程切換時(shí)將涉及到有關(guān)資源指針的保存以及地址空間的變化等問題,線程切換時(shí),由于同一進(jìn)程內(nèi)的線程址空間的變化等問題,線程切換時(shí),由于同一進(jìn)程內(nèi)的線程共享資源和地址空間,將不涉及資源信息的保存和地址變化共享資源和地址空間,將不涉及資源信息的保存和地址變化問題,從而減少了操作系統(tǒng)的開

44、銷時(shí)間。問題,從而減少了操作系統(tǒng)的開銷時(shí)間。 3.3 3.3 線程線程3.3.2 3.3.2 線程的實(shí)現(xiàn)線程的實(shí)現(xiàn)1.1.用戶級(jí)線程用戶級(jí)線程n用戶線程在內(nèi)核之上支持,并在用戶層通過線程庫(kù)來實(shí)現(xiàn)。用戶線程在內(nèi)核之上支持,并在用戶層通過線程庫(kù)來實(shí)現(xiàn)。線程庫(kù)提供對(duì)線程的創(chuàng)建、調(diào)度和管理的支持而無須內(nèi)核線程庫(kù)提供對(duì)線程的創(chuàng)建、調(diào)度和管理的支持而無須內(nèi)核支持。由于內(nèi)核并不知道用戶級(jí)的線程,所以所有線程的支持。由于內(nèi)核并不知道用戶級(jí)的線程,所以所有線程的創(chuàng)建和調(diào)度都是在用戶空間內(nèi)進(jìn)行的,而無須內(nèi)核的干預(yù)。創(chuàng)建和調(diào)度都是在用戶空間內(nèi)進(jìn)行的,而無須內(nèi)核的干預(yù)。n用戶級(jí)線程通常能快速的創(chuàng)建和管理,但它們也有缺

45、點(diǎn)。用戶級(jí)線程通常能快速的創(chuàng)建和管理,但它們也有缺點(diǎn)。例如,如果內(nèi)核是單線程的,那么任何一個(gè)用戶級(jí)線程若例如,如果內(nèi)核是單線程的,那么任何一個(gè)用戶級(jí)線程若執(zhí)行阻塞系統(tǒng)調(diào)用,就會(huì)引起整個(gè)進(jìn)程阻塞,即使還有其執(zhí)行阻塞系統(tǒng)調(diào)用,就會(huì)引起整個(gè)進(jìn)程阻塞,即使還有其他線程可以在應(yīng)用程序內(nèi)運(yùn)行。他線程可以在應(yīng)用程序內(nèi)運(yùn)行。 3.3 3.3 線程線程2.2.內(nèi)核級(jí)線程內(nèi)核級(jí)線程n內(nèi)核級(jí)線程由操作系統(tǒng)直接支持,內(nèi)核在其空間內(nèi)執(zhí)行線內(nèi)核級(jí)線程由操作系統(tǒng)直接支持,內(nèi)核在其空間內(nèi)執(zhí)行線程的創(chuàng)建、調(diào)度和管理。因?yàn)榫€程管理是由操作系統(tǒng)完成程的創(chuàng)建、調(diào)度和管理。因?yàn)榫€程管理是由操作系統(tǒng)完成的,所以內(nèi)核線程的創(chuàng)建和管理要慢于

46、用戶線程的創(chuàng)建和的,所以內(nèi)核線程的創(chuàng)建和管理要慢于用戶線程的創(chuàng)建和管理。管理。n由于內(nèi)核管理線程,當(dāng)一個(gè)線程執(zhí)行阻塞系統(tǒng)調(diào)用時(shí),內(nèi)由于內(nèi)核管理線程,當(dāng)一個(gè)線程執(zhí)行阻塞系統(tǒng)調(diào)用時(shí),內(nèi)核能調(diào)度應(yīng)用程序內(nèi)的另一個(gè)線程以便執(zhí)行。而且,在多核能調(diào)度應(yīng)用程序內(nèi)的另一個(gè)線程以便執(zhí)行。而且,在多處理器環(huán)境下,內(nèi)核能在不同處理器上調(diào)度線程。處理器環(huán)境下,內(nèi)核能在不同處理器上調(diào)度線程。 3.3 3.3 線程線程3.3.3 3.3.3 多線程模型多線程模型1.1.多對(duì)一模型多對(duì)一模型n多對(duì)一模型將許多用戶級(jí)線程映射到一個(gè)內(nèi)核線程。線程多對(duì)一模型將許多用戶級(jí)線程映射到一個(gè)內(nèi)核線程。線程管理是在用戶空間進(jìn)行的,因而效率

47、比較高,但是如果一管理是在用戶空間進(jìn)行的,因而效率比較高,但是如果一個(gè)線程執(zhí)行了阻塞系統(tǒng)調(diào)用,那么整個(gè)進(jìn)程就會(huì)阻塞。而個(gè)線程執(zhí)行了阻塞系統(tǒng)調(diào)用,那么整個(gè)進(jìn)程就會(huì)阻塞。而且,因?yàn)槿魏螘r(shí)刻只有一個(gè)線程訪問內(nèi)核,多個(gè)線程不能且,因?yàn)槿魏螘r(shí)刻只有一個(gè)線程訪問內(nèi)核,多個(gè)線程不能并行運(yùn)行在多處理器上。在這種模型中,處理機(jī)調(diào)度的單并行運(yùn)行在多處理器上。在這種模型中,處理機(jī)調(diào)度的單位仍然是進(jìn)程。位仍然是進(jìn)程。nGreen Green thread,Solaristhread,Solaris 2 2所提供的線程庫(kù)就是用了這種模所提供的線程庫(kù)就是用了這種模型。另外,在不支持內(nèi)核級(jí)線程的操作系統(tǒng)上所實(shí)現(xiàn)的用型。另外

48、,在不支持內(nèi)核級(jí)線程的操作系統(tǒng)上所實(shí)現(xiàn)的用戶級(jí)線程庫(kù)也使用多對(duì)一模型。戶級(jí)線程庫(kù)也使用多對(duì)一模型。3.3 3.3 線程線程2.2.一對(duì)一模型一對(duì)一模型n一對(duì)一模型將每個(gè)用戶線程映射到一個(gè)內(nèi)核線程。該線程一對(duì)一模型將每個(gè)用戶線程映射到一個(gè)內(nèi)核線程。該線程模型在一個(gè)線程執(zhí)行阻塞時(shí),能允許另一個(gè)線程繼續(xù)執(zhí)行,模型在一個(gè)線程執(zhí)行阻塞時(shí),能允許另一個(gè)線程繼續(xù)執(zhí)行,所以它提供了比多對(duì)一模型更好的并發(fā)功能。它也允許多所以它提供了比多對(duì)一模型更好的并發(fā)功能。它也允許多個(gè)線程運(yùn)行在多處理機(jī)系統(tǒng)上。這種模型的缺點(diǎn)是創(chuàng)建一個(gè)線程運(yùn)行在多處理機(jī)系統(tǒng)上。這種模型的缺點(diǎn)是創(chuàng)建一個(gè)用戶線程就需要?jiǎng)?chuàng)建一個(gè)相應(yīng)的內(nèi)核線程。個(gè)用

49、戶線程就需要?jiǎng)?chuàng)建一個(gè)相應(yīng)的內(nèi)核線程。n創(chuàng)建內(nèi)核線程的開銷會(huì)影響應(yīng)用程序的性能,所以這種模創(chuàng)建內(nèi)核線程的開銷會(huì)影響應(yīng)用程序的性能,所以這種模型的絕大多數(shù)實(shí)現(xiàn)限制了系統(tǒng)所支持的線程數(shù)量。型的絕大多數(shù)實(shí)現(xiàn)限制了系統(tǒng)所支持的線程數(shù)量。nWindows NT/2000/xpWindows NT/2000/xp和和OS/2OS/2實(shí)現(xiàn)了一對(duì)一模型。實(shí)現(xiàn)了一對(duì)一模型。3.3 3.3 線程線程3.3.多對(duì)多模型多對(duì)多模型n多對(duì)多模型多路復(fù)用了許多用戶級(jí)線程到同樣數(shù)量或更小多對(duì)多模型多路復(fù)用了許多用戶級(jí)線程到同樣數(shù)量或更小數(shù)量的內(nèi)核線程上。數(shù)量的內(nèi)核線程上。n內(nèi)核線程的數(shù)量可能與特定應(yīng)用程序或特定機(jī)器有關(guān)。內(nèi)核

50、線程的數(shù)量可能與特定應(yīng)用程序或特定機(jī)器有關(guān)。 n多對(duì)多模型克服前面兩種模型的缺點(diǎn),開發(fā)人員可以創(chuàng)建多對(duì)多模型克服前面兩種模型的缺點(diǎn),開發(fā)人員可以創(chuàng)建任意多的必要的線程,并且相應(yīng)內(nèi)核線程能在多處理器系任意多的必要的線程,并且相應(yīng)內(nèi)核線程能在多處理器系統(tǒng)上并行運(yùn)行。而且,當(dāng)一個(gè)線程執(zhí)行阻塞系統(tǒng)調(diào)用時(shí),統(tǒng)上并行運(yùn)行。而且,當(dāng)一個(gè)線程執(zhí)行阻塞系統(tǒng)調(diào)用時(shí),內(nèi)核能調(diào)度另一個(gè)線程來執(zhí)行。內(nèi)核能調(diào)度另一個(gè)線程來執(zhí)行。 3.3 3.3 線程線程用戶空間線程庫(kù)P內(nèi)核空間2)用戶級(jí)線程用戶空間P內(nèi)核空間1)內(nèi)核級(jí)線程用戶空間線程庫(kù)PP內(nèi)核空間3)混合式線程ULTKLTProcessP3.3 3.3 線程線程3.3.

51、4 3.3.4 線程池線程池n線程池的的實(shí)現(xiàn)思想如下:線程池的的實(shí)現(xiàn)思想如下: 在進(jìn)程建立時(shí)就創(chuàng)建若干線程,在進(jìn)程建立時(shí)就創(chuàng)建若干線程,把它們放在一個(gè)把它們放在一個(gè)“池中池中”,它們?cè)谀抢锏却ぷ鳌.?dāng)服務(wù)器,它們?cè)谀抢锏却ぷ?。?dāng)服務(wù)器收到一個(gè)請(qǐng)求時(shí),就喚醒池中的一個(gè)線程(如果有可用線程收到一個(gè)請(qǐng)求時(shí),就喚醒池中的一個(gè)線程(如果有可用線程的話),并將要處理的請(qǐng)求傳給它。一旦線程完成了它的任的話),并將要處理的請(qǐng)求傳給它。一旦線程完成了它的任務(wù),它會(huì)返回到池中再等待其他工作。如果池中沒有可用的務(wù),它會(huì)返回到池中再等待其他工作。如果池中沒有可用的線程,那么服務(wù)器就會(huì)一直等到直到有空閑線程為止。線程

52、,那么服務(wù)器就會(huì)一直等到直到有空閑線程為止。n線程池具有以下優(yōu)點(diǎn):線程池具有以下優(yōu)點(diǎn):(1 1)通常用現(xiàn)有線程處理請(qǐng)求比等待)通常用現(xiàn)有線程處理請(qǐng)求比等待創(chuàng)建新線程要快;(創(chuàng)建新線程要快;(2 2)線程池限定了任何時(shí)候可存在線程的)線程池限定了任何時(shí)候可存在線程的數(shù)量。數(shù)量。3.3 3.3 線程線程3.3.5 3.3.5 實(shí)例研究實(shí)例研究 1.Windows Server 20031.Windows Server 2003線程線程nWindows Server 2003Windows Server 2003的線程是內(nèi)核線程,系統(tǒng)的處理機(jī)調(diào)的線程是內(nèi)核線程,系統(tǒng)的處理機(jī)調(diào)度對(duì)象為線程。線程的上下

53、文主要包括寄存器、線程環(huán)境度對(duì)象為線程。線程的上下文主要包括寄存器、線程環(huán)境塊、核心棧和用戶棧。塊、核心棧和用戶棧。nWindows Server 2003Windows Server 2003把線程的狀態(tài)分成待調(diào)度就緒狀態(tài)、把線程的狀態(tài)分成待調(diào)度就緒狀態(tài)、就緒狀態(tài)、備用狀態(tài)、運(yùn)行狀態(tài)、等待狀態(tài)、就緒掛起狀就緒狀態(tài)、備用狀態(tài)、運(yùn)行狀態(tài)、等待狀態(tài)、就緒掛起狀態(tài)、轉(zhuǎn)換狀態(tài)、終止?fàn)顟B(tài)和初始化狀態(tài)。態(tài)、轉(zhuǎn)換狀態(tài)、終止?fàn)顟B(tài)和初始化狀態(tài)。nWindows Server 2003Windows Server 2003內(nèi)核中與線程調(diào)度相關(guān)的主要數(shù)據(jù)結(jié)內(nèi)核中與線程調(diào)度相關(guān)的主要數(shù)據(jù)結(jié)構(gòu)有處理機(jī)數(shù)據(jù)結(jié)構(gòu)和幾個(gè)全局

54、數(shù)據(jù)結(jié)構(gòu)。它們是一個(gè)待構(gòu)有處理機(jī)數(shù)據(jù)結(jié)構(gòu)和幾個(gè)全局?jǐn)?shù)據(jù)結(jié)構(gòu)。它們是一個(gè)待調(diào)度就緒線程隊(duì)列、一個(gè)分成調(diào)度就緒線程隊(duì)列、一個(gè)分成3232個(gè)優(yōu)先級(jí)的就緒線程隊(duì)列、個(gè)優(yōu)先級(jí)的就緒線程隊(duì)列、一個(gè)備用線程變量和一個(gè)運(yùn)行線程變量。一個(gè)備用線程變量和一個(gè)運(yùn)行線程變量。3.3 3.3 線程線程nWindows Server 2003Windows Server 2003有一組相關(guān)的系統(tǒng)調(diào)用,應(yīng)用程序可有一組相關(guān)的系統(tǒng)調(diào)用,應(yīng)用程序可用它們來進(jìn)行線程控制。用它們來進(jìn)行線程控制。CreateThreadCreateThread完成線程的創(chuàng)建,在調(diào)用進(jìn)程的地址空間完成線程的創(chuàng)建,在調(diào)用進(jìn)程的地址空間上創(chuàng)建一個(gè)線程,以

55、執(zhí)行指定的函數(shù),它的返回值為所上創(chuàng)建一個(gè)線程,以執(zhí)行指定的函數(shù),它的返回值為所創(chuàng)建線程的句柄。創(chuàng)建線程的句柄。ExitThreadExitThread用于結(jié)束當(dāng)前線程。用于結(jié)束當(dāng)前線程。SuspendThreadSuspendThread可掛起指定線程。可掛起指定線程。ResumeThreadResumeThread可激活指定線程,它的對(duì)應(yīng)操作是遞減指可激活指定線程,它的對(duì)應(yīng)操作是遞減指定線程的掛起計(jì)數(shù),當(dāng)掛起計(jì)數(shù)為定線程的掛起計(jì)數(shù),當(dāng)掛起計(jì)數(shù)為0 0時(shí),線程恢復(fù)執(zhí)行。時(shí),線程恢復(fù)執(zhí)行。3.3 3.3 線程線程2.Pthread2.Pthread線程線程n PthreadPthread是指是指

56、POSIXPOSIX標(biāo)準(zhǔn)(標(biāo)準(zhǔn)(IEEE1003.1cIEEE1003.1c)定義的,它定義線)定義的,它定義線程創(chuàng)建程創(chuàng)建APIAPI和同步和同步APIAPI。這是線程行為的規(guī)范,而不是實(shí)現(xiàn)。這是線程行為的規(guī)范,而不是實(shí)現(xiàn)。操作系統(tǒng)設(shè)計(jì)者可以根據(jù)意愿來采取任何實(shí)現(xiàn)形式。通常,操作系統(tǒng)設(shè)計(jì)者可以根據(jù)意愿來采取任何實(shí)現(xiàn)形式。通常,實(shí)現(xiàn)實(shí)現(xiàn)PthreadPthread規(guī)范的庫(kù)局限于基于規(guī)范的庫(kù)局限于基于UNIXUNIX的系統(tǒng),的系統(tǒng),WindowsWindows操作操作系統(tǒng)通常并不支持系統(tǒng)通常并不支持PthreadPthread。n PthreadPthread線程函數(shù)調(diào)用:線程函數(shù)調(diào)用: (1

57、1)Pthread_createPthread_create()()函數(shù)函數(shù)創(chuàng)建一個(gè)線程創(chuàng)建一個(gè)線程 (2 2)Pthread_joinPthread_join()()函數(shù)函數(shù)掛起當(dāng)前線程直到所等待線程掛起當(dāng)前線程直到所等待線程結(jié)束結(jié)束 (3 3)Pthread_exitPthread_exit()()函數(shù)函數(shù)終止當(dāng)前線程終止當(dāng)前線程3.4 3.4 處理機(jī)調(diào)度處理機(jī)調(diào)度3.4.1 3.4.1 處理機(jī)調(diào)度的層次處理機(jī)調(diào)度的層次 1. 1. 高級(jí)調(diào)度高級(jí)調(diào)度 高級(jí)調(diào)度又稱為作業(yè)調(diào)度或宏觀調(diào)度。其主要功高級(jí)調(diào)度又稱為作業(yè)調(diào)度或宏觀調(diào)度。其主要功能是根據(jù)一定的算法,從輸入的一批任務(wù)(作業(yè))中能是根據(jù)一

58、定的算法,從輸入的一批任務(wù)(作業(yè))中選出若干個(gè)作業(yè),分配必要的資源,如內(nèi)存、外設(shè)等,選出若干個(gè)作業(yè),分配必要的資源,如內(nèi)存、外設(shè)等,為它建立相應(yīng)的用戶作業(yè)進(jìn)程和為其服務(wù)的系統(tǒng)進(jìn)程為它建立相應(yīng)的用戶作業(yè)進(jìn)程和為其服務(wù)的系統(tǒng)進(jìn)程(如輸入(如輸入/ /輸出進(jìn)程),最后把它們的程序和數(shù)據(jù)調(diào)入輸出進(jìn)程),最后把它們的程序和數(shù)據(jù)調(diào)入內(nèi)存,等待進(jìn)程調(diào)度程序?qū)ζ鋱?zhí)行調(diào)度,并在作業(yè)完內(nèi)存,等待進(jìn)程調(diào)度程序?qū)ζ鋱?zhí)行調(diào)度,并在作業(yè)完成后作善后處理工作。成后作善后處理工作。3.4 3.4 處理機(jī)調(diào)度處理機(jī)調(diào)度2. 2. 中級(jí)調(diào)度中級(jí)調(diào)度n 中級(jí)調(diào)度涉及進(jìn)程在內(nèi)外存間的交換。為緩解內(nèi)存緊中級(jí)調(diào)度涉及進(jìn)程在內(nèi)外存間的交換

59、。為緩解內(nèi)存緊張問題,在許多系統(tǒng)中設(shè)立了中級(jí)調(diào)度。張問題,在許多系統(tǒng)中設(shè)立了中級(jí)調(diào)度。n 中級(jí)調(diào)度的主要功能是在內(nèi)存使用緊張時(shí),將一些暫中級(jí)調(diào)度的主要功能是在內(nèi)存使用緊張時(shí),將一些暫時(shí)不能運(yùn)行的進(jìn)程從內(nèi)存對(duì)換到外存上等待。以后,時(shí)不能運(yùn)行的進(jìn)程從內(nèi)存對(duì)換到外存上等待。以后,當(dāng)外存有足夠的空閑空間時(shí),再將合適的進(jìn)程重新?lián)Q當(dāng)外存有足夠的空閑空間時(shí),再將合適的進(jìn)程重新?lián)Q入內(nèi)存,等待進(jìn)程調(diào)度。入內(nèi)存,等待進(jìn)程調(diào)度。n 引入中級(jí)調(diào)度的主要目的是為了提高內(nèi)存的利用率和引入中級(jí)調(diào)度的主要目的是為了提高內(nèi)存的利用率和系統(tǒng)吞吐量。系統(tǒng)吞吐量。 3.4 3.4 處理機(jī)調(diào)度處理機(jī)調(diào)度3. 3. 低級(jí)調(diào)度低級(jí)調(diào)度n

60、低級(jí)調(diào)度又稱進(jìn)程調(diào)度或微觀調(diào)度,其主要功能是根低級(jí)調(diào)度又稱進(jìn)程調(diào)度或微觀調(diào)度,其主要功能是根據(jù)一定的算法,將據(jù)一定的算法,將CPUCPU分派給就緒進(jìn)程隊(duì)列中的一個(gè)進(jìn)分派給就緒進(jìn)程隊(duì)列中的一個(gè)進(jìn)程。執(zhí)行低級(jí)調(diào)度功能的程序稱為進(jìn)程調(diào)度程序,由程。執(zhí)行低級(jí)調(diào)度功能的程序稱為進(jìn)程調(diào)度程序,由它實(shí)現(xiàn)它實(shí)現(xiàn)CPUCPU在進(jìn)程間的切換。在進(jìn)程間的切換。 n 進(jìn)程調(diào)度是操作系統(tǒng)中最基本的一種調(diào)度,在一般的進(jìn)程調(diào)度是操作系統(tǒng)中最基本的一種調(diào)度,在一般的操作系統(tǒng)中都必須有進(jìn)程調(diào)度,而且它的策略的優(yōu)劣操作系統(tǒng)中都必須有進(jìn)程調(diào)度,而且它的策略的優(yōu)劣直接影響整個(gè)系統(tǒng)的性能。直接影響整個(gè)系統(tǒng)的性能。 3.4 3.4 處理機(jī)調(diào)度處理機(jī)調(diào)度作業(yè)CPU就緒

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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)論