實(shí)驗(yàn)二進(jìn)程管理實(shí)驗(yàn)報(bào)告_第1頁
實(shí)驗(yàn)二進(jìn)程管理實(shí)驗(yàn)報(bào)告_第2頁
實(shí)驗(yàn)二進(jìn)程管理實(shí)驗(yàn)報(bào)告_第3頁
實(shí)驗(yàn)二進(jìn)程管理實(shí)驗(yàn)報(bào)告_第4頁
實(shí)驗(yàn)二進(jìn)程管理實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、實(shí)驗(yàn)二進(jìn)程管理實(shí)驗(yàn)報(bào)告學(xué)號(hào)姓名班級(jí)電&工程系進(jìn)程、進(jìn)程控制塊等的基本原理一進(jìn)程基本原理(1) 進(jìn)程的含義:進(jìn)程是程序在一個(gè)數(shù)據(jù)集合的上的運(yùn)行過程,是系統(tǒng)資源分 配和調(diào)度的一個(gè)獨(dú)立單位。一個(gè)程序在不同數(shù)據(jù)集合上的運(yùn)行,乃至一個(gè) 程序在同樣數(shù)據(jù)集合上的多次運(yùn)行都是不同的進(jìn)程。(2)程序的狀態(tài):通常情況下,一個(gè)程序須具有就緒、執(zhí)行和阻塞3種基本狀 態(tài)。但在很多系統(tǒng)屮萎了更好的描述進(jìn)程的狀態(tài)變化,又增加了兩種兩種 狀態(tài),新狀態(tài)、終止?fàn)顟B(tài)1)就緒狀態(tài)當(dāng)進(jìn)程已分配到除處理器(cpu)以外的所有必要資源后,只要再獲得處理器就 可以立即執(zhí)行,這時(shí)進(jìn)程的狀態(tài)就叫做就緒狀態(tài)。在一個(gè)系統(tǒng)里,可以有多個(gè)進(jìn) 程

2、同時(shí)處于就緒狀態(tài),通常把這些就緒進(jìn)程排成一個(gè)或多個(gè)隊(duì)列,稱為就緒隊(duì)列。2)執(zhí)行狀態(tài)處于就緒狀態(tài)的進(jìn)程一旦獲得處理器,就可以運(yùn)行,進(jìn)程的狀態(tài)就稱為執(zhí)行狀態(tài), 在單處理器的系統(tǒng)屮只能有一個(gè)進(jìn)程處于執(zhí)行狀態(tài),在多處理器系統(tǒng)屮,則可能 有多個(gè)進(jìn)程處于執(zhí)行狀態(tài)。3)阻塞狀態(tài)正在執(zhí)行的進(jìn)程因?yàn)榘l(fā)生某些事件(如請(qǐng)求輸入輸出、巾請(qǐng)額外空間等),而暫 停運(yùn)行,這種受阻暫停的狀態(tài)就稱為阻塞狀態(tài),也稱為等待狀態(tài)。通常將處于阻 塞狀態(tài)的進(jìn)程排成-個(gè)隊(duì)列,稱為阻塞隊(duì)列,4)新狀態(tài)當(dāng)個(gè)新進(jìn)程剛剛建立,還未將其放入就緒隊(duì)列的狀態(tài),稱為新狀態(tài)。5)終止?fàn)顟B(tài)當(dāng)-個(gè)進(jìn)程已經(jīng)正常結(jié)束或異常結(jié)束時(shí),操作系統(tǒng)已將其從系統(tǒng)隊(duì)列中移出,但

3、 尚未撤銷,這是稱為終止?fàn)顟B(tài)。(3)進(jìn)程狀態(tài)之間的轉(zhuǎn)換進(jìn)程狀態(tài)轉(zhuǎn)換示意圖:二進(jìn)程控制塊的基本原理1. 進(jìn)程控制塊的作用:進(jìn)程控制塊是構(gòu)成進(jìn)程實(shí)體的重要組成部分,是操作系統(tǒng)的中最重要的記錄型數(shù)據(jù),在進(jìn)程 控制塊pcb中記錄了操作系統(tǒng)所需要的用于描述進(jìn)程情況及控制進(jìn)程運(yùn)行所需要的全部信 息。通過pcb,能夠使得原來不能獨(dú)立運(yùn)行的程序成為一個(gè)可以獨(dú)立運(yùn)行的基本單位,一 個(gè)能夠并發(fā)執(zhí)行的進(jìn)程。換句話說,在進(jìn)程的整個(gè)生命周期中,操作系統(tǒng)都要通過進(jìn)程的 pcb來對(duì)并發(fā)執(zhí)行的進(jìn)程進(jìn)行管理和控制,進(jìn)程控制塊是系統(tǒng)對(duì)進(jìn)程控制采用的數(shù)據(jù)結(jié)構(gòu), 系統(tǒng)是根據(jù)進(jìn)程的pcb而感知進(jìn)程是否存在。所以,進(jìn)程控制塊是進(jìn)程存在的

