




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
2.5進程通信
進程通信:進程間的信息交換。進程之間,需要交換一定數量的信息,以便協調一致共同完成指定的任務。如輸入進程、計算進程、打印進程;進程之間交換的信息量可多可少,多則成百上千個數據,少則僅僅是一個狀態或一個信號。
進程通信方式:
低級通信方式:傳送一個或幾個字節的控制信息。如:鎖機制(Lock(L)、unLock(L)和信號量機制(P(S)、V(S))。
缺點:效率低;通信對用戶不透明(用戶需要管理);
高級通信方式:以較高的效率,交換大批量的數據,隱藏細節。如:消息緩沖機制和信箱機制。
Send/Receive原語(高級通訊原語)一、進程通信的類型(高級通信機制)1.共享存儲器系統1)基于共享數據結構方式:公用數據結構生產者消費者有界緩沖區
缺點:效率低;對程序員不透明;傳送少量數據;OS:提供共享存儲器。程序員:設置緩沖區;負責進程同步;2)基于共享存儲區方式:共享存儲區進程:讀、寫進程申請分區指定分區關鍵字連接本進程讀寫2.消息通信方式進程間的數據交換以消息(message)或報文為單位,程序員利用一組通信命令(原語)來實現通信,可分為直接、間接通信方式。
優點:大量數據傳送;隱藏通訊的實現細節;
3.管道通信方式(Pipe)(Unix系統)也稱共享文件方式,基于文件系統,利用一個打開的共享文件連接兩個相互通信的進程,文件作為緩沖傳輸介質。
字符流方式寫入讀出;先進先出順序。發送進程接收進程
為了協調雙方通信,管道通信必須提供三方面的協調能力:1、互斥2、同步、3、對方是否存在。二、消息傳遞通信的實現方法
系統為進程提供了兩個高級通訊原語Send和Receive。要進行消息傳遞時執行Send,當接收者要接收消息時執行Receive。
1.直接通信方式(通信時不需要第三者)發送進程利用OS所提供的發送命令,直接把消息發送給目標進程。
要求:發送進程和接收進程都以顯式方式提供對方的標識符。通信命令:(原語)Send(Receiver,message):發送一個消息給接收進程;
Receive(Sender,message):接收Sender發來的消息;例:原語Send(P2,m1)表示將消息m1發送給接收進程P2;原語Receive(P1,m1)表示接收由P1發來的消息m1。
形式:
對稱形式:一對一非對稱形式:多對一(顧客/服務員)如:提供打印服務的進程;Receive(id,message);有緩沖(有界,無界),無緩沖;2.消息緩沖隊列通信機制(直接通信)
消息緩沖通信:是一種直接通信方式,一種可直接以較高的效率傳遞較多數據的信息交換方式,被廣泛應用于本地進程之間的通信。
每當發送進程欲發送消息時,便形成一個消息緩沖區,其結構如下:
typedefstructmessagebuffer{
intsender;發送者進程標識符
intsize;消息長度
char*text;消息正文
structmessage_buffer*next指向下一個消息緩沖區的指針
};
消息緩沖區是內存中的一個區域,其中可以存放一條消息。發送進程可以把消息填寫到消息緩沖區中,并把該消息緩沖區插入到接收進程的消息鏈上,以待接收進程進行加工處理。為此,PCB中還應該增加如下的數據項:1)mq
:消息隊列頭指針,初值為空。由于接收進程可能會收到幾個進程發來的消息,故應將所有的消息緩沖區鏈成一個隊列,其隊頭通過在接收進程PCB中設置隊首指針mq來指出。2)mutex:消息隊列互斥信號量,初值為1。消息隊列屬于臨界資源,故在PCB中設置了互斥信號量mutex,每當對消息鏈操作之前和結束操作之后,應在mutex上分別執行wait操作和signal操作。3)sm:消息隊列同步計數信號量(消息隊列資源信號量)。初值為0。當發送進程發來一個消息,在此信號量上執行signal(sm);而當接收進程從消息隊列上欲取走一個消息時,先對信號量執行wait(sm),如果有消息,則從消息鏈中取走mq所指出的第一個消息。
發送進程在發送消息之前,應先在自己的內存空間設置一個發送區,把欲發送的消息正文以及接收進程標識符id和消息長度填入其中,然后用發送原語構造消息并把消息發送出去;
接收進程在接收消息之前,在本進程的內存空間中設置一個接收區,然后用接收原語接收消息。(1)發送原語:send(receiver,a)a為發送區開始地址。
功能:把消息從發送區復制到消息緩沖區,并將它掛到接收進程消息隊列的末尾。如果該接收者正因等待消息而處于阻塞狀態,則喚醒該進程。
voidsend(receiver,a)
{
getbuf(a.size,i);根據a.size(正文大小)申請緩沖區;
i.sender=a.sender;將發送區a中的信息復制到消息緩沖區i中;
i.size=a.size;
copy(i.text,a.text);
i.next=0;
getid(PCBset,receiver.j);獲得接收進程內部標識符;
wait(j.mutex);
封鎖消息隊列;
insert(&j.mq,i);將消息緩沖區(i)插入消息隊列(j);
signal(j.mutex);解鎖消息隊列;解鎖消息隊列
signal(j.sm);
j消息隊列資源信號量加1;
}互斥訪問(2)接收原語:receive(b)b為接收區開始地址查看(j)消息鏈中計數信號量(sm)來獲知有待處理的消息否?若無,則接收進程插入消息鏈的阻塞隊列;若有消息,則把消息鏈上的第一個消息摘下,將消息的內容復制到進程j的接收區b,然后,釋放消息緩沖區。voidreceive(b)
{
j=internalname;j為接收進程內部的標識符;
wait(j.sm);判斷有無待處理的消息;如j.sm=0,則阻塞;否則繼續執行;
wait(j.mutex);
remove(j.mq,i);將消息隊列中第一個消息移出;j消息緩沖隊列的隊首
signal(j.mutex);
b.sender=i.sender;將消息緩沖區i中的信息復制到接收區b;
b.size=i.size;
copy(b.text,i.text);releasebuf(i);
}互斥訪問思考:mutex,sm是什么信號量?小結:接收進程j消息緩沖隊列j的PCB中mqj的PCB中sm表示數量發送進程Size:5Text:helloSender:A發送區拷貝Size:5Text:helloSender:A消息緩沖區i(內存)接收進程Size:5Text:helloSender:A接收區摘下并拷貝鏈接3.間接通信方式(信箱通信)發送進程發消息時不指定接收進程的名字,需要借助于一個中間媒體,即信箱來進行,因此稱之為間接通信方式。1)信箱的數據結構間接通信所利用的信箱是一種數據結構,它由信箱頭和信箱體兩部分組成。其中:信箱頭是對信箱的描述,信箱頭包括如下信息:信箱標識符;信箱大小;已存放的信件數;
等信箱隊列的首指針;(
若發送信件時信箱已滿,則發送進程被置為“等信箱”狀態,直到信箱有空時才被釋放;
等信件隊列的首指針;(若取信件時信箱中無信,則接收進程被置為“等信件”狀態,直到有信件時才被釋放);
信箱體由若干格子組成,每一個格子可以存放一個信件。信箱格子的大小和數量在信箱創建時確定。發送
接收
信箱頭格子1格子2格子3
┅AB發送進程接收進程信箱體2)信箱創建、撤消、消息發送、接收原語信箱的創建和撤消。信箱可以由操作系統創建,也可以由用戶創建,創建者是信箱的擁有者。因此,可以根據創建者的不同將信箱分為私用信箱、公用信箱和共享信箱等類型。(2)消息的發送和接收。
Send(mailbox,message):將一個消息發送到指定信箱;
Receive(mailbox,message):從指定信箱中接收一個消息;3)信箱分類信箱種類創建通信方式實現生命期私用用戶擁有者讀取,其它用戶只能發送。單向通信鏈路用戶結束則消失公用OS可發送可讀取雙向通信鏈路OS運行期始終存在共享進程擁有和共享者可讀取,其它只能發送。雙向進程結束終止4)信箱通信發送和接收對應關系發送接收專用:一對一;不干擾發送接收一對多;廣播方式發送接收多對一;C/S(客戶/服務)發送接收多對多;公用信箱進程通信小結:
1、共享存儲器系統基于共享數據數據結構方式:程序員負責;基于共享存儲區方式:OS負責;
2、消息通信方式—Message單位直接通信方式:指名發送、接收者標識符。
Send、Receiver原語;有緩沖:消息緩沖隊列通信機制;(重點)間接通信方式:中介媒體信箱通信:信箱:信箱頭、信箱體;創建、撤消、發送、接收、分類。
3、管道通信—共享文件方式—Unix系統字符流輸入、輸出。2.6線程一、線程的基本概念
進程的概念和結構是傳統操作系統工作的基礎。但是,隨著計算機體系結構從早期的單處理機結構發展到目前的多處理機結構,在多任務的環境中,為了減少處理機的空轉時間以及處理機調度切換時的時間和空間開銷,提高系統的并行能力,因此產生了更小的控制單位:線程。補充:
多線程的概念首先是在多處理機的并行處理中提出來的。傳統的多處理機由若干臺處理機組成,每臺處理機每次運行單個現場,即每臺處理機有一個有限硬件資源的單一控制線路。在這樣的多處理機系統中,在進行遠程訪問期間會出現等待現象,處理機在這段時間間隔內處于空閑狀態。為了提高處理機的并行操作能力,提出多線程的概念。在每臺處理機上建立多個運行現場,這樣每臺處理機的有多個控制線路,為解決處理機長時間等待的問題提供了一種有效的機制。一個控制線路就是一個線程,線程可以用一個現場表示,現場由程序計數器(PC)、寄存器組和所要求的現場狀態狀態字組成。1.線程的引入原因(線程為進程的一條執行軌跡)
進程獨立性的兩個基本屬性:
資源分配的單位:給每個進程分配一虛擬地址空間,保存進程映像,控制一些資源(文件,I/O設備),有狀態、優先級、調度。
調度單位:進程是一個執行軌跡。以上兩個屬性構成進程并發執行的基礎。
進程兩個屬性分開的原由:
1)從CPU執行所必須的硬件現場來考察,只包含程序計數器、程序狀態字、執行堆棧、通用寄存器組等。PCB中的絕大多數表目與CPU執行程序代碼是沒有關系的。
2)進程切換系統開銷較大(數據和程序的地址空間)。
3)對進程系統必須完成的操作:創建進程;撤消進程;進程切換;
缺點:時間空間開銷大,限制并發度的提高。在操作系統中,進程的引入提高了計算機資源的利用效率。但在進一步提高進程的并發性時,人們發現進程切換開銷占的比重越來越大,同時進程間通信的效率也受到限制。線程的引入正是為了簡化進程間的通信,以小的開銷來提高進程內的并發程度。
操作系統將進程獨立性的兩個屬性分別賦予了兩個不同實體:擁有資源所有權的仍稱為進程,而調度的單位稱為線程,或輕量級進程。
由于同一個進程多個線程共享同一地址空間,帶來了系統時/空管理的改善。2.線程結構與線程控制塊TCB
執行堆棧、程序計數器、通用寄存器組、狀態標記線程線程控制塊TCB進程地址空間數據的修改,其他線程均可見。反映CPU現場信息。
單進程多線程單進程單線程線程標識線程號處理機狀態信息(現場)通用寄存器指令計數器程序狀態字棧指針線程調度信息線程狀態線程優先數等待原因調度算法參數等圖:線程及線程控制塊TCB控制線程運行的。3.線程的特點是進程的一個實體,可作為系統獨立調度和分派的基本單位。不擁有系統資源(只擁有從屬進程的全部資源,資源是分配給進程)。一個進程中的多個線程可并發執行。(進程可創建線程執行同一程序的不同部分)系統開銷小、切換快。(進程的多個線程都在進程的地址空間活動)4.線程和進程的關系單進程、單線程單進程、多線程多進程、一個進程一個線程多進程、一個進程多個線程用戶棧系統棧PCB數據程序單線程進程模型寄存器PCB數據程序多線程進程模型用戶棧系統棧
TCB寄存器用戶棧系統棧
TCB寄存器用戶棧系統棧
TCB寄存器線程1線程2線程3進程進程非常重要5.引入線程的好處創建一個新線程花費時間少(結束亦如此)。兩個線程的切換花費時間少。(如果機器設有“存儲[恢復]所有寄存器”指令,則整個切換過程用幾條指令即可完成)。線程之間通信效率要高于進程之間的通信效率。進程間通信要內核介入,而同一進程多個線程共享同一地址空間,所以通信無須內核介入。適合多處理機系統。
6.線程與進程的比較
調度性:線程作為調度的基本單位,同進程中線程切換不引起進程切換,當不同進程的線程切換才引起進程切換;進程作為擁有資源的基本單位。
并發性:一個進程間的多個線程可并發。
擁有資源:線程僅擁有隸屬進程的資源;進程是擁有資源的獨立單位。
系統開銷:進程大;線程小。
補充:由于創建或撤銷進程時,系統都要為之分配或回收資源,如內存空間、I/O設備等,因此付出的開銷遠大于創建或撤銷線程時的開銷。進程切換時,涉及當前執行進程CPU環境的保存及新調度到進程環境的設置,而線程切換時只需保存和設置少量寄存器的內容,開銷很小。此外,由于同一進程的多個線程共享進程的地址空間,這些線程之間的同步和通信非常容易,甚至無需操作系統的干預。
地址空間和其他資源(如打開的文件):進程的地址空間之間相互獨立,同一進程的線程間共享進程的資源,某進程內的線程對于其他進程不可見。
通信方面:進程間通信需要進程同步和互斥手段輔助,以保證數據一致性,而線程間可以直接讀/寫進程數據段(如全局變量)來進行通信。
7.多線程OS中的進程屬性
(1)作為系統資源分配的單位。
(2)可包括多個線程。所有線程都只能屬于某一個特定進程。
(3)進程不是一個可執行的實體。例:進程處于“執行”狀態,即進程中的某線程正在執行。掛起某個進程,即該進程中的所有線程也都將被掛起。
8.線程的屬性
(1)線程是一個輕型實體,它不擁有系統資源,但每個線程都應有一個唯一的標識符和線程控制塊(TCB),線程控制塊中記錄了線程執行的寄存器和棧等現場狀態。
(2)不同的線程可以執行相同的程序,即同一個服務程序被不同的用戶調用時,操作系統為它們創建不同的線程。
(3)同一進程中的各個線程共享該進程所擁有的資源。
(4)線程是處理機的獨立調度單位,多個線程可以并發執行的。在單CPU的計算機系統中,各線程可交替地占用CPU;在多CPU的計算機系統中,各線程可同時占用不同的CPU,若各個CPU同時為一個進程內的各線程服務,則可以縮短進程的處理時間。
(5)一個線程被創建后便開始了它的生命周期,直至終止,線程在生命周期內會進行阻塞態、就緒態和運行態等各種狀態變化。9.線程的狀態
(1)狀態參數。用線程標識符和一組狀態參數描述。①寄存器狀態,PC;②堆棧,局部變量和返回地址;③線程運行狀態,何種運行狀態;④優先級,執行的優先程度;⑤線程專有存儲器,保存線程自己的局部變量拷貝;⑥信號屏蔽,即對某些信號加以屏蔽。
(2)線程運行狀態。三種基本狀態:①執行狀態;②就緒狀態狀態;③阻塞狀態,10.線程的創建和終止
多線程OS,啟動應用程序,僅有一個線程執行(“初始化線程”),之后可創建若干個線程。
創建:線程創建函數(或系統調用);相應的參數。
生命期:有一定;
終止:
1)自愿退出:完成了自己的工作;
2)異常終止:運行中出現錯誤、被其它線程強行終止;線程中止后并不立即釋放它占有的資源,只有當進程中的其它線程執行了分離函數后,被終止的線程才與資源分離。已被終止但尚未釋放資源的線程,仍可以被需要它的線程所調用,恢復重新運行,通過“等待線程終止”的連接命令。例題:1.在支持多線程的系統中,進程P創建的若干個線程不能共享的是(
)。
A.進程P的代碼段
B.進程P中打開的文件
C.進程P的全局變量
D.進程P中某線程的棧指針下列關于進程和線程的敘述中,正確的是()。不管系統是否支持線程,進程都是資源分配的基本單位線程是資源分配的基本單位,進程是調度的基本單位系統級線程和用戶級線程的切換都需要內核的支持同一進程中的各個線程擁有各自不同的地址空間下面的敘述中,正確的是()。引入線程后,處理器只能在線程間切換。引入線程后,處理器仍在進程間切換。線程的切換,不會引起進程的切換。線程的切換,可能引起進程的切換。二、線程的實現機制
用戶級線程內核支持線程兩者結合方法1.內核支持線程(KST)
通常的進程(系統、用戶):創建、撤消,I/O操作,切換,利用系統調用進入內核,在內核的支持下實現的。進程需要OS內核的支持,與內核緊密相關的。
內核支持線程KST(KernelSupportedThreads),也是在內核的支持下運行的,創建、撤消和切換等也是依靠內核,在內核空間實現的。內核空間為每一個內核支持線程設置了一個線程控制塊,內核是根據該控制塊而感知某線程的存在,并對其加以控制。內核支持線程的優點和缺點
優點:
對多處理器,核心可以同時調度同一進程的多個線程。
阻塞是在線程一級完成。
核心例程是多線程的。
缺點:
在同一進程內的線程切換調用內核,導致速度下降。(用戶的線程)
2.用戶級線程(ULT)僅存在于用戶空間中。
由應用程序完成所有線程的管理;創建、撤消、同步與通信。通過線程庫(用戶空間);一組管理線程的過程;核心不知道線程的存在。線程切換不需要核心態特權。調度是應用特定的。
調度仍是以進程為單位進行的。
用戶級線程的優點和缺點優點:線程切換不調用核心,切換速度快。調度是應用程序特定的:可以選擇最好的算法。ULT可運行在任何操作系統上(只需要線程庫;作用于用戶態)。缺點:大多數系統調用是阻塞的,因此核心阻塞進程,故進程中所有線程將被阻塞。核心只將處理器分配給進程,同一進程中的兩個線程不能同時運行于兩個處理器上。(多用戶應用程序不能利用多處理機技術)
3.ULT和KST結合方法線程創建在用戶空間完成。大量線程調度和同步在用戶空間完成。程序員可以調整KST的數量。例子:Solaris三、線程的實現—何種形式的線程都要直接或間接使用內核1.內核支持線程的實現任務數據區進程創建PTDATCB#1
線程ID、優先級、線程運行的CPU狀態等;存在于內核空間;線程進程創建分配內核支持線程的創建、撤消均與進程的相類似;內核支持線程的調度和切換與進程的調度和切換十分相似;2.用戶級線程的實現用戶級線程是在用戶空間實現的。所有的用戶級線程都具有相同的結構,它們都運行在一個中間系統的上面。
實現的中間系統:運行時系統;內核控制線程。
線程線程線程用戶空間內核中間系統1)運行時系統(RuntimeSystem)
所謂“運行時系統”,實質上是用于管理和控制線程的函數(過程)的集合。用這些函數使用戶級線程與內核無關。
包括:創建、撤消、線程同步和通信、調度函數等。函數駐留在用戶空間,用戶級線程與內核之間的接口。線程線程線程用戶空間內核中間系統函數
線程的切換無需進入內核,切換操作簡單,切換速度非常快。
2)內核控制線程--輕型進程LWP(LightWeightProcess)
LWP的數據結構:標識符、優先級、狀態,棧、局部存儲區等。
LWP可通過系統調用來獲得內核提供的服務。當一個用戶級線程運行時,只要將它連接到一個LWP上,此時它便具有了內核支持線程的所有屬性。圖2-16利用輕型進程作為中間系統
只看見LWP線程小結:
1、線程基本概念
(線程是進程內一個可調度的實體。)
1)線程引入原因為了簡化進程間的通信,以小的開銷來提高進程內的并發程度。
2)支持線程的OS中,線程是調度的單位;進程是資源分配的單位。
3)線程與進程的比較、線程的好處。
2、線程的實現機制
1)內核支持線程:存于內核、創、撤、轉換OS控制;調度以線程為單位;阻塞是在線程一級;實現方式:創建時分配TCB;
2)用戶級線程:存于用戶態;應用程序負責創、撤、切換;切換速度快;調度以進程為單位;阻塞是進程一級。實現方式:中間系統運行時系統:一組函數和過程;內核控制線程(LWP):輕型進程通過系統調用獲得內核服務。
進程通信小結:
進程通信是指進程之間的信息交換。根據所交換的信息量的多少分為
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論