进程调度算法的模拟实现_第1页
进程调度算法的模拟实现_第2页
进程调度算法的模拟实现_第3页
进程调度算法的模拟实现_第4页
进程调度算法的模拟实现_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上课程设计报告课程名称:操作系统信息工程学院题目: 进程调度算法的模拟实现 一、设计目的本课程设计是学习完“计算机操作系统”课程后进行的一次全面的综合训练,通过课程设计,更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。本课程设计是在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个,也就是说能运行的进程数大于处理机个数。为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择一进程占用处理机。要求学生设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。二、设计内容(1)概述选择一个调度算法,实现处

2、理机调度。设计要求:1)进程调度算法包括:先来先服务算法,时间片轮转算法,短进程优先算法,动态优先级算法。2)可选择进程数量3)本程序包括四种算法,用C或C+语言实现,执行时在主界面选择算法(可用函数实现),进入子页面后输入进程数,(运行时间,优先数由随机函数产生),执行,显示结果。(2)设计原理(1)先来先服务算法 FCFS 每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源创建进程,然后放入就绪队列。(2)时间片轮转法 RR 系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。时间片的大小

3、从几ms到几百ms。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。(3) 短进程优先算法 SPF短进程优先调度算法是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。 (4A)动态优先级算法 优先权调度算法是为了照顾紧迫型作业,使之在进入系统后便获得优先处理,引入最高优先权优先调度算法。动态优先权是指在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改

4、变的,以便获得更好的调度性能。 设计思想 首先开辟一个链表空间存放输入的原始作业的数据;然后设计的四种算法分别开辟四个链表空间,以实现不改变输入作业的原始数据就可以同时进行四种算法的调用,以对比四种算法的优劣性。 设计中所包括的函数有:void input();/输入生成HEAD链表函数,用于存放输入作业的所有信息void connect();/连接结点函数void myprintf();/打印我的界面void printftable();/打印作业状态void sortFCFS();/先来先服务复制HEAD并形成先来先服务的headFCFS链表void sortSJF();/短作业优先复制H

5、EAD并形成短作业优先链表headSJFvoid sortHRN();/高响应比函数,包括了执行void sortSUPER();/高优先权函数复制HEAD形成headSUPER链表void choose();/功能及算法选择函数void execute(JCB*p);/执行函数void copynode(JCB*p1,JCB*p2);/复制结点函数void printffinish(JCB*p);/打印一个作业完成时的周转时间等统计 JCB *delenode(JCB *ph,JCB *P);/ 删除并返回结点,用于高响应比算法Void printfall();/打印用过四种算法的周转时间和

6、带权周转时间Void destroy(JCB*P);/销毁函数,释放空间实现重新输入作业(3)详细设计及编码算法使用流程图 开始 初始化PCB,输入进程信息RR算法,按照时间片依次执行进程,ALLTIME=4.SPS算法,按照ALLTIME从小到大依次输出优先级算法,按照优先从大到小输出,进程执行依次P-3,就绪队列中的进程P+1结束1.先来先服务算法对于先到达的进程优先分配CPU,按照先来先服务的原则依次执行各进程。算法: void FCFS()Node *p=head->next;while(p!=NULL)cout<<"执行进程"<<en

7、dl<<p->data.ID;p=p->next;cout<<endl;cout<<"所有进程都执行完成"<<endl;2.短进程优先算法先找到运行时间最短的程序,然后执行,再从剩余的程序中找到运行时间最短的在执行,依次每次都执行运行时间最短的,直到程序执行完毕。算法: void SJF()Node *p;Node *pmin;while(head2->next!=NULL)pmin=head2->next;for(p=head2->next;p!=NULL;p=p->next)if(pmi

8、n->data.ALLTime>p->data.ALLTime)pmin=p;cout<<"执行剩余区间长度最短的进程"<<endl<<pmin->data.ID;for(p=head2;p!=NULL;p=p->next)if(p->next=pmin)p->next=p->next->next;free(pmin);printf("n");printf("所有进程都执行完成。nn");3,时间片轮转算法按照轮转的次序分配给每个程序一定的时间执

9、行,执行完成后执行后面的进程 ,依次循环执行直到所有进程执行完成。算法: void RR(int m)Node *p;while(head1->next!=NULL)p=head1->next;Node *prep=head1;Node *q;while(p!=NULL)cout<<"执行进程一个时间片"<<p->data.ID;for(q=head1;q->next!=NULL;q=q->next)if(q->next=p)p->data.ALLTime-=4;p->data.CPUTime+=4;i

10、f(p->data.ALLTime<=0)cout<<"进程已执行完成"<<p->data.ID;prep->next=prep->next->next;free(p);p=prep->next;elseprep=prep->next;p=p->next;cout<<endl;cout<<"进入下一次轮转"<<endl;cout<<"所有进程都执行完成"<<endl;4.动态优先权算法按照优先级从高