4、唯一標(biāo)志。當(dāng)系統(tǒng)創(chuàng)建一個(gè)進(jìn)程時(shí),就要為他建立一個(gè)pcb;進(jìn)程結(jié)束時(shí),系統(tǒng)又回收其pcb,進(jìn)程 隨之消亡。2. 進(jìn)程控制塊的內(nèi)容進(jìn)程控制塊主要包括下述4個(gè)方面的信息。1) 進(jìn)程標(biāo)識(shí)信息進(jìn)程標(biāo)識(shí)符用于標(biāo)識(shí)一個(gè)進(jìn)程,通常有外部標(biāo)識(shí)符和內(nèi)部標(biāo)識(shí)符兩種。(1) 外部標(biāo)識(shí)符由進(jìn)程創(chuàng)建者命名,通常由字母,數(shù)字所組成的一個(gè)字符串,在用戶訪問該進(jìn)程時(shí)使用, 外部標(biāo)識(shí)符都便于記憶。(2) 內(nèi)部標(biāo)識(shí)符是為方便系統(tǒng)使用而設(shè)置的,操作系統(tǒng)為每一個(gè)進(jìn)程賦予了唯一的一個(gè)整數(shù),作為內(nèi)部 標(biāo)識(shí)符。它通常是一個(gè)進(jìn)程的序號(hào)。2) 說明信息(進(jìn)程調(diào)度消息)說明信息是有關(guān)進(jìn)程狀態(tài)的一些與進(jìn)程調(diào)度有關(guān)的信息,包括以下兒個(gè)方而。(1) 進(jìn)

5、程狀態(tài):指明當(dāng)前進(jìn)程的狀態(tài),作為進(jìn)程調(diào)度和對(duì)換時(shí)的依據(jù)。(2) 進(jìn)程優(yōu)先權(quán)::用于描述進(jìn)程使用處理器的優(yōu)先級(jí)別,通常是一個(gè)整數(shù),優(yōu)先權(quán)高 的進(jìn)程可以優(yōu)先獲得處理器。(3) 進(jìn)程調(diào)度所需的其他信息:其內(nèi)容與所采用的進(jìn)程調(diào)度有關(guān)(4) 阻塞事件:是指進(jìn)程由執(zhí)行狀態(tài)轉(zhuǎn)變到阻塞狀態(tài)的等待所發(fā)生的事件,即阻塞原 因3) 現(xiàn)場信息(處理器狀態(tài)信息)現(xiàn)場信息是用于保留存放在處理器的各種信息。主耍曲處理器內(nèi)的各個(gè)寄存器的內(nèi)容組成。(1) 通用寄存器(2) 指令計(jì)數(shù)器(3) 程序狀態(tài)字(4) 用戶棧指針其中內(nèi)容可被用戶訪問,用于暫存信息。用于存放要訪問的下一條指令的地址用于保存當(dāng)前處理器狀態(tài)的信息用于存放過程和

6、系統(tǒng)調(diào)用的參數(shù)及調(diào)用地址,棧指針指向堆棧的棧頂。4) 管理信息(進(jìn)程控制信息)(1) 程序和數(shù)據(jù)的地址:它是指該進(jìn)程的程序和數(shù)據(jù)所在的主存和外存地址,以便該 進(jìn)程再次執(zhí)行時(shí),能夠找到程序和數(shù)據(jù)。(2) 進(jìn)程同步和通信機(jī)制:它是指實(shí)現(xiàn)進(jìn)程同步和進(jìn)程通信時(shí)所采用的機(jī)制,如消息 隊(duì)列、指針、信號(hào)量等。(3) 資源清單:該清單中存放了出了 cpu以外,進(jìn)程所需的全部資源和已經(jīng)分配到 的資源。(4) 鏈接指針:它將指向該進(jìn)程所在隊(duì)列的下一個(gè)進(jìn)程的pcb首地址。3進(jìn)程控制塊的組織方式常用的組織方式有鏈接方式和索引方式。4 進(jìn)程控制原語原語是指具有特定功能的不可被中斷的過程。他主耍用于實(shí)現(xiàn)操作系統(tǒng)的一些專門

