操作系統(tǒng)zxj2進(jìn)程管理課件_第1頁(yè)
操作系統(tǒng)zxj2進(jìn)程管理課件_第2頁(yè)
操作系統(tǒng)zxj2進(jìn)程管理課件_第3頁(yè)
操作系統(tǒng)zxj2進(jìn)程管理課件_第4頁(yè)
操作系統(tǒng)zxj2進(jìn)程管理課件_第5頁(yè)
已閱讀5頁(yè),還剩132頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第二章 進(jìn)程管理2.1.1 程序的順序執(zhí)行及特征一、程序執(zhí)行有固定的時(shí)序。二、特征:順序性:處理機(jī)的操作必須嚴(yán)格按照程序所規(guī)定的順序執(zhí)行封閉性:程序一旦開(kāi)始執(zhí)行,其計(jì)算結(jié)果不受外界影響可再現(xiàn)性:只要初始條件相同,一個(gè)程序多次重復(fù)執(zhí)行,將得到相同的結(jié)果。2.1進(jìn)程的基本概念I(lǐng)1C1P1I2C2P22.1.2前趨圖定義有向無(wú)循環(huán)圖(DAG):描述進(jìn)程間執(zhí)行的前后關(guān)系表示方式:(1)p1-p2(2)-=(p1,p2)| p1 必須在p2開(kāi)始前完成節(jié)點(diǎn)表示:一條語(yǔ)句,一個(gè)程序段,一進(jìn)程。 P1P2P3P42.1.3 程序的并發(fā)執(zhí)行一、多個(gè)程序的并發(fā)執(zhí)行(可能性分析)I1I2I3I4C1C2C3C4P1

2、P2P3P4t程序的并發(fā)執(zhí)行(2)二、特征間斷性:程序之間相互制約的關(guān)系,將導(dǎo)致程序具有間斷性失去封閉性:主要由共享資源引起不可再現(xiàn)性:設(shè)N的初值為n。舉例:有2個(gè)循環(huán)程序A和B,它們共享一個(gè)變量N,程序A每執(zhí)行一次時(shí),都要做N:=N+1; B則每次要執(zhí)行Print(N), 然后再做N:=0. 若程序A,B以不同的速度運(yùn)行有以下三種不同的結(jié)果程序的并發(fā)執(zhí)行(3)N:=N+1在print(N)和N:=0之前,則N值分別為n+1,n+1,0.N:=N+1在print(N)和N:=0之后,則N值分別為n,0,1.N:=N+1在print(N)和N:=0之間,則N值分別為n,n+1,0. 2.1.4進(jìn)

3、程的特征和狀態(tài)1. 進(jìn)程的特征和定義一、定義:程序在并發(fā)環(huán)境下的一次執(zhí)行過(guò)程1.結(jié)構(gòu)特征進(jìn)程:由程序段、數(shù)據(jù)段及進(jìn)程控制塊三部分構(gòu)成,總稱(chēng)“進(jìn)程映像”。2.動(dòng)態(tài)性由“創(chuàng)建”而產(chǎn)生,由“調(diào)度”而執(zhí)行;由得不到資源而阻塞;由撤消而消亡。(而程序是靜態(tài)的)。2.1.4進(jìn)程的特征和狀態(tài)(2)3.并發(fā)性只有建立了進(jìn)程,才能并發(fā)執(zhí)行。4.獨(dú)立性。獨(dú)立運(yùn)行,獨(dú)立獲得資源。5.異步性:(間斷性)進(jìn)程與程序區(qū)別程序是靜態(tài)的,進(jìn)程是動(dòng)態(tài)的;進(jìn)程更能真實(shí)地描述并發(fā),而程序不能;一個(gè)程序可對(duì)應(yīng)多個(gè)進(jìn)程;進(jìn)程有生命周期,有誕生有消亡,短暫的;而程序是相對(duì)長(zhǎng)久的;程序可作為軟件資源長(zhǎng)期保存,進(jìn)程只是一次執(zhí)行過(guò)程,是暫時(shí)的

4、;進(jìn)程是系統(tǒng)分配調(diào)度的獨(dú)立單位,能與其他進(jìn)程并發(fā)執(zhí)行;進(jìn)程具有創(chuàng)建其他進(jìn)程的功能,而程序沒(méi)有。2.1.4進(jìn)程的特征和狀態(tài)(3)2. 進(jìn)程的三種基本狀態(tài)就緒狀態(tài):執(zhí)行狀態(tài)阻塞狀態(tài)就緒阻塞執(zhí)行時(shí)間片完進(jìn)程調(diào)度I/O請(qǐng)求I/O完成圖25 進(jìn)程的三種基本狀態(tài)及其轉(zhuǎn)換2.1.4進(jìn)程的特征和狀態(tài)(4)3. 掛起狀態(tài)(被換出內(nèi)存的狀態(tài))引入原因終端用戶(hù)請(qǐng)求父進(jìn)程請(qǐng)求負(fù)荷調(diào)節(jié)需要(實(shí)時(shí)系統(tǒng))操作系統(tǒng)需要進(jìn)程狀態(tài)的轉(zhuǎn)換(圖2-6)活動(dòng)就緒 靜止就緒活動(dòng)阻塞 靜止阻塞靜止就緒 活動(dòng)就緒靜止阻塞 活動(dòng)阻塞圖26 具有掛起狀態(tài)的進(jìn)程狀態(tài)圖執(zhí)行活動(dòng)就緒靜止就緒活動(dòng)阻塞靜止阻塞激活掛起激活掛起釋放釋放掛起請(qǐng)求I/O思考題

5、1如果系統(tǒng)中有N個(gè)進(jìn)程,運(yùn)行的進(jìn)程最多幾個(gè),最少幾個(gè);就緒進(jìn)程最多幾個(gè)最少幾個(gè);阻塞進(jìn)程最多幾個(gè),最少幾個(gè)?2. 有沒(méi)有這樣的狀態(tài)轉(zhuǎn)換,為什么? (1) 阻塞運(yùn)行; (2) 就緒阻塞實(shí)驗(yàn)寫(xiě)一個(gè)程序描述進(jìn)程狀態(tài)遷移過(guò)程。要求:提供導(dǎo)致進(jìn)程狀態(tài)變化的調(diào)用接口,包括創(chuàng)建、刪除、調(diào)度、阻塞、時(shí)間到、掛起、激活等。實(shí)現(xiàn)進(jìn)程列表顯示的接口。注:這里設(shè)計(jì)的進(jìn)程是一個(gè)假設(shè)的對(duì)象實(shí)體,是由程序自己創(chuàng)建和刪除,不是系統(tǒng)維護(hù)的進(jìn)程。2.1.5進(jìn)程控制塊1.進(jìn)程控制塊的作用是進(jìn)程存在的唯一標(biāo)志;PCB(process control block)常駐內(nèi)存2.進(jìn)程控制塊中的信息標(biāo)識(shí)、處理機(jī)狀態(tài),進(jìn)程調(diào)度信息,進(jìn)程控制信

