操作系統(tǒng)精美版2013os第3章進(jìn)程管理_第1頁
操作系統(tǒng)精美版2013os第3章進(jìn)程管理_第2頁
操作系統(tǒng)精美版2013os第3章進(jìn)程管理_第3頁
操作系統(tǒng)精美版2013os第3章進(jìn)程管理_第4頁
操作系統(tǒng)精美版2013os第3章進(jìn)程管理_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第二部分進(jìn)程管理第3章進(jìn)程第4章線程第5章CPU調(diào)度第6章進(jìn)程同步第7章死鎖第3章進(jìn)程3.1進(jìn)程概念3.2進(jìn)程調(diào)度3.3進(jìn)程操作3.4進(jìn)程間通信3.5IPC系統(tǒng)的實(shí)例3.6客戶機(jī)-服務(wù)器系統(tǒng)通信3.1進(jìn)程的概念引入進(jìn)程的原因進(jìn)程定義為了使程序能并發(fā)執(zhí)行,并能對并發(fā)的程序加以描述和控制而引入的(解決程序并發(fā)的不可再現(xiàn)性而引入進(jìn)程)進(jìn)程是執(zhí)行中的程序(進(jìn)程是程序的一次執(zhí)行過程)進(jìn)程是動(dòng)態(tài)概念,有生命周期它是操作系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位進(jìn)程就是進(jìn)程實(shí)體的一次執(zhí)行過程(動(dòng)態(tài))程序是存放在介質(zhì)上的一組有序指令集合(靜態(tài))增加并發(fā)020406080100120140incpuoutincpuout40ms20ms15ms15ms20ms30ms作業(yè)A作業(yè)B多道并發(fā)

(單CPU宏觀并發(fā),微觀獨(dú)占CPU)

增加問題:并發(fā)程序的不可再現(xiàn)性

解決:引入進(jìn)程(進(jìn)程并發(fā))循環(huán)程序A、B,共享變量NN=N+1Print(N)N=0程序A程序BN=N+1Print(N)N=0N=N+1Print(N)N=0N=N+1Print(N)N=0n+1n+10nn+10n01A、B并發(fā),有3種不同結(jié)果

增加進(jìn)程間關(guān)系的描述——前趨圖錯(cuò)誤原因:不能存在循環(huán)前趨圖:一個(gè)有向無循環(huán)圖,用于描述進(jìn)程之間執(zhí)行的先后次序。圖中的前驅(qū)關(guān)系表示為:P1→P2,P1→P3,P1→P4,P2→P5,P3→P5,P4→P6,P4→P7,P5→P8,P6→P8,P7→P9,P8→P9P1P3P2P4P5P6P7P8P9S1S2S3具有9個(gè)結(jié)點(diǎn)的前趨圖具有循環(huán)的圖增加進(jìn)程包含的內(nèi)容進(jìn)程包括:處理器寄存器程序計(jì)數(shù)器:下一條要執(zhí)行的指令地址內(nèi)存中的進(jìn)程:(圖3.1)堆:動(dòng)態(tài)申請內(nèi)存棧:局部變量,函數(shù)參數(shù)、返回地址等數(shù)據(jù)段:全局變量代碼段:多個(gè)進(jìn)程可能對應(yīng)同一個(gè)程序代碼段系統(tǒng),數(shù)據(jù)段,堆、棧段不同P72系統(tǒng)進(jìn)程系統(tǒng)進(jìn)程:執(zhí)行操作系統(tǒng)核心代碼的進(jìn)程(對系統(tǒng)資源進(jìn)行管理和控制)用戶進(jìn)程:執(zhí)行用戶程序的進(jìn)程獨(dú)占資源,最高優(yōu)先級運(yùn)行直接執(zhí)行I/O操作內(nèi)核態(tài)(管態(tài))下活動(dòng)進(jìn)程分類用戶進(jìn)程通過系統(tǒng)調(diào)用競爭資源不直接執(zhí)行I/O操作用戶態(tài)(目態(tài))下活動(dòng)增加3.1.2進(jìn)程狀態(tài)進(jìn)程的3個(gè)基本狀態(tài)進(jìn)程并發(fā)間斷性多種進(jìn)程狀態(tài)1獲得除CPU外的所有必要資源23就緒態(tài)運(yùn)行態(tài)阻塞態(tài)得到CPU控制權(quán),運(yùn)行因?yàn)榈却呈录l(fā)生而暫停執(zhí)行(如等待I/O)一個(gè)就緒隊(duì)列一個(gè)運(yùn)行進(jìn)程多個(gè)阻塞隊(duì)列P72進(jìn)程狀態(tài)圖(5狀態(tài)圖)新建終止就緒運(yùn)行等待I/O操作或事件的完成退出中斷允許I/O操作或事件的等待調(diào)度算法分派圖3.2進(jìn)程狀態(tài)圖允許/許可:系統(tǒng)性能和內(nèi)存容量是否允許退出/終止的原因:①進(jìn)程到達(dá)自然結(jié)束點(diǎn)②出現(xiàn)無法克服的錯(cuò)誤③被操作系統(tǒng)終結(jié)④被其它有終止權(quán)的進(jìn)程終結(jié)P73進(jìn)程狀態(tài)圖(7狀態(tài)圖)活動(dòng)就緒靜止就緒活動(dòng)阻塞靜止阻塞執(zhí)行調(diào)度激活激活掛起掛起掛起釋放釋放請求I/O創(chuàng)建終止釋放許可許可掛起:內(nèi)存→外存激活:外存→內(nèi)存增加3.1.3進(jìn)程控制塊

