課件-ch2進(jìn)程概念_第1頁(yè)
課件-ch2進(jìn)程概念_第2頁(yè)
課件-ch2進(jìn)程概念_第3頁(yè)
課件-ch2進(jìn)程概念_第4頁(yè)
課件-ch2進(jìn)程概念_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余94頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1第二章進(jìn)程描述與控制進(jìn)程描述進(jìn)程控制線程實(shí)例:Solaris2本章重點(diǎn)并發(fā)程序的特點(diǎn)進(jìn)程的概念進(jìn)程和程序的區(qū)別進(jìn)程狀態(tài)進(jìn)程控制原語(yǔ)線程的概念3一、進(jìn)程描述程序的順序執(zhí)行與并發(fā)執(zhí)行進(jìn)程的定義進(jìn)程的特征進(jìn)程的狀態(tài)及轉(zhuǎn)換進(jìn)程控制塊4程序的順序執(zhí)行程序的順序執(zhí)行如圖

在計(jì)算機(jī)系統(tǒng)中只有一個(gè)程序在運(yùn)行,這個(gè)程序獨(dú)占系統(tǒng)中所有資源,其執(zhí)行不受外界影響。一道程序執(zhí)行完后另一道才能開(kāi)始。5程序順序執(zhí)行的特點(diǎn)順序性:一個(gè)程序開(kāi)始執(zhí)行必須要等到前一個(gè)程序已執(zhí)行完成封閉性:程序一旦開(kāi)始執(zhí)行,其計(jì)算結(jié)果不受外界因素影響可再現(xiàn)性:程序的結(jié)果與它的執(zhí)行速度無(wú)關(guān)(即與時(shí)間無(wú)關(guān)),只要給定相同的輸入,一定會(huì)得到相同的結(jié)果。6程序的并發(fā)執(zhí)行

所謂程序的并發(fā)執(zhí)行是指:若干個(gè)程序同時(shí)在系統(tǒng)中執(zhí)行,這些程序的執(zhí)行在時(shí)間上是重疊的,一個(gè)程序的執(zhí)行尚未結(jié)束,另一個(gè)程序的執(zhí)行已經(jīng)開(kāi)始。并發(fā)與并行概念的區(qū)別?Concurrency,parallel7并發(fā)執(zhí)行實(shí)例--

并發(fā)程序的時(shí)間相關(guān)性謄抄用卡片輸入機(jī)盡快地把一個(gè)文本復(fù)寫(謄抄)到行式打印機(jī)上去。由BrinchHansen提出

8循環(huán)順序程序的謄抄方案輸入:f輸出:g

{

while(f不為空)

{

input;

output;

}

}

9循環(huán)順序程序的謄抄方案設(shè)讀卡機(jī)的標(biāo)定速度是1000卡/分,打印機(jī)的標(biāo)定速度是600行/分,那么此系統(tǒng)的最高傳輸速度為()行/分?10第二個(gè)并發(fā)程序方案設(shè)有一臺(tái)標(biāo)準(zhǔn)輸入設(shè)備(鍵盤),和一臺(tái)標(biāo)準(zhǔn)輸出設(shè)備(顯示器或打印機(jī)),輸入程序負(fù)責(zé)從標(biāo)準(zhǔn)設(shè)備中讀取一個(gè)字符,送緩沖區(qū)中。輸出程序從緩沖區(qū)中取數(shù)據(jù),送標(biāo)準(zhǔn)設(shè)備輸出。

11第二個(gè)并發(fā)程序方案標(biāo)準(zhǔn)輸入(鍵盤)緩沖區(qū)標(biāo)準(zhǔn)輸出(打印機(jī))輸入程序輸出程序12第二個(gè)并發(fā)程序方案{cobegin

while(不為結(jié)束符) {input;

send;

}

while(buffer不為空)

{receive;

output;

}

coend

}

13第二個(gè)并發(fā)程序方案謄抄的速度可以提高到600行/分。存在的問(wèn)題:讀卡機(jī)和打印機(jī)速度不匹配,導(dǎo)致雖然提高了設(shè)備利用率,但是不能正確謄抄。

a、若打印的速度高于輸入的速度;