6、息pid進(jìn)程狀態(tài)現(xiàn)場(chǎng)優(yōu)先級(jí)阻塞原因程序地址同步機(jī)制資源清單鏈接指針2.1.5進(jìn)程控制塊(2)3.PCB的組織鏈接索引執(zhí)行指針就緒隊(duì)列指針阻塞隊(duì)列指針空閑隊(duì)列指針PCB14PCB23PCB30PCB48PCB5PCB67PCB79PCB80PCB91等待隊(duì)列示例struct wait_queue struct task_struct * task;struct wait_queue * next;PCBPCBPCB2.1.5進(jìn)程控制塊(3)3.PCB的組織索引(p34圖2-8)PCB1PCB2PCB3PCB4PCB5PCB6PCB7執(zhí)行指針就緒表指針阻塞表指針補(bǔ)充PCB和進(jìn)程的代碼數(shù)據(jù)放在一起嗎

7、?系統(tǒng)態(tài)和用戶(hù)態(tài)系統(tǒng)空間和用戶(hù)空間系統(tǒng)調(diào)用和普通調(diào)用的區(qū)別?系統(tǒng)調(diào)用會(huì)引起從用戶(hù)態(tài)進(jìn)入核心態(tài)進(jìn)程-進(jìn)程控制處理機(jī)執(zhí)行狀態(tài)系統(tǒng)態(tài)用戶(hù)態(tài)進(jìn)程控制機(jī)構(gòu)內(nèi)核:中斷處理,時(shí)鐘管理,進(jìn)程管理,存儲(chǔ)器管理,設(shè)備管理等。原語(yǔ)(primitive)由若干條指令構(gòu)成的“原子操作(atomic operation)”過(guò)程,作為一個(gè)整體而不可分割要么全都完成,要么全都不做。許多系統(tǒng)調(diào)用就是原語(yǔ)。2.2 進(jìn)程控制2.2.1 進(jìn)程的創(chuàng)建一、進(jìn)程圖:描述了進(jìn)程的家族關(guān)系:(P34 圖2-9)子進(jìn)程可繼承父的資源,撤消時(shí)應(yīng)歸還給父進(jìn)程,父的撤消會(huì)撤消全部子進(jìn)程。根ABCGFED祖先二、引起創(chuàng)建進(jìn)程的事件:1.用戶(hù)登錄:為終端

8、用戶(hù)建立一進(jìn)程2.作業(yè)調(diào)度:(不是進(jìn)程調(diào)度)為被調(diào)度的作業(yè)建立進(jìn)程3.提供服務(wù):如要打印時(shí)建立打印進(jìn)程4.應(yīng)用請(qǐng)求:由應(yīng)用程序建立多個(gè)進(jìn)程2.2.1 進(jìn)程的創(chuàng)建(2)三、進(jìn)程的創(chuàng)建:(creat原語(yǔ))1.申請(qǐng)空白PCB(一個(gè)系統(tǒng)的PCB是有限的)2.為新進(jìn)程分配資源(不同于一般的分配,PCB-LIST在一個(gè)特殊區(qū)域)3.初始化PCB4.將新進(jìn)程插入就緒隊(duì)列。一個(gè)典型的進(jìn)程創(chuàng)建原語(yǔ)Create (s0,m0,pi) p=Get_New_PCB(); /分配新的PCB pid=Get_New_PID(); /分配進(jìn)程的PID pID=pid; /設(shè)置進(jìn)程的PID p-CPU_State=s0; /

9、CPU的狀態(tài) p -Memory=m0; /內(nèi)存 p -Priority=pi; /優(yōu)先級(jí) p -Status.Type=Ready; /進(jìn)程狀態(tài) p -Status.List=RL; /進(jìn)程隊(duì)列 Insert(RL,p); /將進(jìn)程p插入就緒隊(duì)列 Scheduler(); /調(diào)度程序 2.2.2 進(jìn)程的終止一、引起進(jìn)程終止的事件1.正常結(jié)束:進(jìn)程運(yùn)行完成而推出2.異常結(jié)束:進(jìn)程因異常而強(qiáng)行結(jié)束越界錯(cuò)誤;保護(hù)錯(cuò);非法指令;特權(quán)指令錯(cuò);運(yùn)行超時(shí);等待超時(shí);算術(shù)運(yùn)算錯(cuò);I/O故障3.外界干預(yù):a.系統(tǒng)員kill進(jìn)程;b.父進(jìn)程終止;c.父進(jìn)程請(qǐng)求。2.2.2 進(jìn)程的終止(2)二、進(jìn)程的終止過(guò)程(終

10、止進(jìn)程的實(shí)質(zhì)就是回收PCB)(1)檢查進(jìn)程狀態(tài);(2)執(zhí)行態(tài)中止,且置調(diào)度標(biāo)志為真。(3)有無(wú)子孫需終止。(4)歸還資源給其父進(jìn)程或系統(tǒng)。(5)從PCB隊(duì)列中移出PCB.(并回收PCB)進(jìn)程-進(jìn)程控制一個(gè)典型進(jìn)程終止原語(yǔ)如下:Destroy ( pid )p=Get_PCB(pid); /獲取進(jìn)程控制塊 Kill_Tree(p); /刪除整個(gè)進(jìn)程樹(shù) Scheduler(); /調(diào)度器2.2.3 進(jìn)程的阻塞與喚醒一、引起進(jìn)程阻塞和喚醒的事件1.請(qǐng)求系統(tǒng)服務(wù)而得不到滿(mǎn)足時(shí),如問(wèn)系統(tǒng)請(qǐng)求打印。2.啟動(dòng)某種操作而需同步時(shí):如該操作和請(qǐng)求該操作的進(jìn)程需同步運(yùn)行(即非異步操作)。3.新數(shù)據(jù)尚未到達(dá):如進(jìn)程

11、A寫(xiě),進(jìn)程B讀,則A未寫(xiě),完B不能讀。4.無(wú)新工作可做。2.2.3 進(jìn)程的阻塞與喚醒(2)二、進(jìn)程阻塞過(guò)程:是進(jìn)程自身的一種主動(dòng)行為a.調(diào)block原語(yǔ)b.停止執(zhí)行,修改PCB入阻塞隊(duì)列(一個(gè)或多個(gè)),并轉(zhuǎn)調(diào)度。三、喚醒過(guò)程其它相關(guān)進(jìn)程完成。a.wakeup原語(yǔ)b.修改PCB,入就緒隊(duì)列可見(jiàn),有block原語(yǔ),在其它進(jìn)程中就應(yīng)有wakeup原語(yǔ)。Block( ) /獲取當(dāng)前進(jìn)程的進(jìn)程控制塊 p=Get_PCB(); /保存當(dāng)前進(jìn)程的狀態(tài) s=p-Status.Type; cpu=p-Processor_ID; /處理機(jī)狀態(tài) /保存處理機(jī)現(xiàn)場(chǎng) p-CPU_State=Interrupt(cpu)

