2013秋季操作系統(tǒng)課件-清華版os第3章_第1頁(yè)
2013秋季操作系統(tǒng)課件-清華版os第3章_第2頁(yè)
2013秋季操作系統(tǒng)課件-清華版os第3章_第3頁(yè)
2013秋季操作系統(tǒng)課件-清華版os第3章_第4頁(yè)
2013秋季操作系統(tǒng)課件-清華版os第3章_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余185頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

第第3章進(jìn)程管理進(jìn)程的概這三個(gè)特點(diǎn)是互相聯(lián)系和互相依賴的,它們是互程序的并發(fā)執(zhí)程序的順序執(zhí)RepeatIR←Mpc←ExecuteinstructioninIR)〉UntilCPUhalt這里IR為指令寄存器,pc為程序計(jì)數(shù)器,M順序封閉可再現(xiàn)多道程序系統(tǒng)中程序執(zhí)行環(huán)境的變獨(dú)立隨機(jī)資源共資源共享將導(dǎo)致對(duì)進(jìn)程執(zhí)行速度的制約程序的并發(fā)執(zhí)什么是程序的并發(fā)執(zhí)的;第二種并發(fā)執(zhí)行是在某道程序的幾個(gè)程序段read(a)read(b)P1;P2;...Pn成。1966年Bernstein提出了兩相鄰語(yǔ)句S1,S2可將程序中任一語(yǔ)句Si劃分為兩個(gè)變量的集合R(Si)W(Si)。其R(Si)={a1a2…是語(yǔ)句Si在執(zhí)行期間必須對(duì)其進(jìn)行讀寫(xiě)的變量W(Si)={b1b2…①R(S1)∩②W(S1)∩W(S1)∩W(S2)={∮同時(shí)成立,則語(yǔ)句S1和S2是程序的并發(fā)執(zhí)行所帶來(lái)的影程序的并發(fā)執(zhí)行充分地利用了系統(tǒng)資源,從而提高中語(yǔ)句或指令滿足上述ernten的三個(gè)條件,則產(chǎn)生影響(證明略)ein條件是相當(dāng)?shù)?。從而,如果并發(fā)執(zhí)行的程序段不按照例子說(shuō)明了這一點(diǎn)。圖3.1堆棧的取數(shù)和存數(shù)過(guò)proceduregetaddr(top)localr←(top)top←top-1

top←top+1(top)←blk顯然,如果上例中的getaddr和reladdr程序段進(jìn)行首先,程序段elar塊地址入棧。然而,當(dāng)ear執(zhí)行到top←to語(yǔ)句時(shí)(如圖.1(b)),程序段etr也開(kāi)始執(zhí)行l(wèi)r停在top←to1處等待處理機(jī)。etaddr程序段的執(zhí)行目的是要從對(duì)應(yīng)的堆棧指針tp所指的棧格中取出一個(gè)內(nèi)存數(shù)據(jù)塊地址,顯然,由于lr程序段的執(zhí)行將指針top升高了一格且未放進(jìn)適當(dāng)?shù)臄?shù)據(jù),gear(如圖31c))。另外,如果改變程序段gta和elar的執(zhí)行順序或執(zhí)行速度,又可得到不同的執(zhí)行結(jié)果。這說(shuō)明了如下結(jié)果不再具有封閉性和可再現(xiàn)性,且可能造成程序出現(xiàn)錯(cuò)誤。發(fā)程序的共享和競(jìng)爭(zhēng),從而得到非預(yù)料的或不正的結(jié)果。為了控制和協(xié)調(diào)各程序段執(zhí)行過(guò)程中的進(jìn)程的定進(jìn)程的概念是60年代初期,首先在MITMultics系統(tǒng)和IBM的TSS/360系統(tǒng)中的。從那以來(lái),人進(jìn)程是可以并行執(zhí)行的計(jì)算部分進(jìn)程是一個(gè)獨(dú)立的可以調(diào)度的活動(dòng)(BrinchHansen),等等源的基本單位。這里,程序指一組操作序列,而據(jù)集則是接受程序規(guī)定操作的一組單元的內(nèi)容作業(yè)和進(jìn)程的關(guān)程的描述,是資源分配的基本單位。區(qū)別與關(guān)系進(jìn)程的描到控制進(jìn)程活動(dòng)的目的。由于進(jìn)程的PCB是系統(tǒng)于進(jìn)程的這兩部分內(nèi)容與控制進(jìn)程的執(zhí)行及完成程功能直接有關(guān),因而,在大部分多道操作系統(tǒng)中進(jìn)程控制塊用的現(xiàn)場(chǎng)保護(hù)區(qū)。PCB集中反映一個(gè)進(jìn)程的動(dòng)態(tài)PCB,然后才能根據(jù)PCB中信息對(duì)進(jìn)程實(shí)施一般來(lái)說(shuō),根據(jù)操作系統(tǒng)的要求不同PCB描述信①進(jìn)程名或進(jìn)程標(biāo)識(shí)②用戶名或用戶標(biāo)識(shí)③關(guān)控制信①進(jìn)程當(dāng)前狀進(jìn)程在活動(dòng)期間可分為就緒態(tài)、執(zhí)行態(tài)和等待狀態(tài)進(jìn)程優(yōu)先占有CPU時(shí)間進(jìn)程優(yōu)先級(jí)偏移占據(jù)內(nèi)存時(shí)間,等③程序開(kāi)始地④各種計(jì)時(shí)信給出進(jìn)程占有和利用資源的有關(guān)情況通信信PCB中包含最多的是資源管理信息,包括有關(guān)用內(nèi)存大小及其管理用數(shù)據(jù)結(jié)構(gòu)指針,例如后某些復(fù)雜系統(tǒng)中,還有對(duì)換或覆蓋用的有關(guān)信③共享程序段大小及起始入輸出設(shè)備的設(shè)備號(hào),所要傳送的數(shù)據(jù)長(zhǎng)度、向文件系統(tǒng)的指針及有關(guān)標(biāo)識(shí)等。進(jìn)程可使用CPU現(xiàn)場(chǎng)保護(hù)結(jié)CPU現(xiàn)場(chǎng)(或稱進(jìn)程上下文)。PCB中設(shè)有專門(mén)的CPU現(xiàn)場(chǎng)保護(hù)結(jié)構(gòu),以退出執(zhí)行時(shí)的進(jìn)程總之,進(jìn)程控制塊PCB是系統(tǒng)感知進(jìn)程存在的唯一實(shí)體。通過(guò)對(duì)PCB的操作,系統(tǒng)為有關(guān)進(jìn)程分配都在PCB中。最后,當(dāng)進(jìn)程執(zhí)行結(jié)束后,則通過(guò)釋放PCB來(lái)釋放進(jìn)程所占有的各種資源。由于PCB中包含有較多的信息,因此,一個(gè)PCB表字節(jié))。在有的系統(tǒng)中,為了PCB對(duì)內(nèi)存的進(jìn)程上下述。具體地說(shuō),進(jìn)程上下文包括計(jì)算機(jī)系統(tǒng)中與圖3.2進(jìn)程上下文結(jié)在UNIXSystemⅤ中,進(jìn)程上下文由用戶級(jí)上下文、通用寄存器的值組成。其中PC給出CPU將要執(zhí)行系統(tǒng)級(jí)上下文的靜態(tài)部分包B結(jié)構(gòu)(I系統(tǒng)中的結(jié)構(gòu)被分為o結(jié)構(gòu)和e結(jié)構(gòu)兩部分)、將進(jìn)程虛地址空間 到物理空間用的有關(guān)表格和棧。這里, 棧主用來(lái)裝載進(jìn)中所使用系統(tǒng)調(diào)用的調(diào)用序列。SystemⅤ的進(jìn)程上下文組成如圖3.3。圖3.3UNIXSystem進(jìn)程上下文組進(jìn)程空任一進(jìn)程,都有一個(gè)自己的地址空間,把該空間稱為進(jìn)程空間或虛空間。進(jìn)程空間的大小只與處理機(jī)的位數(shù)有關(guān)。例如,一個(gè)6大小為216,而32位長(zhǎng)處理機(jī)的進(jìn)程空間大小為232圖3.4進(jìn)程空將在第5章管理部分中進(jìn)一步描述進(jìn)程空間進(jìn)程狀態(tài)及其轉(zhuǎn)進(jìn)程狀刻劃了整個(gè)進(jìn)程。系統(tǒng)根據(jù)PCB結(jié)構(gòu)中的狀態(tài)值處于就緒狀態(tài)的進(jìn)程已經(jīng)得到除CPU之外的其他資源,只要由調(diào)度得到處理機(jī),便可立即投入執(zhí)行3.5給出了三個(gè)基本狀態(tài),即就緒狀態(tài)、執(zhí)行與等待狀態(tài)之間的轉(zhuǎn)換關(guān)系件觸發(fā)器才能完成。例如UNIX系統(tǒng)中,從系圖3.5進(jìn)程狀態(tài)轉(zhuǎn)資源共享的目的。一般地,把系統(tǒng)態(tài)下執(zhí)行的某具有特定功能的程序段稱為原語(yǔ)。原語(yǔ)可分為兩統(tǒng)管理所需要的功能和被軟件所調(diào)用。顯然,系統(tǒng)在創(chuàng)建、撤消一個(gè)進(jìn)程以及要改變進(jìn)進(jìn)程創(chuàng)建與撤進(jìn)程創(chuàng)關(guān)系。屬于某個(gè)的一個(gè)進(jìn)程可以繼承其父進(jìn)程所擁有的資源。另外,無(wú)論是哪式創(chuàng)建包括:進(jìn)程名、進(jìn)程優(yōu)先級(jí)P0、進(jìn)程正文段起始地址d0、資源R0等。其實(shí)現(xiàn)過(guò)程如圖3.6。進(jìn)程撤以下幾種情況導(dǎo)致進(jìn)程被撤消該進(jìn)程已完成所要求的功能而正常終止由于某種錯(cuò)誤導(dǎo)致終止祖先進(jìn)程要求撤消某個(gè)子進(jìn)程圖3.6創(chuàng)建原語(yǔ)流它所占用的各種資源和PCB結(jié)構(gòu)本身,以利于資程,若有的話,還需撤消其子孫進(jìn)程的PCB結(jié)構(gòu)撤消原語(yǔ)首先檢查PCB進(jìn)程鏈或進(jìn)程,尋找所PCB結(jié)構(gòu),則撤消原語(yǔ)釋放該進(jìn)程所占有的資源之后,把對(duì)PCB結(jié)構(gòu)從進(jìn)程鏈或進(jìn)程家族中摘下并返回給PCB空隊(duì)列。如果被撤消的進(jìn)當(dāng)前進(jìn)程PCB結(jié)構(gòu)和釋放其資源。如圖3.7。圖3.7撤消原語(yǔ)流進(jìn)程的阻塞與喚塞原語(yǔ)在阻塞一個(gè)進(jìn)程時(shí),由于該進(jìn)程正處于執(zhí)狀態(tài),故應(yīng)先中斷處理機(jī)和保存該進(jìn)程的CPU現(xiàn)場(chǎng)阻塞原語(yǔ)的實(shí)現(xiàn)過(guò)程如圖3.8。圖3.8阻塞原語(yǔ)圖3.9喚醒原資源共享所引起的制臨界 在用匯編語(yǔ)言書(shū)寫(xiě)時(shí),就變成等三條語(yǔ)句,這里A代表累加器。根據(jù)系統(tǒng)的設(shè)計(jì)設(shè)有兩個(gè)計(jì)算進(jìn)程PA,PB共享內(nèi)存MS。其中S放有數(shù)據(jù),也有可能未放有數(shù)據(jù)。系統(tǒng)區(qū)主要是棧S,其中存放那些空數(shù)據(jù)塊的地址(如圖3.10)圖3.10多進(jìn)程共享內(nèi)存棧區(qū)當(dāng)進(jìn)程PA或PB要求空數(shù)據(jù)塊時(shí),從堆棧最頂(top指針?biāo)傅奈恢茫┤〕鏊钄?shù)據(jù)塊。當(dāng)進(jìn)放入堆棧頂部。令getspace為取空數(shù)據(jù)塊過(guò)程,getspacerelease(ad)將有可能完不成所要求的功getspace和release(ad)可進(jìn)一步描述為 beginlocalg←stack[toptop←top-

top←stack[top設(shè)時(shí)刻t0時(shí),top=h0,則getspacerelease(ad)可能首先release(ad)的第一句執(zhí)行t0:top←top+1 接著getspace執(zhí)行,得:t1:g←stack→g=stack[t2:top←top-→再是release(ad)的第二句執(zhí)行,得t3:stack[top]←ad→stack[h0]←ad;塊地址ad重復(fù)放入了h0中怎樣保證上述執(zhí)行結(jié)果的正確性呢個(gè)較為明顯界部分(criticalsection)或臨界區(qū)(critical過(guò)程getspace和release(ad)共同棧S中的數(shù)間接制when〈類名〉do〈臨界區(qū)〉設(shè)類{getspace,release}的類名為sp,則getspacerelease(ad)可重新描述為getspace:whenspdogetspce←stack[toptop←top-1odrelease(ad):whenspdotop←top+1stack[top]←ad什么是互資源被并發(fā)進(jìn)程共般情況為程序段的一組并發(fā)進(jìn)程互斥執(zhí)行時(shí)必須滿足如下準(zhǔn)證。否則,由于某個(gè)并發(fā)進(jìn)程長(zhǎng)期占有臨界區(qū)他進(jìn)程則因?yàn)椴荒苓M(jìn)入臨界區(qū)而進(jìn)入互相等待狀態(tài)互斥的加鎖實(shí)用戶程序執(zhí)行開(kāi)始的隨機(jī)性可知,這是不可能的能有一個(gè)程序段被執(zhí)行,又設(shè)鎖定位key[S]lock(key〈臨界區(qū)〉unlock(key設(shè)key[S]=1時(shí)表示類名為S的臨界區(qū)可unlock(key[S])只用一條語(yǔ)句即可實(shí)現(xiàn)。即:key[S]←1不過(guò),由于lock(key[S])必須滿足key[S]=0時(shí),不允許任何進(jìn)程進(jìn)入臨界區(qū),而key[S]=1一種簡(jiǎn)便的實(shí)現(xiàn)方法是lock(x)=beginlocal以上的多個(gè)進(jìn)程由于key[S]=1而進(jìn)入臨界區(qū)。注意:在系統(tǒng)實(shí)現(xiàn)時(shí)鎖定位key[S]總是設(shè)置在公信號(hào)量和P,V原信號(hào)量問(wèn)題。例如,循環(huán)測(cè)試鎖定位將損耗較多的CPUGotoAB:lock(keyunlock(key[S])GotoB設(shè)進(jìn)程PA已通過(guò)lock(key[S])過(guò)程而進(jìn)入臨界區(qū)。顯然,在進(jìn)程PA執(zhí)行unlock(key[S])過(guò)程之前,key[S]=0且進(jìn)程PB沒(méi)有進(jìn)入臨界區(qū)的機(jī)會(huì)。然而,當(dāng)進(jìn)程PA執(zhí)行完unlock(key[S])過(guò)程之后,lock(key[S])過(guò)程。過(guò)程之后、執(zhí)行GotoA語(yǔ)句之前的瞬間發(fā)生進(jìn)程調(diào)(starvation)的進(jìn)程又因需要測(cè)試而損失一定的CPU時(shí)間。續(xù)到他進(jìn)門(mén)后為止。從這個(gè)例子中,可以得到解加鎖法所帶來(lái)的問(wèn)題的方法。一種最直觀的辦法理相應(yīng)臨界區(qū)的公有資源,它代表可用資源實(shí)體P,V原別是荷蘭語(yǔ)Passeren和Verhoog的頭一個(gè)字母,相原語(yǔ),可以把類名為S的臨界區(qū)描述為Whendo等以后重新執(zhí)試,而是在等待隊(duì)列中等待有其P原語(yǔ)操作的主要?jiǎng)幼魇莝em若sem減1后仍大于或等于零,則進(jìn)程繼續(xù)執(zhí)行P原語(yǔ)操作的功能框圖如圖3.11圖3.11P原語(yǔ)操作功 圖3.12V原語(yǔ)操作功V原語(yǔ)的操作主要?jiǎng)幼魇莝em加若相加結(jié)果大于零,進(jìn)程繼續(xù)執(zhí)行V原語(yǔ)操作的功能框圖如圖3.12關(guān)于P,V原語(yǔ)的實(shí)現(xiàn),有許多方法。這里介紹中斷ifval[sem]<0

中斷ifval[sem]≤0

用P,V原語(yǔ)實(shí)現(xiàn)進(jìn)程互由于信號(hào)量初始1,所以,任一進(jìn)程在執(zhí)行P入臨界區(qū)的話,它也應(yīng)先執(zhí)行語(yǔ)操作,從而使sem的值變?yōu)?1,因此,第二個(gè)進(jìn)程將被阻塞。直到第一個(gè)進(jìn)程執(zhí)行V原語(yǔ)操作之后,sem的值變則sem又恢復(fù)到初始值。用信號(hào)量實(shí)現(xiàn)兩并發(fā)進(jìn)程PA,PB互斥的描述如下設(shè)sem為互斥信號(hào)量,其取值范圍為(1,0,-1)描述::::同步的概進(jìn)程反復(fù)地把每次計(jì)算結(jié)果放入Buf中,而打印進(jìn)程則把計(jì)算進(jìn)程每次放入Buf中的數(shù)據(jù)通過(guò) : localBufBuf 得到計(jì)算結(jié)Buf計(jì)算結(jié) : localPri←Buf Pri≠空打印Buf中的數(shù)據(jù)清除Buf中的數(shù)據(jù) 這里,如果假定進(jìn)程PC和PP對(duì)公用緩沖區(qū)Buf已采取的。CPU時(shí)間的浪費(fèi)主要是由于進(jìn)程PC和PP的執(zhí)wait(消表示進(jìn)程等待合作進(jìn)程發(fā)來(lái)的消息,而signal(消初始化Bufempty=true,Buffull=false描述 計(jì)Buf←計(jì)算結(jié)果BufemptyfalseGotoA Buffull←falseGoto私用信號(hào)上面用wait(消)與signal(消)的方式,(PrivateSemaphvre)。一個(gè)進(jìn)程Pi的私用信Semi是從制約進(jìn)程發(fā)送來(lái)的進(jìn)程Pi的執(zhí)行條件所用P,V原語(yǔ)操作實(shí)現(xiàn)同圖3.13緩沖區(qū)隊(duì)(1)在PA至少送一塊數(shù)據(jù)入一個(gè)緩沖區(qū)之前,PB不可(2PA往緩沖隊(duì)列發(fā)送數(shù)據(jù)時(shí),至少有一個(gè)緩沖區(qū)是(3)由PA發(fā)送的數(shù)據(jù)塊在緩沖隊(duì)列中按先進(jìn)先(FIFO)方式排列描述發(fā)送過(guò)程deposit(data)和接收過(guò)程remove(data)解:由題意可知,進(jìn)程PA調(diào)用的過(guò)程deposit(data)因?yàn)檫^(guò)deposit(data)的執(zhí)行結(jié)果是過(guò)程(1設(shè)Bufempty為進(jìn)程PA的私用信號(hào)量,Buffull為(2令Bufempty的初始值為n(n為緩沖隊(duì)列的緩沖區(qū)個(gè)數(shù)),Buffull的初始值為0;(3描述beginlocalx按FIFO方式選擇一個(gè)空緩沖區(qū)Buf(x)←dataPB:remove(data):BeginlocalxP按FIFO方式選擇一個(gè)裝滿數(shù)據(jù)的緩沖區(qū)data←Buf(x)沖區(qū)。(思考:在該題中需要考慮互斥嗎?為什么把并發(fā)進(jìn)程的同步和互斥問(wèn)題一般化,可以得到一-型的資源,這些資源既可以是像外設(shè)、內(nèi)存及緩沖資源。把系統(tǒng)中使用某一類資源的進(jìn)程稱為該資源的消費(fèi)者,而把釋放同類資源的進(jìn)程稱為該資源的公用一個(gè)緩沖區(qū)的例子中,計(jì)算進(jìn)程把數(shù)據(jù)送入緩沖區(qū),打印進(jìn)程此,進(jìn)程相當(dāng)于數(shù)據(jù)資源的生產(chǎn)者,而進(jìn)程相當(dāng)于消費(fèi)者。進(jìn)程P1,P2,…,Pm和一群消費(fèi)者進(jìn)程2,…,Ck聯(lián)系起來(lái)(如圖3.14所示)圖3.14生產(chǎn)者-消費(fèi)者問(wèn)數(shù),初值為1。從而有在上例中,由于一個(gè)過(guò)程中包含有幾個(gè)公用、私將會(huì)造成進(jìn)程之間的死鎖。關(guān)于死鎖,將在3.8中本節(jié)介紹進(jìn)程間互相傳遞信息的方法和原理。通(communication)意味著在進(jìn)程間傳送數(shù)據(jù)進(jìn)程的通信方在單機(jī)系統(tǒng)中,進(jìn)程間通信可分為4種形式主從式會(huì)話式消息或郵箱機(jī)制共享區(qū)方式主從式通信系統(tǒng)的主要特點(diǎn)是①主進(jìn)程可自由地使用從進(jìn)程的資源或數(shù)據(jù)②從進(jìn)程的動(dòng)作受主進(jìn)程的控制③主進(jìn)程和從進(jìn)程的關(guān)系是固定的用進(jìn)程在使用服務(wù)進(jìn)程所提供的服務(wù)之前,必務(wù)進(jìn)程根據(jù)使用進(jìn)程的要求提供服務(wù),但對(duì)所用進(jìn)程和服務(wù)進(jìn)程在通信時(shí)有固定連接關(guān)系。一個(gè)例子。各用戶進(jìn)程向磁盤(pán)管理進(jìn)程提出使用 (圖3.15)消息或郵箱機(jī)制的特點(diǎn)是要存在空緩沖區(qū)或郵箱,發(fā)送進(jìn)程就可以發(fā)送會(huì)話系統(tǒng)不同,發(fā)送進(jìn)程和接收進(jìn)程之間無(wú)直圖3.15消息的組圖3.16緩沖區(qū)或郵箱通信結(jié)③發(fā)送進(jìn)程和接收進(jìn)程之間存在緩沖區(qū)或郵箱(3.16)用來(lái)存放被傳送消息享數(shù)據(jù)區(qū)(sharedmemory)的操作來(lái)達(dá)到互相通后再用發(fā)送過(guò)程將其發(fā)送出去。接收進(jìn)程則在接消息之前,在自己的內(nèi)存空間內(nèi)設(shè)置相應(yīng)的接收①在發(fā)送進(jìn)程把消息寫(xiě)入緩沖區(qū)和把緩沖區(qū)掛入消息隊(duì)列時(shí),應(yīng)其他進(jìn)程對(duì)該緩沖區(qū)消息隊(duì)列的。否則,將引起消息列的。理,當(dāng)接收進(jìn)程正從消息隊(duì)列中取消息緩沖時(shí),也應(yīng)其他進(jìn)程對(duì)該隊(duì)列的。緩沖區(qū)中無(wú)消息存在時(shí),接收進(jìn)程不能接收到設(shè)公用信號(hào)量mutex為控制對(duì)緩沖區(qū)的互斥信號(hào)量,其初值為1。設(shè)SM為接收進(jìn)程的私用信號(hào)量,表示等待接收的消息個(gè)數(shù),其初值為0。設(shè)發(fā)送進(jìn)程調(diào)用過(guò)程send(m)將消息m送往緩沖區(qū),接收進(jìn)將發(fā)送區(qū)消息送入新申請(qǐng)的消息緩沖區(qū)V(utx)摘下消息隊(duì)列中的消息郵箱通圖3.17郵箱通信結(jié)送進(jìn)程發(fā)送消息時(shí),郵箱中至少要有一個(gè)空格收進(jìn)程接收消息時(shí),郵箱中至少要有一個(gè)消息設(shè)發(fā)送進(jìn)程調(diào)用deposit(m)將消息發(fā)送到郵箱,接收進(jìn)程調(diào)用過(guò)程remove(m)將消息m從郵箱中取信號(hào)量fromnum為發(fā)送進(jìn)程的私用信號(hào)量,信號(hào)量mesnum為接收進(jìn)程的私用信號(hào)量。fromnum的初值為信箱的空格數(shù)n,mesnum的初值0。則beginlocalbeginlocalx進(jìn)程通信的實(shí)例——和控制臺(tái)的通為KCP和DCP,用戶進(jìn)程和控制臺(tái)終端的通信由會(huì)話控制進(jìn)程控制完成。其中控制臺(tái)鍵盤(pán)的輸入放入緩沖隊(duì)列inbuf中, 可從inbuf中取 outbuf中,DCP從outbuf中取出消息送至顯示器,圖3.18和控制臺(tái)通信示(1KCP和DCP的動(dòng)的通信之外,KCP實(shí)際上還在和鍵盤(pán)發(fā)生信。因此,在描述KCP和時(shí),還必須考KCP和鍵盤(pán)的通信設(shè)T-Ready和T-Busy分別為鍵盤(pán)KP和鍵盤(pán)控制KCP的私用信號(hào)量,其初值為0和1。初始化{清除所有inbuf和echobuf}beginlocalxP(T-repeatlocalP(T-Until終端關(guān)設(shè)D-Ready和D-Busy分別為DP和DCP的私用信號(hào)量初始化{清除輸出緩沖outbuf,echo模式置false}ifoutbuf滿

receive(k)/*kP(D-echo模式置echobuf中字符置入顯示器數(shù)據(jù)緩沖顯示器動(dòng)作

打印顯示器數(shù)據(jù)緩沖區(qū)中P(D-V(D-Busy) 顯示器關(guān)這里,假定了一個(gè)消息的長(zhǎng)度總是小于outbuf的長(zhǎng)度(2)和KCP及DCP的接上面已經(jīng)描述了KCP與KP,DCP與DP的同步動(dòng)作作的呢?現(xiàn)在來(lái)看怎樣從inbuf中讀出消息和設(shè)過(guò)程Read(x)把inbuf中的所有字符讀到用戶進(jìn)程數(shù)據(jù)區(qū)x處,過(guò)程Write(y)把用戶進(jìn)程y處的消息寫(xiě)到P(inbuf-Copy(inbufintoV(inbuf-P(outbuf-Copy(outbuffromV(outbuf-這里,i-ful和i-ey分別是和K的私用信號(hào)量,在過(guò)程)和ea)中使用,其初值分別為和1。由于在中,(被用來(lái)將字符一個(gè)個(gè)地送入中,)過(guò)程必須要作一定的改動(dòng),也就是要加入緩沖計(jì)數(shù)功能和把if的長(zhǎng)度看作是固定的。另外,-full和o-ey則是和的私用信號(hào)量,在過(guò)程eeve()和witey)和1。由于oecv(過(guò)程也應(yīng)作相應(yīng)的修改。(3)與用戶進(jìn)程的接設(shè)各用戶進(jìn)程向發(fā)出的提問(wèn),用消息組成隊(duì)列。各用戶進(jìn)程把消息送入時(shí),必互斥操作否則將引起隊(duì)列。因此,設(shè)互斥用信號(hào)量,初值1。另外,只有在用戶進(jìn)程提問(wèn)之后才負(fù)責(zé)向控制臺(tái)轉(zhuǎn)發(fā)提和向用戶進(jìn)轉(zhuǎn)達(dá)控制臺(tái)的指示。因此,還必須為 設(shè)置一私用信號(hào)量ion以計(jì)算用戶進(jìn)程所 問(wèn)題數(shù)目。信號(hào)量ion的初值為。另外,由于各用戶進(jìn)程 發(fā)出回答消息之后 圖 和用戶進(jìn)程接與對(duì)RQ隊(duì)列的操作時(shí)相同,對(duì)SQi隊(duì)列的操作也必和用戶進(jìn)程的接口可描述Pwhenrqdo從RQ中取出modreturn(m)whensqido把a(bǔ)SQi中V(4)的動(dòng)會(huì)話控制進(jìn)程 將消息m的進(jìn)程標(biāo)號(hào)置入k中將x編碼到 結(jié)進(jìn)程通信的實(shí)例——管管道度為size字符的消息送入管道fd[1],接收進(jìn)口fd[0]出size字符的消息置入buf中。這里,圖3.20管道通這里,fd[1]為寫(xiě)入端,fd[0]為讀出端示例1C語(yǔ)言編寫(xiě)一個(gè)程序,建立一個(gè)pipe,同時(shí)序如下:#include〈stdio.h〉{charpipe(fd);/*創(chuàng)建管道{sprintf(buf,″Thisisanexample\n″);}else/*父進(jìn)程返回{read(fd[0],s,30);/*父進(jìn)程讀管道中字符}}例2寫(xiě)一程序,建立一個(gè)管道。同時(shí),父進(jìn)程生圖3.21父進(jìn)程和子進(jìn)程P1,P2通信例子圖3.22例2#include〈stdio.h{charbuf[50],s[50]; {sprintf(buf,″childprocessP1issendingmessages!\n″);printf(″childprocessP1!\n″);exit(0);/*關(guān)閉}else/*從父進(jìn)程返回,執(zhí)行父進(jìn)程{while((p2=fork())==-1);/*創(chuàng)建子進(jìn)程P2,失敗時(shí)循環(huán)if(p2==0)/*從子進(jìn)程P2返回,執(zhí)行{sprintf(buf,″childprocessP2issendingmessages\n″);printf(″childprocessP2!\n″);lockf(fd[1],0,0);/*釋放管道寫(xiě)入端exit(0);/*關(guān)閉}if(r=read(fd[0],s,50)==-printf(″can′treadpipe\n″);elseprintf(″%s\n″,s);printf(″can′treadpipe\n″);elseprintf(″%s\n″,s);}}死鎖的概死鎖的定圖3.22死鎖的概下面以生產(chǎn)者/消費(fèi)者問(wèn)題為例來(lái)進(jìn)一步看看死鎖≤j≤m),直到不再有剩余資源。同時(shí),各Pi又不釋放Rj的前提下要求得到Rk(k≠j,1死鎖的起求的該類資源數(shù)。顯然,由于資源的有限性,不能為所有要求資源的進(jìn)程地提供資源。但是,產(chǎn)生死鎖的必要條不條件。進(jìn)程所獲得的資源在未使用完畢之前,不能被其他進(jìn)程強(qiáng)行,而只能由獲得該資死鎖的排除方資源的請(qǐng)求,從而使得死鎖的必要條件在系統(tǒng)執(zhí)通過(guò)預(yù)防和避免的達(dá)到排除死鎖的目的是一件十分的事。死鎖的檢測(cè)和恢復(fù)則不必花費(fèi)多少在實(shí)際操作系統(tǒng)中大都使用檢測(cè)與恢復(fù)法排除死死鎖預(yù)法是打破資源的互斥和不可這兩個(gè)條件,死鎖問(wèn)題。另法則是打破資源的部分分配這降低了進(jìn)程的并發(fā)性<…<Rm。若進(jìn)程Pi保持了資源Ri,則它只能請(qǐng)比Ri級(jí)別更高的資源Rj(Ri<Rj)。釋放資源死鎖避設(shè)并發(fā)進(jìn)程P1,P2,…,Pn(n≥1)共享不同類型的資源R1,R2,…Rm(m≥1),每一Ri有固定的單元數(shù)目Ci(1≤i≤n)。系統(tǒng)按一定的資源分配算的資源請(qǐng)求和獲得系統(tǒng)空閑資源的狀況=(A1,A2,…,An)是n×m維分配矩=ai(j)是系統(tǒng)分配給進(jìn)程i的資源j被稱為分配向量。B=(B,B,×維釋放矩陣,Bj=(j)是進(jìn)程i釋放的資源j的單元數(shù)。F=(f1,f2,,f)是空閑資源向量。n設(shè)C=(c1,c2,…,cm)為系統(tǒng)能力向量,n有fj =cj

-aii=1

Pi(2),…,Pi(k)有

ωi(r)

F+bi成立,則進(jìn)程P在結(jié)

溫馨提示

  • 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)論