11、到低依次执行程序。算法:void SearchMaxPRI(int m)Node *p=head->next;Node *q=head->next;Node *q0=head;while(q!=NULL)if(q->data.ALLTime=0)cout<<"进程已执行完成"<<endl<<q->data.ID;n-; q0->next=q0->next->next; free(q); q=q0->next; else if(q->data.Priority>p->data

12、.Priority) p=q;q0=q0->next; q=q->next;if(n>0)action(p); (4)运行结果分析(运行界面截图、输入输出数据说明和分析等)先输入系统进程数,系统自动分配进程先来先服务调度:最短进程调度:时间片轮转调度:动态优先级调度:(5)设计小结课程设计是我们专业课程知识综合应用的实践训练,也是为我们以后的工作夯实基础。通过改程序对操作系统的基础知识了解得更透彻了,同时对磁盘调度的四种算法先来先服务算法,短进程优先调度算法,时间片轮转调度算法,动态优先级调度有了更深刻的理解和掌握,使我能够为进程调度选择适当的算法,提高CPU工作效率。进行进

13、程调度程序设计的过程中,得到老师的大力指导和同学的支持,在此向他们表示感谢。经过自己的动手操作和同学老师的指导我成功的做出了课程设计自己感到很高兴。在整个过程中自己也感受到了集体团结的力量,今后无论是在工作还是学习中我都会发样这种精神。(6)参考文献(参考的书籍等,列出书名、作者、出版社及出版时间等,例如:1计算机操作系统(第3版),汤小丹,西安电子科技大学出版社,2007年7月2C语言程序设计,孟庆昌,人民邮电出版社,2006年4月)源代码:#include<stdio.h>#include<stdlib.h>#include<malloc.h>#incl

14、ude<time.h>#include <iostream.h>#define TRUE 1#define FALSE 0#define OK 1typedef struct PCB int ID; int Priority; int CPUTime; int ALLTime;int Status;PCB;typedef PCB Dt;typedef struct NodeDt data;struct Node *next;Node;Node *head=(Node *)malloc(sizeof(Node);Node *head1=(Node *)malloc(siz

15、eof(Node);Node *head2=(Node *)malloc(sizeof(Node);int n;void create(int n)int i=1;srand(int)time(0); head->next=NULL;Node *q=head;cout<<" 优先数 优先级 CPUTime AllTime Status "<<endl; while(i<=n) Node *p=(Node *)malloc(sizeof(Node); p->data.ID=i;p->data.CPUTime=0;p->da

16、ta.Status=0;p->data.Priority=rand()%10+1;p->data.ALLTime=rand()%8+1;cout<<" "<<p->data.ID<<" "<<p->data.Priority<<" "<< p->data.CPUTime<<" "<<p->data.ALLTime<<" "<<p->da

17、ta.Status<<endl;p->next=NULL;q->next=p;q=q->next;i+;Node *p0=head1;head1->next=NULL;for(q=head->next;q!=NULL;q=q->next)Node *r=(Node *)malloc(sizeof(Node);r->data.ID=q->data.ID;r->data.CPUTime=q->data.CPUTime;r->data.Status=q->data.Status;r->data.Priority

18、=q->data.Priority;r->data.ALLTime=q->data.ALLTime;p0->next=r;r->next=NULL;p0=p0->next;Node *p1=head2;head2->next=NULL;for(q=head->next;q!=NULL;q=q->next)Node *k=(Node *)malloc(sizeof(Node);k->data.ID=q->data.ID;k->data.CPUTime=q->data.CPUTime;k->data.Status=

19、q->data.Status;k->data.Priority=q->data.Priority;k->data.ALLTime=q->data.ALLTime;p1->next=k;k->next=NULL;p1=p1->next;void FCFS()Node *p=head->next;while(p!=NULL)cout<<"执行进程"<<endl<<p->data.ID;p=p->next;cout<<endl;cout<<"所有

20、进程都执行完成"<<endl;void SJF()Node *p;Node *pmin;while(head2->next!=NULL)pmin=head2->next;for(p=head2->next;p!=NULL;p=p->next)if(pmin->data.ALLTime>p->data.ALLTime)pmin=p;cout<<"执行剩余区间长度最短的进程"<<endl<<pmin->data.ID;for(p=head2;p!=NULL;p=p->

21、next)if(p->next=pmin)p->next=p->next->next;free(pmin);cout<<endl;cout<<"所有进程都执行完成"<<endl;void action(Node *p)Node *q=head->next;while(q!=NULL)cout<<p->data.ID<<"执行一个时间片的进程"<<endl;if(q!=p)q->data.Priority=q->data.Priority

22、+1;elseq->data.Priority=q->data.Priority-3;if(q->data.ALLTime>4)q->data.ALLTime-=4;elseq->data.ALLTime=0;q->data.Status=1;q=q->next;void SearchMaxPRI(int m)Node *p=head->next;Node *q=head->next;Node *q0=head;while(q!=NULL)if(q->data.ALLTime=0)cout<<q->data.I

23、D<<"进程已执行完成"<<endl;n-; q0->next=q0->next->next; free(q); q=q0->next; else if(q->data.Priority>p->data.Priority) p=q;q0=q0->next; q=q->next;if(n>0)action(p);void RR(int m)Node *p;while(head1->next!=NULL)p=head1->next;Node *prep=head1;Node *q;while(p!=NULL)cout<<p->data.ID<<"执行进程一个时间片"<<endl;for(q=head1;q->next!=NULL;q=q->next)if(q->next=p)p->data.ALLTime-=4;p->data.CPUTime+=4;if(p->data.AL

温馨提示

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

评论

0/150

提交评论