版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第三章第三章 進(jìn)程管理進(jìn)程管理3.1 順序程序和并發(fā)程序順序程序和并發(fā)程序 3.1.1 順序程序的設(shè)計(jì)和執(zhí)行順序程序的設(shè)計(jì)和執(zhí)行例、例、DOS系統(tǒng)的文件拷貝命令的最基本功能就是把一個(gè)源文件復(fù)系統(tǒng)的文件拷貝命令的最基本功能就是把一個(gè)源文件復(fù)制為目標(biāo)文件。下面是完成基本文件拷貝功能的順序拷貝程序:制為目標(biāo)文件。下面是完成基本文件拷貝功能的順序拷貝程序:#include #define PMODE 0644#define BSIZE 512main(int argc,char *argv) int fdr,fdw,n,fdp2; char abufBSIZE; fdr=open(argv1,0);
2、fdw=create(argv2, PMODE); while(n=read(fdr,abuf,BSIZE)0) write(fdw,abuf,n);(D1Ri(D1Ri和和D2WiD2Wi(i=1i=1、2 2、3 3、)分別表、)分別表示第示第i i次循環(huán)讀源文件和寫目標(biāo)文件所在次循環(huán)讀源文件和寫目標(biāo)文件所在磁盤的一個(gè)物理塊(扇區(qū))的動(dòng)作磁盤的一個(gè)物理塊(扇區(qū))的動(dòng)作) )順序程序的特性: 順序性:每一個(gè)操作都在前一個(gè)操作執(zhí)行完后順序性:每一個(gè)操作都在前一個(gè)操作執(zhí)行完后才能開始。處理機(jī)的操作是嚴(yán)格按照程序所規(guī)才能開始。處理機(jī)的操作是嚴(yán)格按照程序所規(guī)定的次序進(jìn)行的。定的次序進(jìn)行的。 封閉性:
3、程序執(zhí)行得到的最終結(jié)果由給定的初封閉性:程序執(zhí)行得到的最終結(jié)果由給定的初始條件決定,不受外界因素的影響。始條件決定,不受外界因素的影響。 可再現(xiàn)性:程序執(zhí)行得到的最終結(jié)果與執(zhí)行速可再現(xiàn)性:程序執(zhí)行得到的最終結(jié)果與執(zhí)行速度無(wú)關(guān)。只要輸入的初始條件相同,則無(wú)論何度無(wú)關(guān)。只要輸入的初始條件相同,則無(wú)論何時(shí)重復(fù)執(zhí)行該程序都會(huì)得到相同的結(jié)果。時(shí)重復(fù)執(zhí)行該程序都會(huì)得到相同的結(jié)果。 順序程序:一組有序的操作序列。順序程序:一組有序的操作序列。圖圖 文件順序拷貝時(shí)各部件動(dòng)作序列文件順序拷貝時(shí)各部件動(dòng)作序列圖圖 文件并發(fā)拷貝時(shí)各部件的可能動(dòng)作序列文件并發(fā)拷貝時(shí)各部件的可能動(dòng)作序列從邏輯上可分析出從邏輯上可分析出
4、D1RD1Ri+1i+1與與D2WD2Wi i在在時(shí)間上可以重疊時(shí)間上可以重疊圖圖 文件并發(fā)拷貝時(shí)各文件并發(fā)拷貝時(shí)各部件的可能動(dòng)作序列部件的可能動(dòng)作序列main(int argc,char main(int argc,char * *argv)argv) int x,fdr,fdw,n,fdp2int x,fdr,fdw,n,fdp2;char abufBSIZEchar abufBSIZE;fdr=open(argv1,0);fdr=open(argv1,0);fdw=creat(argv2, PMODE)fdw=creat(argv2, PMODE);pipe(fdp);pipe(fdp)
5、;while(x=fork()=-1);while(x=fork()=-1);if (x=0)if (x=0) while(n=read(fdr,abuf,BSIZE)0) while(n=read(fdr,abuf,BSIZE)0) write(fdp1,abuf,n); write(fdp1,abuf,n);elseelse while(n=read(fdp0,abuf,BSIZE)0)while(n=read(fdp0,abuf,BSIZE)0) write(fdw,abuf,n); write(fdw,abuf,n); 考察下面的并發(fā)程序的例子:考察下面的并發(fā)程序的例子: #inclu
6、de #include main() main() int pid,pid1; int pid,pid1; while(pid=fork()=-1); while(pid=fork()=-1); if(pid!=0) if(pid!=0) while(pid1=fork()=-1); while(pid1=fork()=-1); if(pid1!=0) if(pid1!=0) printf(“c”); printf(“c”); else else printf(“b”); printf(“b”); else else printf(“a”); printf(“a”); 程序運(yùn)行結(jié)果可能是程序運(yùn)
7、行結(jié)果可能是abc,abc,也可能是也可能是cba,cba,還還可能是可能是bcabca、acbacb、cabcab、cbacba等。等。出現(xiàn)多種運(yùn)行結(jié)果的出現(xiàn)多種運(yùn)行結(jié)果的原因是:父進(jìn)程創(chuàng)建原因是:父進(jìn)程創(chuàng)建子進(jìn)程之后,系統(tǒng)的子進(jìn)程之后,系統(tǒng)的調(diào)度是隨機(jī)調(diào)度是隨機(jī)并發(fā)程序的特性:非可再現(xiàn)性:并發(fā)程序的執(zhí)行結(jié)果與它們的相對(duì)速度有關(guān)。非可再現(xiàn)性:并發(fā)程序的執(zhí)行結(jié)果與它們的相對(duì)速度有關(guān)。共享性:共享性:1 1)共享同一段程序)共享同一段程序; ; 2 2)共享系統(tǒng)資源)共享系統(tǒng)資源通信性:并發(fā)程序之間相互依賴和制約。通信性:并發(fā)程序之間相互依賴和制約。進(jìn)程進(jìn)程-一個(gè)具有獨(dú)立功能的程序?qū)δ硞€(gè)數(shù)據(jù)集一
8、個(gè)具有獨(dú)立功能的程序?qū)δ硞€(gè)數(shù)據(jù)集在處理機(jī)上的一次運(yùn)行過(guò)程。在處理機(jī)上的一次運(yùn)行過(guò)程。進(jìn)程具有兩個(gè)基本特征:進(jìn)程具有兩個(gè)基本特征: 1 1)、動(dòng)態(tài)性)、動(dòng)態(tài)性 2 2)、并發(fā)性)、并發(fā)性3.2 3.2 進(jìn)程及其狀態(tài)變化進(jìn)程及其狀態(tài)變化3.2.1 3.2.1 進(jìn)程的定義及特征進(jìn)程的定義及特征3.2.2 3.2.2 進(jìn)程的狀態(tài)及其變化進(jìn)程的狀態(tài)及其變化1 1)基本狀態(tài)轉(zhuǎn)換圖(進(jìn)程是一個(gè)有生命的東西)基本狀態(tài)轉(zhuǎn)換圖(進(jìn)程是一個(gè)有生命的東西)程序執(zhí)行必須由外存裝入內(nèi)存。程序執(zhí)行必須由外存裝入內(nèi)存。就緒進(jìn)程獲得就緒進(jìn)程獲得CPUCPU轉(zhuǎn)到執(zhí)行。轉(zhuǎn)到執(zhí)行。分配分配CPUCPU時(shí)同時(shí)分配時(shí)間片。時(shí)同時(shí)分配時(shí)間
9、片。在進(jìn)程等待某個(gè)事件發(fā)生時(shí)讓出在進(jìn)程等待某個(gè)事件發(fā)生時(shí)讓出CPU CPU ,此時(shí),此時(shí)CPUCPU去執(zhí)行別的程序。這正是多道程序的根本體現(xiàn)。去執(zhí)行別的程序。這正是多道程序的根本體現(xiàn)。進(jìn)程基本狀態(tài)轉(zhuǎn)換圖 執(zhí)行執(zhí)行創(chuàng)建就緒就緒封鎖封鎖終止終止調(diào)度選中調(diào)度選中時(shí)間片到時(shí)間片到等待某個(gè)事件等待某個(gè)事件發(fā)生發(fā)生(例如等待例如等待數(shù)據(jù)輸入結(jié)束數(shù)據(jù)輸入結(jié)束 )等待的事件發(fā)等待的事件發(fā)生了(例如數(shù)生了(例如數(shù)據(jù)輸入結(jié)束)據(jù)輸入結(jié)束)*注:封鎖狀態(tài)又稱為:注:封鎖狀態(tài)又稱為: 阻塞狀態(tài)阻塞狀態(tài) 等待狀態(tài)等待狀態(tài) 睡眠狀態(tài)睡眠狀態(tài)執(zhí)行分為:執(zhí)行分為: 用戶態(tài)執(zhí)行用戶態(tài)執(zhí)行 核心態(tài)執(zhí)行核心態(tài)執(zhí)行就緒分為:就緒分為
10、: 內(nèi)存就緒內(nèi)存就緒 外存就緒外存就緒2)UNIX系統(tǒng)進(jìn)程狀態(tài)轉(zhuǎn)換圖系統(tǒng)進(jìn)程狀態(tài)轉(zhuǎn)換圖進(jìn)程構(gòu)成進(jìn)程構(gòu)成:程序、數(shù)據(jù)、進(jìn)程控制塊程序、數(shù)據(jù)、進(jìn)程控制塊進(jìn)程控制塊進(jìn)程控制塊(簡(jiǎn)稱為(簡(jiǎn)稱為PCBPCB):):是包含進(jìn)程的描述信息和控制信息是包含進(jìn)程的描述信息和控制信息的數(shù)據(jù)結(jié)構(gòu),是進(jìn)程動(dòng)態(tài)特性的集中反映,是進(jìn)程存在的唯一標(biāo)志的數(shù)據(jù)結(jié)構(gòu),是進(jìn)程動(dòng)態(tài)特性的集中反映,是進(jìn)程存在的唯一標(biāo)志PCBPCB程序程序數(shù)據(jù)數(shù)據(jù)PCBPCB數(shù)數(shù)據(jù)據(jù)程程序序PCB1PCB1數(shù)數(shù)據(jù)據(jù)1 1 程程序序PCB2PCB2數(shù)數(shù)據(jù)據(jù)2 2(a)程序和數(shù)據(jù)混合程序和數(shù)據(jù)混合 (b)程序和數(shù)據(jù)分離程序和數(shù)據(jù)分離(c) 基本共享模式基本
11、共享模式進(jìn)程構(gòu)成的物理表示進(jìn)程構(gòu)成的物理表示:純碼:可被共享的程序,由指令和常量構(gòu)成。純碼:可被共享的程序,由指令和常量構(gòu)成。3.3 3.3 進(jìn)程構(gòu)成及進(jìn)程控制塊進(jìn)程構(gòu)成及進(jìn)程控制塊3.3.1 3.3.1 進(jìn)程的構(gòu)成進(jìn)程的構(gòu)成 每個(gè)進(jìn)程都有一個(gè)進(jìn)程控制塊,進(jìn)程與進(jìn)程控制塊一一對(duì)應(yīng)每個(gè)進(jìn)程都有一個(gè)進(jìn)程控制塊,進(jìn)程與進(jìn)程控制塊一一對(duì)應(yīng); ; 所有進(jìn)程的控制塊構(gòu)成了系統(tǒng)的進(jìn)程控制塊表所有進(jìn)程的控制塊構(gòu)成了系統(tǒng)的進(jìn)程控制塊表; ; 進(jìn)程控制表可以定義為一個(gè)結(jié)構(gòu)數(shù)組,系統(tǒng)初始時(shí)均為空閑進(jìn)程控制表可以定義為一個(gè)結(jié)構(gòu)數(shù)組,系統(tǒng)初始時(shí)均為空閑; ; 每當(dāng)創(chuàng)建一個(gè)進(jìn)程,操作系統(tǒng)就為此進(jìn)程分配一個(gè)空閑的進(jìn)程每當(dāng)創(chuàng)
12、建一個(gè)進(jìn)程,操作系統(tǒng)就為此進(jìn)程分配一個(gè)空閑的進(jìn)程控制塊并填寫相應(yīng)信息;控制塊并填寫相應(yīng)信息; 每當(dāng)撤消一個(gè)進(jìn)程,操作系統(tǒng)就釋放此進(jìn)程占用的進(jìn)程控制塊每當(dāng)撤消一個(gè)進(jìn)程,操作系統(tǒng)就釋放此進(jìn)程占用的進(jìn)程控制塊并把其置為空閑。并把其置為空閑。關(guān)于進(jìn)程控制塊關(guān)于進(jìn)程控制塊: :3.3.1 3.3.1 進(jìn)程的構(gòu)成進(jìn)程的構(gòu)成3.3.2 PCB的組成(1 1)描述信息:)描述信息: 進(jìn)程名或進(jìn)程標(biāo)識(shí)號(hào)、用戶名或用戶標(biāo)識(shí)號(hào)、家族關(guān)系進(jìn)程名或進(jìn)程標(biāo)識(shí)號(hào)、用戶名或用戶標(biāo)識(shí)號(hào)、家族關(guān)系; ;(2 2)控制信息:)控制信息: 進(jìn)程當(dāng)前狀態(tài)、進(jìn)程優(yōu)先級(jí)、各種計(jì)時(shí)信息、通信信息進(jìn)程當(dāng)前狀態(tài)、進(jìn)程優(yōu)先級(jí)、各種計(jì)時(shí)信息、通信信
13、息; ;(3 3)資源管理信息:)資源管理信息: 內(nèi)存起始地址、占用內(nèi)存大小、管理用數(shù)據(jù)結(jié)構(gòu)指針、輸入內(nèi)存起始地址、占用內(nèi)存大小、管理用數(shù)據(jù)結(jié)構(gòu)指針、輸入 輸出設(shè)備的設(shè)備號(hào)、指向文件系統(tǒng)的指針輸出設(shè)備的設(shè)備號(hào)、指向文件系統(tǒng)的指針; ;(4 4)CPUCPU現(xiàn)場(chǎng)保護(hù)信息:現(xiàn)場(chǎng)保護(hù)信息: 為使得進(jìn)程下次重新獲得為使得進(jìn)程下次重新獲得CPUCPU能夠正常執(zhí)行下去所需要保存能夠正常執(zhí)行下去所需要保存 的信息,例如的信息,例如: : 程序計(jì)數(shù)器、處理機(jī)狀態(tài)字程序計(jì)數(shù)器、處理機(jī)狀態(tài)字. .3.3.3 3.3.3 進(jìn)程上下文進(jìn)程上下文(參見(參見P45P45)進(jìn)程上下文實(shí)際上是進(jìn)程執(zhí)行活動(dòng)全過(guò)程的靜態(tài)描述進(jìn)
14、程上下文實(shí)際上是進(jìn)程執(zhí)行活動(dòng)全過(guò)程的靜態(tài)描述包括計(jì)算機(jī)系統(tǒng)中與執(zhí)行該進(jìn)程有關(guān)的各種寄存器的值、程序段包括計(jì)算機(jī)系統(tǒng)中與執(zhí)行該進(jìn)程有關(guān)的各種寄存器的值、程序段在經(jīng)過(guò)編譯之后形成的機(jī)器指令代碼集(或稱正文段)、數(shù)據(jù)集在經(jīng)過(guò)編譯之后形成的機(jī)器指令代碼集(或稱正文段)、數(shù)據(jù)集及各種堆棧值和及各種堆棧值和PCBPCB結(jié)構(gòu)結(jié)構(gòu)( (如下圖如下圖3)3)進(jìn)程控制塊分為:進(jìn)程控制塊分為: 進(jìn)程基本控制塊(進(jìn)程基本控制塊(procproc結(jié)構(gòu))結(jié)構(gòu))進(jìn)程擴(kuò)充控制塊(進(jìn)程擴(kuò)充控制塊(useruser結(jié)構(gòu))結(jié)構(gòu)) 數(shù)據(jù)段包括:數(shù)據(jù)段包括:用戶數(shù)據(jù)區(qū)(用戶數(shù)據(jù)區(qū)(C C程序中的外部變量、靜態(tài)局部變量)程序中的外部變量
15、、靜態(tài)局部變量)用戶棧:執(zhí)行用戶程序代碼時(shí)的動(dòng)態(tài)存儲(chǔ)分配區(qū)域用戶棧:執(zhí)行用戶程序代碼時(shí)的動(dòng)態(tài)存儲(chǔ)分配區(qū)域核心棧:執(zhí)行系統(tǒng)程序代碼時(shí)的動(dòng)態(tài)存儲(chǔ)分配區(qū)域核心棧:執(zhí)行系統(tǒng)程序代碼時(shí)的動(dòng)態(tài)存儲(chǔ)分配區(qū)域useruser結(jié)構(gòu)結(jié)構(gòu)UNIXUNIX系統(tǒng)進(jìn)程上下文包括系統(tǒng)進(jìn)程上下文包括: : 進(jìn)程基本控制塊、共享正文段和數(shù)據(jù)段進(jìn)程基本控制塊、共享正文段和數(shù)據(jù)段3.3.4 UNIX系統(tǒng)進(jìn)程上下文系統(tǒng)進(jìn)程上下文(參見(參見P46、P150)proc結(jié)構(gòu)(結(jié)構(gòu)(UNIX版本之一):版本之一):Structchar p_uid 進(jìn)程所屬的用戶標(biāo)識(shí)數(shù)進(jìn)程所屬的用戶標(biāo)識(shí)數(shù) p_pid 進(jìn)程標(biāo)識(shí)數(shù)進(jìn)程標(biāo)識(shí)數(shù) p_ppid 父
16、進(jìn)程標(biāo)識(shí)數(shù)父進(jìn)程標(biāo)識(shí)數(shù) p_stat 進(jìn)程狀態(tài)(值為進(jìn)程狀態(tài)(值為NULL、SSLEEP、SWAIT、 SRUN、SSTOP等)等) p_flag 進(jìn)程特征,表示是系統(tǒng)進(jìn)程還是用戶進(jìn)程,是否進(jìn)程特征,表示是系統(tǒng)進(jìn)程還是用戶進(jìn)程,是否在內(nèi)存等在內(nèi)存等 p_pri 進(jìn)程優(yōu)先數(shù)進(jìn)程優(yōu)先數(shù)int p_time 在內(nèi)存或外存駐留時(shí)間在內(nèi)存或外存駐留時(shí)間p_cpu 用于計(jì)算動(dòng)態(tài)優(yōu)先數(shù)用于計(jì)算動(dòng)態(tài)優(yōu)先數(shù)p_nice 初始優(yōu)先數(shù)初始優(yōu)先數(shù)p_addr 數(shù)據(jù)段起始地址數(shù)據(jù)段起始地址p_size 數(shù)據(jù)段長(zhǎng)度數(shù)據(jù)段長(zhǎng)度p_textp 指向正文段的指向正文段的text結(jié)構(gòu)結(jié)構(gòu)p_wchan 等待原因等待原因p_sig
17、 軟中斷代碼軟中斷代碼p_ttyp 指向?qū)?yīng)終端的指向?qū)?yīng)終端的tty結(jié)構(gòu)結(jié)構(gòu)procNPROCuser結(jié)構(gòu)包括下列有關(guān)項(xiàng)目:結(jié)構(gòu)包括下列有關(guān)項(xiàng)目:u_uid,u_gid 用戶標(biāo)識(shí)數(shù)、用戶組標(biāo)識(shí)數(shù)用戶標(biāo)識(shí)數(shù)、用戶組標(biāo)識(shí)數(shù)u_rsav2 指向核心棧中進(jìn)程現(xiàn)場(chǎng)保護(hù)區(qū)的指針指向核心棧中進(jìn)程現(xiàn)場(chǎng)保護(hù)區(qū)的指針u_procp、u_tsize、u_dsize、u_usize、指向進(jìn)程、指向進(jìn)程proc結(jié)構(gòu)結(jié)構(gòu)的指針、正文段的長(zhǎng)度、用戶數(shù)據(jù)區(qū)的長(zhǎng)度、用戶棧的長(zhǎng)度的指針、正文段的長(zhǎng)度、用戶數(shù)據(jù)區(qū)的長(zhǎng)度、用戶棧的長(zhǎng)度u_arg5 存放系統(tǒng)調(diào)用參數(shù)和返回值存放系統(tǒng)調(diào)用參數(shù)和返回值u_ofileNOFILE 進(jìn)程打開
18、文件表進(jìn)程打開文件表u_base 文件讀操作時(shí)指向目標(biāo)區(qū)、文件寫操作時(shí)指向源區(qū)文件讀操作時(shí)指向目標(biāo)區(qū)、文件寫操作時(shí)指向源區(qū)u_utime、u_stime 進(jìn)程在用戶態(tài)、核心態(tài)下的運(yùn)行時(shí)間進(jìn)程在用戶態(tài)、核心態(tài)下的運(yùn)行時(shí)間、每個(gè)共享正文段都由一個(gè)每個(gè)共享正文段都由一個(gè)text結(jié)構(gòu)描述結(jié)構(gòu)描述text結(jié)構(gòu)組成為:結(jié)構(gòu)組成為:x_daddr共享正文段在盤交換區(qū)上的起始地址共享正文段在盤交換區(qū)上的起始地址x_caddr共享正文段在內(nèi)存中的起始地址共享正文段在內(nèi)存中的起始地址x_size共享正文段長(zhǎng)度共享正文段長(zhǎng)度x_iptr指向共享正文段所在文件的控制塊指向共享正文段所在文件的控制塊x_count共享該
19、正文段的進(jìn)程數(shù)共享該正文段的進(jìn)程數(shù)x_ccount共享該正文段且上下文在內(nèi)存的進(jìn)程數(shù)共享該正文段且上下文在內(nèi)存的進(jìn)程數(shù) p_addr p_textp proc表表 x_caddrx_size . text表表 p_addr p_textp常駐內(nèi)存部分常駐內(nèi)存部分procitextk 用戶棧用戶棧用戶數(shù)據(jù)區(qū)用戶數(shù)據(jù)區(qū)核心棧核心棧User結(jié)構(gòu)結(jié)構(gòu) 共享正文段共享正文段 數(shù)據(jù)段數(shù)據(jù)段非常駐內(nèi)存部分非常駐內(nèi)存部分procj操作系統(tǒng)區(qū)操作系統(tǒng)區(qū) (常駐常駐)用戶程序區(qū)用戶程序區(qū) (非常駐非常駐)內(nèi)存空間內(nèi)存空間* *提問(wèn):提問(wèn): 1 1)procproc結(jié)構(gòu)和結(jié)構(gòu)和texttext結(jié)構(gòu)為什么不能合并?結(jié)
20、構(gòu)為什么不能合并? 2 2)用戶棧與核心棧的用途有什么區(qū)別?)用戶棧與核心棧的用途有什么區(qū)別?3.43.4進(jìn)程調(diào)度(調(diào)度決定系統(tǒng)的性能)進(jìn)程調(diào)度(調(diào)度決定系統(tǒng)的性能)3.4.13.4.1調(diào)度的基本概念調(diào)度的基本概念 一、高級(jí)、中級(jí)、低級(jí)調(diào)度一、高級(jí)、中級(jí)、低級(jí)調(diào)度、高級(jí)調(diào)度(作業(yè)調(diào)度):從后備作業(yè)中選取若、高級(jí)調(diào)度(作業(yè)調(diào)度):從后備作業(yè)中選取若干個(gè)作業(yè)到內(nèi)存投入運(yùn)行(決定將哪個(gè)在外存輸干個(gè)作業(yè)到內(nèi)存投入運(yùn)行(決定將哪個(gè)在外存輸入井中處于后備狀態(tài)的作業(yè)調(diào)入內(nèi)存)入井中處于后備狀態(tài)的作業(yè)調(diào)入內(nèi)存)2 2、中級(jí)調(diào)度(交換調(diào)度)、中級(jí)調(diào)度(交換調(diào)度) :將進(jìn)程的程序和數(shù)據(jù):將進(jìn)程的程序和數(shù)據(jù)部分在內(nèi)
21、存和外存交換區(qū)之間的調(diào)入調(diào)出部分在內(nèi)存和外存交換區(qū)之間的調(diào)入調(diào)出3 3、低級(jí)調(diào)度(進(jìn)程調(diào)度、低級(jí)調(diào)度(進(jìn)程調(diào)度或線程調(diào)度) :按照某種:按照某種策略和方法選取一個(gè)處于就緒狀態(tài)的進(jìn)程策略和方法選取一個(gè)處于就緒狀態(tài)的進(jìn)程或線程占用處理機(jī)(決定就緒隊(duì)列中的哪個(gè)進(jìn)程占用處理機(jī)(決定就緒隊(duì)列中的哪個(gè)進(jìn)程或線程獲得獲得CPUCPU)二、進(jìn)程調(diào)度方式二、進(jìn)程調(diào)度方式1 1、非剝奪調(diào)度方式:一進(jìn)程獲得、非剝奪調(diào)度方式:一進(jìn)程獲得CPUCPU后一直運(yùn)行下后一直運(yùn)行下去,直到進(jìn)程結(jié)束或需要等待某事件發(fā)生(如等待去,直到進(jìn)程結(jié)束或需要等待某事件發(fā)生(如等待I/OI/O完成、等待分配到資源等)而被封鎖時(shí)完成、等待分配
22、到資源等)而被封鎖時(shí) 優(yōu)點(diǎn):簡(jiǎn)單、系統(tǒng)開銷小優(yōu)點(diǎn):簡(jiǎn)單、系統(tǒng)開銷小 缺點(diǎn):可能導(dǎo)致系統(tǒng)性能惡化缺點(diǎn):可能導(dǎo)致系統(tǒng)性能惡化1 1)、緊急任務(wù)到達(dá)時(shí)不能立即投入運(yùn)行)、緊急任務(wù)到達(dá)時(shí)不能立即投入運(yùn)行2 2)、若干后到的短作業(yè)需要等到長(zhǎng)作業(yè)運(yùn)行完)、若干后到的短作業(yè)需要等到長(zhǎng)作業(yè)運(yùn)行完成后才能投入運(yùn)行,導(dǎo)致作業(yè)的周轉(zhuǎn)時(shí)間增長(zhǎng)成后才能投入運(yùn)行,導(dǎo)致作業(yè)的周轉(zhuǎn)時(shí)間增長(zhǎng)例如:三個(gè)進(jìn)程例如:三個(gè)進(jìn)程P1P1、P2 P2 、 P3P3先后(但又幾乎同時(shí))先后(但又幾乎同時(shí))到達(dá),他們分別需要到達(dá),他們分別需要2020、4 4、2 2個(gè)時(shí)間單位,若它們個(gè)時(shí)間單位,若它們就按就按P1P1、P2 P2 、 P3P3
23、的順序執(zhí)行且不可剝奪,則周轉(zhuǎn)的順序執(zhí)行且不可剝奪,則周轉(zhuǎn)時(shí)間(從到達(dá)到完成的時(shí)間)分別為時(shí)間(從到達(dá)到完成的時(shí)間)分別為2020、2424、2626,平均周轉(zhuǎn)時(shí)間為平均周轉(zhuǎn)時(shí)間為23.3323.33個(gè)時(shí)間單位個(gè)時(shí)間單位. .2 2、剝奪調(diào)度方式:一個(gè)進(jìn)程正在、剝奪調(diào)度方式:一個(gè)進(jìn)程正在CPUCPU上運(yùn)行時(shí),上運(yùn)行時(shí),系統(tǒng)可以基于某種原則剝奪已分配給它的系統(tǒng)可以基于某種原則剝奪已分配給它的CPU CPU ,將之分配給其它進(jìn)程將之分配給其它進(jìn)程. . 剝奪原則:剝奪原則: 1 1)、優(yōu)先級(jí)原則:優(yōu)先級(jí)高的進(jìn)程可以剝)、優(yōu)先級(jí)原則:優(yōu)先級(jí)高的進(jìn)程可以剝奪優(yōu)先級(jí)低的進(jìn)程正在占用的奪優(yōu)先級(jí)低的進(jìn)程正在占
24、用的CPUCPU 2 2)、短進(jìn)程原則:短進(jìn)程到達(dá)后可以剝奪)、短進(jìn)程原則:短進(jìn)程到達(dá)后可以剝奪長(zhǎng)進(jìn)程正在占用的長(zhǎng)進(jìn)程正在占用的CPUCPU 3 3)、時(shí)間片原則:一個(gè)時(shí)間片用完后重新)、時(shí)間片原則:一個(gè)時(shí)間片用完后重新調(diào)度調(diào)度對(duì)前例(三個(gè)進(jìn)程P1、P2 、 P3先后(但又幾乎同時(shí))到達(dá),他們分別需要20、4、2個(gè)時(shí)間單位)采用基于時(shí)間片原則的剝奪調(diào)度方式,如果2 2個(gè)時(shí)間單位為一個(gè)時(shí)間片,則P1、P2、P3的周轉(zhuǎn)時(shí)間分別為2626、1010、6 6,平均周轉(zhuǎn)時(shí)間為1414個(gè)時(shí)間單位.CPUP1P2P3P1P2P142681026(課堂要求同學(xué)練習(xí)分別畫出1個(gè)時(shí)間單位和3時(shí)間單位為一個(gè)時(shí)間片的
25、時(shí)序圖)TCPUP1P1 P2P2 P3P3P2P2 P3P3P1P11234P1P156P1P1P1P1P2P2P2P2789 1026進(jìn)程進(jìn)程 周轉(zhuǎn)時(shí)間周轉(zhuǎn)時(shí)間 P1 26 P1 26 P2 10 P2 10 P3 6 P3 6 平均平均 14 14CPUP1P1P2P2P1P136P3P3P1P1P2P28112612進(jìn)程進(jìn)程 周轉(zhuǎn)時(shí)間周轉(zhuǎn)時(shí)間 P1 26 P1 26 P2 12 P2 12 P3 8 P3 8 平均平均 15.3315.33TT3.4.2 3.4.2 進(jìn)程調(diào)度算法進(jìn)程調(diào)度算法、先進(jìn)先出(、先進(jìn)先出(FIFOFIFO)調(diào)度算法)調(diào)度算法 將用戶作業(yè)和就緒進(jìn)程按提交順序或變
26、為就緒狀態(tài)的先將用戶作業(yè)和就緒進(jìn)程按提交順序或變?yōu)榫途w狀態(tài)的先后排成隊(duì)列,并按照先來(lái)先服務(wù)的方式進(jìn)行調(diào)度處理后排成隊(duì)列,并按照先來(lái)先服務(wù)的方式進(jìn)行調(diào)度處理、最高優(yōu)先權(quán)優(yōu)先調(diào)度算法(、最高優(yōu)先權(quán)優(yōu)先調(diào)度算法(FPFFPF) 總是把處理機(jī)分配給就緒隊(duì)列中具有最高優(yōu)先級(jí)的進(jìn)程??偸前烟幚頇C(jī)分配給就緒隊(duì)列中具有最高優(yōu)先級(jí)的進(jìn)程。 該算法的關(guān)鍵是任何確定進(jìn)程的優(yōu)先級(jí)。該算法的關(guān)鍵是任何確定進(jìn)程的優(yōu)先級(jí)。1 1)、靜態(tài)優(yōu)先級(jí)算法:進(jìn)程的優(yōu)先級(jí)在被創(chuàng)建是確定,在)、靜態(tài)優(yōu)先級(jí)算法:進(jìn)程的優(yōu)先級(jí)在被創(chuàng)建是確定,在整個(gè)運(yùn)行期間不再改變。整個(gè)運(yùn)行期間不再改變。 簡(jiǎn)單易行但不精確,有可能退化為非剝奪調(diào)度方式簡(jiǎn)單易行
27、但不精確,有可能退化為非剝奪調(diào)度方式3.4.2 3.4.2 進(jìn)程調(diào)度算法進(jìn)程調(diào)度算法 2 2)、動(dòng)態(tài)優(yōu)先級(jí)算法:基于某種原則,使進(jìn)程的優(yōu)先級(jí)隨)、動(dòng)態(tài)優(yōu)先級(jí)算法:基于某種原則,使進(jìn)程的優(yōu)先級(jí)隨著時(shí)間而變化。著時(shí)間而變化。 例如:讓正在占用例如:讓正在占用CPUCPU的進(jìn)程的優(yōu)先級(jí)降低,讓正在等的進(jìn)程的優(yōu)先級(jí)降低,讓正在等待待CPUCPU的進(jìn)程的優(yōu)先級(jí)升高。的進(jìn)程的優(yōu)先級(jí)升高。 、時(shí)間片輪轉(zhuǎn)算法、時(shí)間片輪轉(zhuǎn)算法 1 1)固定時(shí)間片輪轉(zhuǎn)法:讓就緒隊(duì)列中的進(jìn)程輪流占用)固定時(shí)間片輪轉(zhuǎn)法:讓就緒隊(duì)列中的進(jìn)程輪流占用CPUCPU,每一次占用時(shí)間不超過(guò)一個(gè)固定時(shí)間片大小。,每一次占用時(shí)間不超過(guò)一個(gè)固定時(shí)間
28、片大小。 2 2)可變時(shí)間片輪轉(zhuǎn)法:每次選中一個(gè)進(jìn)程占用)可變時(shí)間片輪轉(zhuǎn)法:每次選中一個(gè)進(jìn)程占用CPUCPU前,前,根據(jù)進(jìn)程(或其所屬的作業(yè))的類型來(lái)確定時(shí)間片的大小。根據(jù)進(jìn)程(或其所屬的作業(yè))的類型來(lái)確定時(shí)間片的大小。、多級(jí)隊(duì)列算法、多級(jí)隊(duì)列算法 就緒進(jìn)程被分成若干個(gè)隊(duì)列,對(duì)不同的隊(duì)列采就緒進(jìn)程被分成若干個(gè)隊(duì)列,對(duì)不同的隊(duì)列采用不同的調(diào)度算法用不同的調(diào)度算法 1 1)按進(jìn)程所屬的作業(yè)類型來(lái)分)按進(jìn)程所屬的作業(yè)類型來(lái)分 例例1:1:終端型作業(yè)終端型作業(yè)( (前臺(tái)作業(yè)前臺(tái)作業(yè)) )隊(duì)列隊(duì)列-固定時(shí)間片輪轉(zhuǎn)法固定時(shí)間片輪轉(zhuǎn)法 批處理型作業(yè)批處理型作業(yè)( (后臺(tái)作業(yè)后臺(tái)作業(yè)) )隊(duì)列隊(duì)列-可變時(shí)間片
29、輪轉(zhuǎn)法可變時(shí)間片輪轉(zhuǎn)法( (根據(jù)作業(yè)的長(zhǎng)短根據(jù)作業(yè)的長(zhǎng)短) ) 例例2:2:系統(tǒng)作業(yè)隊(duì)列系統(tǒng)作業(yè)隊(duì)列-動(dòng)態(tài)優(yōu)先級(jí)算法動(dòng)態(tài)優(yōu)先級(jí)算法 交互型作業(yè)隊(duì)列交互型作業(yè)隊(duì)列-固定時(shí)間片輪轉(zhuǎn)法固定時(shí)間片輪轉(zhuǎn)法 批處理型作業(yè)批處理型作業(yè)( (后臺(tái)作業(yè)后臺(tái)作業(yè)) )隊(duì)列隊(duì)列-FIFO-FIFO 2 2)按進(jìn)程的動(dòng)態(tài)優(yōu)先級(jí)來(lái)分(多級(jí)反饋隊(duì)列)按進(jìn)程的動(dòng)態(tài)優(yōu)先級(jí)來(lái)分(多級(jí)反饋隊(duì)列) 與與1 1相同的是就緒進(jìn)程分成多個(gè)隊(duì)列,不同的是一個(gè)進(jìn)相同的是就緒進(jìn)程分成多個(gè)隊(duì)列,不同的是一個(gè)進(jìn)程可在不同的隊(duì)列之間轉(zhuǎn)移。程可在不同的隊(duì)列之間轉(zhuǎn)移。 優(yōu)先數(shù)確定的分為設(shè)置和計(jì)算兩種。優(yōu)先數(shù)確定的分為設(shè)置和計(jì)算兩種。 規(guī)定:優(yōu)先數(shù)小者優(yōu)
30、先級(jí)高。規(guī)定:優(yōu)先數(shù)小者優(yōu)先級(jí)高。 設(shè)置優(yōu)先數(shù)(設(shè)置優(yōu)先數(shù)( -128-128100 100 ):對(duì)高、低優(yōu)先級(jí)睡眠的進(jìn)程。):對(duì)高、低優(yōu)先級(jí)睡眠的進(jìn)程。 計(jì)算優(yōu)先數(shù):對(duì)一般進(jìn)程。計(jì)算優(yōu)先數(shù):對(duì)一般進(jìn)程。 計(jì)算公式:計(jì)算公式:p_pri=min127,100+p_nice+p_cpu/16p_pri=min127,100+p_nice+p_cpu/16 計(jì)算時(shí)機(jī):計(jì)算時(shí)機(jī): 1 1)、每次時(shí)鐘中斷,占用)、每次時(shí)鐘中斷,占用CPUCPU的進(jìn)程的的進(jìn)程的p_cpup_cpu加加1 1; 2 2)、時(shí)鐘中斷每秒,所有進(jìn)程的)、時(shí)鐘中斷每秒,所有進(jìn)程的p_cpup_cpu減減1010直到直到0 0;
31、 3 3)、時(shí)鐘中斷每秒,對(duì)所有)、時(shí)鐘中斷每秒,對(duì)所有p_pri100p_pri100的進(jìn)程的進(jìn)程, ,重新計(jì)算其重新計(jì)算其p_prip_pri; 4 4)、軟中斷(系統(tǒng)調(diào)用)處理末尾重新計(jì)算當(dāng)前進(jìn)程的)、軟中斷(系統(tǒng)調(diào)用)處理末尾重新計(jì)算當(dāng)前進(jìn)程的p_prip_pri; 調(diào)度時(shí)機(jī):中斷處理末尾(準(zhǔn)備返回到用戶態(tài)時(shí))調(diào)度時(shí)機(jī):中斷處理末尾(準(zhǔn)備返回到用戶態(tài)時(shí))3.4.3 UNIX3.4.3 UNIX系統(tǒng)的進(jìn)程調(diào)度算法系統(tǒng)的進(jìn)程調(diào)度算法p_cpup_cpu與進(jìn)程調(diào)度負(fù)反饋過(guò)程與進(jìn)程調(diào)度負(fù)反饋過(guò)程*思考:屬于進(jìn)程調(diào)度算法、的哪種?思考:屬于進(jìn)程調(diào)度算法、的哪種?基本上屬于動(dòng)態(tài)優(yōu)先級(jí)算法,并有多級(jí)
32、反饋隊(duì)列特點(diǎn)。基本上屬于動(dòng)態(tài)優(yōu)先級(jí)算法,并有多級(jí)反饋隊(duì)列特點(diǎn)。1 1、工作步驟:、工作步驟:1 1)保護(hù)當(dāng)前進(jìn)程(舊進(jìn)程)的進(jìn)程調(diào)度現(xiàn)場(chǎng))保護(hù)當(dāng)前進(jìn)程(舊進(jìn)程)的進(jìn)程調(diào)度現(xiàn)場(chǎng)2 2)按照進(jìn)程調(diào)度算法選擇一個(gè)就緒進(jìn)程(新進(jìn)程)按照進(jìn)程調(diào)度算法選擇一個(gè)就緒進(jìn)程(新進(jìn)程) 3 3)恢復(fù)新進(jìn)程的進(jìn)程調(diào)度現(xiàn)場(chǎng))恢復(fù)新進(jìn)程的進(jìn)程調(diào)度現(xiàn)場(chǎng)2 2、進(jìn)程調(diào)度現(xiàn)場(chǎng)、進(jìn)程調(diào)度現(xiàn)場(chǎng) 為使得進(jìn)程下次重新獲得為使得進(jìn)程下次重新獲得CPUCPU能夠正常執(zhí)行下去所需要保存的能夠正常執(zhí)行下去所需要保存的信息,例如程序計(jì)數(shù)器、處理機(jī)狀態(tài)字。信息,例如程序計(jì)數(shù)器、處理機(jī)狀態(tài)字。工作步驟工作步驟 1 1、1 1)可描繪為:)可描繪為
33、: PCBi. PCBi. PCPCPCPC PCBi. PCBi. PSPS PSPS 、3.4.4 3.4.4 進(jìn)程調(diào)度程序進(jìn)程調(diào)度程序那么工作步驟那么工作步驟 1 1、3 3)如何描繪?)如何描繪?1 1、工作步驟:、工作步驟: PCBi. PCBi. PCPC PCPC1 1)保護(hù)舊進(jìn)程現(xiàn)場(chǎng))保護(hù)舊進(jìn)程現(xiàn)場(chǎng) PCBi. PCBi. PSPS PSPS 、2 2)選擇一個(gè)新進(jìn)程)選擇一個(gè)新進(jìn)程 PS PS PCBk. PCBk. PSPS 3 3)恢復(fù)新進(jìn)程現(xiàn)場(chǎng))恢復(fù)新進(jìn)程現(xiàn)場(chǎng) 、 PC PC PCBk. PCBk. PCPC3.4.4 3.4.4 進(jìn)程調(diào)度程序進(jìn)程調(diào)度程序相同:相同:
34、保護(hù)的內(nèi)容基本相同保護(hù)的內(nèi)容基本相同不同:不同: 前者是在進(jìn)程調(diào)度時(shí)保護(hù),后者是在中斷響應(yīng)時(shí)保護(hù)前者是在進(jìn)程調(diào)度時(shí)保護(hù),后者是在中斷響應(yīng)時(shí)保護(hù) 前者的保護(hù)和恢復(fù)往往對(duì)應(yīng)于不同的進(jìn)程,后者的保護(hù)和前者的保護(hù)和恢復(fù)往往對(duì)應(yīng)于不同的進(jìn)程,后者的保護(hù)和 恢恢 復(fù)對(duì)應(yīng)于相同的進(jìn)程復(fù)對(duì)應(yīng)于相同的進(jìn)程 前者可保護(hù)在前者可保護(hù)在PCBPCB中,后者只能保護(hù)在堆棧中中,后者只能保護(hù)在堆棧中(中斷可嵌套)(中斷可嵌套)進(jìn)程調(diào)度現(xiàn)場(chǎng)與中斷現(xiàn)場(chǎng)有什么異同?3.5 3.5 進(jìn)程控制及其應(yīng)用進(jìn)程控制及其應(yīng)用 進(jìn)程控制就是控制進(jìn)程的狀態(tài)變化,指進(jìn)程進(jìn)程控制就是控制進(jìn)程的狀態(tài)變化,指進(jìn)程的創(chuàng)建、終止、封鎖、解除封鎖等工作。系
35、的創(chuàng)建、終止、封鎖、解除封鎖等工作。系統(tǒng)內(nèi)部有相應(yīng)的子程序來(lái)完成這些工作,并統(tǒng)內(nèi)部有相應(yīng)的子程序來(lái)完成這些工作,并向用戶提供相應(yīng)的系統(tǒng)調(diào)用,用戶可通過(guò)這向用戶提供相應(yīng)的系統(tǒng)調(diào)用,用戶可通過(guò)這些系統(tǒng)調(diào)用來(lái)控制自己的進(jìn)程些系統(tǒng)調(diào)用來(lái)控制自己的進(jìn)程 。3.5.1 UNIX3.5.1 UNIX系統(tǒng)中關(guān)于進(jìn)程控制的系統(tǒng)調(diào)用系統(tǒng)中關(guān)于進(jìn)程控制的系統(tǒng)調(diào)用(C語(yǔ)言函數(shù)形式參見P156-159)1 1、fork( )(fork( )(進(jìn)程創(chuàng)建進(jìn)程創(chuàng)建) ):調(diào)用者用它來(lái)建立一個(gè)子進(jìn)程與調(diào)用者用它來(lái)建立一個(gè)子進(jìn)程與自己獨(dú)立地并發(fā)地運(yùn)行,這個(gè)子進(jìn)程基本上拷貝父進(jìn)程的上下文自己獨(dú)立地并發(fā)地運(yùn)行,這個(gè)子進(jìn)程基本上拷貝父
36、進(jìn)程的上下文(正文段共享)。(正文段共享)。fork()fork()的返回值為的返回值為 -1-1表示進(jìn)程創(chuàng)建不成功表示進(jìn)程創(chuàng)建不成功在父進(jìn)程的上下文中,在父進(jìn)程的上下文中, fork()fork() 返回值為子進(jìn)程標(biāo)識(shí)號(hào)返回值為子進(jìn)程標(biāo)識(shí)號(hào), ,大于大于0 0在子進(jìn)程的上下文中,在子進(jìn)程的上下文中, fork()fork()的返回值等于的返回值等于0 02 2、wait(wait(、)( )(進(jìn)程掛起等待(封鎖)進(jìn)程掛起等待(封鎖)) ):調(diào)用調(diào)用者進(jìn)入封鎖狀態(tài)等待它的子進(jìn)程終止。者進(jìn)入封鎖狀態(tài)等待它的子進(jìn)程終止。3 3、 exit()(exit()(進(jìn)程終止進(jìn)程終止) ):調(diào)用者將終止自己
37、,并解除調(diào)用者將終止自己,并解除父進(jìn)程的封鎖。父進(jìn)程的封鎖。4 4、execvp(filename,argp)(execvp(filename,argp)(進(jìn)程上下文更換進(jìn)程上下文更換) ):用文件名用文件名filenamefilename所指定的可執(zhí)行文件來(lái)替換當(dāng)前進(jìn)程所指定的可執(zhí)行文件來(lái)替換當(dāng)前進(jìn)程上下文中的程序和數(shù)據(jù)部分,并轉(zhuǎn)入執(zhí)行之。上下文中的程序和數(shù)據(jù)部分,并轉(zhuǎn)入執(zhí)行之。 fork()fork()系統(tǒng)調(diào)用的主要工作流程系統(tǒng)調(diào)用的主要工作流程(參見P157) 進(jìn)程創(chuàng)建進(jìn)程創(chuàng)建fork()fork()系統(tǒng)調(diào)用的效果系統(tǒng)調(diào)用的效果 (P(Pf f和和P Ps s分別表示父進(jìn)程和子進(jìn)程分別表
38、示父進(jìn)程和子進(jìn)程) )fork()fork()系統(tǒng)調(diào)用的粗略效果系統(tǒng)調(diào)用的粗略效果( (正文段和數(shù)據(jù)段不分正文段和數(shù)據(jù)段不分) )基本上基本上(P(Pf f和和P Ps s分別表示父進(jìn)程和子進(jìn)程分別表示父進(jìn)程和子進(jìn)程) )fork()系統(tǒng)調(diào)用的粗略效果(正文段和數(shù)據(jù)段不分) (Pf和Ps分別表示父進(jìn)程和子進(jìn)程, ro為PDP11機(jī)器的指令寄存器)Proc-Proc3.5.2 UNIX3.5.2 UNIX系統(tǒng)進(jìn)程控制系統(tǒng)調(diào)用應(yīng)用舉例系統(tǒng)進(jìn)程控制系統(tǒng)調(diào)用應(yīng)用舉例例:例:shellshell(命令處理程序)的實(shí)現(xiàn)流程(命令處理程序)的實(shí)現(xiàn)流程 (參見(參見P158P158)讀入命令行讀入命令行i=f
39、ork()父進(jìn)程父進(jìn)程wait(i)(等待子進(jìn)程結(jié)束等待子進(jìn)程結(jié)束)execvp(filename,)(用命令行對(duì)應(yīng)的可執(zhí)行文用命令行對(duì)應(yīng)的可執(zhí)行文件替換子進(jìn)程上下文的程序件替換子進(jìn)程上下文的程序和數(shù)據(jù),并轉(zhuǎn)入執(zhí)行和數(shù)據(jù),并轉(zhuǎn)入執(zhí)行)exit(、) (子進(jìn)程自子進(jìn)程自我終止并喚醒父進(jìn)程我終止并喚醒父進(jìn)程)N、外部命令外部命令 i=-1YYNi0YN(i=0)標(biāo)準(zhǔn)輸入輸出轉(zhuǎn)向處理標(biāo)準(zhǔn)輸入輸出轉(zhuǎn)向處理子進(jìn)程子進(jìn)程Shell主要工作流程主要工作流程 父進(jìn)程父進(jìn)程例:例:shellshell(命令處理程序)的實(shí)現(xiàn)程序框架(命令處理程序)的實(shí)現(xiàn)程序框架main()main() int i; int i;
40、 char command100 ; char command100 ; char char * * prompt = prompt = “$ $” ; ; while(printf( while(printf(“%s%s”, prompt), gets(command) !=NULL ), prompt), gets(command) !=NULL ) / / “顯示顯示UNIXUNIX系統(tǒng)終端提示符系統(tǒng)終端提示符$ $ ”, , “接收用戶輸入的字符串(命令行)接收用戶輸入的字符串(命令行)” ; 、 if(if(“commandcommand是外部命令是外部命令” while( (i=f
41、ork() = - 1 );while( (i=fork() = - 1 ); if (i = 0 )if (i = 0 ) execvp (filename, execvp (filename, 、 ) ) / / 更換子進(jìn)程上下文的程序和數(shù)據(jù)更換子進(jìn)程上下文的程序和數(shù)據(jù) / filename/ filename為找到的為找到的commandcommand對(duì)應(yīng)的可執(zhí)行文件的路徑名稱對(duì)應(yīng)的可執(zhí)行文件的路徑名稱 elseelse wait(i); wait(i); 例:例:shellshell(命令處理程序)的一些說(shuō)明(命令處理程序)的一些說(shuō)明注意:注意:如果命令行結(jié)尾為后臺(tái)命令符如果命令行結(jié)尾
42、為后臺(tái)命令符“&”,則父進(jìn)程不執(zhí),則父進(jìn)程不執(zhí)行行wait().wait().某些簡(jiǎn)單命令的程序代碼就在某些簡(jiǎn)單命令的程序代碼就在shellshell中,不必創(chuàng)建子中,不必創(chuàng)建子進(jìn)程。特別是進(jìn)程。特別是loginlogin,logoutlogout,chain (logoutchain (logout終止終端終止終端shellshell進(jìn)程,進(jìn)程,chainchain改變當(dāng)前目錄改變當(dāng)前目錄) )等等對(duì)于復(fù)雜的命令行要?jiǎng)?chuàng)建一系列進(jìn)程,分別執(zhí)行組對(duì)于復(fù)雜的命令行要?jiǎng)?chuàng)建一系列進(jìn)程,分別執(zhí)行組成復(fù)雜命令行的各個(gè)簡(jiǎn)單命令。例如:對(duì)命令行成復(fù)雜命令行的各個(gè)簡(jiǎn)單命令。例如:對(duì)命令行 C1|C2|C
43、3 C1|C2|C3 ,父進(jìn)程,父進(jìn)程P P要連續(xù)地創(chuàng)建三個(gè)子進(jìn)程要連續(xù)地創(chuàng)建三個(gè)子進(jìn)程P1,P2,P3P1,P2,P3,分別執(zhí)行,分別執(zhí)行C1C1,C2C2,C3C3,并等待他們,并等待他們都終止。都終止。對(duì)過(guò)程文件的解釋執(zhí)行程序也在對(duì)過(guò)程文件的解釋執(zhí)行程序也在shellshell中,比較復(fù)雜。中,比較復(fù)雜。例:典型的例:典型的C C語(yǔ)言并發(fā)程序結(jié)構(gòu)語(yǔ)言并發(fā)程序結(jié)構(gòu)main ( ) main ( ) int i;int i;P1;P1;while(i=fork() = -1);while(i=fork() = -1);if(i = 0)if(i = 0) Pc;Pc;exit();exit(
44、);elseelse P2;P2;wait();wait();P3;P3; P1P1 、 Pc Pc 、 P2 P2 、P3P3分別是不同的程序段。分別是不同的程序段。* *提問(wèn):提問(wèn):該程序的執(zhí)行對(duì)應(yīng)幾個(gè)進(jìn)程?該程序的執(zhí)行對(duì)應(yīng)幾個(gè)進(jìn)程?各進(jìn)程執(zhí)行哪些程序段?各進(jìn)程執(zhí)行哪些程序段?* *提問(wèn):提問(wèn):該程序的執(zhí)行對(duì)應(yīng)幾個(gè)進(jìn)程?該程序的執(zhí)行對(duì)應(yīng)幾個(gè)進(jìn)程?各進(jìn)程執(zhí)行哪些程序段?各進(jìn)程執(zhí)行哪些程序段?P1P1P2P2P3P3PcPc子進(jìn)程子進(jìn)程父進(jìn)程父進(jìn)程P2 與與Pc可以并發(fā)執(zhí)行??梢圆l(fā)執(zhí)行。T TP1P1P2P2P3P3PcPc父進(jìn)程父進(jìn)程原題執(zhí)行效果圖示原題執(zhí)行效果圖示( (P2 P2 與與P
45、cPc并發(fā)執(zhí)行并發(fā)執(zhí)行) )T TP1P1P2P2P3P3PcPcT TP1P1P2P2P3P3PcPcT T省掉省掉wait(i)wait(i)語(yǔ)句執(zhí)行效果圖示語(yǔ)句執(zhí)行效果圖示省掉省掉exit()exit()語(yǔ)句執(zhí)行效果圖示語(yǔ)句執(zhí)行效果圖示P3P3父進(jìn)程父進(jìn)程父進(jìn)程父進(jìn)程子進(jìn)程子進(jìn)程子進(jìn)程子進(jìn)程子進(jìn)程子進(jìn)程例:例:C C語(yǔ)言并發(fā)程序結(jié)構(gòu)之二語(yǔ)言并發(fā)程序結(jié)構(gòu)之二main ( ) main ( ) int i;int i;P1;P1;while(i=fork() = -1);while(i=fork() = -1);if(i = 0)if(i = 0) Pc;Pc;i=fork() ;i=for
46、k() ;exit(); exit(); elseelse P2;P2;i=fork() ;i=fork() ;wait(); wait(); P3;P3; * *提問(wèn):提問(wèn):該程序的執(zhí)行對(duì)應(yīng)幾個(gè)進(jìn)程?該程序的執(zhí)行對(duì)應(yīng)幾個(gè)進(jìn)程?各進(jìn)程什么關(guān)系?各進(jìn)程什么關(guān)系?如果省略如果省略“exit();exit();”會(huì)怎樣?會(huì)怎樣?如果省略如果省略“wait();wait();”會(huì)怎樣?會(huì)怎樣? P1P1P2P2P3P3PcPcP Pf fT TP Ps1s1P Ps2s2P Ps1ss1sP3P3P Pf fP Ps1s1P Ps2s2P Ps1ss1s。main ( ) main ( ) int i
47、; int i; P1; P1; while(i=fork() = -1); while(i=fork() = -1); if(i = 0) if(i = 0) Pc; Pc; i=fork() ; i=fork() ; exit(); exit(); else else P2;P2;i=fork() ;i=fork() ;wait(); wait(); P3; P3; P1P1P2P2P3P3PcPcP Pf fT TP Ps1s1P Ps2s2P Ps1ss1sP3P3原題執(zhí)行效果圖示原題執(zhí)行效果圖示(P2 (P2 與與PcPc并發(fā)執(zhí)行并發(fā)執(zhí)行) )P1P1P2P2P3P3PcPcP Pf
48、 fT TP Ps1s1P Ps2s2P Ps1ss1sP3P3P1P1P2P2P3P3PcPcP Pf fT TP Ps1s1P Ps2s2P Ps1ss1sP3P3省略省略“exit();”exit();”的時(shí)序圖的時(shí)序圖省略省略“wait();”wait();”的時(shí)序圖的時(shí)序圖main ( ) main ( ) int i;int i;P1; while(i=fork()=-1);P1; while(i=fork()=-1);if(i=0)if(i=0) Pc;Pc; while(i=fork()=-1); while(i=fork()=-1);if(i=0)if(i=0) P1; ex
49、it() P1; exit()elseelse P2; wait(); P2; wait(); exit() exit() elseelse P2; while(i=fork()=-1); P2; while(i=fork()=-1); if(i=0) if(i=0) P21; exit() P21; exit() else else P22 P22 wait(); wait(); P3;P3; 例:使用例:使用fork()fork()的的C C語(yǔ)言程序的例子語(yǔ)言程序的例子#include #include main() main() int pidint pid,i; i; while(pi
50、d=fork()=-1); while(pid=fork()=-1); if(pid!=0) if(pid!=0) while(1) while(1) for(i=0;i100000000;i+); for(i=0;i100000000;i+); printf(parent); printf(parent); else else while(1) while(1) for(i=0;i100000000;i+); for(i=0;i100000000;i+); printf(child); printf(child); 例:使用例:使用fork()fork()的的C C語(yǔ)言程序的例子語(yǔ)言程序的例
51、子 創(chuàng)建一個(gè)三進(jìn)程的程序,第一個(gè)子進(jìn)程顯示創(chuàng)建一個(gè)三進(jìn)程的程序,第一個(gè)子進(jìn)程顯示a,a,第二個(gè)子進(jìn)程顯示第二個(gè)子進(jìn)程顯示b,b,父進(jìn)程顯示父進(jìn)程顯示c c。 多次執(zhí)行,并分析執(zhí)行結(jié)果產(chǎn)生的原因。多次執(zhí)行,并分析執(zhí)行結(jié)果產(chǎn)生的原因。#include #include main() main() int pid,pid1; int pid,pid1; while(pid=fork()= =-1); while(pid=fork()= =-1); if(pid!=0) if(pid!=0) While(pid1=fork()= =-1); While(pid1=fork()= =-1); if(pi
52、d1!=0) if(pid1!=0) printf( printf(“c c”); ); else else printf( printf(“b b”); ); else else printf( printf(“a a”); ); 例:使用例:使用fork()fork()的的C C語(yǔ)言程序的例子語(yǔ)言程序的例子 創(chuàng)建一個(gè)三進(jìn)程的程序,第一個(gè)子進(jìn)程顯示創(chuàng)建一個(gè)三進(jìn)程的程序,第一個(gè)子進(jìn)程顯示a,a,第二個(gè)子進(jìn)程顯示第二個(gè)子進(jìn)程顯示b,b,父進(jìn)程顯示父進(jìn)程顯示c c。 多次執(zhí)行,并分析執(zhí)行結(jié)果產(chǎn)生的原因。多次執(zhí)行,并分析執(zhí)行結(jié)果產(chǎn)生的原因。#include #include main() main(
53、) int pid,pid1; int pid,pid1; while(pid=fork()= =-1); while(pid=fork()= =-1); if(pid!=0) if(pid!=0) While(pid1=fork()= =-1); While(pid1=fork()= =-1); if(pid1!=0) if(pid1!=0) printf( printf(“c c”); ); else else printf( printf(“b b”); ); else else printf( printf(“a a”); ); 程序運(yùn)行結(jié)果可能是程序運(yùn)行結(jié)果可能是abc,abc,也可
54、能是也可能是cba,cba,還可能是還可能是bcabca、acbacb、cabcab、cbacba等。等。出現(xiàn)多種運(yùn)行結(jié)果主要由于父進(jìn)程創(chuàng)建出現(xiàn)多種運(yùn)行結(jié)果主要由于父進(jìn)程創(chuàng)建子進(jìn)程之后,系統(tǒng)的調(diào)度是隨機(jī)的,可子進(jìn)程之后,系統(tǒng)的調(diào)度是隨機(jī)的,可能先調(diào)度子進(jìn)程,也可能先調(diào)度父進(jìn)程。能先調(diào)度子進(jìn)程,也可能先調(diào)度父進(jìn)程。例例3 3:進(jìn)程并發(fā)的文件拷貝程序:進(jìn)程并發(fā)的文件拷貝程序(先參見(先參見P34P34、P71P71)#include #include #define PMODE 0644#define PMODE 0644#define BSIZE 512#define BSIZE 512main
55、(int argc, char main(int argc, char * *argv)argv) int x, fdr, fdw, n, fdp2int x, fdr, fdw, n, fdp2; char abufBSIZEchar abufBSIZE; fdr=open(argv1,0);fdr=open(argv1,0); fdw=open(argv2, PMODE);fdw=open(argv2, PMODE); pipe(fdp);pipe(fdp); while(x=fork()=-1);while(x=fork()=-1); if (x=0)if (x=0) while(n=r
56、ead(fdr,abuf,BSIZE)0)while(n=read(fdr,abuf,BSIZE)0) write(fdp1,abuf,n);write(fdp1,abuf,n); elseelse while(n=read(fdp0,abuf,BSIZE)0)while(n=read(fdp0,abuf,BSIZE)0) write(fdw,abuf,n);write(fdw,abuf,n); 3.5.2 UNIX3.5.2 UNIX系統(tǒng)啟動(dòng)及進(jìn)程樹的形成系統(tǒng)啟動(dòng)及進(jìn)程樹的形成3.5.2 UNIX3.5.2 UNIX系統(tǒng)啟動(dòng)及進(jìn)程樹的形成系統(tǒng)啟動(dòng)及進(jìn)程樹的形成UNIXUNIX進(jìn)程的樹型體系進(jìn)
57、程的樹型體系 P0P1P2nP20P2iP30P400#進(jìn)程進(jìn)程1#進(jìn)程進(jìn)程終端進(jìn)程終端進(jìn)程命令行對(duì)應(yīng)的進(jìn)程命令行對(duì)應(yīng)的進(jìn)程程序中創(chuàng)建的子進(jìn)程程序中創(chuàng)建的子進(jìn)程。P3m。P4k3.6.13.6.1進(jìn)程同步進(jìn)程同步共同完成某項(xiàng)任務(wù)的多個(gè)進(jìn)程往往要在并發(fā)執(zhí)行過(guò)程的某共同完成某項(xiàng)任務(wù)的多個(gè)進(jìn)程往往要在并發(fā)執(zhí)行過(guò)程的某些點(diǎn)上相互等待、互通消息,這些進(jìn)程之間具有直接的邏輯的些點(diǎn)上相互等待、互通消息,這些進(jìn)程之間具有直接的邏輯的制約關(guān)系。制約關(guān)系。例例1 1:PiPi、PcPc和和PoPo分別為輸入進(jìn)程、計(jì)算進(jìn)程和輸出進(jìn)程,分別為輸入進(jìn)程、計(jì)算進(jìn)程和輸出進(jìn)程,PiPi 輸入緩沖區(qū)輸入緩沖區(qū) PcPc 輸出
58、緩沖區(qū)輸出緩沖區(qū) PoPo這些進(jìn)程之間的同步關(guān)系為:這些進(jìn)程之間的同步關(guān)系為:)、)、PiPi與與PcPc同步同步a) a) 輸入緩沖區(qū)滿時(shí),輸入緩沖區(qū)滿時(shí),PiPi要等待要等待PcPcb) b) 輸入緩沖區(qū)空時(shí),輸入緩沖區(qū)空時(shí),PcPc要等待要等待PiPi)、)、PcPc與與PoPo同步同步a) a) 輸出緩沖區(qū)滿時(shí),輸出緩沖區(qū)滿時(shí),PcPc要等待要等待PoPob) b) 輸出緩沖區(qū)空時(shí),輸出緩沖區(qū)空時(shí),PoPo要等待要等待PcPc3.6 3.6 進(jìn)程通信進(jìn)程通信由進(jìn)程的并發(fā)執(zhí)行和資源共享引起的進(jìn)程之間相由進(jìn)程的并發(fā)執(zhí)行和資源共享引起的進(jìn)程之間相互制約的等待或互通消息?;ブ萍s的等待或互通消息
59、。例2:讀寫管道文件的進(jìn)程之間的同步關(guān)系為:Pw(寫管道進(jìn)程寫管道進(jìn)程) Pr(讀管道進(jìn)程讀管道進(jìn)程) 管道文件管道文件 a) 管道文件空時(shí),管道文件空時(shí),Pr要等待要等待Pwb) 管道文件滿時(shí),管道文件滿時(shí),Pw要等待要等待Pr3.6.23.6.2進(jìn)程互斥進(jìn)程互斥系統(tǒng)中本來(lái)沒有邏輯關(guān)系的多個(gè)進(jìn)程因?yàn)楦?jìng)爭(zhēng)使用資源而產(chǎn)生的間接制約關(guān)系。例如:系統(tǒng)中countp表示空閑打印機(jī)的臺(tái)數(shù),每個(gè)進(jìn)程釋放打印機(jī)都會(huì)執(zhí)行 countp + +,所以countp為共享變量。設(shè)當(dāng)前countp=0,之后執(zhí)行的兩個(gè)進(jìn)程P1和P2都有釋放打印機(jī)的操作,即都要執(zhí)行下列程序段A(相當(dāng)于語(yǔ)句 countp + +)(R為寄
60、存器): R = countpA R = R + 1 中斷 countp = R1)如果P1、P2依次執(zhí)行程序段A,則countp等于2,結(jié)果正確。2)如果P1先進(jìn)入程序段A,執(zhí)行完“R = R + 1”指令后發(fā)生中斷,中斷處理后進(jìn)程調(diào)度選中P2占用處理機(jī),P2執(zhí)行完程序段A,、。之后P1再次獲得處理機(jī)執(zhí)行“countp = R” 指令后countp等于1,結(jié)果錯(cuò)誤。設(shè)countp的初值為0P1: R countp countp=0 R=0 R R+1 countp=0 R=1中斷處理進(jìn)程調(diào)度程序(保護(hù)P1現(xiàn)場(chǎng):現(xiàn)場(chǎng)中R=1;調(diào)度選中P2)P2: R countp countp=0 R=0 R R+1
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度VIP會(huì)員高端健身與美容服務(wù)協(xié)議3篇
- 二零二四天津住宅裝修工程安全文明施工合同3篇
- 2024版牛肉進(jìn)口商業(yè)交易協(xié)議細(xì)則版
- 2024老舊倉(cāng)庫(kù)創(chuàng)意產(chǎn)業(yè)園區(qū)開發(fā)協(xié)議
- 2025年度承兌匯票擔(dān)保與銀行間市場(chǎng)利率衍生品合同3篇
- 二零二五版9A文條款離婚協(xié)議律師代理服務(wù)合同3篇
- 基于2025年度需求的全息標(biāo)識(shí)牌制作與安裝合同3篇
- 二零二五年高端葡萄酒進(jìn)口與代理合同2篇
- 2025年度林木種質(zhì)資源保護(hù)與利用合同范本4篇
- 2025年度綠色建筑節(jié)能改造分包合同低碳環(huán)保2篇
- 國(guó)家自然科學(xué)基金項(xiàng)目申請(qǐng)書
- 電力電纜故障分析報(bào)告
- 中國(guó)電信網(wǎng)絡(luò)資源管理系統(tǒng)介紹
- 2024年浙江首考高考選考技術(shù)試卷試題真題(答案詳解)
- 《品牌形象設(shè)計(jì)》課件
- 倉(cāng)庫(kù)管理基礎(chǔ)知識(shí)培訓(xùn)課件1
- 藥品的收貨與驗(yàn)收培訓(xùn)課件
- GH-T 1388-2022 脫水大蒜標(biāo)準(zhǔn)規(guī)范
- 高中英語(yǔ)人教版必修第一二冊(cè)語(yǔ)境記單詞清單
- 政府機(jī)關(guān)保潔服務(wù)投標(biāo)方案(技術(shù)方案)
- HIV感染者合并慢性腎病的治療指南
評(píng)論
0/150
提交評(píng)論