模擬進(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è),還剩8頁(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、操作系統(tǒng)原理 題 目:模擬進(jìn)程創(chuàng)建、終止、阻塞、喚醒原語(yǔ)院 (部): 管理工程學(xué)院專(zhuān) 業(yè): 信息管理與信息系統(tǒng)班 級(jí): 信管131姓 名: 欒慶一學(xué) 號(hào): 20130216027實(shí)驗(yàn)題目一:模擬進(jìn)程創(chuàng)建、終止、阻塞、喚醒原語(yǔ)一、題目類(lèi)型:必做題目。二、實(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、軟件:Windows OS,Turbo C或C+、VC+、VS.net、Java等。四、實(shí)驗(yàn)內(nèi)容:1、設(shè)計(jì)創(chuàng)建、終止、阻塞、喚醒原語(yǔ)功能函數(shù)。2、設(shè)計(jì)主函數(shù),采用菜單結(jié)構(gòu)

2、(參見(jiàn)后面給出的流程圖)。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 #include struct pcbchar name10;int status;int order;int time; int wtime; int ytime;pcb11;/該結(jié)構(gòu)體用于存儲(chǔ)已經(jīng)輸入的進(jìn)程struct ghostchar name10;int status;int

3、order;int time;ghost11;/該結(jié)構(gòu)體用于優(yōu)先級(jí)調(diào)度時(shí),進(jìn)程的優(yōu)先級(jí)排序char a_name10;int i=0,y,a=0,x,z,jilu;void insert();void block();void rouse();void stop();void outPut();void control();/實(shí)驗(yàn)二添加函數(shù)void order_control();/實(shí)驗(yàn)二添加函數(shù)void time_control();/實(shí)驗(yàn)二添加函數(shù)void insert()jilu=0;/jilu是一個(gè)用于判斷的變量,在重復(fù)時(shí)進(jìn)行判斷跳過(guò)if(i=10)printf(進(jìn)程已經(jīng)存在10個(gè),無(wú)

4、法繼續(xù)添加進(jìn)程n);else printf(請(qǐng)輸入插入pcb的數(shù)據(jù):n);printf(1、進(jìn)程名:);scanf(%s,&);printf(2、該進(jìn)程的優(yōu)先級(jí)(1-10):);scanf(%d,&pcbi.order);printf(3、運(yùn)行時(shí)間);scanf(%d,&pcbi.time); for(y=0;y0)jilu=0;else printf(輸入已經(jīng)完成n您輸入的數(shù)據(jù)為:n進(jìn)程名: %sn優(yōu)先級(jí): %dn運(yùn)行時(shí)間: %dn,,pcbi.order,pcbi.time);printf(-n);strcpy(,

5、); ghosti.order=pcbi.order; ghosti.time=pcbi.time;pcbi.status=1; ghosti.status=1; pcbi.wtime=pcbi.time; pcbi.ytime=0; i+;void block()int m;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)pcb

6、y.status=0;for(m=0;m=i;m+)if(strcmp(,a_name)=0)ghostm.status=0;printf(操作已完成,進(jìn)程成功改為阻塞狀態(tài)n);if(a=0)printf(對(duì)不起!您查找的進(jìn)程名不存在n);a=0;void rouse()int m;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;

7、if(pcby.status=0)pcby.status=1;for(m=0;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;void stop()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(

8、操作已完成,進(jìn)程成功刪除n);break;if(a=0)printf(對(duì)不起!您查找的進(jìn)程名不存在n);a=0;void outPut()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);void control()for(;1;)printf(進(jìn)程調(diào)度子菜單n0 :返回主菜單n1 :優(yōu)先級(jí)調(diào)度n2 :時(shí)間片輪

9、轉(zhuǎn)調(diào)度n請(qǐng)輸入您想要進(jìn)行的操作的指令 :);scanf(%d,&x);if(x=0)break;switch(x)case 0:break;case 1:order_control();break;case 2:time_control();break;default:printf(您輸入的指令有誤,請(qǐng)重新輸入n);break;void order_control()int jishi;/用于CPU運(yùn)行時(shí)間計(jì)時(shí) jishi=0; char panduan1,panduan2;/用于判斷是否繼續(xù)調(diào)度 struct ghost jiaohuan;int gg,bl;for(gg=0;ggi;gg+

10、)if(pcbgg.status=2)for(bl=0;bli;bl+)if(strcmp(,)=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)程排序printf(nn按照優(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

11、運(yùn)行時(shí)間: %dnnn,,ghostx.order,ghostx.time); for(y=0;y=i;y+) if(strcmp(,)=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)

12、行完畢,正在關(guān)閉!n,jishi,); for(y=0;y=i;y+) if(strcmp(,)=0) pcby.status=3; ghostx.status=3;/該語(yǔ)句用于更改另一個(gè)結(jié)構(gòu)體進(jìn)程的狀態(tài) if(x=(i-1) printf(所有進(jìn)程全部運(yùn)行完畢!n-n); else printf(-n是否繼續(xù)調(diào)度(y/n); scanf(%s,&panduan2); if(panduan2=N|panduan2=n)break; else break;printf(如果無(wú)輸出內(nèi)容,請(qǐng)檢查就緒隊(duì)列是否存在進(jìn)程);void time_

13、control()int z,kz1,kz2,kz3,kz4,kz5,kz6;/kz1表示時(shí)間片運(yùn)行的時(shí)間計(jì)時(shí),kz2表示CPU運(yùn)行的總時(shí)間,kz3用于所有進(jìn)程時(shí)間的輸出kz4表示已完成的進(jìn)程數(shù)kz5用于表示狀態(tài)為就緒的進(jìn)程的個(gè)數(shù)kz6用于更改ghost的狀態(tài)值 z=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);printf(nn按照時(shí)間片輪轉(zhuǎn)調(diào)度進(jìn)程,具體內(nèi)容為:n);if(kz5!=0)for(;kz4kz5;) for(y=0;yi;y+) if

14、(pcby.status=1|pcby.status=2) for(kz1=0;kz1x;kz1+) if(pcby.status=1|pcby.status=2) kz2=kz2+1; pcby.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%

15、12dn,,pcbkz3.ytime,pcbkz3.wtime,pcbkz3.time); if(pcby.wtime=0&pcby.status!=3) printf(進(jìn)程 %s 運(yùn)行完畢,正在關(guān)閉!n-n,); 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);void mai

16、n()char c;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);printf(0、退出n);printf(請(qǐng)輸入操作指令 : );if(scanf(%d,&x)if(x=0)break;switch(x)case 1:insert();break;case 2:block();break;case 3:rouse();break;case 4:stop();break;case 5:outPut();break;case 6:control();break;case 0:break;default:printf(格式非法,請(qǐng)重新輸入n);break;else if(scanf(%c,&c)printf(格式非法,請(qǐng)重新輸入n);七、程序中使用的數(shù)據(jù)結(jié)構(gòu)及符號(hào)說(shuō)明struct pcbchar name10;int status;int order;int time; int wtime; int ytime;pcb11;/該結(jié)構(gòu)體用于存儲(chǔ)已經(jīng)輸入的進(jìn)程struct ghostchar name10;int status;int order;int time;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)論