12、; /將進(jìn)程的狀態(tài)改為阻塞 p-Status.Type=Blocked; Insert(BL,p); /將進(jìn)程插入等待隊(duì)列 Scheduler();阻塞原語(yǔ)的實(shí)現(xiàn)過(guò)程Wakeup( pid ) /獲取進(jìn)程控制P=Get_PCB(pid); /從阻塞隊(duì)列中移出進(jìn)程pRemove(p-Status.List,p);/進(jìn)程的狀態(tài)改為就p-Status.Type=Ready; /將進(jìn)程插入到就緒隊(duì)列Insert (RL,p); /調(diào)度程序Scheduler ();喚醒原語(yǔ)的執(zhí)行過(guò)程如下:2.2.4 進(jìn)程的掛起與激活 一、進(jìn)程的掛起過(guò)程由進(jìn)程自己或其父進(jìn)程調(diào)suspend原語(yǔ)完成,將該進(jìn)程PCB移到指定

13、區(qū)域,注意狀態(tài)的改變,有可能要重新調(diào)度。二、進(jìn)程的激活過(guò)程。active原語(yǔ)(如在外存,調(diào)入內(nèi)存,改變狀態(tài),根據(jù)情況看是否調(diào)度,如搶先或非搶先)。阻塞、喚醒一般由OS實(shí)現(xiàn),而掛起與激活可由用戶(hù)干預(yù)。進(jìn)程-進(jìn)程控制實(shí)例研究:Linux和Windows系統(tǒng)創(chuàng)建進(jìn)程Linux系統(tǒng)中進(jìn)程創(chuàng)建fork 在Linux系統(tǒng)中,用戶(hù)或系統(tǒng)可以使用系統(tǒng)調(diào)用fork來(lái)創(chuàng)建一個(gè)新的進(jìn)程。fork的函數(shù)原形為: pid_t fork()當(dāng)一個(gè)進(jìn)程調(diào)用fork創(chuàng)建一個(gè)子進(jìn)程后,父進(jìn)程和子進(jìn)程都在自己獨(dú)立的地址空間內(nèi)執(zhí)行。它們之間不共享任何地址空間,但是父子進(jìn)程具有相同的程序代碼、數(shù)據(jù)和堆棧段, 因此,為了區(qū)別運(yùn)行中的父

14、子進(jìn)程,fork系統(tǒng)調(diào)用向父子進(jìn)程返回不同的值。它向子進(jìn)程返回0,而向父進(jìn)程返回子進(jìn)程的PID。.Beforefork()After.forkfork執(zhí)行前一個(gè)控制流進(jìn)入內(nèi)核fork模塊。Beforefork()After。Beforefork()Afterforkfork執(zhí)行后調(diào)用后,從fork返回兩個(gè)控制流父進(jìn)程子進(jìn)程/* - The file create.c introduces the use of fork. -*/ #include main() int pid; printf(“Before: my pid is %d .n”,getpid(); pid=fork(); /cr

