模擬進(jìn)程創(chuàng)建、終止、阻塞、喚醒原語(yǔ)操作系統(tǒng)原理_第1頁(yè)
模擬進(jìn)程創(chuàng)建、終止、阻塞、喚醒原語(yǔ)操作系統(tǒng)原理_第2頁(yè)
模擬進(jìn)程創(chuàng)建、終止、阻塞、喚醒原語(yǔ)操作系統(tǒng)原理_第3頁(yè)
模擬進(jìn)程創(chuàng)建、終止、阻塞、喚醒原語(yǔ)操作系統(tǒng)原理_第4頁(yè)
模擬進(jìn)程創(chuàng)建、終止、阻塞、喚醒原語(yǔ)操作系統(tǒng)原理_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 模擬進(jìn)程創(chuàng)建、終止、阻塞、喚醒原語(yǔ)操作系統(tǒng)原理操作系統(tǒng)原理題目:模擬進(jìn)程創(chuàng)建、終止、阻塞、喚醒原語(yǔ)院(部):管理工程學(xué)院專業(yè):信息管理與信息系統(tǒng)班級(jí):信管姓名:學(xué)號(hào):實(shí)驗(yàn)題目一:模擬進(jìn)程創(chuàng)建、終止、阻塞、喚醒原語(yǔ)一、題目類型:必做題目。二、實(shí)驗(yàn)?zāi)康模和ㄟ^(guò)設(shè)計(jì)并調(diào)試創(chuàng)建、終止、阻塞、喚醒原語(yǔ)功能,有助于對(duì)操作系統(tǒng)中進(jìn)程控制功能的理解,掌握操作系統(tǒng)模塊的設(shè)計(jì)方法和工作原理。三、實(shí)驗(yàn)環(huán)境:1、硬件:pc機(jī)及其兼容機(jī)。2、軟件:WindowsOS,TurboC或C+、VC+、VS.net、Java等。四、實(shí)驗(yàn)內(nèi)容:1、設(shè)計(jì)創(chuàng)建、終止、阻塞、喚醒原語(yǔ)功能函數(shù)。2、設(shè)計(jì)主函數(shù),采用菜單結(jié)構(gòu)(參見(jiàn)后面給出

2、的流程圖)。3、設(shè)計(jì)“顯示隊(duì)列”函數(shù),目的能將就緒、阻塞隊(duì)列中的進(jìn)程信息顯示在屏幕上,以供隨時(shí)查看各隊(duì)列中進(jìn)程的變化情況。五、算法流程圖開(kāi)始系統(tǒng)主菜單1創(chuàng)建2阻塞3喚醒4終止5顯示0退出請(qǐng)輸入您需要的功能(05):輸入選擇=?543210退出創(chuàng)建阻塞喚醒終止顯示結(jié)束六、程序清單#include#includestructpcbcharname10;intstatus;intorder;inttime;intwtime;intytime;pcb11;/該結(jié)構(gòu)體用于存儲(chǔ)已經(jīng)輸入的進(jìn)程structghostcharname10;intstatus;intorder;inttime;ghost11;/

3、該結(jié)構(gòu)體用于優(yōu)先級(jí)調(diào)度時(shí),進(jìn)程的優(yōu)先級(jí)排序chara_name10;inti=0,y,a=0,x,z,jilu;voidinsert();voidblock();voidrouse();voidstop();voidoutPut();voidcontrol();/實(shí)驗(yàn)二添加函數(shù)voidorder_control();/實(shí)驗(yàn)二添加函數(shù)voidtime_control();/實(shí)驗(yàn)二添加函數(shù)voidinsert()1h=0;/)是一個(gè)用于判斷的變量,在重復(fù)時(shí)進(jìn)行判斷跳過(guò)if(i=10)printf(“進(jìn)程已經(jīng)存在0個(gè),無(wú)法繼續(xù)添加進(jìn)程n);elseprintf(“請(qǐng)輸入插入)仲的數(shù)據(jù):n);prin

4、tf(“1、進(jìn)程名:“);scanf(“%s“,&);printf(2、該進(jìn)程的優(yōu)先繳-10):“);scanf(“%d“,&pcbi.order);printf(3、運(yùn)行時(shí)間“);scanf(“%d“,&pcbi.time);for(y=0;y0)jilu=0;elseprintf(“輸入已經(jīng)完成n您輸入的數(shù)據(jù)為:n進(jìn)程名:%sn優(yōu)先級(jí):%dn運(yùn)行時(shí)間:%dn”,,pcbi.order,pcbi.time);printf(“n);strcpy(,);ghosti.order=pcbi.order;ghosti.tim