進(jìn)程控制塊(PCB)是系統(tǒng)用來控制和管理進(jìn)程而設(shè)置的數(shù)據(jù)結(jié)構(gòu)。進(jìn)程與PCB一一對應(yīng)PCB注意①系統(tǒng)創(chuàng)建新進(jìn)程時(shí),為它建立一個(gè)PCB②進(jìn)程結(jié)束時(shí)回收其PCB,進(jìn)程隨之消亡③PCB可被OS的多個(gè)模塊讀或修改,應(yīng)常駐內(nèi)存④所有PCB組織成鏈表或隊(duì)列結(jié)構(gòu),存放在PCB區(qū)內(nèi)P73PCB中的信息①程序和數(shù)據(jù)的地址/內(nèi)存管理信息②進(jìn)程同步和通信機(jī)制③資源清單/I/O狀態(tài)信息④鏈接指針(指向下一個(gè)PCB)①進(jìn)程狀態(tài)②進(jìn)程優(yōu)先級③進(jìn)程調(diào)度信息④事件(阻塞原因)①通用寄存器/CPU寄存器②指令/程序計(jì)數(shù)器③程序狀態(tài)字PSW④用戶棧指針①內(nèi)部標(biāo)識(shí)符:系統(tǒng)提供數(shù)字標(biāo)識(shí)②外部標(biāo)識(shí)符:創(chuàng)建者提供(用戶標(biāo)識(shí)、父進(jìn)程、子進(jìn)程)⑴進(jìn)程標(biāo)識(shí)符(唯一標(biāo)識(shí)進(jìn)程)⑵處理機(jī)狀態(tài)(CPU各寄存器內(nèi)容)⑶進(jìn)程調(diào)度信息⑷進(jìn)程控制信息P733.2進(jìn)程調(diào)度

在多道程環(huán)境下,進(jìn)程數(shù)目往往多于處理機(jī)數(shù)目,致使它們爭用處理機(jī)

這就要求系統(tǒng)能按某種算法,動(dòng)態(tài)地把處理機(jī)分配給就緒隊(duì)列中的一個(gè)進(jìn)程,使之執(zhí)行

分配處理機(jī)的任務(wù)是由進(jìn)程調(diào)度程序完成的

