版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2.5進(jìn)程通信
進(jìn)程通信:進(jìn)程間的信息交換。進(jìn)程之間,需要交換一定數(shù)量的信息,以便協(xié)調(diào)一致共同完成指定的任務(wù)。如輸入進(jìn)程、計(jì)算進(jìn)程、打印進(jìn)程;進(jìn)程之間交換的信息量可多可少,多則成百上千個(gè)數(shù)據(jù),少則僅僅是一個(gè)狀態(tài)或一個(gè)信號(hào)。
進(jìn)程通信方式:
低級(jí)通信方式:傳送一個(gè)或幾個(gè)字節(jié)的控制信息。如:鎖機(jī)制(Lock(L)、unLock(L)和信號(hào)量機(jī)制(P(S)、V(S))。
缺點(diǎn):效率低;通信對(duì)用戶不透明(用戶需要管理);
高級(jí)通信方式:以較高的效率,交換大批量的數(shù)據(jù),隱藏細(xì)節(jié)。如:消息緩沖機(jī)制和信箱機(jī)制。
Send/Receive原語(高級(jí)通訊原語)一、進(jìn)程通信的類型(高級(jí)通信機(jī)制)1.共享存儲(chǔ)器系統(tǒng)1)基于共享數(shù)據(jù)結(jié)構(gòu)方式:公用數(shù)據(jù)結(jié)構(gòu)生產(chǎn)者消費(fèi)者有界緩沖區(qū)
缺點(diǎn):效率低;對(duì)程序員不透明;傳送少量數(shù)據(jù);OS:提供共享存儲(chǔ)器。程序員:設(shè)置緩沖區(qū);負(fù)責(zé)進(jìn)程同步;2)基于共享存儲(chǔ)區(qū)方式:共享存儲(chǔ)區(qū)進(jìn)程:讀、寫進(jìn)程申請(qǐng)分區(qū)指定分區(qū)關(guān)鍵字連接本進(jìn)程讀寫2.消息通信方式進(jìn)程間的數(shù)據(jù)交換以消息(message)或報(bào)文為單位,程序員利用一組通信命令(原語)來實(shí)現(xiàn)通信,可分為直接、間接通信方式。
優(yōu)點(diǎn):大量數(shù)據(jù)傳送;隱藏通訊的實(shí)現(xiàn)細(xì)節(jié);
3.管道通信方式(Pipe)(Unix系統(tǒng))也稱共享文件方式,基于文件系統(tǒng),利用一個(gè)打開的共享文件連接兩個(gè)相互通信的進(jìn)程,文件作為緩沖傳輸介質(zhì)。
字符流方式寫入讀出;先進(jìn)先出順序。發(fā)送進(jìn)程接收進(jìn)程
為了協(xié)調(diào)雙方通信,管道通信必須提供三方面的協(xié)調(diào)能力:1、互斥2、同步、3、對(duì)方是否存在。二、消息傳遞通信的實(shí)現(xiàn)方法
系統(tǒng)為進(jìn)程提供了兩個(gè)高級(jí)通訊原語Send和Receive。要進(jìn)行消息傳遞時(shí)執(zhí)行Send,當(dāng)接收者要接收消息時(shí)執(zhí)行Receive。
1.直接通信方式(通信時(shí)不需要第三者)發(fā)送進(jìn)程利用OS所提供的發(fā)送命令,直接把消息發(fā)送給目標(biāo)進(jìn)程。
要求:發(fā)送進(jìn)程和接收進(jìn)程都以顯式方式提供對(duì)方的標(biāo)識(shí)符。通信命令:(原語)Send(Receiver,message):發(fā)送一個(gè)消息給接收進(jìn)程;
Receive(Sender,message):接收Sender發(fā)來的消息;例:原語Send(P2,m1)表示將消息m1發(fā)送給接收進(jìn)程P2;原語Receive(P1,m1)表示接收由P1發(fā)來的消息m1。
形式:
對(duì)稱形式:一對(duì)一非對(duì)稱形式:多對(duì)一(顧客/服務(wù)員)如:提供打印服務(wù)的進(jìn)程;Receive(id,message);有緩沖(有界,無界),無緩沖;2.消息緩沖隊(duì)列通信機(jī)制(直接通信)
消息緩沖通信:是一種直接通信方式,一種可直接以較高的效率傳遞較多數(shù)據(jù)的信息交換方式,被廣泛應(yīng)用于本地進(jìn)程之間的通信。
每當(dāng)發(fā)送進(jìn)程欲發(fā)送消息時(shí),便形成一個(gè)消息緩沖區(qū),其結(jié)構(gòu)如下:
typedefstructmessagebuffer{
intsender;發(fā)送者進(jìn)程標(biāo)識(shí)符
intsize;消息長(zhǎng)度
char*text;消息正文
structmessage_buffer*next指向下一個(gè)消息緩沖區(qū)的指針
};
消息緩沖區(qū)是內(nèi)存中的一個(gè)區(qū)域,其中可以存放一條消息。發(fā)送進(jìn)程可以把消息填寫到消息緩沖區(qū)中,并把該消息緩沖區(qū)插入到接收進(jìn)程的消息鏈上,以待接收進(jìn)程進(jìn)行加工處理。為此,PCB中還應(yīng)該增加如下的數(shù)據(jù)項(xiàng):1)mq
:消息隊(duì)列頭指針,初值為空。由于接收進(jìn)程可能會(huì)收到幾個(gè)進(jìn)程發(fā)來的消息,故應(yīng)將所有的消息緩沖區(qū)鏈成一個(gè)隊(duì)列,其隊(duì)頭通過在接收進(jìn)程PCB中設(shè)置隊(duì)首指針mq來指出。2)mutex:消息隊(duì)列互斥信號(hào)量,初值為1。消息隊(duì)列屬于臨界資源,故在PCB中設(shè)置了互斥信號(hào)量mutex,每當(dāng)對(duì)消息鏈操作之前和結(jié)束操作之后,應(yīng)在mutex上分別執(zhí)行wait操作和signal操作。3)sm:消息隊(duì)列同步計(jì)數(shù)信號(hào)量(消息隊(duì)列資源信號(hào)量)。初值為0。當(dāng)發(fā)送進(jìn)程發(fā)來一個(gè)消息,在此信號(hào)量上執(zhí)行signal(sm);而當(dāng)接收進(jìn)程從消息隊(duì)列上欲取走一個(gè)消息時(shí),先對(duì)信號(hào)量執(zhí)行wait(sm),如果有消息,則從消息鏈中取走mq所指出的第一個(gè)消息。
發(fā)送進(jìn)程在發(fā)送消息之前,應(yīng)先在自己的內(nèi)存空間設(shè)置一個(gè)發(fā)送區(qū),把欲發(fā)送的消息正文以及接收進(jìn)程標(biāo)識(shí)符id和消息長(zhǎng)度填入其中,然后用發(fā)送原語構(gòu)造消息并把消息發(fā)送出去;
接收進(jìn)程在接收消息之前,在本進(jìn)程的內(nèi)存空間中設(shè)置一個(gè)接收區(qū),然后用接收原語接收消息。(1)發(fā)送原語:send(receiver,a)a為發(fā)送區(qū)開始地址。
功能:把消息從發(fā)送區(qū)復(fù)制到消息緩沖區(qū),并將它掛到接收進(jìn)程消息隊(duì)列的末尾。如果該接收者正因等待消息而處于阻塞狀態(tài),則喚醒該進(jìn)程。
voidsend(receiver,a)
{
getbuf(a.size,i);根據(jù)a.size(正文大?。┥暾?qǐng)緩沖區(qū);
i.sender=a.sender;將發(fā)送區(qū)a中的信息復(fù)制到消息緩沖區(qū)i中;
i.size=a.size;
copy(i.text,a.text);
i.next=0;
getid(PCBset,receiver.j);獲得接收進(jìn)程內(nèi)部標(biāo)識(shí)符;
wait(j.mutex);
封鎖消息隊(duì)列;
insert(&j.mq,i);將消息緩沖區(qū)(i)插入消息隊(duì)列(j);
signal(j.mutex);解鎖消息隊(duì)列;解鎖消息隊(duì)列
signal(j.sm);
j消息隊(duì)列資源信號(hào)量加1;
}互斥訪問(2)接收原語:receive(b)b為接收區(qū)開始地址查看(j)消息鏈中計(jì)數(shù)信號(hào)量(sm)來獲知有待處理的消息否?若無,則接收進(jìn)程插入消息鏈的阻塞隊(duì)列;若有消息,則把消息鏈上的第一個(gè)消息摘下,將消息的內(nèi)容復(fù)制到進(jìn)程j的接收區(qū)b,然后,釋放消息緩沖區(qū)。voidreceive(b)
{
j=internalname;j為接收進(jìn)程內(nèi)部的標(biāo)識(shí)符;
wait(j.sm);判斷有無待處理的消息;如j.sm=0,則阻塞;否則繼續(xù)執(zhí)行;
wait(j.mutex);
remove(j.mq,i);將消息隊(duì)列中第一個(gè)消息移出;j消息緩沖隊(duì)列的隊(duì)首
signal(j.mutex);
b.sender=i.sender;將消息緩沖區(qū)i中的信息復(fù)制到接收區(qū)b;
b.size=i.size;
copy(b.text,i.text);releasebuf(i);
}互斥訪問思考:mutex,sm是什么信號(hào)量?小結(jié):接收進(jìn)程j消息緩沖隊(duì)列j的PCB中mqj的PCB中sm表示數(shù)量發(fā)送進(jìn)程Size:5Text:helloSender:A發(fā)送區(qū)拷貝Size:5Text:helloSender:A消息緩沖區(qū)i(內(nèi)存)接收進(jìn)程Size:5Text:helloSender:A接收區(qū)摘下并拷貝鏈接3.間接通信方式(信箱通信)發(fā)送進(jìn)程發(fā)消息時(shí)不指定接收進(jìn)程的名字,需要借助于一個(gè)中間媒體,即信箱來進(jìn)行,因此稱之為間接通信方式。1)信箱的數(shù)據(jù)結(jié)構(gòu)間接通信所利用的信箱是一種數(shù)據(jù)結(jié)構(gòu),它由信箱頭和信箱體兩部分組成。其中:信箱頭是對(duì)信箱的描述,信箱頭包括如下信息:信箱標(biāo)識(shí)符;信箱大??;已存放的信件數(shù);
等信箱隊(duì)列的首指針;(
若發(fā)送信件時(shí)信箱已滿,則發(fā)送進(jìn)程被置為“等信箱”狀態(tài),直到信箱有空時(shí)才被釋放;
等信件隊(duì)列的首指針;(若取信件時(shí)信箱中無信,則接收進(jìn)程被置為“等信件”狀態(tài),直到有信件時(shí)才被釋放);
信箱體由若干格子組成,每一個(gè)格子可以存放一個(gè)信件。信箱格子的大小和數(shù)量在信箱創(chuàng)建時(shí)確定。發(fā)送
接收
信箱頭格子1格子2格子3
┅AB發(fā)送進(jìn)程接收進(jìn)程信箱體2)信箱創(chuàng)建、撤消、消息發(fā)送、接收原語信箱的創(chuàng)建和撤消。信箱可以由操作系統(tǒng)創(chuàng)建,也可以由用戶創(chuàng)建,創(chuàng)建者是信箱的擁有者。因此,可以根據(jù)創(chuàng)建者的不同將信箱分為私用信箱、公用信箱和共享信箱等類型。(2)消息的發(fā)送和接收。
Send(mailbox,message):將一個(gè)消息發(fā)送到指定信箱;
Receive(mailbox,message):從指定信箱中接收一個(gè)消息;3)信箱分類信箱種類創(chuàng)建通信方式實(shí)現(xiàn)生命期私用用戶擁有者讀取,其它用戶只能發(fā)送。單向通信鏈路用戶結(jié)束則消失公用OS可發(fā)送可讀取雙向通信鏈路OS運(yùn)行期始終存在共享進(jìn)程擁有和共享者可讀取,其它只能發(fā)送。雙向進(jìn)程結(jié)束終止4)信箱通信發(fā)送和接收對(duì)應(yīng)關(guān)系發(fā)送接收專用:一對(duì)一;不干擾發(fā)送接收一對(duì)多;廣播方式發(fā)送接收多對(duì)一;C/S(客戶/服務(wù))發(fā)送接收多對(duì)多;公用信箱進(jìn)程通信小結(jié):
1、共享存儲(chǔ)器系統(tǒng)基于共享數(shù)據(jù)數(shù)據(jù)結(jié)構(gòu)方式:程序員負(fù)責(zé);基于共享存儲(chǔ)區(qū)方式:OS負(fù)責(zé);
2、消息通信方式—Message單位直接通信方式:指名發(fā)送、接收者標(biāo)識(shí)符。
Send、Receiver原語;有緩沖:消息緩沖隊(duì)列通信機(jī)制;(重點(diǎn))間接通信方式:中介媒體信箱通信:信箱:信箱頭、信箱體;創(chuàng)建、撤消、發(fā)送、接收、分類。
3、管道通信—共享文件方式—Unix系統(tǒng)字符流輸入、輸出。2.6線程一、線程的基本概念
進(jìn)程的概念和結(jié)構(gòu)是傳統(tǒng)操作系統(tǒng)工作的基礎(chǔ)。但是,隨著計(jì)算機(jī)體系結(jié)構(gòu)從早期的單處理機(jī)結(jié)構(gòu)發(fā)展到目前的多處理機(jī)結(jié)構(gòu),在多任務(wù)的環(huán)境中,為了減少處理機(jī)的空轉(zhuǎn)時(shí)間以及處理機(jī)調(diào)度切換時(shí)的時(shí)間和空間開銷,提高系統(tǒng)的并行能力,因此產(chǎn)生了更小的控制單位:線程。補(bǔ)充:
多線程的概念首先是在多處理機(jī)的并行處理中提出來的。傳統(tǒng)的多處理機(jī)由若干臺(tái)處理機(jī)組成,每臺(tái)處理機(jī)每次運(yùn)行單個(gè)現(xiàn)場(chǎng),即每臺(tái)處理機(jī)有一個(gè)有限硬件資源的單一控制線路。在這樣的多處理機(jī)系統(tǒng)中,在進(jìn)行遠(yuǎn)程訪問期間會(huì)出現(xiàn)等待現(xiàn)象,處理機(jī)在這段時(shí)間間隔內(nèi)處于空閑狀態(tài)。為了提高處理機(jī)的并行操作能力,提出多線程的概念。在每臺(tái)處理機(jī)上建立多個(gè)運(yùn)行現(xiàn)場(chǎng),這樣每臺(tái)處理機(jī)的有多個(gè)控制線路,為解決處理機(jī)長(zhǎng)時(shí)間等待的問題提供了一種有效的機(jī)制。一個(gè)控制線路就是一個(gè)線程,線程可以用一個(gè)現(xiàn)場(chǎng)表示,現(xiàn)場(chǎng)由程序計(jì)數(shù)器(PC)、寄存器組和所要求的現(xiàn)場(chǎng)狀態(tài)狀態(tài)字組成。1.線程的引入原因(線程為進(jìn)程的一條執(zhí)行軌跡)
進(jìn)程獨(dú)立性的兩個(gè)基本屬性:
資源分配的單位:給每個(gè)進(jìn)程分配一虛擬地址空間,保存進(jìn)程映像,控制一些資源(文件,I/O設(shè)備),有狀態(tài)、優(yōu)先級(jí)、調(diào)度。
調(diào)度單位:進(jìn)程是一個(gè)執(zhí)行軌跡。以上兩個(gè)屬性構(gòu)成進(jìn)程并發(fā)執(zhí)行的基礎(chǔ)。
進(jìn)程兩個(gè)屬性分開的原由:
1)從CPU執(zhí)行所必須的硬件現(xiàn)場(chǎng)來考察,只包含程序計(jì)數(shù)器、程序狀態(tài)字、執(zhí)行堆棧、通用寄存器組等。PCB中的絕大多數(shù)表目與CPU執(zhí)行程序代碼是沒有關(guān)系的。
2)進(jìn)程切換系統(tǒng)開銷較大(數(shù)據(jù)和程序的地址空間)。
3)對(duì)進(jìn)程系統(tǒng)必須完成的操作:創(chuàng)建進(jìn)程;撤消進(jìn)程;進(jìn)程切換;
缺點(diǎn):時(shí)間空間開銷大,限制并發(fā)度的提高。在操作系統(tǒng)中,進(jìn)程的引入提高了計(jì)算機(jī)資源的利用效率。但在進(jìn)一步提高進(jìn)程的并發(fā)性時(shí),人們發(fā)現(xiàn)進(jìn)程切換開銷占的比重越來越大,同時(shí)進(jìn)程間通信的效率也受到限制。線程的引入正是為了簡(jiǎn)化進(jìn)程間的通信,以小的開銷來提高進(jìn)程內(nèi)的并發(fā)程度。
操作系統(tǒng)將進(jìn)程獨(dú)立性的兩個(gè)屬性分別賦予了兩個(gè)不同實(shí)體:擁有資源所有權(quán)的仍稱為進(jìn)程,而調(diào)度的單位稱為線程,或輕量級(jí)進(jìn)程。
由于同一個(gè)進(jìn)程多個(gè)線程共享同一地址空間,帶來了系統(tǒng)時(shí)/空管理的改善。2.線程結(jié)構(gòu)與線程控制塊TCB
執(zhí)行堆棧、程序計(jì)數(shù)器、通用寄存器組、狀態(tài)標(biāo)記線程線程控制塊TCB進(jìn)程地址空間數(shù)據(jù)的修改,其他線程均可見。反映CPU現(xiàn)場(chǎng)信息。
單進(jìn)程多線程單進(jìn)程單線程線程標(biāo)識(shí)線程號(hào)處理機(jī)狀態(tài)信息(現(xiàn)場(chǎng))通用寄存器指令計(jì)數(shù)器程序狀態(tài)字棧指針線程調(diào)度信息線程狀態(tài)線程優(yōu)先數(shù)等待原因調(diào)度算法參數(shù)等圖:線程及線程控制塊TCB控制線程運(yùn)行的。3.線程的特點(diǎn)是進(jìn)程的一個(gè)實(shí)體,可作為系統(tǒng)獨(dú)立調(diào)度和分派的基本單位。不擁有系統(tǒng)資源(只擁有從屬進(jìn)程的全部資源,資源是分配給進(jìn)程)。一個(gè)進(jìn)程中的多個(gè)線程可并發(fā)執(zhí)行。(進(jìn)程可創(chuàng)建線程執(zhí)行同一程序的不同部分)系統(tǒng)開銷小、切換快。(進(jìn)程的多個(gè)線程都在進(jìn)程的地址空間活動(dòng))4.線程和進(jìn)程的關(guān)系單進(jìn)程、單線程單進(jìn)程、多線程多進(jìn)程、一個(gè)進(jìn)程一個(gè)線程多進(jìn)程、一個(gè)進(jìn)程多個(gè)線程用戶棧系統(tǒng)棧PCB數(shù)據(jù)程序單線程進(jìn)程模型寄存器PCB數(shù)據(jù)程序多線程進(jìn)程模型用戶棧系統(tǒng)棧
TCB寄存器用戶棧系統(tǒng)棧
TCB寄存器用戶棧系統(tǒng)棧
TCB寄存器線程1線程2線程3進(jìn)程進(jìn)程非常重要5.引入線程的好處創(chuàng)建一個(gè)新線程花費(fèi)時(shí)間少(結(jié)束亦如此)。兩個(gè)線程的切換花費(fèi)時(shí)間少。(如果機(jī)器設(shè)有“存儲(chǔ)[恢復(fù)]所有寄存器”指令,則整個(gè)切換過程用幾條指令即可完成)。線程之間通信效率要高于進(jìn)程之間的通信效率。進(jìn)程間通信要內(nèi)核介入,而同一進(jìn)程多個(gè)線程共享同一地址空間,所以通信無須內(nèi)核介入。適合多處理機(jī)系統(tǒng)。
6.線程與進(jìn)程的比較
調(diào)度性:線程作為調(diào)度的基本單位,同進(jìn)程中線程切換不引起進(jìn)程切換,當(dāng)不同進(jìn)程的線程切換才引起進(jìn)程切換;進(jìn)程作為擁有資源的基本單位。
并發(fā)性:一個(gè)進(jìn)程間的多個(gè)線程可并發(fā)。
擁有資源:線程僅擁有隸屬進(jìn)程的資源;進(jìn)程是擁有資源的獨(dú)立單位。
系統(tǒng)開銷:進(jìn)程大;線程小。
補(bǔ)充:由于創(chuàng)建或撤銷進(jìn)程時(shí),系統(tǒng)都要為之分配或回收資源,如內(nèi)存空間、I/O設(shè)備等,因此付出的開銷遠(yuǎn)大于創(chuàng)建或撤銷線程時(shí)的開銷。進(jìn)程切換時(shí),涉及當(dāng)前執(zhí)行進(jìn)程CPU環(huán)境的保存及新調(diào)度到進(jìn)程環(huán)境的設(shè)置,而線程切換時(shí)只需保存和設(shè)置少量寄存器的內(nèi)容,開銷很小。此外,由于同一進(jìn)程的多個(gè)線程共享進(jìn)程的地址空間,這些線程之間的同步和通信非常容易,甚至無需操作系統(tǒng)的干預(yù)。
地址空間和其他資源(如打開的文件):進(jìn)程的地址空間之間相互獨(dú)立,同一進(jìn)程的線程間共享進(jìn)程的資源,某進(jìn)程內(nèi)的線程對(duì)于其他進(jìn)程不可見。
通信方面:進(jìn)程間通信需要進(jìn)程同步和互斥手段輔助,以保證數(shù)據(jù)一致性,而線程間可以直接讀/寫進(jìn)程數(shù)據(jù)段(如全局變量)來進(jìn)行通信。
7.多線程OS中的進(jìn)程屬性
(1)作為系統(tǒng)資源分配的單位。
(2)可包括多個(gè)線程。所有線程都只能屬于某一個(gè)特定進(jìn)程。
(3)進(jìn)程不是一個(gè)可執(zhí)行的實(shí)體。例:進(jìn)程處于“執(zhí)行”狀態(tài),即進(jìn)程中的某線程正在執(zhí)行。掛起某個(gè)進(jìn)程,即該進(jìn)程中的所有線程也都將被掛起。
8.線程的屬性
(1)線程是一個(gè)輕型實(shí)體,它不擁有系統(tǒng)資源,但每個(gè)線程都應(yīng)有一個(gè)唯一的標(biāo)識(shí)符和線程控制塊(TCB),線程控制塊中記錄了線程執(zhí)行的寄存器和棧等現(xiàn)場(chǎng)狀態(tài)。
(2)不同的線程可以執(zhí)行相同的程序,即同一個(gè)服務(wù)程序被不同的用戶調(diào)用時(shí),操作系統(tǒng)為它們創(chuàng)建不同的線程。
(3)同一進(jìn)程中的各個(gè)線程共享該進(jìn)程所擁有的資源。
(4)線程是處理機(jī)的獨(dú)立調(diào)度單位,多個(gè)線程可以并發(fā)執(zhí)行的。在單CPU的計(jì)算機(jī)系統(tǒng)中,各線程可交替地占用CPU;在多CPU的計(jì)算機(jī)系統(tǒng)中,各線程可同時(shí)占用不同的CPU,若各個(gè)CPU同時(shí)為一個(gè)進(jìn)程內(nèi)的各線程服務(wù),則可以縮短進(jìn)程的處理時(shí)間。
(5)一個(gè)線程被創(chuàng)建后便開始了它的生命周期,直至終止,線程在生命周期內(nèi)會(huì)進(jìn)行阻塞態(tài)、就緒態(tài)和運(yùn)行態(tài)等各種狀態(tài)變化。9.線程的狀態(tài)
(1)狀態(tài)參數(shù)。用線程標(biāo)識(shí)符和一組狀態(tài)參數(shù)描述。①寄存器狀態(tài),PC;②堆棧,局部變量和返回地址;③線程運(yùn)行狀態(tài),何種運(yùn)行狀態(tài);④優(yōu)先級(jí),執(zhí)行的優(yōu)先程度;⑤線程專有存儲(chǔ)器,保存線程自己的局部變量拷貝;⑥信號(hào)屏蔽,即對(duì)某些信號(hào)加以屏蔽。
(2)線程運(yùn)行狀態(tài)。三種基本狀態(tài):①執(zhí)行狀態(tài);②就緒狀態(tài)狀態(tài);③阻塞狀態(tài),10.線程的創(chuàng)建和終止
多線程OS,啟動(dòng)應(yīng)用程序,僅有一個(gè)線程執(zhí)行(“初始化線程”),之后可創(chuàng)建若干個(gè)線程。
創(chuàng)建:線程創(chuàng)建函數(shù)(或系統(tǒng)調(diào)用);相應(yīng)的參數(shù)。
生命期:有一定;
終止:
1)自愿退出:完成了自己的工作;
2)異常終止:運(yùn)行中出現(xiàn)錯(cuò)誤、被其它線程強(qiáng)行終止;線程中止后并不立即釋放它占有的資源,只有當(dāng)進(jìn)程中的其它線程執(zhí)行了分離函數(shù)后,被終止的線程才與資源分離。已被終止但尚未釋放資源的線程,仍可以被需要它的線程所調(diào)用,恢復(fù)重新運(yùn)行,通過“等待線程終止”的連接命令。例題:1.在支持多線程的系統(tǒng)中,進(jìn)程P創(chuàng)建的若干個(gè)線程不能共享的是(
)。
A.進(jìn)程P的代碼段
B.進(jìn)程P中打開的文件
C.進(jìn)程P的全局變量
D.進(jìn)程P中某線程的棧指針下列關(guān)于進(jìn)程和線程的敘述中,正確的是()。不管系統(tǒng)是否支持線程,進(jìn)程都是資源分配的基本單位線程是資源分配的基本單位,進(jìn)程是調(diào)度的基本單位系統(tǒng)級(jí)線程和用戶級(jí)線程的切換都需要內(nèi)核的支持同一進(jìn)程中的各個(gè)線程擁有各自不同的地址空間下面的敘述中,正確的是()。引入線程后,處理器只能在線程間切換。引入線程后,處理器仍在進(jìn)程間切換。線程的切換,不會(huì)引起進(jìn)程的切換。線程的切換,可能引起進(jìn)程的切換。二、線程的實(shí)現(xiàn)機(jī)制
用戶級(jí)線程內(nèi)核支持線程兩者結(jié)合方法1.內(nèi)核支持線程(KST)
通常的進(jìn)程(系統(tǒng)、用戶):創(chuàng)建、撤消,I/O操作,切換,利用系統(tǒng)調(diào)用進(jìn)入內(nèi)核,在內(nèi)核的支持下實(shí)現(xiàn)的。進(jìn)程需要OS內(nèi)核的支持,與內(nèi)核緊密相關(guān)的。
內(nèi)核支持線程KST(KernelSupportedThreads),也是在內(nèi)核的支持下運(yùn)行的,創(chuàng)建、撤消和切換等也是依靠?jī)?nèi)核,在內(nèi)核空間實(shí)現(xiàn)的。內(nèi)核空間為每一個(gè)內(nèi)核支持線程設(shè)置了一個(gè)線程控制塊,內(nèi)核是根據(jù)該控制塊而感知某線程的存在,并對(duì)其加以控制。內(nèi)核支持線程的優(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)致速度下降。(用戶的線程)
2.用戶級(jí)線程(ULT)僅存在于用戶空間中。
由應(yīng)用程序完成所有線程的管理;創(chuàng)建、撤消、同步與通信。通過線程庫(kù)(用戶空間);一組管理線程的過程;核心不知道線程的存在。線程切換不需要核心態(tài)特權(quán)。調(diào)度是應(yīng)用特定的。
調(diào)度仍是以進(jìn)程為單位進(jìn)行的。
用戶級(jí)線程的優(yōu)點(diǎn)和缺點(diǎn)優(yōu)點(diǎn):線程切換不調(diào)用核心,切換速度快。調(diào)度是應(yīng)用程序特定的:可以選擇最好的算法。ULT可運(yùn)行在任何操作系統(tǒng)上(只需要線程庫(kù);作用于用戶態(tài))。缺點(diǎn):大多數(shù)系統(tǒng)調(diào)用是阻塞的,因此核心阻塞進(jìn)程,故進(jìn)程中所有線程將被阻塞。核心只將處理器分配給進(jìn)程,同一進(jìn)程中的兩個(gè)線程不能同時(shí)運(yùn)行于兩個(gè)處理器上。(多用戶應(yīng)用程序不能利用多處理機(jī)技術(shù))
3.ULT和KST結(jié)合方法線程創(chuàng)建在用戶空間完成。大量線程調(diào)度和同步在用戶空間完成。程序員可以調(diào)整KST的數(shù)量。例子:Solaris三、線程的實(shí)現(xiàn)—何種形式的線程都要直接或間接使用內(nèi)核1.內(nèi)核支持線程的實(shí)現(xiàn)任務(wù)數(shù)據(jù)區(qū)進(jìn)程創(chuàng)建PTDATCB#1
線程ID、優(yōu)先級(jí)、線程運(yùn)行的CPU狀態(tài)等;存在于內(nèi)核空間;線程進(jìn)程創(chuàng)建分配內(nèi)核支持線程的創(chuàng)建、撤消均與進(jìn)程的相類似;內(nèi)核支持線程的調(diào)度和切換與進(jìn)程的調(diào)度和切換十分相似;2.用戶級(jí)線程的實(shí)現(xiàn)用戶級(jí)線程是在用戶空間實(shí)現(xiàn)的。所有的用戶級(jí)線程都具有相同的結(jié)構(gòu),它們都運(yùn)行在一個(gè)中間系統(tǒng)的上面。
實(shí)現(xiàn)的中間系統(tǒng):運(yùn)行時(shí)系統(tǒng);內(nèi)核控制線程。
線程線程線程用戶空間內(nèi)核中間系統(tǒng)1)運(yùn)行時(shí)系統(tǒng)(RuntimeSystem)
所謂“運(yùn)行時(shí)系統(tǒng)”,實(shí)質(zhì)上是用于管理和控制線程的函數(shù)(過程)的集合。用這些函數(shù)使用戶級(jí)線程與內(nèi)核無關(guān)。
包括:創(chuàng)建、撤消、線程同步和通信、調(diào)度函數(shù)等。函數(shù)駐留在用戶空間,用戶級(jí)線程與內(nèi)核之間的接口。線程線程線程用戶空間內(nèi)核中間系統(tǒng)函數(shù)
線程的切換無需進(jìn)入內(nèi)核,切換操作簡(jiǎn)單,切換速度非常快。
2)內(nèi)核控制線程--輕型進(jìn)程LWP(LightWeightProcess)
LWP的數(shù)據(jù)結(jié)構(gòu):標(biāo)識(shí)符、優(yōu)先級(jí)、狀態(tài),棧、局部存儲(chǔ)區(qū)等。
LWP可通過系統(tǒng)調(diào)用來獲得內(nèi)核提供的服務(wù)。當(dāng)一個(gè)用戶級(jí)線程運(yùn)行時(shí),只要將它連接到一個(gè)LWP上,此時(shí)它便具有了內(nèi)核支持線程的所有屬性。圖2-16利用輕型進(jìn)程作為中間系統(tǒng)
只看見LWP線程小結(jié):
1、線程基本概念
(線程是進(jìn)程內(nèi)一個(gè)可調(diào)度的實(shí)體。)
1)線程引入原因?yàn)榱撕?jiǎn)化進(jìn)程間的通信,以小的開銷來提高進(jìn)程內(nèi)的并發(fā)程度。
2)支持線程的OS中,線程是調(diào)度的單位;進(jìn)程是資源分配的單位。
3)線程與進(jìn)程的比較、線程的好處。
2、線程的實(shí)現(xiàn)機(jī)制
1)內(nèi)核支持線程:存于內(nèi)核、創(chuàng)、撤、轉(zhuǎn)換OS控制;調(diào)度以線程為單位;阻塞是在線程一級(jí);實(shí)現(xiàn)方式:創(chuàng)建時(shí)分配TCB;
2)用戶級(jí)線程:存于用戶態(tài);應(yīng)用程序負(fù)責(zé)創(chuàng)、撤、切換;切換速度快;調(diào)度以進(jìn)程為單位;阻塞是進(jìn)程一級(jí)。實(shí)現(xiàn)方式:中間系統(tǒng)運(yùn)行時(shí)系統(tǒng):一組函數(shù)和過程;內(nèi)核控制線程(LWP):輕型進(jìn)程通過系統(tǒng)調(diào)用獲得內(nèi)核服務(wù)。
進(jìn)程通信小結(jié):
進(jìn)程通信是指進(jìn)程之間的信息交換。根據(jù)所交換的信息量的多少分為
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024托管老師合同
- 2024年債權(quán)轉(zhuǎn)讓合同服務(wù)內(nèi)容擴(kuò)展和標(biāo)的
- 2024年個(gè)體餐飲勞動(dòng)合同范本模板
- 2024商品房屋購(gòu)銷合同書范本
- 2024年安防工程升級(jí)改造合同
- 2(2024版)新型環(huán)保材料研究與生產(chǎn)許可合同
- 2024年包工包料裝修合同范本
- 2024年寄售產(chǎn)品合作協(xié)議
- 2024寧波市家具買賣合同
- 2024出境旅游合同簽署范本出境旅游合同簡(jiǎn)單范本
- 幼兒園中班語言活動(dòng)《猜猜我有多愛你》課件
- 卵圓孔未閉和腦卒中課件
- 小學(xué)數(shù)學(xué)西南師大三年級(jí)上冊(cè)四兩位數(shù)除以一位數(shù)的除法解決問題(進(jìn)一法)
- 公司燃?xì)忮仩t技術(shù)規(guī)范書
- 文化館建筑設(shè)計(jì)任務(wù)書
- 《肺功能檢測(cè)》課件
- 鋼渣熱悶工藝規(guī)程及人員崗位職責(zé)
- (中職)數(shù)控編程與操作教程全冊(cè)電子教案
- 初中 初一 語文 寫作《學(xué)會(huì)記事》(第一課時(shí)) 微課課件
- 體育教師招聘技能評(píng)分標(biāo)準(zhǔn)(體育)
- 新媒體背景下的輿情引導(dǎo)和危機(jī)應(yīng)對(duì)專題培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論