版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
作業(yè)調(diào)度實習(xí)報告2009118252計科一樊星一、實習(xí)題目采用先來先服務(wù)算法和運行時間最短者優(yōu)先算法模擬設(shè)計作業(yè)調(diào)度程序。二、結(jié)構(gòu)及說明程序采用結(jié)構(gòu)體來定義進程控制塊PBC單元,整個控制塊利用單向循環(huán)鏈表。typedefstructtagPCB//進程控制塊PBC{ intnum;//進程號 charuser;//用戶名 charname[5];//進程名 structtagPCB*next;//下個進程 intdemand_time;//需求時間 intdemand_memory;//需求內(nèi)存 intdemand_tap;//需求磁帶 intused_time;//已用時間}PCB;同時采用另一結(jié)構(gòu)體來定義作業(yè)控制塊,整個控制塊利用單向循環(huán)列表。typedefstructtagWORK//作業(yè)控制塊{ intnum;//作業(yè)號 charuser;//用戶名 charname[5];//作業(yè)名 structtagWORK*next;//下個作業(yè) intdemand_time;//需求時間 intdemand_memory;//需求內(nèi)存 intdemand_tap;//需求磁帶}WORK;分別編寫先到先服務(wù)(FIFS)與短作業(yè)優(yōu)先(SJF)的作業(yè)調(diào)度算法:intFIFS();intSJF();在實際操作中分別用這兩個函數(shù)來替代作業(yè)調(diào)度過程,達到不同的效果。三、源程序#include"stdafx.h"#include"stdlib.h"#include"iostream.h"#include"string.h"#include"fstream.h"http://-----------------------------------------------typedefstructtagPCB//進程控制塊PBC{ intnum;//進程號 charuser;//用戶名 charname[5];//進程名 structtagPCB*next;//下個進程 intdemand_time;//需求時間 intdemand_memory;//需求內(nèi)存 intdemand_tap;//需求磁帶 intused_time;//已用時間}PCB;typedefstructtagWORK//作業(yè)控制塊{ intnum;//作業(yè)號 charuser;//用戶名 charname[5];//作業(yè)名 structtagWORK*next;//下個作業(yè) intdemand_time;//需求時間 intdemand_memory;//需求內(nèi)存 intdemand_tap;//需求磁帶}WORK;//--------------------------------------------------WORK*work_head,*work_p;//工作表鏈?zhǔn)字羔槪顒又羔楶CB*head_r,*r_p;//就緒鏈?zhǔn)字羔?,活動指針intprocess_num=0;//進程數(shù)intfree_memory=100;//內(nèi)存剩余空間intfree_tap=5;//磁帶剩余數(shù)intcurrent_thread=0;//當(dāng)前進程數(shù)inttotal_work;//----------------------------------------------------inti,j;//自由變量ifstreaminfile("indata.txt");//文件輸入ofstreamoutfile("outdata.txt");//文件輸出//----------------------------------------------------函數(shù)聲明intcreate_work();intinit_work_table(WORK**,WORK**);intenter_work_table(WORK**,WORK**);WORK*exit_work_table(WORK*);intcreate_process(WORK*);intinit_link(PCB**,PCB**);intenter_link(PCB*,PCB*);PCB*exit_link(PCB*);intrandom_choose_process();intexecute_process(PCB*);intFIFS();intSJF();//----------------------------主程序---------------------------//intmain(intargc,char*argv[]){ init_link(&head_r,&r_p);init_work_table(&work_head,&work_p); //////////////////////////////////////初始化 infile>>total_work; for(i=0;i<total_work;i++) { create_work(); } while((current_thread<2)&&(total_work>0)) { FIFS();//作業(yè)調(diào)度,下一次用SJF()替代 } while(head_r->next!=head_r) { random_choose_process(); if((current_thread<2)&&(total_work>0)) { FIFS();//作業(yè)調(diào)度,下一次用SJF()替代 } } printf("HelloGHouan!\n"); infile.close(); outfile.close(); return0;}/*****************************************************************************/intcreate_work()//創(chuàng)建作業(yè)信息{ WORK*temp; temp=(WORK*)malloc(sizeof(WORK)); temp->num=i; infile>>temp->user; infile>>temp->name; infile>>temp->demand_time; infile>>temp->demand_memory; infile>>temp->demand_tap;enter_work_table(&work_p,&temp); return0;}intinit_work_table(WORK**head,WORK**p)//作業(yè)隊列初始化{ (*head)=(WORK*)malloc(sizeof(WORK)); (*head)->next=(*head); (*p)=(*head); return0;}intenter_work_table(WORK**p,WORK**temp)//加入作業(yè)隊列{ (*p)->next=(*temp); if(total_work-1==(*temp)->num) { (*temp)->next=work_head; } else { (*p)=(*temp); } return0;}WORK*exit_work_table(WORK*p)//退出作業(yè)隊列{ WORK*q; q=p; while(p!=q->next) { q=q->next; } q->next=p->next; returnp;}/*****************************************************************************/intcreate_process(WORK*current)//創(chuàng)建進程{ PCB*temp; temp=(PCB*)malloc(sizeof(PCB)); temp->num=process_num++; temp->user=current->user; strcpy(temp->name,current->name);temp->demand_time=current->demand_time; temp->used_time=0; temp->demand_memory=current->demand_memory; temp->demand_tap=current->demand_tap; free_memory-=current->demand_memory; free_tap-=current->demand_tap;enter_link(head_r,temp); current_thread++;//增加一線程 return0;}intinit_link(PCB**head,PCB**p)//PBC表初始化{ (*head)=(PCB*)malloc(sizeof(PCB)); (*head)->demand_time=0; (*head)->used_time=32768; (*head)->next=(*head); (*p)=(*head); return0;}intenter_link(PCB*head,PCB*temp)//加入進程隊列{ temp->next=head->next; head->next=temp; return0;}PCB*exit_link(PCB*p)//退出進程隊列{ PCB*q; q=p; free_memory+=p->demand_memory; free_tap+=p->demand_tap; while(p!=q->next) { q=q->next; } q->next=p->next; current_thread--;//減少一線程 returnp;}//--------------------------------------------intrandom_choose_process()//處理器隨機調(diào)度算法{ intx; x=rand()%process_num;//產(chǎn)生隨機數(shù) r_p=head_r;//活動指針返回鏈?zhǔn)?for(j=0;j<x;j++) { r_p=r_p->next; } if(r_p==head_r) { r_p=r_p->next; }execute_process(r_p); return0;}intexecute_process(PCB*p)//作業(yè)執(zhí)行過程{ (p->used_time)++; outfile<<p->name<<"運行時間+1"<<endl; if(p->demand_time==p->used_time) { exit_link(p); outfile<<"用戶"<<p->user<<"的作業(yè)"<<p->name<<"執(zhí)行完畢"<<endl; }return0;}/*************************************************************/intFIFS()//先進先服務(wù)作業(yè)調(diào)度{ WORK*temp; temp=work_head->next; while((free_memory-(temp->demand_memory)<0)||(free_tap-(temp->demand_tap)<0)) { temp=temp->next; } if(work_head==temp) { return0; } create_process(temp); outfile<<"作業(yè)"<<temp->name<<"被選入,放入主存執(zhí)行"<<endl; exit_work_table(temp); total_work--; if(0==total_work){ outfile<<"輸入井中已無作業(yè)"<<endl;} return0;}intSJF()//短作業(yè)優(yōu)先作業(yè)調(diào)度{ WORK*temp; intmin_time=32768; intindicate_num; temp=work_head->next; while(temp!=work_head) { if((temp->demand_time<min_time)&&(free_memory-(temp->demand_memory)>=0)&&(free_tap-(temp->demand_tap)>=0)) { indicate_num=temp->num; min_time=temp->demand_time; } temp=temp->next; } temp=work_head->next; while(temp->num!=indicate_num) { temp=temp->next; } create_process(temp); outfile<<"作業(yè)"<<temp->name<<"被選入,放入主存執(zhí)行"<<endl; exit_work_table(temp); total_work--; if(0==total_work){
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版服務(wù)合同終止條款具體執(zhí)行合同一
- 二零二五版建筑工地臨時應(yīng)急預(yù)案制定與演練合同3篇
- 二零二五年度設(shè)備維修保養(yǎng)合同for工業(yè)機器人2篇
- 二零二五年度視覺設(shè)計合同2篇
- 2024版智能家居系統(tǒng)集成服務(wù)合同
- 二零二五年黃金抵押貸款擔(dān)保投資合同3篇
- 二零二五年度新能源汽車充電樁建設(shè)標(biāo)前協(xié)議3篇
- 2024年生態(tài)修復(fù)技術(shù)支持協(xié)議
- 二零二五版工藝品電商平臺入駐與運營合作協(xié)議3篇
- 二零二五年度高凈值客戶黃金質(zhì)押貸款服務(wù)合同3篇
- 五年級上冊口算練習(xí)400題及答案
- 預(yù)防保健科主任競聘課件
- 團隊成員介紹
- 水泵行業(yè)銷售人員工作匯報
- 《流感科普宣教》課件
- 離職分析報告
- 春節(jié)家庭用電安全提示
- 醫(yī)療糾紛預(yù)防和處理條例通用課件
- 廚邦醬油推廣方案
- 乳腺癌診療指南(2024年版)
- 保險產(chǎn)品創(chuàng)新與市場定位培訓(xùn)課件
評論
0/150
提交評論