




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、進(jìn)程管理進(jìn)程管理1第二章 進(jìn)程控制與描述2.5 經(jīng)典進(jìn)程同步問題2.6 進(jìn)程通信 2.7 線程的基本概念2.8 線程的實(shí)現(xiàn) 進(jìn)程管理進(jìn)程管理22.5 經(jīng)典進(jìn)程的同步問題經(jīng)典進(jìn)程的同步問題 1. 生產(chǎn)者消費(fèi)者問題2. 哲學(xué)家進(jìn)餐問題3. 讀者寫者問題 通過對經(jīng)典問題的研究和學(xué)習(xí),可以幫助我們更好地理解進(jìn)程同步的概念及實(shí)現(xiàn)方法P60進(jìn)程管理進(jìn)程管理32.5.1 生產(chǎn)者生產(chǎn)者消費(fèi)者問題消費(fèi)者問題 Producer-consumer problem,又稱有限緩沖問題有限緩沖問題(Bounded-buffer problem)兩個共享固定大小緩沖區(qū)的進(jìn)程“生產(chǎn)者”和“消費(fèi)者”進(jìn)程管理進(jìn)程管理42.5.1
2、 生產(chǎn)者生產(chǎn)者消費(fèi)者問題消費(fèi)者問題 They are, They are, 相互合作進(jìn)程相互合作進(jìn)程關(guān)系關(guān)系1. 用記錄型信號量解決用記錄型信號量解決 2. 用用ANDAND信號量解決信號量解決3. 利用管程解決生產(chǎn)者利用管程解決生產(chǎn)者- -消費(fèi)者問題消費(fèi)者問題n單緩沖區(qū)情況單緩沖區(qū)情況 生產(chǎn)者生產(chǎn)者P P和消費(fèi)者和消費(fèi)者C C共用共用一個緩沖區(qū)一個緩沖區(qū),P P生產(chǎn)產(chǎn)品放入生產(chǎn)產(chǎn)品放入緩沖區(qū),緩沖區(qū),C C從緩沖區(qū)取產(chǎn)品來消費(fèi)。從緩沖區(qū)取產(chǎn)品來消費(fèi)。n多個緩沖區(qū)情況多個緩沖區(qū)情況 生產(chǎn)者和消費(fèi)者通過一個有界緩沖池生產(chǎn)者和消費(fèi)者通過一個有界緩沖池(n(n個個) )相互聯(lián)系。相互聯(lián)系。 進(jìn)程管理
3、進(jìn)程管理5單緩沖區(qū)情況單緩沖區(qū)情況n單緩沖區(qū)的單緩沖區(qū)的同步問題同步問題 生產(chǎn)者P進(jìn)程不能往“滿”的緩沖區(qū)中放產(chǎn)品,設(shè)置信號量為empty(初值為1)消費(fèi)者C進(jìn)程不能從“空”的緩沖區(qū)中取產(chǎn)品,設(shè)置信號量full (初值為0)n單緩沖區(qū)的單緩沖區(qū)的互斥問題互斥問題P、C進(jìn)程不能同時使用緩沖區(qū)不能同時使用緩沖區(qū)進(jìn)程管理進(jìn)程管理6Semaphore empty=n ,full=0;(單緩沖區(qū)單緩沖區(qū)) 生產(chǎn)者生產(chǎn)者消費(fèi)者問題消費(fèi)者問題Proceducer : while (true) 生產(chǎn)一個產(chǎn)品生產(chǎn)一個產(chǎn)品; P(empty) ; 送產(chǎn)品到緩沖區(qū)送產(chǎn)品到緩沖區(qū); V(full); ;Consume
4、r :while (true) P(full); 從緩沖區(qū)取產(chǎn)品從緩沖區(qū)取產(chǎn)品; V(empty); 消費(fèi)產(chǎn)品消費(fèi)產(chǎn)品; ; 進(jìn)程管理進(jìn)程管理7多個緩沖區(qū)情況多個緩沖區(qū)情況n生產(chǎn)者和消費(fèi)者共享生產(chǎn)者和消費(fèi)者共享n n個緩沖區(qū),利用互斥信號個緩沖區(qū),利用互斥信號量量Mutex (Mutual exclusion,縮寫Mutex)實(shí)現(xiàn)進(jìn)程對實(shí)現(xiàn)進(jìn)程對緩沖池的緩沖池的互斥使用互斥使用。n信號量信號量empty和和full分別表示緩沖池中分別表示緩沖池中空緩沖區(qū)空緩沖區(qū)和和滿緩沖區(qū)滿緩沖區(qū)的數(shù)量。的數(shù)量。n生產(chǎn)者和消費(fèi)者生產(chǎn)者和消費(fèi)者相互等效相互等效,只要緩沖池未滿,只要緩沖池未滿,生產(chǎn)者便可將消息送
5、入緩沖池;只要緩沖池未生產(chǎn)者便可將消息送入緩沖池;只要緩沖池未空,消費(fèi)者便可從緩沖池中取走一個消息???,消費(fèi)者便可從緩沖池中取走一個消息。進(jìn)程管理進(jìn)程管理8.PC生產(chǎn)者生產(chǎn)者消費(fèi)者消費(fèi)者n-1n-1n n個個BufferBuffer 同步同步 當(dāng)緩沖池已放滿產(chǎn)品時,當(dāng)緩沖池已放滿產(chǎn)品時,生產(chǎn)者生產(chǎn)者進(jìn)程必須進(jìn)程必須等待等待 當(dāng)緩沖池已空時,當(dāng)緩沖池已空時,消費(fèi)者消費(fèi)者進(jìn)程應(yīng)進(jìn)程應(yīng)等待等待 互斥:互斥:所有進(jìn)程應(yīng)所有進(jìn)程應(yīng)互斥使用緩沖池互斥使用緩沖池這一臨界資源。這一臨界資源。進(jìn)程管理進(jìn)程管理91. 用記錄型信號量解決用記錄型信號量解決 Semaphore empty=n ,full=0;lem
6、pty表示空緩沖個數(shù),初值為表示空緩沖個數(shù),初值為n;lfull表示滿緩沖個數(shù),初值為表示滿緩沖個數(shù),初值為0。l互斥使用臨界區(qū)的信號量互斥使用臨界區(qū)的信號量mutex,初值為初值為1。進(jìn)程管理進(jìn)程管理101. 用記錄型信號量解決用記錄型信號量解決 Semaphore empty=n ,full=0, mutex;item = buffern;int in=0,out=0; Main() cobegin producer(); consumer(); coend 進(jìn)程管理進(jìn)程管理11生產(chǎn)者生產(chǎn)者producer( ) do produce an item in nextp; wait(empt
7、y); /*申請空緩沖區(qū) */ wait(mutex); /*實(shí)現(xiàn)對緩沖池的互斥使用*/ bufferin = nextp; in = (in+1) % n; signal(mutex); signal(full); /* 滿緩沖區(qū)的個數(shù)加1*/ while (TRUE)進(jìn)程管理進(jìn)程管理12消費(fèi)者消費(fèi)者consumer() do wait(full); /*申請滿緩沖區(qū)申請滿緩沖區(qū)*/ wait(mutex); /*實(shí)現(xiàn)互斥實(shí)現(xiàn)互斥*/ nextc = bufferout; out = (out+1) mod n; signal(mutex); signal(empty); /*空緩沖區(qū)的個數(shù)
8、加空緩沖區(qū)的個數(shù)加1*/ consume the item in nextc; while(TRUE);進(jìn)程管理進(jìn)程管理132. 用用ANDAND信號量解決信號量解決 對于生產(chǎn)者對于生產(chǎn)者消費(fèi)者問題,也可利用消費(fèi)者問題,也可利用ANDAND信號量信號量來解決,即用:來解決,即用: Swait(empty,mutex)wait(empty)和和wait(mutex) Ssignal(mutex,full)signal(mutex)和和signal(full) Swait(full,mutex) wait(full)和和wait(mutex) Ssignal(mutex,empty)Signal(
9、mutex)和和Signal(empty) 進(jìn)程管理進(jìn)程管理14Producer( ) repeat produce an item in nextp; Swait(empty,mutex); bufferin=nextp; in=in+1 % n; Ssignal(mutex,full); until false;Consumer( ) repeat Swait(mutex, full); nextc=bufferout; out=(out+1) % n; Ssignal(mutex,empty); consume the item in nextc; until false;進(jìn)程管理進(jìn)程管
10、理152.5.2 哲學(xué)家進(jìn)餐問題哲學(xué)家進(jìn)餐問題 5 5個哲學(xué)家圍坐在圓桌旁,每人面前有一只空盤子,個哲學(xué)家圍坐在圓桌旁,每人面前有一只空盤子,每每2 2人之間放一只筷子人之間放一只筷子: :n放在桌子上的放在桌子上的筷子是臨界資源筷子是臨界資源,可用一個信號量表示一只筷子,五個信號量構(gòu)成信號量數(shù)組。Semaphore chopstick5=1,1,1,1,1;n為了就餐,每個哲學(xué)家必須拿到兩只筷子,并且只為了就餐,每個哲學(xué)家必須拿到兩只筷子,并且只能直接從自己的左邊或右邊去取筷子。能直接從自己的左邊或右邊去取筷子。 smfr 進(jìn)程管理進(jìn)程管理16 1. 利用記錄型信號量解決利用記錄型信號量解決
11、第第i位哲學(xué)家的活動可描述為:位哲學(xué)家的活動可描述為:Semaphore chopstick5=1,1,1,1,1; repeat wait(chopsticki); /取左邊筷子取左邊筷子 wait(chopstick(i+1) % 5); / /取右邊筷子取右邊筷子 eat; signal(chopsticki); signal(chopstick(i+1) % 5); think; until false; 會死鎖會死鎖否?否?進(jìn)程管理進(jìn)程管理17 哲學(xué)家進(jìn)餐問題哲學(xué)家進(jìn)餐問題n哲學(xué)家饑餓時,總是先去拿左邊的筷子哲學(xué)家饑餓時,總是先去拿左邊的筷子( wait(chopsticki) );
12、 成功后,再去拿他右成功后,再去拿他右邊的筷子邊的筷子(wait(chopstick(i+1)mod 5);又成又成功后便可進(jìn)餐。功后便可進(jìn)餐。n進(jìn)餐完畢,則先放下左邊的筷子,然后再放進(jìn)餐完畢,則先放下左邊的筷子,然后再放右邊的筷子。右邊的筷子。上述解法可保證不會有兩個相鄰的哲學(xué)家上述解法可保證不會有兩個相鄰的哲學(xué)家同時進(jìn)餐,但有可能引起同時進(jìn)餐,但有可能引起死鎖死鎖。 進(jìn)程管理進(jìn)程管理18n假如五位哲學(xué)家同時饑餓而假如五位哲學(xué)家同時饑餓而各自拿起左邊的各自拿起左邊的筷子筷子時,就會使五個信號量時,就會使五個信號量chopstickchopstick均為均為0 0; 當(dāng)他們再試圖去拿右邊的筷子
13、時,都將因無當(dāng)他們再試圖去拿右邊的筷子時,都將因無筷子可拿而筷子可拿而無限期地等待無限期地等待。n幾種解決方法幾種解決方法 :死鎖的情況死鎖的情況進(jìn)程管理進(jìn)程管理19(1)(1)至多允許至多允許4 4個哲學(xué)家進(jìn)餐個哲學(xué)家進(jìn)餐 能保證至少有一位哲學(xué)家能夠進(jìn)餐,并在進(jìn)餐完畢時能釋放出他用過的兩只筷子,從而使更多的哲學(xué)家能夠進(jìn)餐。(2)(2)僅當(dāng)哲學(xué)家的左、右兩只筷子均可用時,才僅當(dāng)哲學(xué)家的左、右兩只筷子均可用時,才允許他拿起筷子進(jìn)餐。允許他拿起筷子進(jìn)餐。(3)(3)規(guī)定哲學(xué)家拿起筷子的次序規(guī)定哲學(xué)家拿起筷子的次序給所有哲學(xué)家編號,奇數(shù)號的哲學(xué)家必須首先給所有哲學(xué)家編號,奇數(shù)號的哲學(xué)家必須首先拿左邊
14、的筷子,偶數(shù)號的哲學(xué)家則反之。拿左邊的筷子,偶數(shù)號的哲學(xué)家則反之。1 1、2 2號哲學(xué)家競爭號哲學(xué)家競爭1 1號筷子,則號筷子,則3 3、4 4號哲學(xué)家競號哲學(xué)家競爭爭3 3號筷子。即五位哲學(xué)家都先競爭奇數(shù)號筷子,號筷子。即五位哲學(xué)家都先競爭奇數(shù)號筷子,獲得后,再去競爭偶數(shù)號筷子,最后總會有一獲得后,再去競爭偶數(shù)號筷子,最后總會有一位哲學(xué)家能獲得兩只筷子而進(jìn)餐。位哲學(xué)家能獲得兩只筷子而進(jìn)餐。進(jìn)程管理進(jìn)程管理202. 用用ANDAND信號量解決信號量解決var chopstick:array0.4 of semaphore:=(1,1,1,1,1); repeat think; swait(ch
15、opstick(i+1) % 5,chopsticki); eat; signal(chopstick(i+1) % 5,chopsticki); until false;在哲學(xué)家進(jìn)餐問題中,每個哲學(xué)家先獲得在哲學(xué)家進(jìn)餐問題中,每個哲學(xué)家先獲得2臨界資源臨界資源(筷子筷子)方能進(jìn)餐,用方能進(jìn)餐,用AND信號量機(jī)制可獲得信號量機(jī)制可獲得最簡潔的解法最簡潔的解法進(jìn)程管理進(jìn)程管理212.5.3 “讀者讀者寫者寫者”問題問題“讀者一寫者讀者一寫者( (ReaderReaderWriter Problem)Writer Problem)問題問題”: 保證一個Writer進(jìn)程必須與其他進(jìn)程互斥地訪問共享對
16、象。Example:進(jìn)程管理進(jìn)程管理222.5.3 “讀者讀者寫者寫者”解決方案解決方案讀者一寫者的同步讀者一寫者的同步要求要求:1)允許允許多個讀者多個讀者同時執(zhí)行同時執(zhí)行讀操作讀操作2)不允許讀者、不允許讀者、寫者寫者同時操作同時操作3)不允許多個不允許多個寫者寫者同時操作同時操作1. 用記錄型信號量解決用記錄型信號量解決2. 用信號量集機(jī)制解決用信號量集機(jī)制解決WriterWriter在在不能同時不能同時進(jìn)程管理進(jìn)程管理231. 用記錄型信號量解決用記錄型信號量解決 讀者讀者-寫者問題有兩種類型:寫者問題有兩種類型:n讀者優(yōu)先讀者優(yōu)先 當(dāng)寫者提出寫的要求后,當(dāng)寫者提出寫的要求后,允許允許
17、新的新的讀者繼續(xù)進(jìn)入讀者繼續(xù)進(jìn)入n寫者優(yōu)先寫者優(yōu)先 當(dāng)寫者提出寫的要求后,當(dāng)寫者提出寫的要求后,不允許不允許新的新的讀者進(jìn)入讀者進(jìn)入進(jìn)程管理進(jìn)程管理24讀者讀者-寫者問題的信號量設(shè)置:寫者問題的信號量設(shè)置:n為實(shí)現(xiàn)為實(shí)現(xiàn)ReaderReader與與WriterWriter進(jìn)程間在讀或?qū)憰r的進(jìn)程間在讀或?qū)憰r的互斥互斥而設(shè)置了一個互斥信號量而設(shè)置了一個互斥信號量WmutexWmutex。n設(shè)置一個整型變量設(shè)置一個整型變量ReadcountReadcount表示正在讀的進(jìn)程數(shù)表示正在讀的進(jìn)程數(shù)目,也應(yīng)該為它設(shè)置一個互斥信號量目,也應(yīng)該為它設(shè)置一個互斥信號量rmutexrmutex。當(dāng)當(dāng)Readcou
18、nt=0,表示無表示無讀者進(jìn)程讀者進(jìn)程在讀,在讀,讀者進(jìn)程讀者進(jìn)程需要需要執(zhí)行執(zhí)行Wait(Wmutex)操作。若成功,操作。若成功,讀者進(jìn)程讀者進(jìn)程便可去讀,便可去讀,相應(yīng)地,做相應(yīng)地,做Readcount+1操作。操作。僅當(dāng)僅當(dāng)讀者進(jìn)程讀者進(jìn)程在執(zhí)行了在執(zhí)行了Readcount減減1操作后其值為操作后其值為0時,時,才須執(zhí)行才須執(zhí)行signal(Wmutex)操作,以便讓操作,以便讓寫者進(jìn)程寫者進(jìn)程寫寫。進(jìn)程管理進(jìn)程管理25用記錄型信號量解決用記錄型信號量解決 讀者讀者reader: begin begin repeat repeat wait(rmutex); if(readcount=
19、0) then wait(wmutex); readcount=readcount+1; signal(rmutex); perform read option; 讀操作讀操作 wait(rmutex); readcount=readcount-1; if readcount=0 then signal(wmutex); signal(rmutex ); until false; until false; end semaphore rmutex=1,wmutex=1;int Readcount=0; wmutex: 讀寫互斥讀寫互斥rmutex: 互斥訪問互斥訪問readcountReadc
20、ount:讀進(jìn)程數(shù)讀進(jìn)程數(shù)進(jìn)程管理進(jìn)程管理26寫者寫者writer: begin repeat wait(wmutex); perform write option; 寫操作寫操作 signal(wmutex); until false;end 進(jìn)程管理進(jìn)程管理272. 用信號量集機(jī)制解決用信號量集機(jī)制解決q引入一個信號量引入一個信號量L,并賦予其初值為并賦予其初值為RN,通通過執(zhí)行過執(zhí)行wait(L,1,1)操作來操作來控制讀者的數(shù)目控制讀者的數(shù)目qwait(S,d,t)操作來操作來:S 為信號量,總資源數(shù)量為信號量,總資源數(shù)量d為需求值,運(yùn)轉(zhuǎn)所需量為需求值,運(yùn)轉(zhuǎn)所需量t為下線為下線, st
21、 時方能啟動時方能啟動P66P66進(jìn)程管理進(jìn)程管理282. 用信號量集機(jī)制解決用信號量集機(jī)制解決與前面的略有不同,增加一個限制,即與前面的略有不同,增加一個限制,即最多只允許最多只允許RN個讀者同時讀。個讀者同時讀。引入一個信號量引入一個信號量L,并賦予其初值為并賦予其初值為RN,通過執(zhí)行通過執(zhí)行wait(L,1,1)操作來操作來控制讀者的數(shù)目控制讀者的數(shù)目當(dāng)有一個讀者進(jìn)入,執(zhí)行當(dāng)有一個讀者進(jìn)入,執(zhí)行wait(L,1,1)操作,使操作,使L的值減的值減1。當(dāng)有。當(dāng)有RN個讀者進(jìn)入讀后,個讀者進(jìn)入讀后,L便減為便減為0,第第RN+1個讀者要進(jìn)入讀時,必然會因個讀者要進(jìn)入讀時,必然會因wait(L
22、,1,1)操作失敗而阻塞。操作失敗而阻塞。L=0L=0時表示不允許讀者進(jìn)入時表示不允許讀者進(jìn)入L=RNL=RN時表示寫者可以進(jìn)入時表示寫者可以進(jìn)入進(jìn)程管理進(jìn)程管理29var RN:integer;L, mx: semaphore := RN,1;reader: begin repeat swait(L,1,1); swait(mx,1,0); perform read option; ssignal(L,1); until false; end writer: begin repeat swait(mx,1,1;L,RN,0); perform write option; ssignal(mx
23、,1); until false; end進(jìn)程管理進(jìn)程管理30Now, the problems are:l信號量機(jī)制信號量機(jī)制 進(jìn)程必須自備同步自備同步操作wait(s)和signal(s) wait(s)和signal(s)分布分布在進(jìn)程中 同步操作使用不當(dāng)使用不當(dāng),造成死鎖l同步操作使用問題同步操作使用問題 wait(s)和和signal(s)顛倒顛倒 多個進(jìn)程同時進(jìn)入臨界區(qū) signal(s)誤寫成誤寫成wait(s) 其它不能進(jìn)入臨界區(qū) 遺漏遺漏 wait(s) 幾個進(jìn)程同時進(jìn)入臨界區(qū) signal(s) 其它進(jìn)程無法進(jìn)入臨界區(qū)進(jìn)程管理進(jìn)程管理煩,暈,誰來幫幫我?31進(jìn)程管理進(jìn)程管理
24、Im the monitor,coming! (管程, similar to“城管”:誰在掐架?)Come on! It cant gowrong every time.進(jìn)程管理進(jìn)程管理33 管程機(jī)制管程機(jī)制 1. 管程的定義管程的定義2. 管程的語法描述管程的語法描述3. 條件變量條件變量 解決方法解決方法:把對臨界資源的同步操作集中起把對臨界資源的同步操作集中起來,由一個進(jìn)程統(tǒng)一管理來,由一個進(jìn)程統(tǒng)一管理 進(jìn)程管理進(jìn)程管理34 1. “管程管程” 長啥樣的?長啥樣的? 系統(tǒng)資源系統(tǒng)資源 抽象抽象 數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu) (軟件硬件) (表示信息操作) 電傳機(jī)電傳機(jī):狀態(tài):狀態(tài)(忙、閑忙、閑) 、
25、請求、請求/釋放操作、等待隊列釋放操作、等待隊列 FIFO隊列隊列:隊首、隊尾、隊長、隊列操作:隊首、隊尾、隊長、隊列操作 緩沖池緩沖池:大小、指針:大小、指針(空滿空滿)、放入、放入/獲取操作獲取操作進(jìn)程管理進(jìn)程管理35 1. “管程管程” 長啥樣的?長啥樣的?一組表征資源的共享數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)對共享數(shù)據(jù)結(jié)構(gòu)操作操作的一組過程管程管程 管程被請求和釋放資源的進(jìn)程所調(diào)用管程被請求和釋放資源的進(jìn)程所調(diào)用共同數(shù)據(jù)一組操作過程初始化代碼進(jìn)入隊列進(jìn)程管理進(jìn)程管理362.7 線程線程n線程的基本概念線程的基本概念n線程間的同步和通信線程間的同步和通信n內(nèi)核支持線程和用戶級線程內(nèi)核支持線程和用戶級線程n線
26、程控制線程控制l20世紀(jì)60年代提出進(jìn)程后,OS中都是以進(jìn)程進(jìn)程作為擁有擁有資源和獨(dú)立運(yùn)行的基本單位資源和獨(dú)立運(yùn)行的基本單位。l80年代中期,提出比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位-線程線程(Threads);好處:減少程序在并發(fā)執(zhí)行時減少程序在并發(fā)執(zhí)行時所付出的時空開銷,使所付出的時空開銷,使OSOS具有更好的并發(fā)性具有更好的并發(fā)性。進(jìn)程管理進(jìn)程管理37Comparied with 進(jìn)程進(jìn)程協(xié)同完成一個任務(wù)具體工作人員,多人共享相同空間(資源)進(jìn)程進(jìn)程線程線程進(jìn)程管理進(jìn)程管理381. 線程的引入線程的引入資源擁有者資源擁有者線程線程進(jìn)程的兩個基本屬性進(jìn)程的兩個基本屬性: :進(jìn)程是一個可進(jìn)程是一
27、個可擁有資源擁有資源的獨(dú)立單位;的獨(dú)立單位;進(jìn)程同時又是一個可獨(dú)立進(jìn)程同時又是一個可獨(dú)立調(diào)度和分派調(diào)度和分派的基本單位的基本單位P75P75進(jìn)程管理進(jìn)程管理39 如何能使多個程序更好地如何能使多個程序更好地并發(fā)執(zhí)行并發(fā)執(zhí)行同時又盡量同時又盡量減少系統(tǒng)減少系統(tǒng)的開銷的開銷? ? 是追求的是追求的重要目標(biāo)。重要目標(biāo)。解決方法解決方法:搬房子累,搬人!好處好處: : (1)對于作為調(diào)度和分派的基本單位,不擁有資源,可“輕裝上陣”;(2)對擁有資源的基本單位,又不對其進(jìn)行頻繁的切換。進(jìn)程管理進(jìn)程管理40在這個想法下,誕生了在這個想法下,誕生了“線程線程” 先把先把“房子房子+ +人人”區(qū)分開:區(qū)分開:
28、將進(jìn)程的兩個屬性分開,由操作系統(tǒng)將進(jìn)程的兩個屬性分開,由操作系統(tǒng)分開處理分開處理。進(jìn)程管理進(jìn)程管理41進(jìn)程進(jìn)程線程線程調(diào)度獨(dú)立調(diào)度、分派的基本單位獨(dú)立調(diào)度、分派的基本單位線程為調(diào)度分派的基本單位的基本單位進(jìn)程為擁有資源的基本單位的基本單位并發(fā)性僅進(jìn)程間可以并發(fā)執(zhí)行僅進(jìn)程間可以并發(fā)執(zhí)行進(jìn)程和線程都可以并發(fā)執(zhí)行進(jìn)程和線程都可以并發(fā)執(zhí)行擁有資源擁有資源的獨(dú)立單位擁有資源的獨(dú)立單位不擁有系統(tǒng)資源,但可以訪問不擁有系統(tǒng)資源,但可以訪問其隸屬進(jìn)程的資源其隸屬進(jìn)程的資源系統(tǒng)開銷創(chuàng)建或撤消進(jìn)程時開銷較大創(chuàng)建或撤消進(jìn)程時開銷較大切換代價高切換代價高線程創(chuàng)建或撤消時開銷很小線程創(chuàng)建或撤消時開銷很小切換代價低切換代
29、價低支持多處理機(jī)若進(jìn)程只有一個線程,則只若進(jìn)程只有一個線程,則只能運(yùn)行在一個處理機(jī)上能運(yùn)行在一個處理機(jī)上若進(jìn)程擁有多個線程,則可分若進(jìn)程擁有多個線程,則可分散到多個處理機(jī)上運(yùn)行散到多個處理機(jī)上運(yùn)行2.7.2. 線程和進(jìn)程的比較線程和進(jìn)程的比較P76P76進(jìn)程管理進(jìn)程管理421.1.輕型實(shí)體輕型實(shí)體 基本上不擁有系統(tǒng)資源,只有一點(diǎn)必不可少的、能保證獨(dú)立運(yùn)行的資源2.2.獨(dú)立調(diào)度和分派的基本單位獨(dú)立調(diào)度和分派的基本單位 線程是能獨(dú)立運(yùn)行的基本單位,因而也是獨(dú)立調(diào)度和分派的基本單位。線程很“輕”,線程的切換非常迅速線程的切換非常迅速/ /開銷小開銷小。3.3.可并發(fā)執(zhí)行可并發(fā)執(zhí)行 一個進(jìn)程中的多個線
30、程間可并發(fā)執(zhí)行;不同進(jìn)程中的線程也能并發(fā)執(zhí)行。4.4.共享進(jìn)程資源共享進(jìn)程資源 同一進(jìn)程中的各個線程,可以共享該進(jìn)程所擁有的資源(有相同的地址空間;訪問進(jìn)程所擁有文件、定時器、信號量機(jī)構(gòu)等)。 線程的特點(diǎn)線程的特點(diǎn)進(jìn)程管理進(jìn)程管理43用戶棧用戶棧系統(tǒng)棧系統(tǒng)棧PCB數(shù)據(jù)數(shù)據(jù)程序程序單線程進(jìn)程單線程進(jìn)程寄存器寄存器PCB數(shù)據(jù)數(shù)據(jù)程序程序多線程進(jìn)程多線程進(jìn)程用戶棧用戶棧系統(tǒng)棧系統(tǒng)棧 TCB寄存器寄存器用戶棧用戶棧系統(tǒng)棧系統(tǒng)棧 TCB寄存器寄存器用戶棧用戶棧系統(tǒng)棧系統(tǒng)棧 TCB寄存器寄存器線程線程1線程線程2線程線程3進(jìn)程進(jìn)程進(jìn)程進(jìn)程管理進(jìn)程管理44多線程和進(jìn)程模型多線程和進(jìn)程模型 多線程是指操作系統(tǒng)
31、支持在一個進(jìn)程中執(zhí)行多個線程的能多線程是指操作系統(tǒng)支持在一個進(jìn)程中執(zhí)行多個線程的能力力。每個進(jìn)程中只有一個線程在執(zhí)行,稱作單線程方法(MS-DOS);WINDOWS 2000/XP、SOLARIS、 LINUX等支持多線程的多進(jìn)程。在多線程的環(huán)境中,進(jìn)程被定義成資源分配的實(shí)體和保護(hù)的實(shí)體。進(jìn)程管理進(jìn)程管理45l狀態(tài)參數(shù)狀態(tài)參數(shù) 每個線程都可以用線程標(biāo)識符和一組狀態(tài)參數(shù)進(jìn)行描述。 寄存器狀態(tài)寄存器狀態(tài) 堆棧堆棧 運(yùn)行狀態(tài)運(yùn)行狀態(tài) 優(yōu)先級優(yōu)先級 專有存儲器專有存儲器 信號屏蔽信號屏蔽l線程運(yùn)行狀態(tài)線程運(yùn)行狀態(tài) 線程間也存在著共享資源和相互合作的制約關(guān)系,在運(yùn)行時也具有間斷性。 三種基本狀態(tài):執(zhí)行狀
32、態(tài)、就緒狀態(tài)、阻塞狀態(tài)執(zhí)行狀態(tài)、就緒狀態(tài)、阻塞狀態(tài)l線程的創(chuàng)建和終止線程的創(chuàng)建和終止應(yīng)用程序啟動時,通常僅有一個線程在執(zhí)行,該線程被稱為“初始化線程初始化線程”。它可根據(jù)需要再去創(chuàng)建若干個線程。2.7.3. 線程的狀態(tài)和線程的狀態(tài)和TCBTCB進(jìn)程管理進(jìn)程管理461.1.線程標(biāo)識符線程標(biāo)識符 每個線程有唯一標(biāo)示符2.2.一組寄存器一組寄存器 保存程序計數(shù)器PC。3.3.線程運(yùn)行狀態(tài)線程運(yùn)行狀態(tài) 三種基本狀態(tài)4.4.優(yōu)先級、線程專用存儲區(qū)、信號屏蔽、堆棧指針。優(yōu)先級、線程專用存儲區(qū)、信號屏蔽、堆棧指針。 2. 線程控制塊線程控制塊TCBP78P78進(jìn)程管理進(jìn)程管理47在多線程在多線程OSOS中,
33、進(jìn)程是作為中,進(jìn)程是作為擁有系統(tǒng)資源的基本單位擁有系統(tǒng)資源的基本單位,通,通常的進(jìn)程都包含常的進(jìn)程都包含多個線程多個線程并為它們提供資源,但進(jìn)程不再作為并為它們提供資源,但進(jìn)程不再作為一個一個執(zhí)行的實(shí)體執(zhí)行的實(shí)體。多線程。多線程OSOS中的進(jìn)程有以下屬性:中的進(jìn)程有以下屬性:l擁有系統(tǒng)分配的資源單位擁有系統(tǒng)分配的資源單位 用戶地址空間、進(jìn)程間和線程間同步和通信的機(jī)制、打開的文件和已申請到的I/O設(shè)備、地址映射表等。l可包括多個線程可包括多個線程 可含有多個相對獨(dú)立的線程,但至少要有一個線程;進(jìn)程為線程提供資源及運(yùn)行環(huán)境,使線程可并發(fā)執(zhí)行。 l進(jìn)程不是一個可執(zhí)行的實(shí)體進(jìn)程不是一個可執(zhí)行的實(shí)體 進(jìn)
34、程仍有與執(zhí)行相關(guān)的狀態(tài)。進(jìn)程 “執(zhí)行”狀態(tài)實(shí)際上是指該進(jìn)程中的某線程正在執(zhí)行。進(jìn)程掛起時,該進(jìn)程中的所有線程也都將被掛起;進(jìn)程激活時,屬于該進(jìn)程的所有線程也都將被激活。 3多線程多線程OSOS中的進(jìn)程中的進(jìn)程進(jìn)程管理進(jìn)程管理48線程的實(shí)現(xiàn)線程的實(shí)現(xiàn)n多線程若想有條不紊地運(yùn)行,系統(tǒng)必提供用于實(shí)多線程若想有條不紊地運(yùn)行,系統(tǒng)必提供用于實(shí)現(xiàn)線程同步和通信的機(jī)制?,F(xiàn)線程同步和通信的機(jī)制。n為支持不同頻率的交互操作、不同程度的并行性,為支持不同頻率的交互操作、不同程度的并行性,常需提供多種同步機(jī)制,如常需提供多種同步機(jī)制,如互斥鎖、條件變量、互斥鎖、條件變量、信號量以及多讀、單寫鎖信號量以及多讀、單寫鎖
35、等等1 1互斥鎖互斥鎖( (mutex)mutex)2 2條件變量條件變量3 3信號量機(jī)制信號量機(jī)制(私用信號量、公用信號量)進(jìn)程管理進(jìn)程管理491互斥鎖互斥鎖(mutex) 互斥鎖是一種用于實(shí)現(xiàn)線程間對資互斥鎖是一種用于實(shí)現(xiàn)線程間對資源源互斥訪問互斥訪問的機(jī)制。的機(jī)制。操作互斥鎖時空開銷低,因而較適合于高頻度使用的關(guān)鍵共享數(shù)據(jù)和高頻度使用的關(guān)鍵共享數(shù)據(jù)和程序段程序段?;コ怄i可以有兩種狀態(tài),即開鎖開鎖(unlock)和關(guān)鎖關(guān)鎖(lock)狀狀態(tài)態(tài)。相應(yīng)地,可用兩條命令(函數(shù))對互斥鎖進(jìn)行操作。其中的關(guān)鎖lock操作用于將mutex關(guān)上,開鎖操作unlock則用于打開mutex。 進(jìn)程管理進(jìn)程管
36、理50 內(nèi)核支持內(nèi)核支持線程和線程和用戶級用戶級線程線程l線程在各系統(tǒng)的實(shí)現(xiàn)方式不完全相同不完全相同。l一些數(shù)據(jù)庫管理系統(tǒng)(如infomix),實(shí)現(xiàn)的是用戶級線程l如Macintosh、Windows 和 0S/2操作系統(tǒng)實(shí)現(xiàn)的是內(nèi)核支持線程;lSolaris操作系統(tǒng)( UNIX操作系統(tǒng)的衍生版本之一)同時實(shí)現(xiàn)了這兩種類型的線程。Kernel Supported ThreadsUser Lever ThreadsP79P79進(jìn)程管理進(jìn)程管理51內(nèi)核支持內(nèi)核支持線程和線程和用戶級用戶級線程線程Simlar to :國家統(tǒng)一分配?!罢o錢;快,多生孩子!孩子越多,咱家錢的總數(shù)越多?!盨imila
37、r to : 已分發(fā)到單位(進(jìn)程),再由單位分配給個人(線程)。“咱家就那么點(diǎn)有限的錢,多生娃,難養(yǎng)活”線程越多,線程越多,速度越快速度越快線程越多,線程越多,速度不變速度不變進(jìn)程管理進(jìn)程管理52依賴于依賴于OSOS核心核心,由內(nèi)核的內(nèi)部需求進(jìn)行創(chuàng)建和撤銷,用來執(zhí)行一個指定的函數(shù):n內(nèi)核維護(hù)進(jìn)程和線程的上下文信息;n線程切換由內(nèi)核完成;n一個線程阻塞,不會影響其他線程的運(yùn)行。n時間片分配給線程,所以多線程的進(jìn)程獲得更多CPU時間。1. 內(nèi)核支持線程內(nèi)核支持線程(Kernel Supported Threads)進(jìn)程管理進(jìn)程管理53KSTKST線程實(shí)現(xiàn)的線程實(shí)現(xiàn)的4 4優(yōu)點(diǎn)優(yōu)點(diǎn): :1)在多處理器系統(tǒng)中,內(nèi)核能夠同時調(diào)度同一進(jìn)程中多個線程并行執(zhí)行;2)如果進(jìn)程中的一個線程被阻塞了,內(nèi)核可以調(diào)度該進(jìn)程中的其它線程占有處理器運(yùn)行,也可以運(yùn)行其它
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025青海省建筑安全員考試題庫及答案
- 2025天津市安全員B證考試題庫及答案
- 韶關(guān)醫(yī)院道路標(biāo)線施工方案
- 2025遼寧省建筑安全員C證考試(專職安全員)題庫及答案
- 2025河南省安全員C證考試(專職安全員)題庫附答案
- 卷材防水出售合同范本
- 信用卡放款合同范本
- 二年級口算練習(xí)冊100道
- 三年級口算題目全集1000道
- 二年級數(shù)學(xué)口算練習(xí)100道
- 2023年青島職業(yè)技術(shù)學(xué)院高職單招(英語)試題庫含答案解析
- 2023年蘇州衛(wèi)生職業(yè)技術(shù)學(xué)院高職單招(數(shù)學(xué))試題庫含答案解析
- GB/T 37864-2019生物樣本庫質(zhì)量和能力通用要求
- 中國國防:新中國國防建設(shè)成就【2】
- 慢性病建檔表系列
- GB 19641-2015食品安全國家標(biāo)準(zhǔn)食用植物油料
- 科室會專用-元治-鹽酸貝尼地平-產(chǎn)品介紹
- 英語四六級翻譯技巧課件
- 讀后續(xù)寫(2022新高考I卷)講解課件 高三英語寫作專項(xiàng)
- 三角形的內(nèi)角和-課件
- 馬工程西方經(jīng)濟(jì)學(xué)(第二版)教學(xué)課件-1
評論
0/150
提交評論