南昌大學(xué)操作系統(tǒng)實(shí)驗(yàn)報(bào)告
《南昌大學(xué)操作系統(tǒng)實(shí)驗(yàn)報(bào)告》由會(huì)員分享,可在線閱讀,更多相關(guān)《南昌大學(xué)操作系統(tǒng)實(shí)驗(yàn)報(bào)告(11頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
南 昌 大 學(xué) 實(shí) 驗(yàn) 報(bào) 告---( 3) 進(jìn) 程 調(diào) 度 算 法 的 實(shí) 現(xiàn)學(xué)生姓名: 張皓然 學(xué) 號(hào): 5501215001 專業(yè)班級(jí): 本碩 151 實(shí)驗(yàn)類型:□ 驗(yàn)證 □ 綜合 ■ 設(shè)計(jì) □ 創(chuàng)新 實(shí)驗(yàn)日期: 2017.5.31 實(shí)驗(yàn)成績: 一、實(shí)驗(yàn)?zāi)康耐ㄟ^實(shí)驗(yàn)加強(qiáng)對(duì)進(jìn)程調(diào)度算法的理解和掌握。二、實(shí)驗(yàn)內(nèi)容編寫程序?qū)崿F(xiàn)進(jìn)程調(diào)度算法,具體可以編寫程序?qū)崿F(xiàn)優(yōu)先度高者調(diào)度算法或先來先服務(wù)算法。三、實(shí)驗(yàn)要求1、需寫出設(shè)計(jì)說明;2、設(shè)計(jì)實(shí)現(xiàn)代碼及說明3、運(yùn)行結(jié)果;四、主要實(shí)驗(yàn)步驟優(yōu)先度高者調(diào)度算法實(shí)驗(yàn)代碼:○ 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)體,使用時(shí)間,優(yōu)先級(jí)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) //插入至就緒隊(duì)列{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)建一個(gè)進(jìn)程{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)存中的進(jìn)程切換至外存{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() //進(jìn)程調(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;實(shí)驗(yàn)過程:優(yōu)先度高者調(diào)度算法實(shí)驗(yàn)結(jié)果截圖:○ 1先創(chuàng)建進(jìn)程 a、b、c,設(shè) a 進(jìn)程優(yōu)先級(jí)為 2,到達(dá)時(shí)間為 2,cpu 處理時(shí)間為 1;設(shè) b 進(jìn)程優(yōu)先級(jí)為 5,到達(dá)時(shí)間為 0,cpu 處理時(shí)間為 6;設(shè) c 進(jìn)程優(yōu)先級(jí)為 4,到達(dá)時(shí)間為 2,cpu 處理時(shí)間為 2;開始運(yùn)行進(jìn)程,首先運(yùn)行 0 時(shí)刻到達(dá)的優(yōu)先級(jí)最高的進(jìn)程 b設(shè)定進(jìn)程 a、b、c運(yùn)行結(jié)束后,進(jìn)程 b 的優(yōu)先級(jí)變?yōu)?4,cpu 使用時(shí)間為 2,此時(shí)進(jìn)程 b 和 c 優(yōu)先級(jí)相同,系統(tǒng)仍然調(diào)用進(jìn)程 b;進(jìn)程 b 在運(yùn)行還是進(jìn)程 b再次運(yùn)行進(jìn)程 b 以后,b 的優(yōu)先級(jí)掉為 3,而且進(jìn)程 b 還差 2 個(gè)時(shí)間單位才能運(yùn)行結(jié)束,此時(shí) c 為優(yōu)先級(jí)最高的進(jìn)程,系統(tǒng)調(diào)用進(jìn)程 c因?yàn)檫M(jìn)程 c 的 cpu 需要時(shí)間僅為 2 個(gè)時(shí)間單位,所以進(jìn)程 c 運(yùn)行結(jié)束,finished,c 被移除就緒序列;調(diào)度進(jìn)程 c然后系統(tǒng)重新調(diào)用進(jìn)程 b,b 運(yùn)行結(jié)束;最后系統(tǒng)調(diào)度優(yōu)先級(jí)最低的進(jìn)程 a,結(jié)束進(jìn)程調(diào)度過程,隊(duì)列空。進(jìn)程 c 結(jié)束進(jìn)程 b 回歸調(diào)度進(jìn)程 a進(jìn)程 b 結(jié)束先來先服務(wù)算法:○ 2#include#includeusing namespace std;//FCFSstruct process{char name[10];double arrivetime;//到到時(shí)間 double servetime; //服務(wù)時(shí)間 double starttime;//開始時(shí)間 double finnishtime;//完成時(shí)間 double circletime;//周轉(zhuǎn)時(shí)間 double dcircletime;//帶權(quán)周轉(zhuǎn)時(shí)間 }a[100];//用結(jié)構(gòu)體存放各進(jìn)程的相關(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.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
10 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 南昌大學(xué) 操作系統(tǒng) 實(shí)驗(yàn) 報(bào)告
鏈接地址:http://www.820124.com/p-359712.html