它是操作系統(tǒng)設(shè)計(jì)的中心問題之一增加進(jìn)程調(diào)度需要解決的問題WHATWHENHOW按什么原則分配CPU—進(jìn)程調(diào)度算法何時(shí)分配CPU—進(jìn)程調(diào)度的時(shí)機(jī)如何分配CPU—CPU調(diào)度過程(進(jìn)程的上下文切換)增加3.2.1調(diào)度隊(duì)列作業(yè)隊(duì)列、就緒隊(duì)列、設(shè)備隊(duì)列圖3.6就緒隊(duì)列和各種設(shè)備隊(duì)列P76圖3.7表示進(jìn)程調(diào)度隊(duì)列的隊(duì)列圖就緒隊(duì)列I/O隊(duì)列I/O請求時(shí)間片結(jié)束創(chuàng)建一個(gè)子進(jìn)程等待中斷子進(jìn)程執(zhí)行中斷發(fā)生P773.2.2調(diào)度程序處理器調(diào)度:調(diào)度程序?yàn)榇幚淼淖鳂I(yè)或進(jìn)程分配處理器(就緒態(tài)→運(yùn)行態(tài))一個(gè)較為完善的操作系統(tǒng)會(huì)提供三級調(diào)度中級調(diào)度(內(nèi)外存交換)高級調(diào)度(作業(yè)調(diào)度)低級調(diào)度(進(jìn)程調(diào)度)

處理機(jī)調(diào)度算法對整個(gè)計(jì)算機(jī)系統(tǒng)的綜合性能指標(biāo)有重要影響P77作業(yè)調(diào)度提交狀態(tài)作業(yè)注冊程序后備狀態(tài)作業(yè)調(diào)度程序執(zhí)行就緒阻塞執(zhí)行狀態(tài)完成狀態(tài)作業(yè)終止程序進(jìn)程調(diào)度程序增加圖3.8增加了中期調(diào)度的隊(duì)列圖換入換出換出的進(jìn)程(已部分執(zhí)行)就緒隊(duì)列結(jié)束I/O等待隊(duì)列P783級調(diào)度1.決定從外存的后備隊(duì)列中調(diào)入多少個(gè)作業(yè)和要調(diào)入哪幾個(gè)作業(yè)2.為被選中的作業(yè)創(chuàng)建進(jìn)程,并分配必要的系統(tǒng)資源,如內(nèi)存、外設(shè)等3.把新創(chuàng)建的進(jìn)程放入就緒隊(duì)列中,等待被調(diào)度執(zhí)行進(jìn)程調(diào)度進(jìn)程完成作業(yè)調(diào)度作業(yè)就緒隊(duì)列交互式用戶時(shí)間片到阻塞隊(duì)列事件發(fā)生等待事件中級調(diào)度CPU就緒,掛起隊(duì)列阻塞,掛起隊(duì)列中級調(diào)度進(jìn)程調(diào)度進(jìn)程完成作業(yè)調(diào)度作業(yè)就緒隊(duì)列交互式用戶時(shí)間片到阻塞隊(duì)列等待事件中級調(diào)度CPU就緒,掛起隊(duì)列阻塞,掛起隊(duì)列中級調(diào)度事件發(fā)生分時(shí)系統(tǒng)中用戶鍵入的命令和數(shù)據(jù)直接進(jìn)入內(nèi)存,OS為之建立進(jìn)程,加入就緒隊(duì)列就緒隊(duì)列

1.交互式用戶(進(jìn)程調(diào)度):一般采用FIFO隊(duì)列(先進(jìn)先出)2.批處理用戶(作業(yè)調(diào)度+進(jìn)程調(diào)度):一般采用優(yōu)先權(quán)隊(duì)列阻塞隊(duì)列:等待事件不同,一般可以有多個(gè)阻塞隊(duì)列●中級調(diào)度提高了內(nèi)存的利用率和系統(tǒng)吞吐量●內(nèi)存使用緊張時(shí),把內(nèi)存中暫時(shí)不能運(yùn)行的進(jìn)程調(diào)到外存中等待

內(nèi)存活動(dòng)阻塞↓↓外存靜止阻塞●等內(nèi)存有足夠空閑空間時(shí),將外存上的某些具備了運(yùn)行條件的就緒進(jìn)程調(diào)入內(nèi)存就緒隊(duì)列