5、e=pcbi.time;pcbi.status=1;ghosti.status=1;pcbi.wtime=pcbi.time;pcbi.ytime=0;i+;voidblock()intm;printf(n請(qǐng)輸入您要改變狀態(tài)的進(jìn)程的進(jìn)程名:“);scanf(“%s“,&a_name);for(y=0;y=i;y+)if(strcmp(,a_name)=0)a=1;if(pcby.status=0)printf(“您要修改的進(jìn)程已經(jīng)是阻塞狀態(tài),無(wú)法更改n);if(pcby.status=2)pcby.status=0;for(m=0;m=i;m+)if(strcmp(ghost

6、,a_name)=0)ghostm.status=0;printf(操作已完成,進(jìn)程成功改為阻塞狀態(tài)n”);if(a=0)printf(對(duì)不起!您查找的進(jìn)程名不存在n);a=0;voidrouse()intm;printf(n請(qǐng)輸入您要改變狀態(tài)的進(jìn)程的進(jìn)程名:“);scanf(“%s“,&a_name);for(y=0;y=i;y+)if(strcmp(,a_name)=0)a=1;if(pcby.status=1)printf(“您要修改的進(jìn)程已經(jīng)是就緒狀態(tài),無(wú)法更改n);break;if(pcby.status=0)pcby.status=1;for(m=0;

7、m=i;m+)if(strcmp(,a_name)=0)ghostm.status=1;printf(操作已完成,進(jìn)程成功改為運(yùn)行狀態(tài)n);break;if(a=0)printf(對(duì)不起!您查找的進(jìn)程名不存在n);a=0;voidstop()printf(n請(qǐng)輸入您要改變狀態(tài)的進(jìn)程的進(jìn)程名:“);scanf(“%s“,&a_name);for(y=0;y=i;y+)if(strcmp(,a_name)=0)a=1;for(;yi;y+)pcby=pcby+1;i-;printf(操作已完成,進(jìn)程成功刪除n);break;if(a=0)printf(對(duì)不起

8、!您查找的進(jìn)程名不存在n);a=0;voidoutPut()if(i=0)printf(“對(duì)不起,沒(méi)有進(jìn)程存在,無(wú)法顯示n);elseprintf(“nn已存在進(jìn)程分別為:(狀態(tài):2表示正在運(yùn)行,1表示就緒,0表示阻塞)n);for(y=0;yi;y+)if(pcby.status!=3)printf(“進(jìn)程d進(jìn)程名:%s狀態(tài):dn,y+1,,pcby.status);voidcontrol()for(;1;)printf(“進(jìn)程調(diào)度子菜單n0:返回主菜單n1:優(yōu)先級(jí)調(diào)度n2:時(shí)間片輪轉(zhuǎn)調(diào)度n請(qǐng)輸入您想要進(jìn)行的操作的指令:“);scanf(“%d“,&x);if(x=0)br

9、eak;switch(x)case0:break;order_control();break;time_control();break;default:printf(“您輸入的指令有誤,請(qǐng)重新輸入口“);break;voidorder_control()intjishi;/用于CPU運(yùn)行時(shí)間計(jì)時(shí)jishi=0;charpanduan1,panduan2;/用于判斷是否繼續(xù)調(diào)度structghostjiaohuan;intgg,bl;for(gg=0;ggi;gg+)if(pcbgg.status=2)for(bl=0;bli;bl+)if(strcmp(,pcbgg.n

10、ame)=0)ghostbl.status=2;for(x=0;xi-1;x+)for(y=x+1;yi;y+)if(ghostx.orderghosty.order)jiaohuan=ghostx;ghostx=ghosty;ghosty=jiaohuan;/以上語(yǔ)句是根據(jù)優(yōu)先級(jí)為進(jìn)程排序口廠皿土“口口按照優(yōu)先級(jí)調(diào)度進(jìn)程,具體內(nèi)容為:n);for(x=0;xi;x+)if(ghostx.status=1)printf(正在運(yùn)行的進(jìn)程:%sn優(yōu)先級(jí):%dn運(yùn)行時(shí)間:%dnnn”,,ghostx.order,ghostx.time);for(y=0;y=i;y+)if(st

11、rcmp(,)=0)pcby.status=2;ghostx.status=2;/該語(yǔ)句用于更改另一個(gè)結(jié)構(gòu)體進(jìn)程的狀態(tài)printf(是否繼續(xù)運(yùn)行直至進(jìn)程運(yùn)行完畢(Y/N)“);scanf(“%s“,&panduan1);if(panduan1=Y|panduan1=y)if(ghostx.status=2)jishi=jishi+ghostx.time;printf(CPU運(yùn)行時(shí)間d,進(jìn)程s運(yùn)行完畢,正在關(guān)閉!n“,jishi,);for(y=0;y=i;y+)if(strcmp(,)=0)p

