




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
深 圳 大 学 实 验 报 告 课程名称: 操作系统 实验项目名称: CPU调度 学院: 计算机与软件学院 专业: 软件工程 指导教师: 梁正平 报告人: 学号: 班级: 2 实验时间: 实验报告提交时间: 教务处制一、实验目的与完成说明: 实验一:实现CPU调度的先来先服务算法,调度对象是进程,包含属性:名称、到达时间、运行时间,对象属性可根据不同算法可自行添加。本算法以进程的到达时间最早为优先,要求用一个函数来实现,不要写在main函数中。 实验二:实现CPU调度的短作业优先算法,调度对象是进程,包含属性:名称、到达时间、运行时间等,对象属性根据不同算法可自行添加。以进程的运行时间最短为优先,调度算法不要写在main函数中,要另外定义一个函数SJF来实现。 实验三:实现CPU调度的高响应比优先算法,调度对象是进程,包含属性:名称、到达时间、运行时间等,对象属性根据不同算法可自行添加。算法分析:本题目不能够简单地把所有程序的运行时间进行排序,在每一轮先检查是否有程序到达且未执行,如果符合条件只有一个,就直接调度;如果有多个,计算程序的响应比,最大的程序获得调度。 实验四:实现CPU调度的时间片轮转算法,调度对象是进程,包含属性:名称、到达时间、运行时间等,对象属性根据不同算法可自行添加。算法分析:该算法按照先来先服务的思想分配一个时间片给进程,如果进程在时间片内没有完成,则排到队列末尾等待重新分配。注意:如果进程在一个时间片内完成且时间片未用完,那么把剩余时间送给下一个进程。例如一个进程还需要CPU运行1秒,时间片为3,当分配一个时间给它,它运行1秒后完成,就把剩余的2秒送给下一个进程,因此下一个进程有5秒运行。 实验五:实现CPU调度的多级反馈队列算法,调度对象是进程,包含属性:名称、到达时间、运行时间等,对象属性根据不同算法可自行添加。二、主要思路与方法:一:void FCFS:timesSort(int num) int i = 0, j = 0; for(i = 0; inext ; Process* q = p-next ; for(j = 0; jarriveTimearriveTime) if(q-next) h = p; p = q; q = q-next; else h-next = q; p-next = q-next; q-next = p; if(q-next) h = p; p = q; q = q-next; 二:void SJF(int a10,int b10 ,char x10,int n) int ii,flag10,tnum=0,timer=10000; int i,temp=10000,temp1; float rt10,gt10; float xx; char zm10; for(i=0;in;i+) flagi=0; for(i=0;iai) timer=ai; while(n-tnum) ii=-1,temp1=10000;/标识下当前时刻是否有进程 for(i=0;iai&flagi=0)/判断现在时间与到达的程序 /cout afbi)/找出最小执行时间的程序 temp1=bi; ii=i;/保存该序号 /cout ii; if(ii!=-1&flagii=0) /coutasdsdggsgendl; zmtnum=xii; gttnum=aii; rttnum=bii; timer =timer+bii; flagii=1; tnum=tnum+1; else timer=timer+1; /coutdfagagggaendl; for(i=0;in;i+) coutzmi ; coutendl; for(i=0,xx=gti;in;i+) xx+=rti; coutxx ; coutendl; for(i=0,xx=gti;in;i+) xx+=rti; coutxx-gti ; coutendl; for(i=0,xx=gti;in;i+) xx+=rti; coutfixedsetprecision(2)(xx-gti)/rti ; 三:void FPF:getSort() while(1) int i = 0; for(i = 0; imax; i+) if(processi.flag=false&processi.arriTimenow) processi.rp = (now-processi.arriTime+processi.serriTime)/processi.serriTime; int rpMax = 0; for(i = 1; imax; i+) if(processrpMax.rpprocessi.arriTime) rpMax = i; if(processrpMax.flag = true) break; if(getTime(rpMax)=0) break; 实验四:void FPF:getSort() qWork.push(processhav); now = qWork.front().arriTime; while(!qWork.empty() Process p = qWork.front(); if(p.serriTime=p.serriTime) if(hav+1processhav+1.arriTime) isNewProcess(); else if(hav+1max&(p.serriTime+now)=processhav+1.arriTime) now = p.serriTime+now; p.finishTime = now; finishProcessfinish=p; finish+; hav+; qWorkqhav.pop(); qhav = 0; now = processhav.arriTime; processhav.flag = true; qWorkqhav.push(processhav); else /不被抢占,完成p进程 now = now+p.serriTime; p.finishTime = now; qWorkqhav.pop(); finishProcessfinish = p; finish+; while(qhav4&qWorkqhav.empty() qhav+; if(qhav=4&hav+1max) hav+; qhav = 0; now = processhav.arriTime; processhav.flag = true; qWorkqhav.push(processhav); else if(hav+1processhav+1.arriTime) isNewProcess(); else p.serriTime = p.serriTime -Tqhav+p.serriveTime; now = now+(Tqhav-p.serriveTime); p.serriveTime = 0; qWorkqhav.pop(); qWorkqhav+1.push(p); if(now=processhav+1.arriTime) newProcess(); while(qWorkqhav.empty()&qhav4) qhav+; 三实验程序或内容:实验一:#include#includeusing namespace std;class Processpublic:char processName;int arriveTime;float serviceTime;int startTime;int finishTime;float turnaroundTime;float timeWithWeight;Process* next;Process()next=NULL,arriveTime=0;serviceTime=0;startTime=0;finishTime=0;turnaroundTime=0;timeWithWeight=0;class FCFSprotected:Process* head;Process* current;void timesSort(int num);int processNum;public:FCFS(); void createList();void getTimes();void display();int isOhterProcess();FCFS:FCFS()head = new Process();current = new Process();head-next = current;void FCFS:createList()int getNum, i = 0;cingetNum;processNum = getNum;cincurrent-processName;for(i = 1; iq-processName;if(i=getNum) break;else current-next = q;current = q;current = head-next;cincurrent-arriveTime;Process* p = current;for(i = 1; inext;cinp-arriveTime;if(p-next) current-next = p;current = p;else break;current = head-next;cincurrent-serviceTime;p = current;for(i = 1; inext;cinp-serviceTime;if(p-next) current-next = p;current = p;else break;timesSort(getNum);void FCFS:timesSort(int num)int i = 0, j = 0;for(i = 0; inext ;Process* q = p-next ;for(j = 0; jarriveTimearriveTime)if(q-next) h = p;p = q;q = q-next;elseh-next = q;p-next = q-next;q-next = p;if(q-next) h = p;p = q;q = q-next;void FCFS:getTimes()current = head-next;current-startTime = current-arriveTime;current-finishTime = current-startTime+current-serviceTime;current-turnaroundTime = current-finishTime-current-arriveTime;current-timeWithWeight = current-turnaroundTime/current-serviceTime; while(current-next)Process* p = current-next;p-startTime = current-finishTime;p-finishTime = p-startTime+p-serviceTime;p-turnaroundTime = p-finishTime-p-arriveTime;p-timeWithWeight = p-turnaroundTime/p-serviceTime;current = current-next;if(current-next =NULL) break;int FCFS:isOhterProcess()coutis other process?p-arriveTimep-serviceTime;current = head-next;while(current-next)current = current-next;current-next = p;if(p-arriveTimecurrent-finishTime)p-startTime = p-arriveTime;elsep-startTime = current-finishTime;p-finishTime = p-startTime+p-serviceTime;p-turnaroundTime = p-finishTime-p-arriveTime;p-timeWithWeight = p-turnaroundTime/p-serviceTime;return 0;void FCFS:display()current = head-next;while(1)coutprocessNamenext)current = current-next;else break;coutnext;while(1)coutfinishTimenext)current = current-next;else break;coutnext;while(1)coutturnaroundTimenext)current = current-next;else break;coutnext;while(1)coutfixedsetprecision(2)timeWithWeightnext)current = current-next;else break;coutendl;int main()FCFS fcfs;fcfs.createList();fcfs.getTimes();fcfs.display();return 0;实验二:#include #include using namespace std;void SJF(int a10,int b10 ,char x10,int n)int ii,flag10,tnum=0,timer=10000;int i,temp=10000,temp1;float rt10,gt10;float xx;char zm10;for(i=0;in;i+)flagi=0;for(i=0;iai)timer=ai;while(n-tnum)ii=-1,temp1=10000;/标识下当前时刻是否有进程for(i=0;iai&flagi=0)/判断现在时间与到达的程序 /cout afbi)/找出最小执行时间的程序temp1=bi;ii=i;/保存该序号/cout ii;if(ii!=-1&flagii=0) /coutasdsdggsgendl;zmtnum=xii;gttnum=aii;rttnum=bii;timer =timer+bii;flagii=1;tnum=tnum+1;elsetimer=timer+1;/coutdfagagggaendl;for(i=0;in;i+)coutzmi ;coutendl;for(i=0,xx=gti;in;i+) xx+=rti;coutxx ;coutendl;for(i=0,xx=gti;in;i+)xx+=rti;coutxx-gti ;coutendl;for(i=0,xx=gti;in;i+)xx+=rti;coutfixedsetprecision(2)(xx-gti)/rtin;for(i=0;ixi;for(i=0;iai;for(i=0;ibi;SJF(a,b,x,n);/coutfixedsetprecision(2)12.5678endl;return 0;实验三:#include#includeusing namespace std;class Process public:float arriTime,serriTime,finishTime,startTime;bool flag;float timeOfOver,timeWithWeight,rp;int sort;char ch;Process()arriTime = 0;serriTime = 0;finishTime = 0;timeOfOver = 0;timeWithWeight = 0;flag = false;class FPFprotected:Process process100;int now;int max;int num;public:FPF();void createProcess();int getTime(int n);void getSort();void display();FPF:FPF()cinmax;now = 0;num = 0;void FPF:createProcess()int i = 0;for(i = 0; iprocessi.ch;for(i = 0; iprocessi.arriTime;for(i = 0; iprocessi.serriTime;int minArrive = 0;for(i = 1; iprocessi.arriTime)minArrive = i;now = processminArrive.arriTime;getTime(minArrive);getSort();int FPF:getTime(int n)processn.sort = num;num+;processn.flag = true;processn.rp = 0;processn.startTime = now;now = now+processn.serriTime;processn.finishTime = now;processn.timeOfOver = now-processn.arriTime;processn.timeWithWeight = processn.timeOfOver/processn.serriTime;int i = 0;for(i = 0; imax; i+)if(processi.flag = false) return 1;return 0;void FPF:getSort()while(1)int i = 0;for(i = 0; imax; i+)if(processi.flag=false&processi.arriTimenow)processi.rp = (now-processi.arriTime+processi.serriTime)/processi.serriTime;int rpMax = 0;for(i = 1; imax; i+)if(processrpMax.rpprocessi.arriTime)rpMax = i;if(processrpMax.flag = true) break;if(getTime(rpMax)=0) break;void FPF:display() int i = 0, j = 0;int sort100;for(j = 0; jmax; j+)for(i = 0; imax; i+)if(j=processi.sort)sortj = i;for(i = 0; imax; i+)coutprocesssorti.ch ;coutendl;for(i = 0; imax; i+)coutprocesssorti.finishTime ;coutendl;for(i = 0; imax; i+)coutprocesssorti.timeOfOver ;coutendl;for(i = 0; imax; i+)coutfixedsetprecision(2)processsorti.timeWithWeight ;coutendl;int main()FPF fpf;fpf.createProcess();fpf.display();return 0;实验四:#include#include#includeusing namespace std;class Process public:float arriTime,serriTime,finishTime,startTime,serriveTime;bool flag;float timeOfOver,timeWithWeight,rp;char ch;Process()arriTime = 0;serriTime = 0;serriveTime = 0;finishTime = 0;timeOfOver = 0;timeWithWeight = 0;flag = false;class FPFprotected:Process process100;Process finishProcess100;int now;int max;int hav;int T;int finish;int moreTime;queue qWork;public:FPF();void createProcess();void FCFS();int getTime(Process& p);void getSort();void display();int isNewProcess();FPF:FPF()cinmax;cinT;now = 0;hav = 0;finish = 0;moreTime = 0;void FPF:createProcess()int i = 0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 青少年讲解员培训活动策划方案
- 睢宁团建活动方案
- 美甲店组团活动方案
- 端午包粽子活动方案
- 福建五四活动方案
- 组织春季登山活动方案
- 美容活动广告策划方案
- 礼品公司规划策划方案
- 电台跑步活动方案
- 线上阅读活动策划方案
- DBJ43-T302-2025《住宅工程质量常见问题防治技术标准》
- 社会工作行政(第三版)课件全套 时立荣 第1-11章 社会服务机构- 社会工作行政的挑战、变革与数字化发展
- 《走近科学家》课件
- 《基础护理学(第七版)》考前强化模拟练习试题库500题(含答案)
- 小学数学与科学素养的融合教育
- 4.3 海-气相互作用课件【知识精研】高二上学期地理鲁教版(2019)选择性必修1
- 苏科版九年级上册数学第一次月考试卷附答案
- 全套55讲-鱼C论坛小甲鱼Python课后题-20211129034856
- 浙江省温州市“摇篮杯”2022-2023学年高一下学期化学竞赛试卷 含解析
- 24年追觅在线测评28题及答案
- 部编版二年级语文上册《植物妈妈有办法》教学课件2篇21
评论
0/150
提交评论