b、若輸入的速度高于打印的速度14第三個(gè)并發(fā)程序方案假設(shè)有兩個(gè)緩沖區(qū),每個(gè)緩沖區(qū)只存放一個(gè)字符,get程序負(fù)責(zé)從輸入序列f中讀一個(gè)字符,然后,送到緩沖區(qū)s中,copy程序負(fù)責(zé)將s中的字符復(fù)制到t中,put負(fù)責(zé)從t中提取字符打印。15第三個(gè)并發(fā)程序方案標(biāo)準(zhǔn)輸入(鍵盤)緩沖區(qū)T標(biāo)準(zhǔn)輸出(打印機(jī))輸入程序輸出程序緩沖區(qū)Scopy16第三個(gè)并發(fā)程序方案如何實(shí)現(xiàn)?{ while(謄抄未完成)

{cobegin get(s,f); copy(s,t);

put(t,g); coend

}

}

17第三個(gè)并發(fā)程序方案{if(f不為空)

{get(s,f);

while(謄抄未完成)

{t=s;

cobegin

put(t,g);

get(s,f);

coend }

}

}

18方案比較:方案1系統(tǒng)利用率最低方案2、3提高了設(shè)備利用率,但需要增設(shè)緩沖區(qū),且方案2會(huì)因速度匹配出錯(cuò)。思考:試舉出現(xiàn)實(shí)生活中的此類例子。19程序并發(fā)執(zhí)行的特點(diǎn)失去了程序的封閉性

如果一個(gè)程序的執(zhí)行可以改變另一個(gè)程序的變量,那么后者的輸出就可能有賴于各程序執(zhí)行的相對(duì)速度,即失去了程序封閉性的特點(diǎn)。程序與計(jì)算不再一一對(duì)應(yīng)程序-靜態(tài);計(jì)算-動(dòng)態(tài)程序并發(fā)執(zhí)行的相互制約直接制約--相互之間有邏輯關(guān)系(I,C,P)間接制約--由于資源共享引起的聯(lián)系(I1,I2)20進(jìn)程的定義進(jìn)程的概念是60年代初首先由麻省理工學(xué)院的MULTICS系統(tǒng)和IBM公司的CTSS/360系統(tǒng)引入的。進(jìn)程有很多各式各樣的定義,如:

行為的一個(gè)規(guī)則叫做程序,程序在處理機(jī)上執(zhí)行時(shí)所發(fā)生的活動(dòng)稱為進(jìn)程(Dijkstra)。一個(gè)具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合的一次運(yùn)行活動(dòng)。進(jìn)程是一個(gè)程序與其數(shù)據(jù)一道通過(guò)處理機(jī)的執(zhí)行所發(fā)生的活動(dòng)。21進(jìn)程同程序的比較程序是指令的有序集合,其本身沒(méi)有任何運(yùn)行的含義,是一個(gè)靜態(tài)的概念。而進(jìn)程是程序在處理機(jī)上的一次執(zhí)行過(guò)程,它是一個(gè)動(dòng)態(tài)的概念。程序可以作為一種軟件資料長(zhǎng)期存在,而進(jìn)程是有一定生命期的。程序是永久的,進(jìn)程是暫時(shí)的。22進(jìn)程同程序的比較進(jìn)程更能真實(shí)地描述并發(fā),而程序不能。進(jìn)程是由程序和數(shù)據(jù)兩部分組成的。進(jìn)程具有創(chuàng)建其他進(jìn)程的功能,而程序沒(méi)有。同一程序同時(shí)運(yùn)行于若干個(gè)數(shù)據(jù)集合上,它將屬于若干個(gè)不同的進(jìn)程。也就是說(shuō)同一程序可以對(duì)應(yīng)多個(gè)進(jìn)程。23思考為什么要引入進(jìn)程的概念?24進(jìn)程的特征動(dòng)態(tài)性:進(jìn)程是程序的執(zhí)行并發(fā)性:多個(gè)進(jìn)程可同存于內(nèi)存中,能在一段時(shí)間內(nèi)同時(shí)運(yùn)行獨(dú)立性:獨(dú)立運(yùn)行的基本單位,獨(dú)立獲得資源和調(diào)度的基本單位。異步性:各進(jìn)程按各自獨(dú)立的不可預(yù)知的速度向前推進(jìn)結(jié)構(gòu)特征:由程序段