15、eate new process if (pid = -1) /出錯(cuò)處理 perror(“Can not fork process!”); /error else if (pid =0) /子進(jìn)程代碼 printf(“I am the child. My pid is %d .n”, getpid();else /父進(jìn)程代碼 printf(“I am the parent. My child is %d .n”,pid); 進(jìn)程-進(jìn)程控制Windows系統(tǒng)中進(jìn)程的創(chuàng)建CreateProcess 在windows系統(tǒng),一個(gè)進(jìn)程可以調(diào)用win32 API的CreateProcess函數(shù)來(lái)創(chuàng)建一個(gè)新

16、的進(jìn)程及其主線(xiàn)程,以執(zhí)行指定的任務(wù)。在利用CreateProcess建立進(jìn)程時(shí),操作系統(tǒng)要為新進(jìn)程分配新的地址空間和資源,建立新的主線(xiàn)程。一旦新進(jìn)程建立,父進(jìn)程仍然使用原來(lái)的地址空間繼續(xù)執(zhí)行,而新進(jìn)程則在新的地址空間執(zhí)行一個(gè)新的程序。CreateProcess含有10個(gè)參數(shù)來(lái)指定建立進(jìn)程的方式,具體參數(shù)的含義可參考相關(guān)的Win32 API手冊(cè)。 #include #include #include STARTUPINFO startInfo; PROCESS_INFORMATION processInfo; strcpy(lpCommandLine,“c:WINNTSYSTEM32NOTEPA

17、D.EXE temp.txt”);ZeroMemory(&startupInfo,sizeof(startInfo);startInfo.cb=sizeof(startInfo);if (! CreateProcess(NULL,lpCommandLine,NULL,NULL,FALSE, HIGH_PRIORTY_CLASS CREATE_NEW_CONSOLE, NULL, NULL,&startInfo, &processInfo) fprintf(stderr,”CreateProcess failed!”); ExitProcess(1);CloseHandle(&processIn

18、fo.hThread);2.3進(jìn)程同步同步:并發(fā)執(zhí)行的諸進(jìn)程之間能有效地共享資源和相互合作,從而使程序的執(zhí)行具有可再現(xiàn)性。2.3.1 進(jìn)程同步的基本概念1.兩種形式的制約關(guān)系資源共享關(guān)系:(進(jìn)程間接制約)需互斥地訪(fǎng)問(wèn)臨界資源。相互合作關(guān)系:(進(jìn)程直接制約)2. 臨界資源:(一次僅允許一個(gè)進(jìn)程訪(fǎng)問(wèn)的資源)引起不可再現(xiàn)性是因?yàn)榕R界資源沒(méi)有互斥訪(fǎng)問(wèn)。進(jìn)程的同步進(jìn)程同步舉例:公共汽車(chē)中的司機(jī)和售票員司機(jī) P1 售票員 P2 while (true) while (true) 關(guān)門(mén); 啟動(dòng)車(chē)輛; 正常運(yùn)行; 售票; 到站停車(chē); 開(kāi)門(mén); 進(jìn)程的同步是指系統(tǒng)中多個(gè)進(jìn)程中發(fā)生的事件存在某種時(shí)序關(guān)系,需要相互合

19、作,共同完成一項(xiàng)任務(wù)。具體說(shuō),一個(gè)進(jìn)程運(yùn)行到某一點(diǎn)時(shí)要求另一伙伴進(jìn)程為它提供消息,在未獲得消息之前,該進(jìn)程處于等待狀態(tài),獲得消息后被喚醒進(jìn)入就緒態(tài)。進(jìn)程的互斥例如:系統(tǒng)中只有一臺(tái)打印機(jī),進(jìn)程p1,p2都需要使用打印機(jī)。臨界資源(Critical Resource)一次只能被一個(gè)進(jìn)程使用形式:硬件,軟件:變量、數(shù)據(jù)、隊(duì)列等當(dāng)臨界資源由一個(gè)進(jìn)程占用后,其它進(jìn)程如果要使用它,必須等待占用進(jìn)程使用完畢并把它釋放后,才能由另一個(gè)進(jìn)程使用。多個(gè)進(jìn)程在共享臨界資源時(shí)的這種制約關(guān)系稱(chēng)為進(jìn)程的互斥。生產(chǎn)者消費(fèi)者問(wèn)題Var n, integer;Type item=;var buffer:array0,1,n-1

20、 of item;in, out: 0,1, , n-1;counter: 0,1,n;生產(chǎn)者消費(fèi)者問(wèn)題producer: repeat produce an item in nextp; while counter=n do no-op;bufferin:=nextp;in:=(in+1)mod n;counter:=counter+1;until false;consumer: repeatwhile counter=0 do no-op;nextc:=bufferout;out:=(out+1) mod n;counter:=counter-1;consumer the item in

21、nextc;until false;生產(chǎn)者消費(fèi)者問(wèn)題(2)設(shè)counter的初值為5register1:=counter; register2:=counter;register1 :=register1+1; register2:=register2-1;counter :=register1; counter :=register2;register1:=counter; (register1:=5)register1 :=register1+1; (register1:=6)register2:=counter; (register2:=5)register2 :=register2-1

22、; (register2:=4)counter :=register1;(counter:=6)counter :=register2; (counter:=4)定義:進(jìn)程訪(fǎng)問(wèn)臨界資源的那段代碼。由于臨界區(qū)的出現(xiàn),需要對(duì)進(jìn)入臨界區(qū)的進(jìn)程加以管理。管理方法為互斥和同步在操作系統(tǒng)中,當(dāng)某一進(jìn)程正在訪(fǎng)問(wèn)某一存儲(chǔ)區(qū)域時(shí),就不允許其他進(jìn)程來(lái)讀出或者修改存儲(chǔ)區(qū)的內(nèi)容,否則,就會(huì)發(fā)生后果無(wú)法估計(jì)的錯(cuò)誤。進(jìn)程間的這種相互制約關(guān)系稱(chēng)為互斥。3. 臨界區(qū)臨界區(qū)的調(diào)度原則一次至多允許一個(gè)進(jìn)程進(jìn)入臨界區(qū)內(nèi)一個(gè)進(jìn)程不能不限地停留在臨界區(qū)內(nèi)一個(gè)進(jìn)程不能無(wú)限地等待進(jìn)入臨界區(qū) 有空讓進(jìn) 無(wú)空等待 擇一而入 算法可行訪(fǎng)問(wèn)臨界資

23、源的描述:進(jìn)入?yún)^(qū):檢查有無(wú)進(jìn)程進(jìn)入臨界區(qū):退出區(qū):將訪(fǎng)問(wèn)標(biāo)志復(fù)位RepeatEntry sectionCritical sectionExit sectionUntil false使用LOCK和UNLOCK原語(yǔ)系統(tǒng)為每一個(gè)臨界資源設(shè)置一把鎖,當(dāng)一個(gè)進(jìn)程欲進(jìn)入臨界區(qū)時(shí),首先關(guān)鎖,推出臨界區(qū)時(shí),把鎖打開(kāi)。Lock原語(yǔ):Lock(W) begin L:if W=1 then goto L else W:=1; end;UNLOCK原語(yǔ):UNlock(W) begin W:=0; end用變量W代表某種資源的狀態(tài),w稱(chēng)為鎖,鎖位值 為0;表示資源可用,而用1表示資源已被占用。進(jìn)程同步和互斥的區(qū)別互斥的

24、各個(gè)進(jìn)程在各自單獨(dú)執(zhí)行時(shí)都可以得到正確的運(yùn)行結(jié)果,但是當(dāng)它們?cè)谂R界區(qū)內(nèi)交叉執(zhí)行時(shí)就可能出現(xiàn)問(wèn)題。而同步的各個(gè)進(jìn)程,如果各自單獨(dú)執(zhí)行將不會(huì)完成作業(yè)的特定任務(wù),只要當(dāng)它們互相配合、共同協(xié)調(diào)推進(jìn)時(shí)才能得到正確的運(yùn)行結(jié)果?;コ獾倪M(jìn)程只要求它們不能同時(shí)進(jìn)入臨界區(qū),而至于哪個(gè)進(jìn)程先進(jìn)入則不會(huì)產(chǎn)生運(yùn)行的錯(cuò)誤。但同步的進(jìn)程的協(xié)調(diào)關(guān)系是建立在它們之間執(zhí)行時(shí)序的基礎(chǔ)上,所以,各個(gè)進(jìn)程必須按照嚴(yán)格的先后次序執(zhí)行。一般情況下,互斥的進(jìn)程并不知道對(duì)方的存在,而同步的進(jìn)程不僅知道其它進(jìn)程的存在,還要通過(guò)與其它進(jìn)程的通信來(lái)達(dá)到相互的協(xié)調(diào)。進(jìn)程互斥的軟件方法通過(guò)平等協(xié)商方式實(shí)現(xiàn)進(jìn)程互斥的最初方法是軟件方法 其基本思路是在進(jìn)入

25、區(qū)檢查和設(shè)置一些標(biāo)志,如果已有進(jìn)程在臨界區(qū),則在進(jìn)入?yún)^(qū)通過(guò)循環(huán)檢查進(jìn)行等待;在退出區(qū)修改標(biāo)志 其中的主要問(wèn)題是設(shè)置什么標(biāo)志和如何檢查標(biāo)志軟件解法的缺點(diǎn): 1. 忙等待 2. 實(shí)現(xiàn)過(guò)于復(fù)雜 3. 需要高的編程技巧進(jìn)程互斥的硬件方法 “測(cè)試并設(shè)置”指令“交換”指令“開(kāi)關(guān)中斷”指令進(jìn)入臨界區(qū)前執(zhí)行: 執(zhí)行“關(guān)中斷”指令離開(kāi)臨界區(qū)后執(zhí)行: 執(zhí)行“開(kāi)中斷”指令能夠?qū)崿F(xiàn)進(jìn)程互斥,但不能滿(mǎn)足“讓權(quán)等待”,造成處理機(jī)資源浪費(fèi)4.同步機(jī)制應(yīng)遵循的準(zhǔn)則 1.空閑讓進(jìn)2.忙則等待3.有限等待:應(yīng)保證為有限等待,不會(huì)產(chǎn)生死等。4.讓權(quán)等待:不能進(jìn)入臨界區(qū)的執(zhí)行進(jìn)程應(yīng)放棄CPU執(zhí)行權(quán)。2.3.2 信號(hào)量機(jī)制1 整型信號(hào)

