操作系统实验一进程调度模拟算法.doc_第1页
操作系统实验一进程调度模拟算法.doc_第2页
操作系统实验一进程调度模拟算法.doc_第3页
操作系统实验一进程调度模拟算法.doc_第4页
操作系统实验一进程调度模拟算法.doc_第5页
免费预览已结束,剩余5页可下载查看

下载本文档

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

文档简介

课程名称 操作系统 计算机科学与技术 分院 信10012 班 组 学号 实验者姓名 实验日期 2013 年 4 月 11 日评分 教师签名 实验一 进程调度模拟算法一、 实验目的通过进程调度实验,了解了优先数算法和时间片轮转算法的具体实施办法,体会了优先数算法和时间片轮转算法进程调度的过程,掌握了有关进程控制快、进程队列等概念,提高了编程技巧和对算法的理解和掌握。二、 实验要求进程调度是处理机管理的核心内容,本实验要求用高级语言编写模拟进程调度程序,以便加深理解有关进程控制快、进程队列等概念。三、 实验过程1 准备 分别用两种调度算法对伍个进程进行调度。每个进程可有三种状态;执行状态(RUN)、就绪状态(READY,包括等待状态)和完成状态(FINISH),并假定初始状态为就绪状态。 进程控制块结构如下: NAME进程标示符 PRIO/ROUND进程优先数/进程每次轮转的时间片数(设为常数2) CPUTIME进程累计占用CPU的时间片数 NEEDTIME进程到完成还需要的时间片数 STATE进程状态 NEXT链指针 进程的就绪态和等待态均为链表结构,共有四个指针如下: RUN当前运行进程指针 READY就需队列头指针 TAIL 就需队列尾指针 FINISH 完成队列头指针 运行和显示 程序开始运行后,首先提示:请用户选择算法,输入进程名和相应的NEEDTIME值。 每次显示结果均为如下5个字段: name cputime needtime priority state 注: 1在state字段中,R代表执行态,W代表就绪(等待)态,F代表完成态。2应先显示R态的,再显示W态的,再显示F态的。 3在W态中,以优先数高低或轮转顺序排队;在F态中,以完成先后顺序排队。 2.主要流程和源代码实验一源代码#include #include #include #includetypedef struct node char name10; int prio; int round; int cputime; int needtime; int count; char state; struct node *next; PCB;PCB *finish,*ready,*tail,*run;int N;void firstin(void);void print1(char a);void print2(char chose,PCB *p);void print(char chose);void insert_prio(PCB *q);void prior_init(char chose);void priority(char chose);void insert_rr(PCB *q);void roundrun_init(char chose);void roundrun(char chose);void main()/主函数char chose= ;while(chose!=q)&(chose!=Q)fflush(stdin);printf(选择进程优先级算法请输入P,选择循环轮转算法请输入R,退出请输入Qn);printf(请输入你的选择:);scanf(%c,&chose);if(chose!=q)&(chose!=Q)system(cls);if(chose=P)|(chose=p)prior_init(chose);priority(chose);system(cls); else if(chose=r)|(chose=R)roundrun_init(chose);roundrun(chose);system(cls);printf(谢谢使用!n);void firstin(void) if(ready!=NULL) run=ready; ready=ready-next; run-state=R; run-next=NULL; else run=NULL; void print1(char a) if(toupper(a)=P)printf(name cputime needtime priority state n);elseprintf(name cputime needtime count round state n); void print2(char chose,PCB *p) if(toupper(chose)=P) printf(%st%dt%dt%dt%cn,p-name,p-cputime,p-needtime,p-prio,p-state); elseprintf(%st%dt%dt%dt%dt%cn,p-name,p-cputime,p-needtime,p-count,p-round,p-state);void print(char chose) PCB *p;print1(chose);if(run!=NULL)print2(chose,run);p=ready;while(p!=NULL) print2(chose,p); p=p-next;p=finish;while(p!=NULL)print2(chose,p);p=p-next;void insert_prio(PCB *q)PCB *p,*s,*r; s=q;p=ready;r=p;if(s-prioready-prio)/ s-next=ready;ready=s; else while(p) if(p-prio=s-prio)r=p;p=p-next;elsebreak; s-next=p;r-next=s;void prior_init(char chose)PCB *p;int i,time;char na10;ready=NULL;finish=NULL;run=NULL;printf(输入进程 的个数 N:n);scanf(%d,&N);for(i=0;iname,na);p-cputime=0;p-needtime=time;p-state=W;p-prio=50-time; if(ready=NULL) ready=p; ready-next=NULL;else insert_prio(p);printf(当前就绪队列的进程的信息n);print(chose);printf(%d个进程已按优先级从高到低进到就绪队列中n,N);printf(按回车键开始模拟优先级算法.n);fflush(stdin);getchar();firstin();void priority(char chose) int i=1;while(run!=NULL)run-cputime+=1;run-needtime-=1;run-prio-=1;if(run-needtime=0) run-next=finish; finish=run; run-state=F; run-prio=0; run=NULL; firstin(); else if(ready!=NULL)&(run-prioprio) run-state=W;insert_prio(run);run=NULL;firstin(); print(chose);getchar();void insert_rr(PCB *q) tail-next=q;tail=q;q-next=NULL;void roundrun_init(char chose)PCB *p;int i,time;char na10;ready=NULL;finish=NULL;run=NULL;printf(tt循环轮转算法模拟全过程nn);printf(输入进程 的个数 N:n);scanf(%d,&N);for(i=0;iname,na);p-cputime=0;p-needtime=time;p-count=0;p-state=W;p-round=2;if(ready!=NULL)insert_rr(p);else p-next=ready; ready=p; tail=p;printf(当前就绪队列的进程的信息n);print(chose);printf(%d个进程已按FIFO进到就绪队列中n,N);printf(按回车键开始模循环轮转算法.n);fflush(stdin);getchar();run=ready;ready=ready-next;run-state=R; void roundrun(char chose) int i=1;while(run!=NULL)run-cputime+=1;run-needtime-=1;run-count+=1;if(run-needtime=0) run-next=finish; finish=run; run-state=F; run-prio=0; run=NULL; if(ready!=NULL) firstin(); else if(run-count=run-round) run-count=0; if(ready!=NULL) run-state=W; insert_rr(run); firstin(); print(chose);getchar();四、 实验结果五、 实验总结通过本次试验,可以更加清楚的了解时间片轮转的原理。主要是利用时间片的轮转使得每个进程都可以得到一部分时间的执行段。这样可以保证计算机能过在较短的时间内对用户的要求尽量做到都能满足到。了解完原理,就是动手实践的时候。在网上下载几个代码,进行调试,运行、查看结果。最终选择一个比较简单易懂的代码进行实验。看懂代码和结果后,这次实验也算是成功的一大半了。做完实验,首先想到的是这个方法的思想。以及他和其它调度算法的区别,比如先来先服务

温馨提示

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

最新文档

评论

0/150

提交评论