、數(shù)據(jù)段、進(jìn)程控制塊三部分組成25進(jìn)程的類型按其任務(wù)性質(zhì)分系統(tǒng)進(jìn)程用戶進(jìn)程按其活動(dòng)特點(diǎn)分受CPU時(shí)間限制--科學(xué)計(jì)算受I/O限制--商業(yè)聯(lián)機(jī)事務(wù)處理26進(jìn)程產(chǎn)生和終止

最簡(jiǎn)單的模型(a)基于這樣一個(gè)事實(shí):進(jìn)程要么正在執(zhí)行,要么沒(méi)有執(zhí)行。這樣,一個(gè)進(jìn)程就有兩種狀態(tài):運(yùn)行和非運(yùn)行。還有一種模型(b)是設(shè)計(jì)一種進(jìn)程隊(duì)列,隊(duì)列中的每項(xiàng)都是一個(gè)指向進(jìn)程的指針。無(wú)論采用哪種模型,進(jìn)程的生命周期都同產(chǎn)生和終止聯(lián)系在一起。27進(jìn)程產(chǎn)生通常有4種事件會(huì)導(dǎo)致新進(jìn)程產(chǎn)生:

①在一個(gè)交互式環(huán)境中,當(dāng)一個(gè)新用戶在終端鍵入登錄命令后,若是合法用戶,系統(tǒng)將為該用戶建立一個(gè)進(jìn)程。

②在一個(gè)批處理環(huán)境中,為了響應(yīng)一個(gè)任務(wù)的要求而產(chǎn)生進(jìn)程。③當(dāng)運(yùn)行中獲取用戶程序提出的某種請(qǐng)求后,OS可以代用戶程序產(chǎn)生進(jìn)程以實(shí)現(xiàn)某種功能,使用戶不必等待。④基于應(yīng)用進(jìn)程的需要,由已存在的進(jìn)程產(chǎn)生另一個(gè)進(jìn)程,以便使新程序以并發(fā)運(yùn)行方式完成特定任務(wù)。28進(jìn)程終止導(dǎo)致進(jìn)程終止的事件大致有14種:正常結(jié)束超時(shí)限制內(nèi)存不足超界保護(hù)錯(cuò)誤算術(shù)錯(cuò)誤超越時(shí)限I/O失敗、非法指令、特權(quán)指令、錯(cuò)誤使用數(shù)據(jù)、操作員或OS干預(yù)、父進(jìn)程終止、父進(jìn)程需要。29進(jìn)程的狀態(tài)及轉(zhuǎn)換進(jìn)程有三種基本狀態(tài):就緒狀態(tài)運(yùn)行狀態(tài)阻塞狀態(tài)進(jìn)程在生命消亡前處于且僅處于三種基本狀態(tài)之一不同系統(tǒng)設(shè)置的進(jìn)程狀態(tài)數(shù)目不同30進(jìn)程的三種基本狀態(tài)就緒狀態(tài)(Ready):存在于處理機(jī)調(diào)度隊(duì)列中的那些進(jìn)程,它們已經(jīng)準(zhǔn)備就緒,一旦得到CPU,就立即可以運(yùn)行。這些進(jìn)程所處的狀態(tài)為就緒狀態(tài)。運(yùn)行狀態(tài)(Running):正在運(yùn)行的進(jìn)程所處的狀態(tài)為運(yùn)行狀態(tài)。擁有CPU。等待狀態(tài)(Wait/Blocked):若一進(jìn)程正在等待某一事件發(fā)生(如等待輸入輸出工作完成),這時(shí),即使給它CPU,它也無(wú)法運(yùn)行,稱該進(jìn)程處于等待狀態(tài)、阻塞、

睡眠、封鎖狀態(tài)。31進(jìn)程的狀態(tài)變遷圖32進(jìn)程狀態(tài)模型運(yùn)行:進(jìn)程當(dāng)前處于運(yùn)行狀態(tài)。就緒;進(jìn)程已準(zhǔn)備好運(yùn)行。阻塞;進(jìn)程等待某些事件發(fā)生(如I/O操作)后才能運(yùn)行。創(chuàng)建:進(jìn)程剛產(chǎn)生,但還未被操作系統(tǒng)提交到可運(yùn)行進(jìn)程池中。消失(撤銷):進(jìn)程被操作系統(tǒng)從可運(yùn)行進(jìn)程池中釋放。33進(jìn)程狀態(tài)模型原狀態(tài)