26、量是一個(gè)整型量,通過(guò)2個(gè)原子操作wait(s)和signal(s)來(lái)訪(fǎng)問(wèn)。Wait(s): while s= 0 do no-ops:=s-1;Signal(s):s:=s+1;2 記錄型信號(hào)量 由于整型機(jī)制中會(huì)不斷測(cè)試不滿(mǎn)足“讓權(quán)等待”而引入type semaphore=recordvalue:integer;L: list of process;endL:為進(jìn)程鏈表,用于鏈接所有等待該類(lèi)資源進(jìn)程。procedure wait(s)var s: semaphorebegins.value:=s.value 1;if s.value 0 them block (S,L)end2 記錄型信號(hào)量(

27、2) procedure signal (S)var s:semaphonebegins.value:=s.vaule+1if s.value=0 then wakeup(s.L)end用wait(s)和signal(s)實(shí)現(xiàn)同步與互斥。在記錄型信號(hào)量機(jī)制中:s.value初值:表示系統(tǒng)中某類(lèi)資源的數(shù)目。s.value0:表該信號(hào)量鏈表中已阻塞進(jìn)程的數(shù)目。信號(hào)量的說(shuō)明:在信號(hào)量的實(shí)現(xiàn)中,S.value的初值表示系統(tǒng)某類(lèi)資源的數(shù)目,因而又稱(chēng)為資源信號(hào)量,對(duì)它的每次wait操作,意味著進(jìn)程請(qǐng)求一個(gè)單位的該類(lèi)資源。當(dāng)S.value0時(shí),表示該類(lèi)資源已分配完畢,因而進(jìn)程調(diào)用block原語(yǔ),進(jìn)行自我阻塞

28、,放棄處理機(jī),并插入到信號(hào)量鏈表S.L中。此時(shí),S.value的絕對(duì)值表示在該信號(hào)量鏈表中已阻塞進(jìn)程的個(gè)數(shù)、亦即恰好等于對(duì)信號(hào)量S實(shí)施wait操作而被封鎖起來(lái)并進(jìn)入信號(hào)量S隊(duì)列的進(jìn)程數(shù)。對(duì)信號(hào)量的每次signal操作,表示執(zhí)行進(jìn)程釋放一個(gè)單位資源。 3 AND型信號(hào)量當(dāng)不用它時(shí),有可能發(fā)生系統(tǒng)死鎖。死鎖:在無(wú)外力作用下的一種僵持狀態(tài)。AND信號(hào)量例:特點(diǎn):要么全分配,要么一個(gè)也不分配。在一些應(yīng)用場(chǎng)合,是一個(gè)進(jìn)程需要先獲得兩個(gè)或更多的共享資源后,方能執(zhí)行其任務(wù)。3 AND型信號(hào)量問(wèn)題的引入 假定有兩個(gè)進(jìn)程A和B,它們都要求訪(fǎng)問(wèn)共享數(shù)據(jù)D和E。當(dāng)然,共享數(shù)據(jù)都應(yīng)作為臨界資源。為此,可為這兩個(gè)數(shù)據(jù)分

29、別設(shè)置用于互斥的信號(hào)量Dmutex和Emutex,并令它們的初值都是1。相應(yīng)地,在兩個(gè)進(jìn)程中都要包含兩個(gè)對(duì)Dmutex和Emutex的操作,即 process A: process B: wait (Dmutex); wait(Emutex); wait (Emutex); wait(Dmutex); 若進(jìn)程A和B按下述次序交替執(zhí)行wait操作: process A: wait(Dmutex);于是Dmutex=0 process B: wait(Emutex);于是Emutex=0 process A: wait(Emutex);于是Emutex=-1,A阻塞 process B: wait

30、(Dmutex);于是Dmutex=-1,B阻塞出現(xiàn)死鎖的原因主要在于進(jìn)程運(yùn)行時(shí)需要多個(gè)資源,在為每個(gè)進(jìn)程分配所需的全部資源時(shí),不能保證原子操作,從而導(dǎo)致進(jìn)程之間相互等待對(duì)方釋放所占資源的死鎖狀態(tài)。為了解決進(jìn)程同時(shí)需要多種資源且每種資源要占用一段時(shí)間的問(wèn)題,人們提出了AND型信號(hào)量同步機(jī)制。AND型信號(hào)量的基本思想 將進(jìn)程在整個(gè)運(yùn)行過(guò)程中需要的所有資源,一次性全部地分配給進(jìn)程,待進(jìn)程使用完后再一起釋放。只要尚有一個(gè)資源未能分配給進(jìn)程,其他所有可能為之分配的資源,也不分配給它。亦即,對(duì)若干個(gè)臨界資源的分配,采取了原子操作方式:要么全部分配給進(jìn)程,要么一個(gè)也不分配。3 AND型信號(hào)量Swait(s

31、1,s2,sn)if s11 and and sn 1 then for i:=1 to n do si:=si-1; endforelseplace the process in the waiting queue with the first si found with si1,記錄型信號(hào)量。S=1時(shí),互斥型信號(hào)量。(3)Swait(s,1,0),可控開(kāi)關(guān),當(dāng)時(shí),允許進(jìn)入,S1時(shí),不能進(jìn)入。2.3.3 信號(hào)量的應(yīng)用 1.利用信號(hào)量實(shí)現(xiàn)互斥var mutex: semaphore:=1beginparbeginprocess1:beginrepeat wait(mutex); critica

32、l setion signal(mutex); remainder sectionuntil false; end1.利用信號(hào)量實(shí)現(xiàn)互斥(2) process2: begin repeat wait(mutex); critical setion signal(mutex); remainder sectionuntil false; endparend2.利用信號(hào)量來(lái)描述前趨關(guān)系(1)S1S2S3S4S5S6abcdegf圖210 前趨圖舉例利用信號(hào)量來(lái)描述前趨關(guān)系(2)Var a,b,c,d,e,f,g:semaphore:=0,0,0,0,0,0,0;Beginparbegin begi

33、n S1; signal(a); signal(b); end; begin wait(a);S2; signal(c); signal(d); end; begin wait(b);S3; signal(e); end; begin wait(c);S4; signal(f); end; begin wait(d);S5; signal(g); end; begin wait(e); wait(f);wait(g);S6; end;parendend 經(jīng)典進(jìn)程同步問(wèn)題 生產(chǎn)者消費(fèi)者問(wèn)題哲學(xué)家進(jìn)餐問(wèn)題讀者寫(xiě)者問(wèn)題 一、利用記錄型信號(hào)量解決生產(chǎn)者一消費(fèi)者問(wèn)題問(wèn)題描述 生產(chǎn)者消費(fèi)者問(wèn)題可描述如下:

34、有n個(gè)生產(chǎn)者和m個(gè)消費(fèi)者,連接在一個(gè)有N個(gè)單位緩沖區(qū)的有界緩沖上。其中,pi和cj都是并發(fā)進(jìn)程,只要緩沖區(qū)未滿(mǎn),生產(chǎn)者pi生產(chǎn)的產(chǎn)品就可投入緩沖區(qū);只要緩沖區(qū)不空,消費(fèi)者進(jìn)程cj就可從緩沖區(qū)取走并消耗產(chǎn)品。如右圖所示。 問(wèn)題分析為了使這兩類(lèi)進(jìn)程協(xié)調(diào)工作,防止盲目生產(chǎn)和消費(fèi),它們應(yīng)滿(mǎn)足如下的同步條件:任何時(shí)刻所有生產(chǎn)者存放產(chǎn)品的數(shù)目不能超過(guò)緩沖區(qū)的總?cè)萘浚∟);所有消費(fèi)者取出的產(chǎn)品總量不能超過(guò)所有生產(chǎn)者當(dāng)前生產(chǎn)的產(chǎn)品總量。 設(shè)置三個(gè)信號(hào)量: full:表示放有產(chǎn)品的緩沖區(qū)數(shù),其初值為0。empty:表示可供使用的緩沖區(qū)數(shù),其初值為N。mutex:互斥信號(hào)量,初值為1,表示各進(jìn)程互斥進(jìn)入臨界區(qū),保

35、證任何時(shí)候只有一個(gè)進(jìn)程使用緩沖區(qū)。Var mutex,empty,full:semaphore:=1,n,0; buffer:array0,1,n-1 of item;in, out: integer: =0,0;begin parbeginproducer: begin repeat Produce an item in nextp; 一、利用記錄型信號(hào)量解決生產(chǎn)者一消費(fèi)者問(wèn)題wait(empty);wait(mutex);buffer(in):=nextp;in:=(in+1) mod n;signal(mutex);signal(full);Until false;endconsumer

36、:beginrepeat wait(full);wait(mutex);nextc:=buffer(out);out:=(out+1) mod n;signal(mutex);signal(empty);Consumer the item in nextc;Until false;endparendend二、利用AND信號(hào)量解決生產(chǎn)者消費(fèi)者問(wèn)題 var mutex, empty, full: semaphore:=1,n,0;buffer:array0,n-1 of item;in out: integer :=0,0; beginparbegin producer: begin repeat

37、 produce an item in nextp; swait(empty, mutex); buffer(in):=nextp;in:=(in+1) mod n;ssingal(mutex, full);Until false;EndConsumer: begin repeatswait(full, mutex);nextc:=buffer(out);out:=(out+1) mod n;ssignal(mutex, empty);consumer the item in nextc; until false;endparendend哲學(xué)家進(jìn)餐問(wèn)題問(wèn)題描述: 假設(shè)有五個(gè)哲學(xué)家,他們花費(fèi)一生

38、的時(shí)光思考和吃飯。這些哲學(xué)家公用一個(gè)圓桌,每個(gè)哲學(xué)家都有一把椅子。在桌中央有一碗米飯。每個(gè)哲學(xué)家面前有一只空盤(pán)于,每?jī)扇酥g放一根筷子(如右圖)。當(dāng)一個(gè)哲學(xué)家思考時(shí),他與其他同事不交互,時(shí)而,哲學(xué)家會(huì)感到饑餓,并試圖拿起與他最近的兩支筷子(他與鄰近左、右兩人之間的筷子)。一個(gè)哲學(xué)家一次只能拿起一支筷子。顯然,他不能從其他哲學(xué)家手里拿走筷子。當(dāng)一個(gè)饑餓的哲學(xué)家同時(shí)有兩支筷子時(shí),他就能不用釋放他的筷子而自己吃了。當(dāng)吃完后,他會(huì)放下兩支筷子,并再次開(kāi)始思考。1.利用記錄型信號(hào)量解決哲學(xué)家進(jìn)餐問(wèn)題Var chopstick: array0, , 4 of semaphore;Repeat wait(c

39、hopsticki); wait(chopstick(i+1)mod 5); eat signal(chopsticki); signal(chopstick(i+1)mod 5); think;Until false分析:以上解法會(huì)出現(xiàn)死鎖。為防止死鎖發(fā)生可采取的措施:最多允許4個(gè)哲學(xué)家同時(shí)坐在桌子周?chē)鷥H當(dāng)一個(gè)哲學(xué)家左右兩邊的筷子都可用時(shí),才允許他拿筷子()給所有哲學(xué)家編號(hào),奇數(shù)號(hào)的哲學(xué)家必須首先拿左邊的筷子,偶數(shù)號(hào)的哲學(xué)家則反之為了避免死鎖,把哲學(xué)家分為三種狀態(tài),思考,饑餓,進(jìn)食,并且一次拿到兩只筷子,否則不拿。哲學(xué)家進(jìn)餐問(wèn)題1.利用AND信號(hào)量解決哲學(xué)家進(jìn)餐問(wèn)題Var chopstick

40、: array0, , 4 of semaphore:=(1,1,1,1,1);processiRepeat think; Sswait(chopstick(i+1)mod 5,chopsticki); eat Ssignal(chopstick(i+1)mod 5,chopsticki);Until false讀者寫(xiě)者問(wèn)題 特點(diǎn):讀進(jìn)程可共享同一對(duì)象。寫(xiě)進(jìn)程不可共享同一對(duì)象。讀者優(yōu)先:除非有寫(xiě)者在寫(xiě),否則讀者就無(wú)須等待一、利用記錄型信號(hào)量解決讀者寫(xiě)者問(wèn)題 var rmutex, wmutex: semaphore: =1,1; readcount:integer: =0; begin par

41、begin reader: begin repeatwait(rmutex);if readcount=0 then wait(wmutex);/*當(dāng)?shù)谝粋€(gè)讀進(jìn)程讀數(shù)據(jù)庫(kù)時(shí),阻止寫(xiě)進(jìn)程寫(xiě)*/ readcount:=readcount+1;signal(rmutex);perform read operation一、利用記錄型信號(hào)量解決讀者寫(xiě)者問(wèn)題 perform read operationwait(rmutex);readcount:=readcount-1;if readcount=0 then signal(wmutex);signal(rmutex); until false; end

42、一、利用記錄型信號(hào)量解決讀者寫(xiě)者問(wèn)題 writer: beginrepeat wait(wmutex) perform write operation; signal(wmutex)until false;end parend end二、信號(hào)量集解決讀者寫(xiě)者問(wèn)題(略) var RN integer;L, mx: semaphore: =RN, q; begin parbegin reader: begin repeat swait(L,1,1); swait(mx,1,0); perform read operation; ssignal(L,1); until false; end writ

