实验报告(操作系统).doc_第1页
实验报告(操作系统).doc_第2页
实验报告(操作系统).doc_第3页
实验报告(操作系统).doc_第4页
实验报告(操作系统).doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机学院综合性、设计性实验报告专业:计算机科学与技术 年级/班级:2013级一 班 20152016学年第一学期课程名称计算机操作系统指导教师本组成员学号姓名实验地点计科楼216实验时间2015/12/6项目名称进程调度实验类型综合性/设计性一、实验目的:通过动态优先权调度算法和时间片轮转调度算法的模拟加深进程概念和进程调度过程的理解。二、实验仪器或设备:计算机一台三、总体设计 整个程序可由主程序和如下7个过程组成:(1)在优先数算法中,将尚未完成的PCB按优先数顺序插入到就绪队列中;(2)在时间片轮转算法中,将执行了一个时间片单位(为2),但尚未完成的进 程的PCB,插到就绪队列的队尾;(3)调度就绪队列的第一个进程投入运行;(4)显示每执行一次后所有进程的状态及有关信息。(5)创建新进程,并将它的PCB插入就绪队列;(6)按优先数算法调度进程;(7)按时间片轮转法调度进程。四、实验步骤#include #include #include typedef struct node char name20; int prio; /*进程的优先级*/int round; /*分配CPU的时间片*/ int cputime; /*CPU执行时间*/ int needtime; /*进程执行所需要的时间*/ char state; /*W:就绪态,R:执行态,F:完成态*/ int count; struct node *next;PCB; PCB *ready=NULL,*run=NULL,*finish=NULL;/*就绪队列、执行队列完成队列*/ int num; void GetFirst();/*绪队列取第一个节点*/ void Output();void InsertFinish(PCB *in);/*时间片队列*/ void PrioCreate();/*优先级输入*/void InsertPrio(PCB *in);/*创建优先级队列*/void Priority();/*按照优先级调度*/void TimeCreate();/*时间片输入*/ void InsertTime(PCB *in);/*时间片队列*/void RoundRun();/*时间片轮转调度*/ int main() char chose; printf(please input total process number:n); scanf(%d,&num); getchar(); printf(please input method:(P/R)n); scanf(%c,&chose); switch(chose) case P: case p: PrioCreate(); Priority(); break; case R: case r: TimeCreate(); RoundRun(); break; default:break; Output(); return 0; void GetFirst() run=ready; if(ready!=NULL) run-state=R; ready=ready-next; run-next=NULL; void Output() PCB *p; p=ready; printf(nametprioritytroundtcputimetneedtimetstatetcountn); while(p!=NULL) printf(%st%dtt%dt%dt%dtt%ct%dn,p-name,p-prio,p-round,p-cputime,p-needtime,p-state,p-count); p=p-next; p=finish; while(p!=NULL) printf(%st%dtt%dt%dt%dtt%ct%dn,p-name,p-prio,p-round,p-cputime,p-needtime,p-state,p-count); p=p-next; p=run; while(p!=NULL) printf(%st%dtt%dt%dt%dtt%ct%dn,p-name,p-prio,p-round,p-cputime,p-needtime,p-state,p-count); p=p-next; void InsertPrio(PCB *in)/*创建优先级队列,优先数越小,优先级越低*/ PCB *fst,*nxt; fst=nxt=ready; if(ready=NULL) in-next=ready; ready=in; else/*查到合适的位置进行插入*/ if(in-prio=fst-prio)/*比第一个还要大,则插入到队头*/ in-next=ready; ready=in; else while(fst-next!=NULL)/*移动指针查找第一个别它小的元素的位置进行插入*/ nxt=fst; fst=fst-next; if(fst-next=NULL)/*已搜索到队尾优先级数最小,插到队尾*/ in-next=fst-next; fst-next=in; else/*插入到队列中*/ nxt=in; in-next=fst; void InsertTime(PCB *in)/*将进程插到就绪队列尾部*/ PCB *fst; fst=ready; if(ready=NULL) in-next=ready; ready=in; else while(fst-next!=NULL) fst=fst-next; in-next=fst-next; fst-next=in; void InsertFinish(PCB*in)/*将进程插入到完成队列尾部*/ PCB *fst; fst=finish; if(finish=NULL) in-next=finish; finish=in; else while(fst-next!=NULL) fst=fst-next; in-next=fst-next; fst-next=in; void PrioCreate()/*优先级调度输入*/ PCB *tmp; int i; printf(input name and needtime:n); for(i=0;iname); getchar(); scanf(%d,&(tmp-needtime); tmp-cputime=0; tmp-state=W; tmp-prio=50-tmp-needtime;/*需时越多,优先级越低*/ tmp-round=0; tmp-count=0; InsertPrio(tmp);/*按照优先级从高到低,插入到就绪队列*/ void TimeCreate() PCB *tmp; int i; printf(please input name and needtime:n); for(i=0;iname); getchar(); scanf(%d,&(tmp-needtime); tmp-cputime=0; tmp-state=W; tmp-prio=0; tmp-round=2;/*每个进程所分配的时间片是2*/ tmp-count=0; InsertTime(tmp); void Priority()/*按优先级调度,每次执行一个时间片*/ int flag=1; GetFirst(); while(run!=NULL) Output(); /*输出每次调度过程中状态*/ while(flag) run-prio-=3;run-cputime+; run-needtime-; if(run-needtime=0) /*进程执行完毕,状态置为F,插入到完成队列*/ run-state=F; run-count+;/*进程执行的次数加1*/ InsertFinish(run); flag=0; else /*将进程状态置为W,入就绪队列*/ run-state=W; run-count+; InsertTime(run); flag=0; flag=1; GetFirst(); /*继续取就绪队列进程入执行队列*/ void RoundRun() /*时间片轮转调度算法*/ int flag=1; GetFirst(); while(run!=NULL) Output(); while(flag) run-count+; run-cputime+; run-needtime-; if(run-needtime=0) run-state=F; InsertFinish(run); flag=0; else if(run-count=run-round) /*时间片用完*/ run-state=W; run-count=0; /*计数器清零,为下次做准备*/ InsertTime(run); flag=0; flag=1; GetFirst(); 五、结果分析与总结总结:从本实验要求用高级语言编写模拟进程调度程序,加深理解了有关进程控制快、进程队列等概念,并体会和了解优先数算法和时间片轮转算法的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论