轉(zhuǎn)換后狀態(tài)

創(chuàng)建

運(yùn)行

就緒

阻塞

終止

OS根據(jù)作業(yè)控制請(qǐng)求;分時(shí)系統(tǒng)用戶登錄;進(jìn)程產(chǎn)生子進(jìn)程而創(chuàng)建進(jìn)程×××

×

創(chuàng)建×

×

OS準(zhǔn)備運(yùn)行新的進(jìn)程

×

×

運(yùn)行×

×

超時(shí);OS服務(wù)請(qǐng)求;OS響應(yīng)具有更高優(yōu)先級(jí)的進(jìn)程;進(jìn)程釋放控制

OS服務(wù)請(qǐng)求;資源請(qǐng)求;事件請(qǐng)求

進(jìn)程完成,進(jìn)程夭折

就緒×被分派程序選擇為下一個(gè)即將執(zhí)行的進(jìn)程

××被父進(jìn)程終止

阻塞××事件發(fā)生

×被父進(jìn)程終止

34進(jìn)程掛起

由于I/O操作比CPU計(jì)算慢得多,故常會(huì)出現(xiàn)內(nèi)存中所有進(jìn)程都等待I/O的現(xiàn)象。即使運(yùn)行多個(gè)程序,處理器在大多數(shù)時(shí)間仍處于空閑狀態(tài)。為此可采用交換方法,將內(nèi)存中的一部分進(jìn)程轉(zhuǎn)移到磁盤中。在進(jìn)程行為模式中需增加一個(gè)新的掛起狀態(tài),當(dāng)內(nèi)存所有進(jìn)程阻塞時(shí),操作系統(tǒng)可將一進(jìn)程置為掛起狀態(tài)并交換到磁盤,再調(diào)入另一進(jìn)程執(zhí)行。掛起狀態(tài)與原有的阻塞和就緒狀態(tài)結(jié)合為阻塞掛起狀態(tài)和就緒掛起狀態(tài)。35(a)帶有一個(gè)掛起狀態(tài)(b)帶有兩個(gè)掛起狀態(tài)