7、控制 操作。用于進(jìn)程控制的原語有以下兒種:(1) 創(chuàng)建原語:用于為一個(gè)進(jìn)程分配工作區(qū)和和建立pcb,置該進(jìn)程為就緒狀態(tài)(2) 撤銷原語:用于一個(gè)進(jìn)程工作完后,收回它的工作區(qū)和pcb(3) 阻塞原語:用丁進(jìn)程在運(yùn)行過程屮發(fā)生等待進(jìn)程,把進(jìn)程的狀態(tài)改為等待狀態(tài)(4) 喚醒原語:用于當(dāng)進(jìn)程等待的事件結(jié)束時(shí),把進(jìn)程的狀態(tài)改為就緒狀態(tài)三、進(jìn)程的創(chuàng)建和撤銷1 進(jìn)程的創(chuàng)建1)為新進(jìn)程分配唯一的進(jìn)程標(biāo)識(shí)符,并從pcb隊(duì)列中巾請(qǐng)一個(gè)空閑pcb2)為新進(jìn)程的程序和數(shù)據(jù)和用戶棧分配相應(yīng)的主存空間及其其他的必要資源3)初始化pcb中的相應(yīng)信息,如標(biāo)識(shí)信息、處理器信息、進(jìn)程控制信息等4)如果就緒隊(duì)列可以接納新進(jìn)程,便將

8、新進(jìn)程加入到就緒隊(duì)列屮2 進(jìn)程的程序1)根進(jìn)程的據(jù)被終止的標(biāo)識(shí)符,從pcb集合小檢索該進(jìn)程的pcb,讀出進(jìn)程狀態(tài)2)若進(jìn)程處于執(zhí)行狀態(tài),則立即終止該進(jìn)程的狀態(tài)3)將該進(jìn)程的子孫程序終止4)將該進(jìn)程占用的資源回收,歸還給其父進(jìn)程或操作系統(tǒng)5)將被終止的進(jìn)程的pcb從所在的隊(duì)列屮移出,并撤銷該進(jìn)程的pcb四、進(jìn)程的阻塞和喚醒1 .進(jìn)程的阻塞1)立即停止執(zhí)行該進(jìn)程2)修改進(jìn)程的控制塊的相關(guān)信息。進(jìn)執(zhí)行狀態(tài)改為阻塞狀態(tài)3)把進(jìn)程控制塊插入到阻寒隊(duì)列4)待調(diào)度程序重新調(diào)度,運(yùn)行就緒隊(duì)列中的其他進(jìn)程2.進(jìn)程的喚酥1)從阻塞隊(duì)列中找到該程序2)修改和關(guān)信息,把阻塞狀態(tài)改為就緒狀態(tài)3)把控制塊插入到就緒隊(duì)列小

9、程序流程圖 輸入耍喚醒 進(jìn)程的名稱輸入要?dú)⑺?進(jìn)程的名稱輸入進(jìn)程優(yōu) 先級(jí)顯示進(jìn)程狀 況成功換出進(jìn) 程成功殺死進(jìn) 程成功喚醒進(jìn) 程輸入進(jìn)程人 小輸入進(jìn)程內(nèi) 容結(jié)束程序及注釋#include<stdio.h>#include<stdlib.h>#include< stri ng. h>struct jincheng_typeint pid; 進(jìn)程標(biāo)識(shí)符int youxian; 進(jìn)程優(yōu)先級(jí)int daxiao; 進(jìn)程占用內(nèi)存int zhuangtai;/志進(jìn)程狀態(tài),0為不在內(nèi)存,1為在內(nèi)存,3為掛起 char info10; 進(jìn)程內(nèi)容;struct jinchen

