版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、操作系統(tǒng)原理題 目:模擬進程創(chuàng)建、終止、阻塞、喚醒原語 院(部):管理工程學院專 業(yè):信息管理與信息系統(tǒng)班級:信管131姓名:欒慶一學號:20130216027實驗題目一:模擬進程創(chuàng)建、終止、阻塞、喚醒原語、題目類型:必做題目。、實驗目的:通過設(shè)計并調(diào)試創(chuàng)建、終止、阻塞、喚醒原語功能,有助于對操作系統(tǒng)中進程控制功能的理解,掌握操作系統(tǒng)模塊的設(shè)計方法和工作原理。三、實驗環(huán)境:1、硬件:pc機及其兼容機。2、 軟件:Windows OS, Turbo C 或 C+、VC+ VS.net、Java 等。四、實驗內(nèi)容:1、設(shè)計創(chuàng)建、終止、阻塞、喚醒原語功能函數(shù)。2、 設(shè)計主函數(shù),采用菜單結(jié)構(gòu)(參見后面
2、給出的流程圖)。3、設(shè)計“顯示隊列”函數(shù),目的能將就緒、阻塞隊列中的進程信息顯示在屏幕上,以供 隨時查看各隊列中進程的變化情況。五、算法流程圖六、程序清單#i nclude #in clude struct pcbchar n ame10; int status;int order;int time;int wtime;int ytime;pcb11;/ 該結(jié)構(gòu)體用于存儲已經(jīng)輸入的進程 struct ghostchar name10;int status;int order;int time;ghost11;/ 該結(jié)構(gòu)體用于優(yōu)先級調(diào)度時,進程的優(yōu)先級排序char a_name10;int i=
3、0,y,a=0,x,z,jilu;void insert();void block();void rouse();void stop();void outPut();void control();/ 實驗二添加函數(shù)void order_control();/ 實驗二添加函數(shù)void time_control();/ 實驗二添加函數(shù)void insert()jilu=0;/jilu 是一個用于判斷的變量,在重復時進行判斷跳過 if(i=10)printf( 進程已經(jīng)存在 10 個,無法繼續(xù)添加進程 n); elseprintf( 請輸入插入 pcb 的數(shù)據(jù) :n);printf(1 、進程名 :
4、); scanf(%s,&);printf(2 、該進程的優(yōu)先級 (1-10):); scanf(%d,&pcbi.order);printf(3 、運行時間 );scanf(%d,&pcbi.time);for(y=0;y0)jilu=0;else%dn 運行printf( 輸入已經(jīng)完成 n 您輸入的數(shù)據(jù)為 :n 進程名 : %sn 優(yōu)先級 :時間 : %dn,,pcbi.order,pcbi.time);printf(n);strcpy(,);ghosti.order=pcbi.order;ghosti.time=
5、pcbi.time;pcbi.status=1;ghosti.status=1;pcbi.wtime=pcbi.time;pcbi.ytime=0;i+;void block()int m;printf(n 請輸入您要改變狀態(tài)的進程的進程名 : );scanf(%s,&a_name);for(y=0;y=i;y+)if(strcmp(,a_name)=0)a=1;if(pcby.status=0)printf( 您要修改的進程已經(jīng)是阻塞狀態(tài),無法更改 n);if(pcby.status=2)pcby.status=0;for(m=0;m=i;m+)if(strcmp(ghos
6、,a_name)=0)ghostm.status=0;printf( 操作已完成,進程成功改為阻塞狀態(tài) n);if(a=0)printf( 對不起 !您查找的進程名不存在 n);a=0;void rouse()int m;printf(n 請輸入您要改變狀態(tài)的進程的進程名 : );scanf(%s,&a_name);for(y=0;y=i;y+)if(strcmp(,a_name)=0)a=1;if(pcby.status=1)n);printf( 您要修改的進程已經(jīng)是就緒狀態(tài),無法更改 break;if(pcby.status=0)pcby.status=1;
7、for(m=0;m=i;m+)if(strcmp(,a_name)=0)ghostm.status=1;printf( 操作已完成,進程成功改為運行狀態(tài) n); break;if(a=0)printf( 對不起 !您查找的進程名不存在 n);a=0; void stop()printf(n 請輸入您要改變狀態(tài)的進程的進程名 : ); 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( 操作已完成,進程成功刪除 n);
8、 break;if(a=0)printf( 對不起 !您查找的進程名不存在 n); a=0;void outPut() if(i=0)printf( 對不起,沒有進程存在,無法顯示 n); elseprintf(nn 已存在進程分別為 :(狀態(tài) :2 表示正在運行 ,1 表示就緒 ,0 表示阻塞 )n); for(y=0;yi;y+) if(pcby.status!=3)printf( 進 程 %d 進 程 名 : %s 狀 態(tài) : %dn,y+1,,pcby.status); void control()for(;1;) printf( 進程調(diào)度子菜單 n0 :返回主菜單
9、n1 :優(yōu)先級調(diào)度 n2 : 時間片輪轉(zhuǎn)調(diào)度 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( 您輸入的指令有誤,請重新輸入 n); break;void order_control()int jishi;/ 用于 CPU 運行時間計時jishi=0;char pan dua n1,pa ndua n2;用于判斷是否繼續(xù)調(diào)度struct ghost jiao
10、huan;int gg,bl;for(gg=0;ggi;gg+) 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;/ 以上語句是根據(jù)優(yōu)先級為進程排序printf(nn 按照優(yōu)先級調(diào)度進程,具體內(nèi)容為 :n);for(x=0;xi;x+)if(ghostx.
11、status=1)printf( 正 在 運 行 的 進 程 : %sn 優(yōu) 先 級 : %dn 運 行 時 間 : %dnnn,,ghostx.order,ghostx.time);for(y=0;y=i;y+)if(strcmp(,)=0) pcby.status=2; ghostx.status=2;/ 該語句用于更改另一個結(jié)構(gòu)體進程的狀態(tài)printf( 是否繼續(xù)運行直至進程運行完畢 (Y/N); scanf(%s,&panduan1);if(panduan1=Y|panduan1=y)if(ghostx.status=2)j
12、ishi=jishi+ghostx.time;printf(CPU 運行時間 %d , 進程 %s 運行完畢 ,正在關(guān)閉 !n,jishi,); for(y=0;y=i;y+)if(strcmp(,)=0) pcby.status=3; ghostx.status=3;/ 該語句用于更改另一個結(jié)構(gòu)體進程的狀態(tài) if(x=(i-1)printf( 所 有 進 程 全 部 運 行 完 畢 !nn);elseprintf(n 是否繼續(xù)調(diào)度 (y/n);scanf(%s,&panduan2); if(panduan2=N|panduan2=
13、n)break; else break;printf( 如果無輸出內(nèi)容,請檢查就緒隊列是否存在進程 );void time_control()int z,kz1,kz2,kz3,kz4,kz5,kz6;/kz1 表示時間片運行的時間計時, kz2 表示 CPU 運行的總 時間, kz3 用于所有進程時間的輸出 kz4 表示已完成的進程數(shù) kz5 用于表示狀態(tài)為就緒的進 程的個數(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 請輸入時間片長度 : ); sc
14、anf(%d,&x);printf(nn 按照時間片輪轉(zhuǎn)調(diào)度進程,具體內(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;pcby.wtime=pcby.wtime-1;pcby.ytime=pcby.ytime+1;printf(CPU 運 行 時間 : %d , 正在運行進程 : %sn,kz2,);已運printf( 進程名 行時間 未運行時
15、間 要求運行時間 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( 進 程%s運行完畢,正在閉!nkz4=kz4+1;pcby.status=3;for(kz6=0;kz6i;kz6+)n,);if(strcmp(,)=0)ghostkz6.s
16、tatus=3;kz1=x;break;printf(n);n);printf( 注意:如果未輸出過程,請檢查就緒列表是否存在進程 void main()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( 請輸入操作指令 : ); if(scanf(%d,&x) if(x=0) break; switch(x) case 1: insert(
17、); 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( 格式非法,請重新輸入 n); break;else if(scanf(%c,&c)printf( 格式非法,請重新輸入 n); 七、程序中使用的數(shù)據(jù)結(jié)構(gòu)及符號說明 struct pcbchar name10;int status;int order;int time;int wtime;int ytime;pcb11;/ 該結(jié)構(gòu)體用于存儲已經(jīng)輸入的進程struct ghostchar name10;int status;int order;int time;ghost11;/ 該結(jié)構(gòu)體
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年建筑施工《春節(jié)節(jié)后復工復產(chǎn)》工作實施方案 (匯編3份)
- 小學一年級人教新課標數(shù)學100以內(nèi)加法和減法練習試卷
- 小學數(shù)學一年級上冊20以內(nèi)口算題卡
- 小學六年級上冊數(shù)學青島版5第五單元分數(shù)混合運算質(zhì)量檢測試題
- 如何預防手足口病
- 命題作文“一路有你”寫作導引及佳作
- 紅葉高考語文閱讀理解
- 情侶餐銷售工作總結(jié)
- 財務(wù)部年終工作總結(jié)精細化成本控制
- 運輸物流行業(yè)銷售工作總結(jié)
- 水泥行業(yè)數(shù)字化轉(zhuǎn)型服務(wù)方案
- 深圳市南山區(qū)2024-2025學年第一學期期末教學質(zhì)量檢測九年級物理 24-25上九年級物理
- 應(yīng)急設(shè)施設(shè)備和物資儲備管理制度(4篇)
- 團委書記個人工作總結(jié)
- 高危多發(fā)性骨髓瘤診斷與治療中國專家共識(2024年版)解讀
- 英語語法與長難句理解知到智慧樹章節(jié)測試課后答案2024年秋山東石油化工學院
- 2025年新高考語文古詩文理解性默寫(含新高考60篇)
- 中醫(yī)內(nèi)科學虛勞培訓課件
- 2024版房屋市政工程生產(chǎn)安全重大事故隱患判定標準內(nèi)容解讀
- 江蘇省鎮(zhèn)江市實驗學校2023-2024學年九年級上學期期末考試化學試卷
- 期末 (試題) -2024-2025學年人教PEP版(2024)英語三年級上冊
評論
0/150
提交評論