有掛起狀態(tài)的進(jìn)程轉(zhuǎn)換圖36進(jìn)程掛起進(jìn)程掛起的原因原因說(shuō)明交換OS需要釋放足夠的內(nèi)存空間以調(diào)入就緒進(jìn)程執(zhí)行其他OS原因OS可能會(huì)掛起一個(gè)后臺(tái)進(jìn)程或懷疑引起問(wèn)題的進(jìn)程交互用戶要求用戶可能為了調(diào)試或與資源連接而要求掛起進(jìn)程間斷一個(gè)進(jìn)程可能是周期性地執(zhí)行的,那么它在等待下一次執(zhí)行時(shí)如被掛起父進(jìn)程請(qǐng)求父進(jìn)程有時(shí)希望掛起某個(gè)后代進(jìn)程以檢查或修正掛起進(jìn)程,或協(xié)調(diào)多個(gè)后代進(jìn)程的運(yùn)行37【思考題】1.如果系統(tǒng)中有N個(gè)進(jìn)程,運(yùn)行的進(jìn)程最多幾個(gè),最少幾個(gè);就緒進(jìn)程最多幾個(gè)最少幾個(gè);等待進(jìn)程最多幾個(gè),最少幾個(gè)?2.有沒(méi)有這樣的狀態(tài)轉(zhuǎn)換,為什么? 等待—運(yùn)行;就緒—等待38進(jìn)程控制塊(ProcessControlBlock)為了描述一個(gè)進(jìn)程和其它進(jìn)程以及系統(tǒng)資源的關(guān)系,為了刻畫一個(gè)進(jìn)程在各個(gè)不同時(shí)期所處的狀態(tài),人們采用了一個(gè)與進(jìn)程相聯(lián)系的數(shù)據(jù)塊,稱為進(jìn)程控制塊(PCB)。系統(tǒng)利用PCB來(lái)控制和管理進(jìn)程,所以PCB是系統(tǒng)感知進(jìn)程存在的唯一標(biāo)志。進(jìn)程與PCB是一一對(duì)應(yīng)的。39PCB的內(nèi)容進(jìn)程描述信息進(jìn)程控制信息所擁有的資源和使用情況CPU現(xiàn)場(chǎng)保護(hù)信息40PCB的內(nèi)容進(jìn)程描述信息:進(jìn)程標(biāo)識(shí)符(processID),唯一,通常是一個(gè)整數(shù)進(jìn)程名,通?;诳蓤?zhí)行文件名(不唯一)用戶標(biāo)識(shí)符(userID);進(jìn)程組關(guān)系41PCB的內(nèi)容進(jìn)程控制信息:當(dāng)前狀態(tài)優(yōu)先級(jí)(priority)代碼執(zhí)行入口地址程序的外存地址運(yùn)行統(tǒng)計(jì)信息(執(zhí)行時(shí)間、頁(yè)面調(diào)度)進(jìn)程間同步和通信;阻塞原因進(jìn)程的隊(duì)列指針進(jìn)程的消息隊(duì)列指針42PCB的內(nèi)容所擁有的資源和使用情況:虛擬地址空間的現(xiàn)狀打開(kāi)文件列表CPU現(xiàn)場(chǎng)保護(hù)信息:寄存器值(通用、程序計(jì)數(shù)器PC、狀態(tài)PSW,地址包括棧指針)指向賦予該進(jìn)程的段/頁(yè)表的指針43思考OS如何進(jìn)行進(jìn)程切換?何時(shí)會(huì)發(fā)生進(jìn)程切換?44PCB表組織方式系統(tǒng)把所有PCB組織在一起,并把它們放在內(nèi)存的固定區(qū)域,就構(gòu)成了PCB表。PCB表的大小決定了系統(tǒng)中最多可同時(shí)存在的進(jìn)程個(gè)數(shù),稱為系統(tǒng)的并發(fā)度。45鏈接結(jié)構(gòu)相同狀態(tài)的進(jìn)程PCB組成一個(gè)鏈表,不同狀態(tài)對(duì)應(yīng)多個(gè)不同的鏈表。就緒鏈表、阻塞鏈表。4647索引結(jié)構(gòu)對(duì)具有相同狀態(tài)的進(jìn)程,分別設(shè)置各自的PCB索引表,表明PCB在PCB表中的地址。48

索引表就緒隊(duì)列等待隊(duì)列1等待隊(duì)列2PCB1PCB2PCB3PCB4PCB5PCB6PCB7…PCBnPCB表索引結(jié)構(gòu)49進(jìn)程隊(duì)列不同狀態(tài)進(jìn)程分別組成隊(duì)列運(yùn)行隊(duì)列、就緒隊(duì)列、等待隊(duì)列5051進(jìn)程映象用戶程序用戶數(shù)據(jù)棧用于過(guò)程調(diào)用和參數(shù)傳遞進(jìn)程控制塊PCB在OS空間用戶進(jìn)程不能直接訪問(wèn)、修改自己的PCB52思考請(qǐng)說(shuō)說(shuō)PCB的作用。53二、進(jìn)程控制

操作系統(tǒng)內(nèi)核負(fù)責(zé)控制和管理進(jìn)程的產(chǎn)生、執(zhí)行和消亡的整個(gè)過(guò)程,這主要通過(guò)對(duì)它們的控制操作實(shí)現(xiàn)。操作系統(tǒng)的進(jìn)程控制操作主要有:創(chuàng)建進(jìn)程、撤消進(jìn)程、阻塞(掛起)進(jìn)程、恢復(fù)進(jìn)程、改變進(jìn)程優(yōu)先級(jí)、封鎖進(jìn)程、喚醒進(jìn)程、調(diào)度進(jìn)程等。54執(zhí)行模式

大多數(shù)處理器都至少支持兩種執(zhí)行模式,一種是同操作系統(tǒng)有關(guān)的模式,另一種則是同用戶程序有關(guān)的模式。較低特權(quán)模式稱為用戶模式。較高特權(quán)模式指系統(tǒng)模式、控制模式或內(nèi)核模式。內(nèi)核是操作系統(tǒng)中最核心功能的集合。

實(shí)現(xiàn):開(kāi)關(guān)中斷55進(jìn)程控制的實(shí)現(xiàn)