12、cby.status=3;ghostx.status=3;/該語(yǔ)句用于更改另一個(gè)結(jié)構(gòu)體進(jìn)程的狀態(tài)if(x=(i-1)printf(“所有進(jìn)程全部運(yùn)行完畢!nn);elseprintf(“n是否繼續(xù)調(diào)度(y/n)“);scanf(“%s“,&panduan2);if(panduan2=N|panduan2=n)break;elsebreak;printf(“如果無(wú)輸出內(nèi)容,請(qǐng)檢查就緒隊(duì)列是否存在進(jìn)程“);voidtime_control()intz,kz1,kz2,kz3,kz4,kz5,kz6;/kz1表示時(shí)間片運(yùn)行的時(shí)間計(jì)時(shí),kz2表示CPU運(yùn)行的總時(shí)間,kz3用于所有進(jìn)程時(shí)間的輸出kz4表

13、示已完成的進(jìn)程數(shù)kz5用于表示狀態(tài)為就緒的進(jìn)程的個(gè)數(shù)kz6用于更改ghost的狀態(tài)值=0;kz2=0;kz4=0;kz5=0;for(y=0;yi;y+)if(pcby.status=1)kz5=kz5+1;printf(nn請(qǐng)輸入時(shí)間片長(zhǎng)度:“);scanf(“%d“,&x);口廠皿土“口口按照時(shí)間片輪轉(zhuǎn)調(diào)度進(jìn)程,具體內(nèi)容為:n);if(kz5!=0)for(;kz4kz5;)for(y=0;yi;y+)if(pcby.status=1|pcby.status=2)for(kz1=0;kz1x;kz1+)if(pcby.status=1|pcby.status=2)kz2=kz2+1;pcb

14、y.wtime=pcby.wtime-1;pcby.ytime=pcby.ytime+1;printf(CPU運(yùn)行時(shí)間:d,正在運(yùn)行進(jìn)程:sn,kz2,);printf(“進(jìn)程名已運(yùn)行時(shí)間未運(yùn)行時(shí)間要求運(yùn)行時(shí)間n“);for(kz3=0;kz3i;kz3+)if(pcbkz3.status=1|pcbkz3.status=2)printf(“%s%12d%12d%12dn“,,pcbkz3.ytime,pcbkz3.wtime,pcbkz3.time);if(pcby.wtime=0&pcby.status!=3)printf(“進(jìn)程$運(yùn)行完畢,正在關(guān)閉

15、!nn,);kz4=kz4+1;pcby.status=3;for(kz6=0;kz6i;kz6+)if(strcmp(,)=0)ghostkz6.status=3;kz1=x;break;printf(“n);printf(注意:如果未輸出過(guò)程,請(qǐng)檢查就緒列表是否存在進(jìn)程n“);voidmain()charc;for(;1;)printf(系統(tǒng)主菜單n“);printf(“1、創(chuàng)建n“);printf(2、阻塞n);printf(3、喚醒n);printf(“4、終止n“);printf(“5、顯示n);printf(6、調(diào)度n)

16、;printf(“0、退出n);printf(請(qǐng)輸入操作指令“);if(scanf(“%d“,&x)if(x=0)break;switch(x)insert();break;block();break;rouse();break;stop();break;outPut();break;control();break;case0:break;default:printf(“格式非法,請(qǐng)重新輸入口“);break;elseif(scanf(“%c“,&c)printf(“格式非法,請(qǐng)重新輸入口“);七、程序中使用的數(shù)據(jù)結(jié)構(gòu)及符號(hào)說(shuō)明structpcbcharname10;intstatus;intorder;inttime;intwtime;intytime;pcb11;/該結(jié)構(gòu)體用于存儲(chǔ)已經(jīng)輸入的進(jìn)程structghostcharname10;intstatus;intorder;inttime;gh

溫馨提示

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