版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
昆明理工大學信息工程與自動化學院學生實驗報告(2011—2012學年第二學期)課程名稱:操作系統(tǒng)開課實驗室:信自樓2012年4月10日年級、專業(yè)、班計科103學號201010405318姓名李波成績實驗項目名稱作業(yè)調度指導教師舒國鋒教師評語教師簽名:年月日一、實驗目的通過編寫進程管理的算法,要求學生掌握整個進程管理的各個環(huán)節(jié),進程的數(shù)據(jù)結構描述,進程的各種狀態(tài)之間的轉換,以及進程的調度算法。以加深對進程的概念及進程調度算法的理解,并且提高鏈表的應用能力,達到提高編程能力的目的。二、所用儀器、材料(設備名稱、型號、規(guī)格等)。計算機一臺,VC++6.0。三、源程序:#include<iostream>#include<cstdlib>#include"assert.h"usingnamespacestd;classJob{public: intm_runtime;//作業(yè)運行時間intm_level;//優(yōu)先級 intm_arrivenum;//作業(yè)到達次序 intm_start;//作業(yè)開始時間 intm_end;//作業(yè)結束時間 Job*m_next;//指向下一個結點public: Job() { m_next=NULL; m_runtime=0; m_level=0; m_arrivenum=0; m_start=0; m_end=0; } ~Job() { }};classJobList{public: JobList() { Head=newJob; assert(Head); length=0; intnum,runtime,level,arrivenum; Job*pt,*st; st=Head; cout<<"請輸入作業(yè)個數(shù):"; cin>>num; while(length<num) { pt=newJob; assert(pt); cout<<"請輸入第"<<length+1<<"個作業(yè)的運行時間,優(yōu)先級,到達次序"<<endl; cin>>runtime>>level>>arrivenum; pt->m_runtime=runtime; pt->m_level=level; pt->m_arrivenum=arrivenum; st->m_next=pt; st=pt; length++; } } ~JobList()//由于Job類調用自己的析構函數(shù),故而此處不需要操作 { } Job*GetHead() { returnHead; } intGetLength() { returnlength; }private: Job*Head; intlength;};voidFCFS(JobListjoblist){ inttimetag=0,i=0; Job*pt; while(i<joblist.GetLength()) { pt=joblist.GetHead()->m_next;//頭結點不用 while(pt->m_arrivenum!=i) { pt=pt->m_next; } pt->m_start=timetag; timetag+=pt->m_runtime; pt->m_end=timetag; i++;//下一作業(yè) } intovertime=0; pt=joblist.GetHead()->m_next; while(pt!=NULL) { overtime+=(pt->m_end-pt->m_arrivenum); pt=pt->m_next; } cout<<"FCFS的平均作業(yè)周轉時間為:"<<(double)overtime/joblist.GetLength()<<endl;}voidSJF(JobListjoblist){ inttag,i=0,timetag=0; Job*pt,*st; pt=joblist.GetHead()->m_next; //pt->m_start=timetag; timetag+=pt->m_runtime; pt->m_end=timetag; pt->m_runtime=100; while(i<(joblist.GetLength()-1)) { st=pt->m_next; tag=100; while(st)//找到最小 { if(st->m_runtime<tag) tag=st->m_runtime; st=st->m_next; } st=pt->m_next; while(st->m_runtime!=tag) st=st->m_next; st->m_start=timetag; timetag+=st->m_runtime; st->m_end=timetag; st->m_runtime=100;//重新標記 i++;//下一作業(yè) } intovertime=0; while(pt) { overtime+=(pt->m_end);//-pt->m_arrivenum); pt=pt->m_next; } cout<<"SJF的平均周轉時間為:"<<(double)overtime/joblist.GetLength()<<endl;}voidRR(JobListjoblist){ Job*pt; inttimetag=0,remaintime=0; booltag=true;pt=joblist.GetHead()->m_next; while(pt) { remaintime+=pt->m_runtime; pt=pt->m_next; } while(tag) { pt=joblist.GetHead()->m_next; while(pt) { if(pt->m_runtime==0) pt=pt->m_next; else { timetag+=2; pt->m_runtime-=2; remaintime-=2; if(pt->m_runtime<0)//作業(yè)結束自行退出 { pt->m_runtime=0; timetag--; } if(pt->m_runtime==0) pt->m_end=timetag; pt=pt->m_next; } } if(remaintime==0) tag=false; } pt=joblist.GetHead()->m_next; intovertime=0; while(pt) { overtime+=pt->m_end; pt=pt->m_next; } cout<<"RR的平均周轉時間為:"<<(double)overtime/joblist.GetLength()<<endl;}voidHLF(JobListjoblist)//優(yōu)先級算法{ inttimetag=0,i=0,leveltag; Job*pt; while(i<joblist.GetLength()) { leveltag=0; pt=joblist.GetHead()->m_next; while(pt)//找到最高優(yōu)先級別的 { if(pt->m_level>leveltag) leveltag=pt->m_level; pt=pt->m_next; } pt=joblist.GetHead()->m_next; while(pt->m_level!=leveltag) { pt=pt->m_next; } pt->m_start=timetag; timetag+=pt->m_runtime; pt->m_end=timetag; pt->m_level=0; i++; }pt=joblist.GetHead()->m_next; intovertime=0; while(pt) { overtime+=pt->m_end; pt=pt->m_next; } cout<<"HLF的平均作業(yè)周轉時間為:"<<(double)overtime/joblist.GetLength()<<endl;}voidmain(){ intchoice; cout<<"請選擇調度算法"<<endl<<"0_退出程序"<<endl<<"1_先來先服務"<<endl<<"2_優(yōu)先數(shù)算法" <<endl<<"3_短作業(yè)優(yōu)先算法"<<endl<<"4_時間片輪轉算法"<<endl; cin>>choice; while(choice!=0) { switch(choice) { case1: { cout<<"建立作業(yè)"<<endl; JobListmyjoblist; FCFS(myjoblist); break; } case2: { cout<<"建立作業(yè)"<<endl; JobListmyjoblist; HLF(myjoblist); break; } case3: { cout<<"建立作業(yè)"<<endl; JobListmyjoblist; SJF(myjoblist); break; } case4: { cout<<"建立作業(yè)"<<endl; JobListmyjoblist; RR(myjoblist); break; } } cout<<"請選擇調度算法"<<endl<<"0_退出程序"<<endl<<"1_先來先服務"<<endl<<"2_優(yōu)先數(shù)算法" <<endl<<"3_短作業(yè)優(yōu)先算法"<<endl<<"4_時間片輪轉算法"<<endl; cin>>choice; } //FCFS(joblist); //HLF(joblist); //SJF(joblist); //RR(joblist);}四、程序截圖:五、實驗結果、分析和結論(誤差分析與數(shù)據(jù)處理、成果總結等。其中,繪制曲線圖時必須用計算紙)操作系統(tǒng)是計算機系統(tǒng)中必不可少的系統(tǒng)軟件,它是計算機系統(tǒng)中各種資源的管理者和各種活動的組織者、指揮者。操作系統(tǒng)采用時間片法調度進程,使系統(tǒng)資源得到充分利用,用戶可以花更少的時
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 獨立陶藝師陶藝制作服務合同
- 2025特許經(jīng)營是指特許經(jīng)營權擁有者以合同約定的形式
- 2025年上海市汽車買賣合同參考樣本(三篇)
- 2025年私募股權投資擔保合同示范文本
- 2025年度民辦學校教師聘用合同(含海外留學交流協(xié)議)
- 2024建設工程施工合同與承攬合同
- 2025年脫水機滑塊項目投資可行性研究分析報告
- 磁性材料項目可行性研究報告
- 建設工程施工轉包合同范本
- 小型工程合同范本
- 2024年業(yè)績換取股權的協(xié)議書模板
- 顳下頜關節(jié)疾?。谇活M面外科學課件)
- 工業(yè)自動化設備維護保養(yǎng)指南
- 2024人教新版七年級上冊英語單詞英譯漢默寫表
- 《向心力》參考課件4
- 2024至2030年中國膨潤土行業(yè)投資戰(zhàn)略分析及發(fā)展前景研究報告
- 2024年深圳中考數(shù)學真題及答案
- 土方轉運合同協(xié)議書
- Module 3 Unit 1 Point to the door(教學設計)-2024-2025學年外研版(三起)英語三年級上冊
- 智能交通信號燈安裝合同樣本
- 安全生產(chǎn)法律法規(guī)清單(2024年5月版)
評論
0/150
提交評論