進(jìn)程控制就是對(duì)系統(tǒng)中的所有進(jìn)程實(shí)施管理,進(jìn)程控制一般有原語(yǔ)來(lái)實(shí)現(xiàn)。 所謂原語(yǔ)是一種特殊的系統(tǒng)功能調(diào)用,它可以完成一個(gè)特定的功能,其特點(diǎn)是原語(yǔ)執(zhí)行時(shí)不可被中斷。

56思考如何實(shí)現(xiàn)原語(yǔ)?57常用的進(jìn)程控制原語(yǔ)創(chuàng)建原語(yǔ)撤銷原語(yǔ)阻塞原語(yǔ)喚醒原語(yǔ)58進(jìn)程創(chuàng)建申請(qǐng)空白PCB為新進(jìn)程分配資源,如內(nèi)存初始化進(jìn)程控制塊

將新進(jìn)程插入就緒隊(duì)列

59進(jìn)程創(chuàng)建進(jìn)程創(chuàng)建原語(yǔ)的形式:create(name,priority,start-addr)

60進(jìn)程創(chuàng)建入口返回出錯(cuò)PCB總鏈有同名?有PCB?向PCB資源池申請(qǐng)一個(gè)空PCB填寫PCB相關(guān)項(xiàng)將PCB入就緒隊(duì)列和PCB總鏈出錯(cuò)有有無(wú)無(wú)61思考為什么創(chuàng)建進(jìn)程要用原語(yǔ)來(lái)實(shí)現(xiàn)?62進(jìn)程撤銷根據(jù)被終止進(jìn)程的標(biāo)識(shí)符,從PCB集合中檢索出該進(jìn)程的PCB將進(jìn)程所擁有的資源交給父進(jìn)程或系統(tǒng)進(jìn)程釋放PCB63進(jìn)程撤銷算法:kill輸入:無(wú)輸出:無(wú){由運(yùn)行指針得到當(dāng)前進(jìn)程的pid;釋放本進(jìn)程占用的資源;該進(jìn)程從總鏈隊(duì)列中摘去;釋放PCB;轉(zhuǎn)進(jìn)程調(diào)度程序;}64進(jìn)程的阻塞阻塞:當(dāng)一個(gè)進(jìn)程所期待的某一事件尚未出現(xiàn)時(shí),該進(jìn)程調(diào)用阻塞原語(yǔ)將自己阻塞。 進(jìn)程阻塞是進(jìn)程的自身的一種主動(dòng)行為。65進(jìn)程的阻塞算法:susp輸入:chan(進(jìn)程等待的原因)輸出:無(wú){保護(hù)現(xiàn)處理的CPU的現(xiàn)場(chǎng)到PCB結(jié)構(gòu)中;置該進(jìn)程的狀態(tài)為“阻塞”狀態(tài);將該進(jìn)程的PCB插入到chan的等待隊(duì)列;轉(zhuǎn)進(jìn)程調(diào)度程序;}66進(jìn)程的喚醒喚醒:處于阻塞狀態(tài)的進(jìn)程是絕不可能叫醒它自己的,它必須由它的合作進(jìn)程用喚醒原語(yǔ)喚醒它。67進(jìn)程的喚醒進(jìn)程喚醒原語(yǔ)的形式:wakeup(chan)其中:chan喚醒進(jìn)程阻塞的原因。

68思考請(qǐng)?jiān)O(shè)想一下進(jìn)程在什么情況下會(huì)變?yōu)樽枞麪顟B(tài)?阻塞進(jìn)程在什么情況下會(huì)被喚醒?誰(shuí)來(lái)喚醒它?69進(jìn)程切換

在某時(shí)刻,一個(gè)正在運(yùn)行的進(jìn)程被中斷,操作系統(tǒng)就將另一個(gè)進(jìn)程置為運(yùn)行狀態(tài),并對(duì)其進(jìn)行控制。當(dāng)操作系統(tǒng)掌握控制權(quán)時(shí),切換隨時(shí)會(huì)發(fā)生??赡軐⒖刂茩?quán)交給操作系統(tǒng)的事件有:中斷、陷阱以及監(jiān)管調(diào)用。70上下文切換上下文切換發(fā)生時(shí),可能并不改變當(dāng)前處于運(yùn)行態(tài)的進(jìn)程狀態(tài)。當(dāng)前運(yùn)行進(jìn)程的狀態(tài)要改變時(shí),操作系統(tǒng)將進(jìn)行以下步驟完成進(jìn)程切換:①保存處理器內(nèi)容。②對(duì)當(dāng)前運(yùn)行進(jìn)程的PCB進(jìn)行更新。③將這個(gè)進(jìn)程的PCB移入適當(dāng)?shù)年?duì)列。④挑選其他進(jìn)程執(zhí)行。⑤對(duì)挑選進(jìn)程的PCB進(jìn)行更新。。⑥對(duì)存儲(chǔ)器管理數(shù)據(jù)結(jié)構(gòu)進(jìn)行更新。⑦將被選中進(jìn)程上次移出時(shí)的處理器狀態(tài)進(jìn)行恢復(fù)。71三、線程

