




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第4章并發處理
主要內容:1.
進程的引入2.
進程的概念3.
進程控制4.
進程的相互制約關系5.
進程互斥6.
信號燈和P、V操作7.
進程同步8.
進程通信9.UNIX系統的進程管理第4章并發處理主要內容:6.
信號燈和P、V操作4.1并發活動——進程的引入
4.1.1程序的順序執行
(一)數據、操作對某一有限數據的集合所施行的、目的在于解決某一問題的一組有限的操作的集合,稱為一個計算。(二)順序程序一個程序由若干個程序段組成,而這些程序段的執行必須是順序的,這個程序被稱為順序程序。4.1并發活動——進程的引入4.1.1程序的順序執行(三)順序程序的特點1.順序性:處理機的操作嚴格按照程序所規定的順序執行2.封閉性:程序執行的結果不受外界因素的影響,即一個程序執行時所用的變量、指針值、各資源的狀態不能被外界改變。3.可再現性:程序執行的結果與它的執行速度無關(即與時間無關),只與初始條件有關。(三)順序程序的特點4.1.2程序的并發執行
所謂程序的并發執行是指:若干個程序同時在系統中運行,這些程序的執行在時間上是重迭的,一個程序的執行尚未結束,另一個程序的執行已經開始,即使這種重迭是很小的一部分,那么這兩個程序是并發執行的。
4.1.2程序的并發執行操作系統原理-第4章-并發處理ppt課件程序的并發執行的表示方法:
1.圖示方法
程序的并發執行的表示方法:操作系統原理-第4章-并發處理ppt課件2.語句方法(荷蘭科學家E.W.Dijkstra方法)
S0;
cobeginS1;S2;...;Sn;
coendSn+1;
2.語句方法(荷蘭科學家E.W.Dijkstra方法)4.1.3并發執行實例—譽抄
(一)一個循環程序的譽抄方案
假設f表示輸入序列,g表示輸出序列。main(){while(f不空){input;/*讀入f中的數據;*/output;/*輸出讀入的數據;*/}}卡片輸入機打印機4.1.3并發執行實例—譽抄卡片輸入機打印機(二)
兩個并發程序的譽抄方案假設f表示輸入序列,g表示輸出序列,譽抄過程利用一個緩沖區A。(二)
兩個并發程序的譽抄方案main(){
cobeginwhile(f不空){input;/*讀入f中的數據;*/send;/*將讀入的數據送到A;*/}while(謄抄未完成){receive;/*從A中取的數據;*/output;/*輸出取出的數據;*/}coend}
fAgmain()fAg三個并發程序的譽抄方案main(){if(f不空){get(s,f);while(謄抄未完成){t=s;/*COPY*/cobeginput(t,g);get(s,f);coend}}}
fstg三個并發程序的譽抄方案fstg4.1.4與時間有關的錯誤結論:并發程序如共享某些公共變量時,并發程序執行時會出現與時間有關的錯誤。如
4.1.4與時間有關的錯誤main(){if(f不空){get(s,f);while(謄抄未完成){
/*t=s;*//*COPY*/cobegint=s;/*COPY*/put(t,g);get(s,f);coend}}}main()4.1.5并發程序的特點(一)失去程序的封閉性和再現性(二)程序與計算不再一一對應
(三)程序并發執行的相互制約
4.1.5并發程序的特點4.2進程概念
4.2.1進程的定義到目前為止,進程有多種定義,如:(1)
進程是程序的執行;(2)
并行程序稱為進程;(3)
進程是可以和別的計算并發的計算;(4)
進程是一個數據結構及在其上進行操作的程序。4.2進程概念4.2.1進程的定義這些定義都從不同的側面描述了進程的特征,都一定的道理,但我們認為下面的定義更全面和更準確:進程是一個具有一定獨立功能的程序關于某個數據集合的一次運行活動。此定義包含有如下的含義:這些定義都從不同的側面描述了進程的特征,都一定的道理,但我們(1)
進程是一個動態的概念,而程序是一個靜態的概念;(2)
進程包含了一個數據集合和運行其上的程序;(3)
同一程序運行于若干不同的數據集合上時,它將屬于若干個不同的進程,或者說,兩個不同的進程可包含相同的程序;(4)
系統分配資源是以進程為單位的,所以只有進程才可能在不同的時刻處于幾種不同的狀態,即等待、就緒、運行。(5)
從微觀上看,進程是輪換地占有處理機而運行的,從宏觀上看,進程是并發地運行的。(1)進程是一個動態的概念,而程序是一個靜態的概念;進程和程序是即有聯系又有區別的兩個概念,它們的區別和關系如下:(1)程序是指令的有序集合,其本身沒有任何運行的含義,它是一個靜態概念。而進程是程序在處理機上的一次執行過程,它是一動態概念。程序可以作為一種軟件資料長期保存,而進程是有一定生命周期的,它能夠動態地產生和消亡。即進程可由“創新”而產生,由調度而執行,因得不到資源而暫停,以致最后由“撤消”而消亡。進程和程序是即有聯系又有區別的兩個概念,它們的區別和關系如下(2)進程是一個能獨立運行的單位,能與其它進程并行地活動。(3)進程是競爭計算機系統有限資源的基本單位,也是進行處理機調度的基本單位。(4)同一程序同時運行于若干不同的數據集合上,它將屬于若干個不同的進程。或者說,若干個不同的進程可以包含相同的程序。這句話的意思是:用同一程序對不同的數據先后或同時加以處理,就對應與好幾個進程。例如,系統具有一個輸入子程序,當它輸入不同的作業時就形成了輸入進程I1、I2、I3……In。(2)進程是一個能獨立運行的單位,能與其它進程并行地活動。進程的構成進程=PCB+程序+數據進程的構成4.2.2進程的類型1.系統進程2.用戶進程3.系統進程與用戶進程的區別:(1)
系統進程被分配一個初始的資源集合,這些資源可以獨占,也可以最高優先權資格優先使用。用戶進程通過系統服務請求的手段競爭系統資源。(2)
系統進程可以進行顯示的、直接的I/O操作。用戶進程不進行直接的I/O操作。(3)系統進程在管態下活動。用戶進程在目態下活動。
4.2.2進程的類型4.2.3進程的狀態(一)進程的基本狀態
(1)就緒狀態:存在于處理機調度隊列中的那些進程,它們已經準備就緒,一旦得到CPU就立即可以運行,這些進程所處的狀態為就緒狀態。(2)運行狀態:當進程由調度/分派模塊分派后,得到中央處理機控制權,它的程序正在運行,該進程所處的狀態為運行狀態。(3)
等待狀態:若一進程正在等待著某一事件發生(如等待輸入輸出操作的完成)而暫時停止執行,這時,即使給它CPU時間,它也無法執行,則稱該進程處于等待狀態。又可稱為阻塞狀態或掛起狀態。
4.2.3進程的狀態(二)進程狀態變遷圖在進程狀態變遷圖中,以結點表示進程的狀態,以箭頭表示狀態的變化。
請求可以滿足開始時間片到進程調度請求無法滿足完成等待就緒執行圖4.8進程狀態變遷圖(二)進程狀態變遷圖請求可以滿足時間片到請求無法滿足等待就緒(三)引起進程狀態轉換的4原因(1)CPU調度(低級調度):CPU調度按某種原則從就緒隊列中調度一個進程到CPU上運行,該進程就從就緒狀態變為運行狀態;與此同時,原運行進程從運行狀態變為就緒狀態。因此,這兩種狀態變化是同時發生的。(2)進程在運行過程中需要等待某一事件,例如,等待分配某一資源,等待I/O操作完成等。一個進程在需要等待某一事件時主動退出CPU,并使自己處于阻塞狀態,引起狀態變化。(三)引起進程狀態轉換的4原因(3)如果進程所等待的事件發生了變化,例如,一次I/O完成了,于是進程便被解除阻塞狀態,變為就緒狀態。(4)一個具體的進程在任何一個指定的時刻必須而且只能處于一種狀態。(3)如果進程所等待的事件發生了變化,例如,一次I/O完成了(四)進程狀態轉換的說明(1)
進程之間的狀態轉換并非都是可逆的進程既不能從等待變為運行,也不能從就緒變為等待。(2)進程之間的狀態轉換并非都是主動的,在很多情況下都是“它動的”事實上,只有運行到等待的轉換是進程的主動行為(主動調用調度管理程序),其它都是它動的,例如,從執行到就緒,通常是時鐘中斷引起的,從等待到就緒,是一個進程把另一個進程喚醒。
(四)進程狀態轉換的說明4.2.4進程的描述-----進程控制塊進程控制塊(processcontrolblock,PCB)是進程的重要組成部分,是操作系統能“感知”進程存在的唯一標志,它和進程是一一對應的,操作系統正是通過管理PCB來管理進程的。為了描述一個進程和其它進程相聯系的數據塊,稱為進程控制塊pcb(processcontrolblock)或稱為進程描述器(processdescriptor)。包含下面的內容:4.2.4進程的描述-----進程控制塊(1)
進程標識符name(2)
進程當前狀態status(3)
當前隊列指針next(4)
總鏈指針all-q–next(5)
進程開始地址start-addr(6)
進程優先級priority(7)
CPU現場保護區cpustatus(8)
通信信息communication-information(9)
家族聯系process-family(10)
占用資源清單own-resource(1)
進程標識符name4.3進程控制
4.3.1進程控制的概念進程控制的職責是對系統中的全部進程實施有效的管理,它是處理機管理的一部分,當系統允許多進程并發執行是,為了實現共享、協調并發進程的關系,處理機管理機就提供對進程實行有效的功能。用于進程控制的原語有:創建原語、撤消原語、阻塞原語、喚醒原語等4.3進程控制4.3.1進程控制的概念原語
一般,我們把系統態下執行的某些具有特定功能的程序段成為原語,原語可是機器指令級的擴充,其特點是執行期間不允許中斷、它是一個不可分割的基本單位。它們都在系統態下執行,且都是為了完成某個系統管理所需要的功能和被高層軟件調用。原語一般,我們把系統態下執行的某些具有特定功能的程序4.3.2進程創建進程創建的方式有兩種:(a)由系統程序模塊統一創建。例如在批處理系統中,由操作系統的作業調度程序為用戶進程創建相應的進程以完成用戶作業所要求的功能。(b)由父進程創建。例如在UNIX操作系統中,父進程創建子進程以完成并行工作。
4.3.2進程創建create(name,priority,start_add){在總鏈隊列上查找有無同名的進程;if(有同名的進程)return(錯誤碼);從pcb資源池申請一個空閑的pcb結構;if(無空pcb結構)return(錯誤碼);用入口參數設置pcb內容;置進程為“就緒”狀態;將新進程的pcb插入就緒隊列;將新進程的pcb插入總鏈隊列;return(新進程的pid);}create(name,priority,start_add4.3.3進程撤消進程撤消的原因:1)
該進程已完成所要求的功能而正常終止。2)
由于某種錯誤導致非正常終止。4.3.3進程撤消Kill(){由運行指針得到當前進程的pid;釋放本進程所占資源給父進程;將該進程從總鏈隊列中摘除;釋放該進程的pcb;轉進程調度程序;}Kill()4.3.4進程等待(阻塞)阻塞原語在一個進程期待某一事件發生但發生條件尚不具備時,被該進程自己調用來阻塞自己。阻塞原語在阻塞一個進程時,由于該進程正處于執行狀態,故應先中斷處理機和保存該進程的處理機現場,然后被阻塞進程置阻塞狀態后插入等待隊列中,再轉進程調度程序選擇新的就緒進程投入運行。
4.3.4進程等待(阻塞)susp(chan)//*入口參數chan,進程等待的原因*//{保護現行進程的CPU現場到pcb結構中;置進程為“等待”狀態;將該進程的pcb插入到等待chan的等待隊列中;轉進程調度;}susp(chan)4.3.5進程喚醒進程喚醒的兩種方法1)
由系統進程喚醒系統統一控制事件的發生并將“事件發生”這一消息通知等待進程。2)
由事件發生進程喚醒4.3.5進程喚醒wakeup(chan)/*輸入:chan等待的事件(阻塞原因)
輸出:無*/{找到該等待chan的隊列指針;for(等待該事件的進程){將進程移出此等待隊列;置進程為“就緒”狀態;將進程pcb入就緒隊列;}}wakeup(chan)4.3.6進程延遲
delay(seconds)/*seconds為所需延遲秒數*/{保護調用進程的CUP現場;clock_ticks=secondsX(clock_rate);/*需延遲的機內時間,clock_rate為時鐘速率*/封鎖延遲隊列;以clock_ticks值查找延遲隊列;找到合適位置插入;/*延遲隊列按延遲時間升序排隊*/解除延遲隊列;置進程為延遲狀態;轉進程調度;}4.3.6進程延遲4.4進程的相互制約關系
資源共享是當代計算機系統的一個重要特征。而資源共享導致進程之間存在相互制約關系。
4.4進程的相互制約關系資源共享是當代計算機系統的一資源共享的方式(兩種)1.由系統進行統一分配凡需要使用共享資源的進程,先向系統申請,然后由系統根據資源情況,按一定的策略進行分配。如,進程對處理機的共享,靠操作系統的進程調度程序來協調;內存的共享,靠操作系統的內存管理程序來協調。
資源共享的方式(兩種)2.由程序自行使用系統中的某些資源無需系統分配,而由進程自行使用,如數據集、變量、隊列等。共享這些資源時,靠操作系統提供的同步機構來協調
2.由程序自行使用進程合作進程合作時,必定會出現數據的共享,如消息的傳遞等。
進程合作4.4.2進程互斥與同步同步:所謂進程同步就是對于進程操作的時間順序所加的某種限制。也可以說進程同步是進程間共同完成一項任務是直接發生相互作用的關系,也就是說,這些具有伙伴關系的進程在執行時間次序上必須遵循確定的規律。4.4.2進程互斥與同步同步:互斥:在操作系統中,當某一進程正在訪問某一存儲區域時,就不允許其它進程來讀出或者修改存儲區的內容,否則就會發生后果無法估計的錯誤。我們把進程之間的這種相互制約關系稱為互斥。也可以說,進程的互斥是因為對同一物理資源的競爭而產生的相互制約關系。
互斥:同步與互斥的特點比較
同步與互斥的特點比較臨界資源和臨界區我們把一次只允許一個進程使用的資源稱為臨界資源,而把在每個進程中訪問臨界資源的程序段稱為臨界區。要進入臨界區的若干個進程必須滿足如下關系:(1)
一次只允許一個進程進入臨界區。(2)任何時候,處于臨界區的進程不得多于一個。(3)進入臨界區的進程要在有限的時間內退出。(4)如果不能進入自己的臨界區,則應讓出處理機資源。
臨界資源和臨界區4.5.同步機構4.5.1鎖和上鎖、開鎖操作對應于每一共享數據塊或設備都要有一個單獨的鎖位。按慣例,常用鎖位w值為“0”表示資源可用,而用“1”表示資源已經被占用。這樣,進程使用某一共享資源之前就必須完成下列動作(即關鎖操作):(1)考察鎖位的值(是0還是1);(2)如果原來的值為0,將鎖位置1(表示占用資源);(3)如果原來的值為1(即資源已被占用),則返回第一步再考察。當前進程使用完資源后,它將鎖位置成“0”,稱為開鎖操作。
4.5.同步機構局限性:只要有一個進程由于執行關鎖操作而進入臨界區,則其它進程在檢查鎖狀態時都將反復執行關鎖操作,從而導致處理機繁忙。
現在一般采用硬件指令來解決互斥進入臨界區問題。
局限性:只要有一個進程由于執行關鎖操作而進入臨界區,則其它進lock(w){while(w==1){保護現行進程的CPU現場;現行進程入等W的隊列;將該進程登記為“等待”狀態;轉到進程調度;}w=1;/*上鎖*/}unlock(w){if(等W的隊列不空){
移出等W的隊列的首元素;將該進程入就緒隊列;將該進程登記為“就緒”狀態;}w=0;/*開鎖*/}lock(w)unlock(w)4.5.2信號燈和P、V操作1.信號燈的概念P、V操作是荷蘭科學家E.W.Dijkstra在1965年提出的一種解決同步、互斥問題的更通用的方法,并在THE操作系統中得以實現。P是荷蘭語發信號的開頭字母,V是等待的開頭字母。信號燈是一個確定的二元組(s,q),s為信號燈的值,是整型變量;q是指向PCB的隊列。4.5.2信號燈和P、V操作1.信號燈的概念信號量的值s與相應資源的使用狀態有關。(1)當它的值>0時,它表示可用資源的數量;(2)當它的值<0時,其絕對值表示等待使用該資源的進程個數,即在該信號量隊列上排隊的PCB的個數。(3)當它的值=0時,無可用資源,同時也無等待使用該資源的進程信號量的一般數據結構及PCB隊列如圖
數值(-3)指針PCB1PCB2PCB3信號量的值s與相應資源的使用狀態有關。數值(-3)PCB1信號燈的值只能通過p、v操作來改變。其可能的取值范圍是,負數值、零、正數值。信號燈的是操作系統中實現進程見同步和通信的一種常用工具。
信號燈的值只能通過p、v操作來改變。其可能的取值范圍是,負數2.p、v操作
設信號量為S,對S的P操作記為P(S),對它的V操作記為V(S)。P、V操作的含義是:
P(S)操作順序執行下述動作:1)
S=S-12)
S>=0說明當前進程q有資源可執行;
3)S<0說明無資源,則當前進程掛起或封鎖,將該進程插入排隊到該信號量等待隊列的隊尾,并放棄處理機,進行等待(直到其它進程在S上執行V操作,把資源釋放出來為止)。
2.p、v操作設信號量為S,對S的P操作記為P(S)V(S)操作順序執行下述動作:1)S=S+1;2)如果S>0,則該進程繼續運行;3)
如果S<=0,則釋放信號隊列上的第一個PCB(即信號量指針所指向的PCB)所對應的進程(把阻塞態改為就緒態),執行V操作的進程繼續運行。V(S)操作順序執行下述動作:4.6進程互斥與同步的實現4.6.1用上鎖原語和開鎖原語實現進程互斥
上鎖原語進入臨界區csa開鎖原語上鎖原語進入臨界區csb開鎖原語4.6進程互斥與同步的實現上鎖原語進入臨界區csa開鎖原語main(){intw=0;cobeginppa();ppb();coend}
ppa(){……lock(w);csa;/*臨界區*/unlock(w);……}
ppb(){……lock(w);csa;/*臨界區*/unlock(w);……}main()ppb()4.6.2用信號燈實現進程互斥
main(){intmutex=1;/*互斥作用*/cobeginpa();pb();coend}pa(){……;p(mutex);
csa;/*臨界段*/v(mutex);
……;}pb(){……;p(mutex);
csb;/*臨界段*/v(mutex);
……;
}4.6.2用信號燈實現進程互斥main()pb4.6.3進程同步的實現
同步的概念所謂同步,就是并發進程在一些關鍵點上可能需要互相等待與互通消息,這種相互制約的等待與互通消息稱為進程同步。
4.6.3進程同步的實現同步的概念同步的例子SPOOLing系統中的輸入功能可以由兩個進程A和B完成,進程A負責從讀卡機上把卡片上的信息讀到一個緩沖區中,進程B負責把該緩沖區中的信息進行加工并寫到外存輸入井中。要實現兩者的協同工作,兩個進程必須滿足如下的制約關系:同步的例子SPOOLing系統中的輸入功能可以由兩個進程A只有當緩沖區的內容取空時,進程A才能向其中寫入新信息;只有當緩沖區寫滿時,進程B才能從中取出內容作進一步加工和轉送工作。可見,在緩沖區內容區空時,進程B不應該繼續運行,需要等待進程A向其中送入新的信息;反之,當緩沖區中的信息尚未取走時,進程A應等待,防止把原有的信息沖掉,造成丟失信息的結果。進程A和進程B就是一種同步關系。只有當緩沖區的內容取空時,進程A才能向其中寫入新信息;只有當用信號燈實現進程同步信號燈可以解決進程的同步問題。一般同步問題可以分為兩類:一類是保證一組合作進程按邏輯需要所確定的執行次序;另一類是保證共享緩沖區(或共享數據)的合作進程的同步。
用信號燈實現進程同步main(){ints1=0;/*表示有無化驗單*/ ints2=0;/*表示有無化驗結果*/cobeginlabora();diagnosis();coend}
labora(){while(化驗工作未完成){p(s1);/*詢問有無化驗單,若無則等*/
化驗工作;
v(s2);/*送出化驗結果*/}}diagnosis(){while(看病工作未完成){
看病;
v(s1);/*送出化驗單*/p(s2);/*等化驗結果*/diagnosis;/*診斷*/}}main()化驗工作;(一)合作進程的執行次序main(){intsb=0;/*表示Pb進程能否開始執行*/intsc=0;/*表示Pc進程能否開始執行*/cobeginpa();
pb();
pc();
coend}pa(){……;v(sb);v(sc);}pb(){p(sb);
……;}pc(){p(sc);
……;}sfpbpcpa(一)合作進程的執行次序main()pa()sfpb(二)
共享緩沖區的合作進程的同步
main(){intsa=0;/*表示buf中有無信息*/intsb=1;/*表示buf中有無空位置*/cobegincp();iop();coend}cp(){while(計算未完成){
得到一個計算結果;
p(sb);將數送到緩沖區中;
v(sa);
}}iop(){while(打印工作未完成);
{p(sa);
從緩沖區中取一數;
v(sb);
從打印機上輸出;}
}cpiopbuf(二)共享緩沖區的合作進程的同步main()p(s4.6.4生產者-消費者問題
(producer-consumerproblem)生產者--消費者問題表述如下:有n個生產者和m個消費者,連接在一個有k個單位緩沖區的有界緩沖上,故又叫有界緩沖問題。其中,pi和cj都是并發進程,只要緩沖區未滿,生產者pi生產的產品就可投入緩沖區;類似地,只要緩沖區不空,消費者進程cj就可從緩沖區取走并消耗產品。4.6.4生產者-消費者問題
(producer-consu可以用程序把生產者-消費者問題的算法描述如下:p1p2…pnc1c2…cmK個可以用程序把生產者-消費者問題的算法描述如下:p1c1K個main(){intfull=0;/*滿緩沖區的數目*/intempty=n;/*空緩沖區的數目*/intmutex=1;/*互斥作用*/cobeginproducer();consumer();coend}producer(){while(生產未完成){
……;
生產一個產品;
p(empty);
p(mutex);送一個產品到有界緩沖區中;
v(mutex)v(full);
}}consumer(){while(還要繼續消費);
{p(full);p(mutex);從有界緩沖區中取產品;
v(mutex);
v(empty);
消費一個產品;
……;
}
}main()p(empty);哲學家吃通心面問題下面再來討論使用信號量和P、V操作解決操作系統經典的五個哲學家吃通心面問題(Dijkstra,1965)。有五個哲學家圍坐在一圓桌旁,桌子中央有一盤通心面,每人面前有一只空盤子,每兩人之間放一把叉子。每個哲學家思考、饑餓、然后,欲吃通心面。為了吃面,每個哲學家必須獲得兩把叉子,且每人只能直接從自己左邊或右邊去取叉子。哲學家吃通心面問題下面再來討論使用信號量和P、V操作解決操五個哲學家吃通心面問題五個哲學家吃通心面問題在這道經典題目中,每一把叉子都是必須互斥使用的,因此,應為每把叉子設置一個互斥信號量Si(i=0,1,2,3,4),初值均為1。當一個哲學家吃通心面之前必須獲得自己左邊和右邊的兩把叉子,即執行兩個P操作,吃完通心面后必須放下叉子,即執行兩個V操作。程序如下:在這道經典題目中,每一把叉子都是必須互斥使用的,因此,應為每main(){intfork[0...4]={1,1,1,1,1,1};cobeginp1;p2;p3;p4;p5;coend}processPi/*i=0,1,2,3,4{while(){
思考;P(fork[i]);P(fork[i+1]mod5);
吃通心面;V(fork[i]);V(fork[i+1]mod5);}}main()processPi/*i=0,1,2,3,4上述解法中,如果五個哲學家先執行P(fork[i]),再執行P(fork[i+1]mod5)的話,就有可能出現每個哲學家舉起左邊一把叉子,卻又在永遠等待相鄰哲學家手中的叉子的情況。有若干種辦法可避免這類死鎖:(1)至多允許四個哲學家同時吃。(2)奇數號先取左手邊的叉子,然后再取右手邊的叉子;偶數號先取右手邊的叉子,然后,再取左手邊的叉子。(3)每個哲學家取到手邊的兩把叉子才吃,否則,一把叉子也不取。上述解法中,如果五個哲學家先執行P(fork[i]),再執行讀者與寫者問題
(reader-writerproblem)讀者與寫者問題(Courtois,1971)也是一個經典的并發程序設計問題。有兩組并發進程:讀者和寫者,共享一個文件F,要求:(1)允許多個讀者可同時對文件執行讀操作;(2)只允許一個寫者往文件中寫信息;(3)任一寫者在完成寫操作之前不允許其他讀者或寫者工作;(4)寫者執行寫操作前,應讓已有的寫者和讀者全部退出。讀者與寫者問題
(reader-writerproblemReader_i(){P(mutex);rc=rc+1;ifrc=1thenP(W);
V(mutex);
讀文件;
P(mutex);rc=rc-1;ifrc=0thenV(W);V(mutex);}Writer_j(){P(W);寫文件;V(W);}其中:i=1,2,…,n;j=1,2,…,m;Reader_i()Writer_j()其中:main(){intW=1,mutex=1;intrc=0;/*讀進程計數*/cobeginReader_i;Writer_j;coend}main()4.7進程通信
4.7.1進程通信的概念
并發進程之間的交互必須滿足兩個基本要求:同步和通信。進程競爭資源時要實施互斥,互斥是一種特殊的同步,實質上需要解決好進程同步問題,進程同步是一種進程通信,通過修改信號量,進程之間可建立起聯系,相互協調運行和協同工作。但是信號量與PV操作只能傳遞信號,沒有傳遞數據的能力。
4.7進程通信4.7.1進程通信的概念有些情況下進程之間交換的信息量雖很少,例如,僅僅交換某個狀態信息,但很多情況下進程之間需要交換大批數據,例如,傳送一批信息或整個文件,這可以通過一種新的通信機制來完成,進程之間互相交換信息的工作稱之為進程通信IPC(InterProcessCommunication)。有些情況下進程之間交換的信息量雖很少,例如,僅僅交換某個狀態進程通信是指進程之間可直接以較高的效率傳達較多數據的信息交換方式。這種方式中采用的是通信機構,如消息發送和接收、郵箱結構等,在進程通信時往往以消息形式傳遞信息。消息是指進程之間相互傳送的賴以發生交互作用的有結構的數據。操作系統原理-第4章-并發處理ppt課件進程間通信的方式很多,大致分為四類:1、信號(signal)通信機制;2、信號量及其原語操作(PV、讀寫鎖、管程)控制的共享存儲區(sharedmemory)通信機制;3、管道(pipeline)提供的共享文件(sharedfile)通信機制;4、信箱和發信/收信原語的消息傳遞(messagepassing)通信機制。進程間通信的方式很多,大致分為四類:其中前兩種通信方式由于交換的信息量少且效率低下,故稱為低級通信機制,相應地可把發信號/收信號及PV之類操作稱為低級通信原語,僅適用于集中式操作系統。消息傳遞機制屬于高級通信機制,共享文件通信機制是消息傳遞機制的變種,這兩種通信機制,既適用于集中式操作系統,又適用于分布式操作系統。其中前兩種通信方式由于交換的信息量少且效率低下,故稱為低級通信號通信機制信號(signal)機制又稱軟中斷,是一種進程之間進行通信的簡單通信機制,通過發送一個指定信號來通知進程某個異常事件發生,并進行適當處理。進程運行時不時地檢查有無軟中斷信號到達,如果有,則中斷原來正在執行的程序,轉向該信號的處理程序對該事件進行處理,處理結束后便可返回原程序的斷點執行。信號通信機制信號(signal)機制又稱軟中斷,是一種進程之一般地可以分成OS標準信號和用戶進程自定義信號,這種機制類似硬件中斷,不分優先級,簡單有效,但不能傳送數據。信號不但能從內核發給一個進程,也能由一個進程發給同組的另一個進程或多個進程。一般地可以分成OS標準信號和用戶進程自定義信號,這種機制類舉例:當系統正在運行一個耗時的前臺程序,如若已發現有錯誤,并斷定該程序要失敗,為了節省時間,用戶可以按軟中斷鍵(一般為ctrl+alt+del)停止程序的執行,這一過程中就用到了信號(signal)。系統具體的操作為:響應鍵盤輸入的中斷處理程序向發來中斷信號的終端進程發一個信號,進程收到信號后,完成相關處理,然后執行終止。舉例:當系統正在運行一個耗時的前臺程序,如若已發現有錯誤,并共享文件通信機制管道(pipeline)是連接讀寫進程的一個特殊文件,允許進程按先進先出方式傳送數據,也能使進程同步執行操作。如圖所示,發送進程視管道文件為輸出文件,以字符流形式把大量數據送入管道;接收進程將管道文件視為輸入文件,從管道中接收數據,所以,也叫管道通信。由于方便有效,能在進程間作大量信息的通信,目前已被引入到許多操作系統中。共享文件通信機制管道和消息隊列的主要區別在于:管道中的消息是無界的,它存于外存;消息隊列是位于內存。共享文件ProcessA寫ProcessB
讀管道和消息隊列的主要區別在于:管道中的消息是無界的,它存于外4.7.2消息緩沖通信消息傳遞方式分為直接通信方式和間接通訊方式兩種,而直接通訊方式的消息緩沖為基本的進程通訊方式。發送進程直接將消息掛在接收進程的消息緩沖隊列上,接收進程從消息緩沖隊列中得到消息。基本的有發送(send)消息和讀取(re
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年護士執業資格考試題及答案
- 內蒙古自治區烏蘭察布市集寧區第二中學2024-2025學年高一下學期4月月考 數學試題(含解析)
- 本溪初二語文考試題目及答案
- 招生直播測試題及答案
- 網絡管理軟件應用分析試題及答案
- 計算機三級軟件測試在公共政策評估中的作用試題及答案
- 軟考網絡工程師常見考題預測試題及答案
- 西方政治考試的難點與突破口試題及答案
- 如何規劃信息系統項目管理師的復習時間試題及答案
- 公共政策在生態保護中的重要性試題及答案
- 2025年生態環境保護知識測試題及答案
- 道路監控系統培訓課件
- 2025年湖北省新高考信息卷(三)物理試題及答題
- 2025-2030年力控玩具項目投資價值分析報告
- 基于學校區域文化優勢背景下的小學水墨畫教學研究
- 設備欠款協議書范本
- 機柜租賃合同協議
- 2025年2月22日四川省公務員面試真題及答案解析(行政執法崗)
- 造價項目時效管理制度
- 腹腔鏡手術術后腹脹護理
- 活動策劃服務投標方案(技術方案)
評論
0/150
提交評論