外存靜止就緒↓↓內(nèi)存活動(dòng)就緒增加3.2.3上下文切換將CPU切換到另一進(jìn)程需要保存原來進(jìn)程的狀態(tài)并裝入新進(jìn)程的保存狀態(tài)。上下文切換時(shí)間是額外開銷,因?yàn)榍袚Q時(shí)系統(tǒng)并不能做什么有用的工作。上下文切換時(shí)間與硬件支持密切相關(guān)。P78圖3.4CPU在進(jìn)程間的切換執(zhí)行進(jìn)程P0進(jìn)程P1操作系統(tǒng)停頓執(zhí)行中斷或系統(tǒng)調(diào)用保存狀態(tài)至PCB0從PCB1中獲取狀態(tài)停頓停頓執(zhí)行中斷或系統(tǒng)調(diào)用保存狀態(tài)至PCB1從PCB0中獲取狀態(tài)P743.3進(jìn)程操作

3.3.1進(jìn)程的創(chuàng)建父進(jìn)程創(chuàng)建子進(jìn)程,子進(jìn)程又創(chuàng)建其他進(jìn)程,從而形成了進(jìn)程樹(見圖3.9)子進(jìn)程可能從操作系統(tǒng)處獲得資源,也可共享父進(jìn)程的資源當(dāng)進(jìn)程創(chuàng)建新進(jìn)程時(shí),有兩種執(zhí)行可能父進(jìn)程與子進(jìn)程并發(fā)執(zhí)行父進(jìn)程等待,直到某個(gè)或全部子進(jìn)程執(zhí)行完畢P79進(jìn)程的創(chuàng)建過程⑴申請空白PCB(進(jìn)程有唯一數(shù)字標(biāo)識(shí))⑵為新進(jìn)程分配資源(為程序、數(shù)據(jù)和用戶棧分配內(nèi)存)⑶初始化PCB⑷將新進(jìn)程插入就緒隊(duì)列①初始化標(biāo)識(shí)信息(自己和父進(jìn)程標(biāo)識(shí))②初始化處理機(jī)狀態(tài)信息(程序計(jì)數(shù)器、棧指針)③初始處理機(jī)控制信息(初始為就緒狀態(tài),最低優(yōu)先級)增加進(jìn)程創(chuàng)建地址空間子進(jìn)程是父進(jìn)程的復(fù)制品子進(jìn)程裝入另一個(gè)程序進(jìn)來UNIX例子fork系統(tǒng)調(diào)用創(chuàng)建新的進(jìn)程exec系統(tǒng)調(diào)用在fork調(diào)用后用新程序來取代進(jìn)程的內(nèi)存空間P81fork()返回子進(jìn)程號返回0P82進(jìn)程的終止過程①根據(jù)被終止進(jìn)程的標(biāo)識(shí)符,從PCB集合中檢索出該進(jìn)程的PCB,從中讀出該進(jìn)程狀態(tài)②若被終止進(jìn)程處于執(zhí)行態(tài),應(yīng)立即終止該進(jìn)程的執(zhí)行,并設(shè)置調(diào)度標(biāo)識(shí)為真(只是重新調(diào)度其它進(jìn)程運(yùn)行)③若該進(jìn)程還有子孫進(jìn)程,終止其所有子孫進(jìn)程④將被終止進(jìn)程的所有資源歸還給父進(jìn)程或系統(tǒng)⑤將被終止進(jìn)程的PCB從所在隊(duì)列或鏈表中移出,等待其它程序來收集信息增加#include<sys/types.h>#include<stdio.h>#include<unistd.h>voidmain(intargc,char*argv[]){pid_tpid;/*forkanotherprocess*/pid=fork();if(pid<0){/*erroroccurred*/fprintf(stderr,“ForkFailed”);exit(-1);}elseif(pid==0){/*childprocess*/execlp(“/bin/ls”,“l(fā)s”,NULL);}else{/*parentprocess*//*parentwillwaitforthechildtocomplete*/wait(NULL);printf(“ChildComplete”);exit(0);}}pid_tprintfforkexecargc為參數(shù)個(gè)數(shù),argv[]為參數(shù)位置fork():創(chuàng)建新進(jìn)程若成功調(diào)用一次則返回兩個(gè)值子進(jìn)程返回0,父進(jìn)程返回子進(jìn)程ID;否則,出錯(cuò)返回-1fork():創(chuàng)建新進(jìn)程exec():執(zhí)行新程序wait():等待,直到子進(jìn)程結(jié)束exit():進(jìn)程終止P823.4進(jìn)程間通信(IPC)獨(dú)立進(jìn)程:一個(gè)進(jìn)程不能影響或被在系統(tǒng)內(nèi)執(zhí)行的其他進(jìn)程所影響協(xié)作進(jìn)程:需要有進(jìn)程間通信機(jī)制2種進(jìn)程間通信機(jī)制:共享內(nèi)存主要由應(yīng)用程序員提供通信,操作系統(tǒng)只需要提供共享內(nèi)存消息系統(tǒng)主要由操作系統(tǒng)來提供通信P84進(jìn)程通信模型消息傳遞共享內(nèi)存P853.4.1共享內(nèi)存系統(tǒng)生產(chǎn)者-消費(fèi)者問題:生產(chǎn)者進(jìn)程產(chǎn)生信息,以供消費(fèi)者進(jìn)程消費(fèi)。無限緩沖:對緩沖區(qū)大小沒有實(shí)際限制有限緩沖:假設(shè)緩沖區(qū)大小固定ConsumerProducerBufferP86生產(chǎn)者-消費(fèi)問題共享數(shù)據(jù)#defineBUFFER_SIZE10typedefstruct{ ...}item;itembuffer[BUFFER_SIZE];intin=0;intout=0;空:in=out滿:(in+1)%BUFFER_SIZE只能用于緩沖的最大項(xiàng)數(shù)為:

BUFFER_SIZE-1…inoutBufferisEmptyBufferisFull…inoutP86生產(chǎn)者進(jìn)程

while(true){

/*Produceanitem*/while(((in+1)%BUFFER_SIZE)==out)

;/*donothing--nofreebuffers*/

buffer[in]=item;

in=(in+1)%BUFFER_SIZE;}Insert()inout…P87消費(fèi)者進(jìn)程 while(true){

while(in==out)

;//donothing--nothingtoconsume

//removeanitemfromthebuffer item=buffer[out];

out=(out+1)%BUFFERSIZE; returnitem;

}Remove()inout…問題:未考慮多生產(chǎn)者消費(fèi)者解決:同步P873.4.2消息傳遞系統(tǒng)消息傳遞至少提供兩個(gè)操作發(fā)送消息send接收消息receive如果進(jìn)程P和Q需要通信,那么他們需要相互建立通信線路通過發(fā)送/接收來交換消息有2種消息傳遞方式直接消息通信間接消息通信P87直接消息通信直接消息通信:需要通信的進(jìn)程必須明確地命名通信的接收者或發(fā)送者send(P,message)-發(fā)送消息至進(jìn)程Preceive(Q,message)-從進(jìn)程Q接收消息P2P1P3P88間接消息通信(郵箱通信)對于間接通信,消息通過郵箱或端口來發(fā)送和接收。每個(gè)郵箱都有一個(gè)惟一的標(biāo)識(shí)符進(jìn)程只有共享一個(gè)郵箱才能相互通信send(A,message):發(fā)送消息給郵箱Areceive(A,message):從郵箱A接收消息P2P1P3M1M2P89問題郵箱共享P1,P2,P3共享郵箱AP1發(fā)送消息;P2和P3接收誰將獲得這個(gè)消息?解決辦法允許一條線路與兩個(gè)以上的進(jìn)程關(guān)聯(lián)任一時(shí)刻只允許一個(gè)進(jìn)程執(zhí)行接收操作允許系統(tǒng)選擇接收者,并可以告訴發(fā)送者誰是接收者P89同步消息傳遞可以是阻塞或非阻塞的阻塞的消息傳遞也稱為同步消息阻塞send:發(fā)送進(jìn)程阻塞,直到消息為接收進(jìn)程或郵箱所接收阻塞receive:接收者阻塞,直

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論