線程的引入

線程與進(jìn)程的比較

用戶級(jí)線程和內(nèi)核支持線程

72線程的引入引入進(jìn)程的目的是為了使多個(gè)程序并發(fā)執(zhí)行,以改善資源利用率、提高系統(tǒng)吞吐量。引入線程則是為了減少程序并發(fā)執(zhí)行時(shí)的所付出的時(shí)空開(kāi)銷。73進(jìn)程的兩個(gè)基本屬性進(jìn)程是一個(gè)可擁有資源的基本單位。進(jìn)程同時(shí)又是一個(gè)可獨(dú)立調(diào)度和分派的基本單位。

進(jìn)程作為一個(gè)資源擁有者,在創(chuàng)建、撤消、切換中,系統(tǒng)必須為之付出較大時(shí)空開(kāi)銷。所以系統(tǒng)中進(jìn)程的數(shù)量不宜過(guò)多,進(jìn)程切換的頻率不宜過(guò)高,但這也就限制了并發(fā)程度的進(jìn)一步提高。74線程為解決此問(wèn)題,人們想到將進(jìn)程的上述兩個(gè)屬性分開(kāi),即對(duì)作為調(diào)度和分派的基本單位,不同時(shí)作為獨(dú)立分配資源的單位;對(duì)擁有資源的單位,不對(duì)之進(jìn)行頻繁切換。線程因而產(chǎn)生。75線程在引入線程的OS中,線程是進(jìn)程中的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位。線程自己基本不擁有系統(tǒng)資源,只擁有少量必不可少的資源:程序計(jì)數(shù)器、一組寄存器、棧。它可與同屬一個(gè)進(jìn)程的其它線程共享進(jìn)程所擁有的全部資源。一個(gè)線程可以創(chuàng)建和撤消另一個(gè)線程;同一進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行。76引入線程的好處創(chuàng)建一個(gè)新線程花費(fèi)時(shí)間少(結(jié)束亦如此)兩個(gè)線程的切換花費(fèi)時(shí)間少因?yàn)橥贿M(jìn)程內(nèi)的線程共享內(nèi)存和文件,因此它們之間相互通信無(wú)須調(diào)用內(nèi)核適合多處理機(jī)系統(tǒng)77線程的定義及特征線程是進(jìn)程內(nèi)的一個(gè)相對(duì)獨(dú)立的、可獨(dú)立調(diào)度和指派的執(zhí)行單元。線程具有以下性質(zhì):線程是進(jìn)程內(nèi)的一個(gè)相對(duì)獨(dú)立的可執(zhí)行單元。線程是操作系統(tǒng)中的基本調(diào)度單元。一個(gè)進(jìn)程中至少應(yīng)有一個(gè)線程。線程并不擁有資源,而是共享和使用包含它的進(jìn)程所擁有的所有資源。線程在需要時(shí)也可創(chuàng)建其他線程。78線程的狀態(tài)和管理

線程也有一個(gè)從創(chuàng)建到消亡的生命過(guò)程,雖然在不同的操作系統(tǒng),線程的狀態(tài)設(shè)計(jì)不完全相同,但就緒、運(yùn)行、阻塞3個(gè)關(guān)鍵的狀態(tài)是共有的。線程中不具有進(jìn)程中的掛起狀態(tài)。對(duì)具有多線程的進(jìn)程狀態(tài),若一個(gè)線程被阻塞,整個(gè)進(jìn)程不被阻塞。線程使用線程控制塊(TCB)來(lái)描述其數(shù)據(jù)結(jié)構(gòu)。線程的狀態(tài)轉(zhuǎn)換是通過(guò)相關(guān)的控制原語(yǔ)來(lái)實(shí)現(xiàn)的。