10、g_type neicun20j;int shumu=o,guaqi=o,pid,flag=o;void create() if(shumu>=20)printf(hn內(nèi)存已滿,請(qǐng)先換出或殺死進(jìn)程n”); elsefor(int i=0;i<20;i+)定位,找到可以還未創(chuàng)建的進(jìn)程 if(neicuni.zhuangtai=o)break; printf(nn請(qǐng)輸入新進(jìn)程pidnn); scanf(n%d",&(neicuni.pid);for(int j=o;j<i;j+)if(neicuni.pid=neicunj.pid)printf("n該

11、進(jìn)程己存在n“);return;printf("n請(qǐng)輸入新進(jìn)程優(yōu)先級(jí)n”); scanf(” d",&( neicuni.youxian); printf("n請(qǐng)輸入新進(jìn)程大小n“); scanf("%du, &( neicuni.daxiao);printf(hn請(qǐng)輸入新進(jìn)程內(nèi)容n”); scanf(n%s",&();創(chuàng)建進(jìn)程,使標(biāo)記為1neicuni.zhuangtai= 1;shumu+4-;void run()for(int i=0;iv20;i+)if(neicuni.zhuangtai

12、=l)輸出運(yùn)行進(jìn)程的各個(gè)屬性值printf(hn pid= %d h,neicunij.pid);printf(nyouxian= %d n5neicunij.youxian); printf(ndaxiao= %d ,neicuni.daxiao); printf(nzhuangtai= %d m,neicuni.zhuangtai); printf("infb= %s r,);flag=l;if(!flag)printf("n當(dāng)前沒有運(yùn)行進(jìn)程n“);void huanchu()if(!shumu)printfc1當(dāng)前沒有運(yùn)行進(jìn)程n“);retur

13、n;printf(hn輸入換出進(jìn)程的id值”);scanf(” d”,&pi d);for(int i=0;i<20;i+)定位,找到所要換出的進(jìn)程,根據(jù)其狀態(tài)做相應(yīng)處理if(pid=neicuni.pid) if(neicuni.zhuangtai= 1)neicuni .zhuangtai=2;guaqi+;printf(un已經(jīng)成功換出進(jìn)程n“);else if(neicuni.zhuangtai=o)printf("n 要換出的進(jìn)程不存在n”); else printf("n要換出的進(jìn)程已被掛起n”); flag=l; break;找不到,則說明進(jìn)程不

14、存在if(flag=o)printf(nn要換岀的進(jìn)程不存在n”);void kill()if(!shumu)printfc當(dāng)前沒有運(yùn)行進(jìn)程n”);return;printf("n輸入殺死就能成的id值”);scanf("%d'&pid);for(int i=0;i<20;i+)/定位,找到所要?dú)⑺赖倪M(jìn)程,根據(jù)其狀態(tài)做相應(yīng)處理if(pid=neicuni.pid)if( neicun i . zhuangtai= 1)neicuni .zhuangtai=o;shumu-;printf(hn已成功殺死進(jìn)程n”);else if(neicuni.zhua

15、ngtai=o)printf("n 要?dú)⑺赖倪M(jìn)程不存在n"); else printf(hn要?dú)⑺赖倪M(jìn)程已被掛起n”); flag=l;break;找不到,則說明進(jìn)程不存在 if(!flag)printf(nn要?dú)⑺赖倪M(jìn)程不存在n”);void huanxing()if(!shumu) printfc*當(dāng)前沒有運(yùn)行進(jìn)程n j;return;if(!guaqi)printf(hn當(dāng)前沒有掛起進(jìn)程n”);return;printf(nn 輸入 pid:nn);scanf(” d",&pid);for(int i=0;i<20;i+)定位,找到所要?dú)⑺赖倪M(jìn)

16、程,根據(jù)其狀態(tài)做相應(yīng)處理 if(pid=neicuni.pid) flag=false;if(neicunij.zhuangtai=2)neicunli .zhuangtai= 1; guaqi-;printf(un已經(jīng)成功喚醒進(jìn)程n“);else if(neicuni.zhuangtai =o)printf("n 耍喚醒的進(jìn)程不存在n”); else printf(hn要喚醒的進(jìn)程已被掛起n”);break;找不到,說明進(jìn)程不存在 if(flag)printf(nn要喚醒的進(jìn)程不存在n”);void main()int n= 1;int num;一開始所有進(jìn)程都不在內(nèi)存中 for(

17、int i=0;iv20;i+) neicuni.zhuangtai =0;while(n)printf("n*進(jìn)程演示系統(tǒng)* ”);printfcan1.創(chuàng)建新的進(jìn)程2.查看運(yùn)行進(jìn)程”);printf("n3.換岀某個(gè)進(jìn)程4 殺死運(yùn)行進(jìn)程”);printf(nn5.喚醒某個(gè)進(jìn)程6.退出系統(tǒng)”);printf(hn 請(qǐng)選擇(l6)nj;scanf(h%dd,&num);switch(num)case l:create();break;case 2:run();break;case 3:huanchu();break;case 4:kill();break;case

18、5:huanxing();break;case 6:exit(0);default: n=0;flag=o;/恢復(fù)標(biāo)記運(yùn)行結(jié)果以及結(jié)論1.創(chuàng)建新進(jìn)程2.查看運(yùn)行進(jìn)程才口 te 斗口 王pid= 1 youxian= 1 daxiao= 3 zhuang1 info= cailianjin3.換岀述程|回 j:jinchengldebugjinchengl.exe26程程*共一 a* w?* 一r 獲一刁 *亠再*裳 共口 e* * 進(jìn)進(jìn)進(jìn) e 的- "量某一 卄建岀醒 z創(chuàng)盤* 13 5請(qǐng)選擇"2程程程 進(jìn)迸進(jìn) 的1i®請(qǐng)選擇"63輸入換岀進(jìn)程的id值1 已經(jīng)成功換岀進(jìn)程?hào)丝词欠駬Q出進(jìn)程運(yùn)運(yùn)系 看死岀 查需進(jìn)進(jìn)68進(jìn)程演示系皺查看運(yùn)行進(jìn)s1 進(jìn)進(jìn)進(jìn)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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)論