南昌大學(xué)操作系統(tǒng)實驗報告
《南昌大學(xué)操作系統(tǒng)實驗報告》由會員分享,可在線閱讀,更多相關(guān)《南昌大學(xué)操作系統(tǒng)實驗報告(11頁珍藏版)》請在裝配圖網(wǎng)上搜索。
南 昌 大 學(xué) 實 驗 報 告---( 3) 進 程 調(diào) 度 算 法 的 實 現(xiàn)學(xué)生姓名: 張皓然 學(xué) 號: 5501215001 專業(yè)班級: 本碩 151 實驗類型:□ 驗證 □ 綜合 ■ 設(shè)計 □ 創(chuàng)新 實驗日期: 2017.5.31 實驗成績: 一、實驗?zāi)康耐ㄟ^實驗加強對進程調(diào)度算法的理解和掌握。二、實驗內(nèi)容編寫程序?qū)崿F(xiàn)進程調(diào)度算法,具體可以編寫程序?qū)崿F(xiàn)優(yōu)先度高者調(diào)度算法或先來先服務(wù)算法。三、實驗要求1、需寫出設(shè)計說明;2、設(shè)計實現(xiàn)代碼及說明3、運行結(jié)果;四、主要實驗步驟優(yōu)先度高者調(diào)度算法實驗代碼:○ 1#include #include #include #include #include #define runtime 2#define overflow -2#define null 0enum sta { run, wait, finished };//枚舉類型 sta,標(biāo)志三種狀態(tài)time_t t; //system clockstruct block{int time_used;int prior;};//定義結(jié)構(gòu)體,使用時間,優(yōu)先級typedef struct pro{char name[20];enum sta status;int time_required;int arrive_time;struct block switch_block;struct pro *next;}*pcb;//定義 pcb 塊pcb ready;void menu();void insertpcb(pcb newp) //插入至就緒隊列{pcb p;p = (pcb)malloc(sizeof(struct pro));if (!p)exit(overflow);p = ready;if (p->next == null){newp->next = ready->next;ready->next = newp;}else{while (newp->switch_block.priornext->switch_block.prior&&p->next != null)p = p->next;newp->next = p->next;p->next = newp;}}void creat_pcb() //創(chuàng)建一個進程{pcb newp;newp = (pcb)malloc(sizeof(struct pro));if (!newp) exit(overflow);newp->status = wait;time(newp->arrive_time = t;printf("process name:");scanf("%s", newp->name);printf("priority:");scanf("%d", printf("arrive time:");scanf("%d", printf("cputime_required:");scanf("%d", newp->switch_block.time_used = 0;insertpcb(newp);menu();}void printpcb() //打印現(xiàn)狀{pcb p;if (ready->next) {printf("name status priority server_time arrive_time cputime_used\n");for (p = ready->next; p != null; p = p->next){printf("%s", p->name);switch (p->status){case wait:printf(" wait"); break;case run:printf(" run"); break;case finished:printf(" finished"); break;}printf("%7d", p->switch_block.prior);printf("%15d", p->time_required);printf("%20d", p->arrive_time);printf("%13d", p->switch_block.time_used);putchar('\n');}}else printf("queue is empty!\n");}void switchprocess() //將內(nèi)存中的進程切換至外存{char temp[20];pcb p, q;if (ready->next){printf("input process name:");scanf("%s", temp);for (p = ready; p != null p = p->next);if (p != null){q = p->next;p->next = q->next;printf("remove %s successfully!\n", q->name);free(q);printpcb();}else printf("found no process\n");}else printf("queue empty!\n");menu();}void runprocess() //進程調(diào)度{pcb p = ready->next;if (p){printf("%s is running.....\n", p->name);p->status = run;p->switch_block.prior--;p->switch_block.time_used += runtime;if (p->switch_block.time_used >= p->time_required){p->status = finished;printpcb();ready->next = p->next;printf("%s have been removed from the ready_queue....\n", p->name);free(p);}else{printpcb();printf("%s have used up the run_time\n", p->name);p->status = wait;ready->next = p->next;insertpcb(p);}}else printf("queue empty!\n");menu();}void menu()//選擇菜單{int coos;printf("1.creat a process\n");printf("2.run a process\n");printf("3.remove a process\n");printf("4.exit\n");printf("choose(1-4):");scanf("%d", switch (coos){case 1:creat_pcb(); break;case 2:runprocess(); break;case 3:switchprocess(); break;case 4:exit(0); break;}}int main(){//clrscr();ready = (pcb)malloc(sizeof(struct pro));if (!ready) exit(overflow);ready->next = null;menu();return 0;實驗過程:優(yōu)先度高者調(diào)度算法實驗結(jié)果截圖:○ 1先創(chuàng)建進程 a、b、c,設(shè) a 進程優(yōu)先級為 2,到達(dá)時間為 2,cpu 處理時間為 1;設(shè) b 進程優(yōu)先級為 5,到達(dá)時間為 0,cpu 處理時間為 6;設(shè) c 進程優(yōu)先級為 4,到達(dá)時間為 2,cpu 處理時間為 2;開始運行進程,首先運行 0 時刻到達(dá)的優(yōu)先級最高的進程 b設(shè)定進程 a、b、c運行結(jié)束后,進程 b 的優(yōu)先級變?yōu)?4,cpu 使用時間為 2,此時進程 b 和 c 優(yōu)先級相同,系統(tǒng)仍然調(diào)用進程 b;進程 b 在運行還是進程 b再次運行進程 b 以后,b 的優(yōu)先級掉為 3,而且進程 b 還差 2 個時間單位才能運行結(jié)束,此時 c 為優(yōu)先級最高的進程,系統(tǒng)調(diào)用進程 c因為進程 c 的 cpu 需要時間僅為 2 個時間單位,所以進程 c 運行結(jié)束,finished,c 被移除就緒序列;調(diào)度進程 c然后系統(tǒng)重新調(diào)用進程 b,b 運行結(jié)束;最后系統(tǒng)調(diào)度優(yōu)先級最低的進程 a,結(jié)束進程調(diào)度過程,隊列空。進程 c 結(jié)束進程 b 回歸調(diào)度進程 a進程 b 結(jié)束先來先服務(wù)算法:○ 2#include#includeusing namespace std;//FCFSstruct process{char name[10];double arrivetime;//到到時間 double servetime; //服務(wù)時間 double starttime;//開始時間 double finnishtime;//完成時間 double circletime;//周轉(zhuǎn)時間 double dcircletime;//帶權(quán)周轉(zhuǎn)時間 }a[100];//用結(jié)構(gòu)體存放各進程的相關(guān)信息int main(){int i,j,k,n;process temp;cout>n;cout>a[i].name>>a[i].arrivetime>>a[i].servetime; }for(i=0;i- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
10 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 南昌大學(xué) 操作系統(tǒng) 實驗 報告
鏈接地址:http://www.820124.com/p-359712.html