43、er: begin 二、信號(hào)量集解決讀者寫(xiě)者問(wèn)題(略) writer: begin repeat swait(mx,1,1; L,RN,0); perform write operation; ssignal(mx, 1); until flase; end parend end理發(fā)師問(wèn)題問(wèn)題描述: 理發(fā)店有一位收銀員,k位理發(fā)師、k張理發(fā)椅和n把供等候理發(fā)的顧客坐的沙發(fā)。如果沒(méi)有顧客,理發(fā)師便在理發(fā)椅上睡覺(jué)。一個(gè)顧客到來(lái)時(shí),他必須叫醒理發(fā)師。如果全部理發(fā)師正在理發(fā)時(shí)又有顧客來(lái)到,則如果有空沙發(fā)可坐,就坐下來(lái)等待,如果沒(méi)有空沙發(fā)就離開(kāi)這個(gè)理發(fā)店。問(wèn)題分析為了解決這個(gè)問(wèn)題,可以定義三個(gè)信號(hào)量cu

44、stomer、barbers和mutex以及一個(gè)計(jì)數(shù)變量waiting。信號(hào)量customer用來(lái)記錄等待理發(fā)的顧客數(shù)(不包括正在理發(fā)的顧客),其初值化為0。信號(hào)量barbers用來(lái)記錄正在等候顧客的理發(fā)師數(shù),其值為k。Count:計(jì)數(shù)器,用于記錄等候的顧客數(shù);信號(hào)量mutex 用于實(shí)現(xiàn)計(jì)數(shù)器count的互斥訪(fǎng)問(wèn),其初值為1。 semaphore customers = 0; /*等候理發(fā)的顧客數(shù)*/semaphore barbers = k; /*等候顧客的理發(fā)師數(shù)*/semaphore mutex = 1;Int count=0;/*等候顧客數(shù)(還沒(méi)有理發(fā)的)*/void barber(

45、) while(TRUE); /*理完一人,還有顧客嗎?*/ wait(cutomers); /*若無(wú)顧客,理發(fā)師睡眠*/ wait(mutex); /*進(jìn)程互斥*/ waiting=waiting - 1; /等候顧客數(shù)少一個(gè) cut_hair( ); /理發(fā)師為一個(gè)顧客理發(fā) signal(mutex); /*開(kāi)放臨界區(qū)*/ signal(barbers); /理發(fā)師為顧客理完發(fā) 3.具體解法如下:void customer( ) wait(mutex); /*進(jìn)程互斥*/ if (count 同步的實(shí)現(xiàn)。receive(sender,message)send(receiver,messag

46、e)三、管道通信管道:連接一個(gè)讀進(jìn)程和一個(gè)寫(xiě)進(jìn)程之間通信的共享文件。功能: (以字符流的形式)大量的數(shù)據(jù)發(fā)收。注意:(1)互斥當(dāng)一個(gè)進(jìn)程正在對(duì)pipe執(zhí)行讀/寫(xiě)操作時(shí),其它(另一)進(jìn)程必須等待(2)同步當(dāng)輸入進(jìn)程把一定數(shù)量的數(shù)據(jù)寫(xiě)入pipe,便去睡眠等待,直到輸出進(jìn)程取走數(shù)據(jù)后,再把它喚醒。(3)對(duì)方是否存在為了協(xié)調(diào)雙方通信,管道通信機(jī)制必須對(duì)發(fā)送進(jìn)程和接收進(jìn)程在利用管道進(jìn)行通信時(shí)實(shí)施同步和互斥,并只有在確定了對(duì)方存在時(shí)才能進(jìn)行通信進(jìn)程通信的類(lèi)型 直接/間接通信方式(消息通信的2種方式) 一、直接send(Receiver, message)receive(Sender, message)例:

47、解決生產(chǎn)消費(fèi)問(wèn)題。repeat produce an item in nextp; send(consumer, nextp); until false; repeat receive( producer, nextc); consumer the item in nextc; until false;直接/間接通信方式(消息通信的2種方式) 二、間接(可以實(shí)現(xiàn)非實(shí)時(shí)通信)優(yōu)點(diǎn):在讀/寫(xiě)時(shí)間上的隨機(jī)性寫(xiě)進(jìn)程 信箱(中間實(shí)體)讀進(jìn)程原語(yǔ)(1)信息的創(chuàng)建與撤消:信箱名 屬性(公用、私用、共享)(共享者名字)(2)消息的發(fā)送和接收Send (mailbox, message)Receive (mai

48、lbox, message)直接/間接通信方式(消息通信的2種方式) 二、間接(可以實(shí)現(xiàn)非實(shí)時(shí)通信)信箱類(lèi)型(1)私用:擁有者有讀/寫(xiě)數(shù),其它只有寫(xiě)權(quán),(單向)存在期進(jìn)程存在期。(2)公用:系統(tǒng)創(chuàng)建,雙向,存在期=系統(tǒng)存在期。(3)共享信箱:一般進(jìn)程創(chuàng)建,并指明其共享者,是雙向。發(fā)送接收進(jìn)程之間的關(guān)系:(1)一對(duì)一關(guān)系;(2)多對(duì)一關(guān)系;(3)一對(duì)多關(guān)系;(4)多對(duì)多關(guān)系:公用信箱。消息傳遞系統(tǒng)中的幾個(gè)問(wèn)題 一、通信鏈路:(1)顯式建立:(進(jìn)程完成)(2)隱式建立:(系統(tǒng)完成)鏈路類(lèi)型:(1)由連接方法分:點(diǎn)點(diǎn)鏈路,多點(diǎn)鏈路。(2)由通信方式分:?jiǎn)蜗颉㈦p向。(3)由容量分:無(wú)容量(無(wú)緩沖區(qū))、

49、有(有緩沖區(qū))。消息傳遞系統(tǒng)中的幾個(gè)問(wèn)題 二、消息格式:消息頭:含控制信息如:收/發(fā)進(jìn)程名,消息長(zhǎng)度、類(lèi)型、編號(hào)消息內(nèi)容:定長(zhǎng)消息:系統(tǒng)開(kāi)銷(xiāo)小,用戶(hù)不便(特別是傳長(zhǎng)消息用戶(hù))變長(zhǎng)消息:開(kāi)銷(xiāo)大,用戶(hù)方便。消息傳遞系統(tǒng)中的幾個(gè)問(wèn)題 三、進(jìn)程同步方式1.發(fā)送和接收進(jìn)程阻塞(匯合)用于緊密同步,無(wú)緩沖區(qū)時(shí)。2.發(fā)送進(jìn)程不阻塞,接收進(jìn)程阻塞(多個(gè))相當(dāng)于接收進(jìn)程(可能是多個(gè))一直等待發(fā)送進(jìn)程,如:打印進(jìn)程等待打印任務(wù)。3.發(fā)送/接收進(jìn)程均不阻塞一般在發(fā)、收進(jìn)程間有多個(gè)緩沖區(qū)時(shí)。消息緩沖隊(duì)列通信機(jī)制 一、數(shù)據(jù)結(jié)構(gòu)1.消息緩沖區(qū)type message buffer =recordsender:size:t