79例子 LAN中的一個(gè)文件服務(wù)器,在一段時(shí)間內(nèi)需要處理幾個(gè)文件請(qǐng)求 因此有效的方法是:為每一個(gè)請(qǐng)求創(chuàng)建一個(gè)線程 在一個(gè)SMP機(jī)器上:多個(gè)線程可以同時(shí)在不同的處理器上運(yùn)行80例子一個(gè)線程顯示菜單,并讀入用戶輸入;另一個(gè)線程執(zhí)行用戶命令考慮一個(gè)應(yīng)用:由幾個(gè)獨(dú)立部分組成,這幾個(gè)部分不需要順序執(zhí)行,則每個(gè)部分可以以線程方式實(shí)現(xiàn)當(dāng)一個(gè)線程因I/O阻塞時(shí),可以切換到同一應(yīng)用的另一個(gè)線程81用戶級(jí)線程和內(nèi)核支持線程對(duì)于線程可分為兩類內(nèi)核支持線程,它們是依賴于內(nèi)核的,即無(wú)論是用戶進(jìn)程中的線程,還是系統(tǒng)進(jìn)程中的線程,它們的創(chuàng)建、撤消、切換都由內(nèi)核實(shí)現(xiàn)。用戶級(jí)線程,對(duì)于這種線程的創(chuàng)建、撤消、和切換,都不用系統(tǒng)調(diào)用來(lái)實(shí)現(xiàn)。內(nèi)核并不知道用戶級(jí)線程的存在。82用戶級(jí)線程(UserLevelThread)由應(yīng)用程序完成所有線程的管理通過(guò)線程庫(kù)(用戶空間):一組管理線程的函數(shù)線程庫(kù)提供一個(gè)線程運(yùn)行管理系統(tǒng)(運(yùn)行系統(tǒng))核心不知道線程的存在線程切換不需要核心態(tài)特權(quán)調(diào)度是應(yīng)用特定的83線程庫(kù)提供線程運(yùn)行管理系統(tǒng):創(chuàng)建、撤消線程在線程之間傳遞消息和數(shù)據(jù)調(diào)度線程執(zhí)行保護(hù)和恢復(fù)線程上下文84用戶級(jí)線程的優(yōu)點(diǎn)和缺點(diǎn)優(yōu)點(diǎn):線程切換不調(diào)用核心調(diào)度是應(yīng)用程序特定的:可以選擇最好的算法ULT可運(yùn)行在任何操作系統(tǒng)上(只需要線程庫(kù)),可以在一個(gè)不支持線程的OS上實(shí)現(xiàn)85用戶級(jí)線程的優(yōu)點(diǎn)和缺點(diǎn)缺點(diǎn):大多數(shù)系統(tǒng)調(diào)用是阻塞的,因此核心阻塞進(jìn)程,故進(jìn)程中所有線程將被阻塞核心只將處理器分配給進(jìn)程,同一進(jìn)程中的兩個(gè)線程不能同時(shí)運(yùn)行于兩個(gè)處理器上86核心級(jí)線程(KLT)所有線程管理由核心完成沒(méi)有線程庫(kù),但核心提供API核心維護(hù)進(jìn)程和線程的上下文線程之間的切換需要核心支持以線程為基礎(chǔ)進(jìn)行調(diào)度例子:Windows2000/XP87核心級(jí)線程的優(yōu)點(diǎn)和缺點(diǎn)優(yōu)點(diǎn):對(duì)多處理器,核心可以同時(shí)調(diào)度同一進(jìn)程的多個(gè)線程阻塞是在線程一級(jí)完成缺點(diǎn):在同一進(jìn)程內(nèi)的線程切換調(diào)用內(nèi)核,導(dǎo)致速度下降88圖:用戶級(jí)和核心級(jí)線程89線程與進(jìn)程的比較線程具有進(jìn)程的許多特征,故又稱輕型進(jìn)程,傳統(tǒng)進(jìn)程稱重型進(jìn)程。在引入線程的OS中,每一進(jìn)程都擁有多個(gè)線程,至少一個(gè)。

90線程與進(jìn)程比較

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論