50、ext:next:指向下一指針2.PCB中應(yīng)增數(shù)據(jù)項(xiàng):type pcb=recordmq 消息隊(duì)列指針mutex 消息隊(duì)列互斥信息量sm消息隊(duì)列資源信息量(表資源消息數(shù))消息緩沖隊(duì)列通信機(jī)制 二、發(fā)送原語(yǔ) procedure send(receiver, a) begin getbuf(a.size, i); i.sender:=a.sender; i.size:=a.size; i.text:=a.text; i.next:=0; getid(PCB set, receiver.j); wait(j.mutex); insert(j.mq, i); signal(j.mutex); sign

51、al(j.sm);end消息緩沖隊(duì)列通信機(jī)制 三、接收原語(yǔ)procedure receive(b)begin j:=internal name; wait(j.sm); wait(j.mutex); remove(j.mq, i); signal(j.mutex); b.sender:=i.sender; b.size:=i.size; b.text:=i.text;end消息緩沖隊(duì)列通信機(jī)制 mqmutexsmsender:Asize:5text:Hellosend(B,a)sender :Asize :5text:hellonext:0發(fā)送區(qū)Asender:Asize:5text:Hell

52、oreceive(b)接收區(qū)Bab進(jìn)程APCB(B)進(jìn)程B練習(xí)試說(shuō)明如果使用send_mailbox和receive_mailbox 原語(yǔ)實(shí)現(xiàn)打印文件的系統(tǒng)。欲打印的進(jìn)程將要打印的文件名發(fā)送到郵箱printer,打印機(jī)假脫機(jī)將打印郵箱中出現(xiàn)名字的任何文件/process wish to printCharfilename ;Status=send_mailbox(“printer”,filename);If (status 0) /failure/print spoolerchar filename while (true)status=receive_mailbox(“printer”,fi

53、lename);if(status 0)/failureprint(filename);線(xiàn)程 線(xiàn)程的基本概念 1.線(xiàn)程的引入問(wèn)題:可能會(huì)有很多個(gè)客戶(hù)訪(fǎng)問(wèn)服務(wù)器,WEB服務(wù)器如何處理這多個(gè)訪(fǎng)問(wèn)?這臺(tái)計(jì)算機(jī)上運(yùn)行著WEB服務(wù)器程序,管理著許多網(wǎng)站這臺(tái)計(jì)算機(jī)上運(yùn)行著IE瀏覽器程序HTTP協(xié)議請(qǐng)求應(yīng)答線(xiàn)程WEB服務(wù)器程序作為單個(gè)進(jìn)程順序處理:一次處理一個(gè)用戶(hù)請(qǐng)求,處理完后再處理下一個(gè)請(qǐng)求 用戶(hù)等待的時(shí)間可能會(huì)很長(zhǎng)使用多個(gè)進(jìn)程:有一個(gè)進(jìn)程負(fù)責(zé)偵聽(tīng),看是否有用戶(hù)的請(qǐng)求到來(lái)。如果有,則創(chuàng)建另一個(gè)進(jìn)程處理請(qǐng)求。一個(gè)用戶(hù)請(qǐng)求對(duì)應(yīng)一個(gè)進(jìn)程。 進(jìn)程頻繁的創(chuàng)建與撤銷(xiāo),頻繁的進(jìn)程切換,開(kāi)銷(xiāo)大線(xiàn)程 1.線(xiàn)程的引入減少并發(fā)

54、執(zhí)行時(shí)的時(shí)空開(kāi)銷(xiāo),進(jìn)程的創(chuàng)建、撤消、切換較費(fèi)時(shí)空,因它既是調(diào)度單位,又是資源擁有者。線(xiàn)程是系統(tǒng)獨(dú)立調(diào)度和分派的基本單位,其基本上不擁有系統(tǒng)資源,只有少量資源(IP,寄存器,棧),但共享其所屬進(jìn)程所擁有的全部資源。 線(xiàn)程的概念線(xiàn)程是指進(jìn)程內(nèi)部的一個(gè)可獨(dú)立執(zhí)行的實(shí)體,線(xiàn)程是處理機(jī)調(diào)度的基本單位。線(xiàn)程擁有少量必不可少的資源,如程序計(jì)數(shù)器、一組寄存器、棧,它可與同屬一個(gè)進(jìn)程的其他線(xiàn)程共享進(jìn)程所擁有的全部資源。因?yàn)橥贿M(jìn)程內(nèi)線(xiàn)程共享內(nèi)存和文件,因此他們之間相互通信,無(wú)需調(diào)用內(nèi)核。由于同一進(jìn)程內(nèi)的線(xiàn)程都可訪(fǎng)問(wèn)整個(gè)進(jìn)程的所有資源,所以它們之間的通信比進(jìn)程間通信更方便,而同一進(jìn)程內(nèi)的線(xiàn)程間切換也會(huì)由于許多上下

55、文的相同而簡(jiǎn)化。線(xiàn)程 線(xiàn)程的優(yōu)點(diǎn)創(chuàng)建線(xiàn)程比創(chuàng)建進(jìn)程所需時(shí)間短撤銷(xiāo)線(xiàn)程比撤銷(xiāo)進(jìn)程花費(fèi)的時(shí)間短線(xiàn)程間切換比進(jìn)程間切換花費(fèi)時(shí)間短線(xiàn)程可以提高通信效率。由于同進(jìn)程內(nèi)線(xiàn)程間共享內(nèi)存和文件資源,可以不通過(guò)內(nèi)核直接進(jìn)行通信適合多處理機(jī)系統(tǒng)進(jìn)程和線(xiàn)程的比較 地址空間資源 不同進(jìn)程的地址空間是相互獨(dú)立的,而同一進(jìn)程的各線(xiàn)程共享同一地址空間通信關(guān)系 進(jìn)程間通信必須使用操作系統(tǒng)提供的進(jìn)程間通信機(jī)制,而同一進(jìn)程中各線(xiàn)程間的通信也需要同步和互斥手段的輔助,以保證數(shù)據(jù)的一致性。調(diào)度方面 在進(jìn)程級(jí)操作系統(tǒng)中,擁有資源的基本單位都是進(jìn)程,而在引入線(xiàn)程的操作系統(tǒng)中,線(xiàn)程是處理機(jī)執(zhí)行的基本單位,進(jìn)程是擁有資源的基本單位,在同一進(jìn)程中,線(xiàn)程的切換不會(huì)引起進(jìn)程的切換,在不同的進(jìn)程中進(jìn)行線(xiàn)程切換,將會(huì)引起進(jìn)程的切換。同一進(jìn)程

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論