基于静态优先权和响应比的进程管理系统的设计课程设计报告_第1页
基于静态优先权和响应比的进程管理系统的设计课程设计报告_第2页
基于静态优先权和响应比的进程管理系统的设计课程设计报告_第3页
基于静态优先权和响应比的进程管理系统的设计课程设计报告_第4页
基于静态优先权和响应比的进程管理系统的设计课程设计报告_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、基于静态优先权和响应比的进程管理系统的设计课程设计报告(本科)基于静态优先权和响应比的进程管理系统的设计课程:操作系统课程设计学号:姓名:班级:教师:时间:计算机科学与技术系设计名称:基于静态优先权和响应比的进程管理系统的设计设计内容、目的与要求:本课程设计的目的是:加深对进程概念及进程管理各部分内容的理解;熟悉静态优先权和响应比两种进程调度算法。本课程设计的要求是:(1)设计一个完整的进程调度系统,系统中至少包括5个进程;(2)定义pcb;(3)采用链表管理就绪队列;(4)结果要能够显示出进程的调度序列及进入系统的时间、运行时间等必要信息。(5)设计的输入数据要能体现算法的思想。计划与进度安

2、排:6月7日 按照课程设计要求建立流程图,架起大概框架6月8日到12日 输入主函数和各个过程的程序6月13日到20日 调试程序并记录调试中的问题,努力解决6月21日到25日 系统测试,演示设计成果,将调试结果截图保留下来6月26日到30日 整理完善课程设计说明书设计过程、步骤(可加页):进程创建模块 此模块用来创建进程实体,设置进程的到达时间、服务时间、开始时间。 就绪队列模块 此模块用链式队列来实现,用来存放已经创建的进程,为下面的两个模块来服务。 静态优先权模块 此模块是先进先出算法的实现模块,此模块遍历模块中的就绪队列来找到到达时间的从小到的大的序列。 响应比模块 此模块是短进程优先调度

3、算法的实现模块,此模块遍历中的就绪队列来找到服务时间从小打到的序列。开始创建进程输入进程名称、大小、创建时间、服务时间就绪队列查看选择调度算法(fcfs/spf)输出结果结束程序源代码如下: /基于静态优先权和响应比的进程管理系统的设计#include #include #include #include#define false 0#define true 1/定义链表的结构体typedef struct char id20;/进程名称int f_priority;/初始优先权int arrive_time;/到达时间int service_time;/服务时间int start_time;

4、/开始时间int finish_time;/完成时间int wait_time;/等待时间float priority;/响应比(优先权)datatype;/15/定义链表 typedef struct nodedatatype data;struct node * prior;/前一节点指针struct node * next;/后一节点指针 22listnode,* linklist;linklist head,list_static,list_rp;listnode *p,*q,*m,*n,*rear,*z;/函数说明int menu_select();linklist enter(vo

5、id);void display(linklist head);void display_static(linklist head);void display_rp(linklist head);/30/主函数void main()for(;) switch(menu_select()case 1:printf(t*n);printf(t*创建进程*n);printf(t*n);head=enter();system(cls);break;case 2:printf(t*n);printf(t*显示就绪队列*n);printf(t*n);display(head);break;case 3:p

6、rintf(t*n);printf(t*静态优先权*n);printf(t*n);display_static(head);break;case 4:printf(t*n);printf(t*高响应比优先*n);printf(t*n);display_rp(head);break;case 0:printf(n谢谢使用!n);return;default :break;/68/*/菜单选择函数程序/*int menu_select()int sn;printf(t基于静态优先权和响应比的进程管理系统nn);printf(t=n);/80printf(t 1.创建进程队列n);printf(t

7、2.显示就绪队列n);printf(t 3.静态优先权n);printf(t 4.高响应比优先n);printf(t 0.退出n);printf(t=n);printf(t请选择04:);while(1) scanf(%d,&sn);/93 getchar(); if(52sn&sndata.id);printf(%st,t初始优先权:);scanf(%d,&p-data.f_priority);printf(%st,t到达时间:);scanf(%d,&p-data.arrive_time);printf(%st,t服务时间:);scanf(%d,&p-data.service_time);r

8、ear-next=p;p-prior=rear;/双向链表rear=p;/判断是否还继续输入新的flag=n;printf(nt继续输入吗?(y/n);getchar();scanf(%c,&flag);/while()结束rear-next=null;return head;/*/*显示进程队列*/*void display(linklist head)listnode *p;if(head=null|head-next=null) printf(nt空队列 任意键返回主菜单);getchar();system(cls);return;p=head-next;printf(nt* 以下为队列

9、信息*); printf(nt进程名t初始优先权t到达时间t服务时间t);printf(nt-n);while(p!=null)printf(t%s,p-data.id);printf(t%d,p-data.f_priority);printf(tt%d,p-data.arrive_time);printf(tt%d,p-data.service_time);printf(nt-n);p=p-next;getchar();system(cls);/*/*静态优先权算法*/*void display_static(linklist head)int size=0;/假设当前时间为0int tim

10、e=0;/假设未进程满足条件bool have=false;/180listnode *p,*q,*rear,*m,*n,*z;if(head=null|head-next=null) printf(nt空队列 任意键返回主菜单);getchar();system(cls);return;/创建一个新的链表用来存储静态优先权算法后得到的执行队列linklist list_static=(listnode *)malloc(sizeof(listnode);rear=list_static;p=(listnode *)malloc(sizeof(listnode);/取得链表节点数p=head-

11、next;/190while(p!=null)size+;p=p-next;p=head-next;printf(%d,size);/临时指针m=(listnode *)malloc(sizeof(listnode);m-data=head-next-data;q=(listnode *)malloc(sizeof(listnode);q-data=head-next-data;/最外层循环 选取新排列的链表 int i; for(i=1;idata.arrive_timedata.f_prioritydata.f_priority)/把p节点 复制成qq-data=p-data;/进程还未到

12、达 选出到达时间最小且优先权最大的if(p-data.arrive_timetime)/同时到达if(m-data.arrive_time=p-data.arrive_time)/优先权if(m-data.f_prioritydata.f_priority)m-data=p-data;/224if(m-data.arrive_timep-data.arrive_time)m-data=p-data;p=p-next;/while循环结束z=(listnode *)malloc(sizeof(listnode);n=(listnode *)malloc(sizeof(listnode);if(h

13、ave=true)z-data=q-data;z-data.start_time=time;elsez-data=m-data;z-data.start_time=z-data.arrive_time;n=(listnode *)malloc(sizeof(listnode);n-data=z-data;n-data.finish_time=n-data.start_time+n-data.service_time;n-data.wait_time=n-data.start_time-time;time=n-data.finish_time;rear-next=n;if(i!=1)n-prio

14、r=rear;rear=n;/选出的进程需要从原来的链表中删除p=head-next;while(p!=null)/搜索到要删除的节点if(strcmp(z-data.id,p-data.id)=0)if(p-next!=null)p-prior-next=p-next;p-next-prior=p-prior;elsep-prior-next=null;free(p);break;p=p-next;if(head-next!=null)p=(listnode *)malloc(sizeof(listnode);p=head-next;q-data=head-next-data;m-data=

15、head-next-data;elsep=null;/for循环结束/276rear-next=null;rear=head;p=list_static-next;printf(nt* 非抢占静态优先权*); printf(n进程名t初始优先权t到达时间t服务时间t开始时间t完成时间t);printf(n-n);while(p!=null)printf(%s,p-data.id);printf(t%d,p-data.f_priority);printf(tt%d,p-data.arrive_time);printf(tt%d,p-data.service_time);printf(tt%d,p

16、-data.start_time);printf(tt%d,p-data.finish_time);printf(n-n);z=(listnode *)malloc(sizeof(listnode);z-data=p-data;rear-next=z;z-prior=rear;rear=z;/300p=p-next;rear-next=null;getchar();system(cls);/*/*高响应比优先*/*void display_rp(linklist head)int size=0;float rp=0,rpq=0,rpm=0;/假设当前时间为0int time=0;/假设未进程满

17、足条件bool have=false;/325listnode *p,*q,*rear,*m,*n,*z;if(head=null|head-next=null) printf(nt空队列 任意键返回主菜单);getchar();system(cls);return;/创建一个新的链表用来存储高响应比优先权算法后得到的执行队列linklist list_rp=(listnode *)malloc(sizeof(listnode);rear=list_rp;p=(listnode *)malloc(sizeof(listnode);/取得链表结点数p=head-next;while(p!=nul

18、l)size+;p=p-next;p=head-next;printf(%d,size);/临时指针m=(listnode *)malloc(sizeof(listnode);m-data=head-next-data;q=(listnode *)malloc(sizeof(listnode);q-data=head-next-data;/340 int i;/最外层循环 选取新排列的链表 for(i=1;idata.arrive_timedata.arrive_time)/p-data.service_time)+1;rpq=(float)(time-q-data.arrive_time)/

19、q-data.service_time)+1;/取其中响应比高的进程if(rpqdata=p-data;/进程还未到达 选出最先到达的if(p-data.arrive_timetime)if(m-data.arrive_timep-data.arrive_time)m-data=p-data;p=p-next;/while循环结束z=(listnode *)malloc(sizeof(listnode);n=(listnode *)malloc(sizeof(listnode);if(have=true)/有进程满足z-data=q-data;z-data.start_time=time;el

20、se/未有进程满足z-data=m-data;z-data.start_time=z-data.arrive_time;n=(listnode *)malloc(sizeof(listnode);n-data=z-data;n-data.finish_time=n-data.start_time+n-data.service_time;n-data.priority=(float)(n-data.start_time-n-data.arrive_time)/n-data.service_time+1;time=n-data.finish_time;rear-next=n;if(i!=1)n-p

21、rior=rear;rear=n;/选出的进程需要从原来的链表中删除p=head-next;while(p!=null)/搜索到要删除的节点/390if(strcmp(z-data.id,p-data.id)=0)if(p-next!=null)p-prior-next=p-next;p-next-prior=p-prior;elsep-prior-next=null;free(p);break;p=p-next;if(head-next!=null)p=(listnode *)malloc(sizeof(listnode);p=head-next;q-data=head-next-data;

22、m-data=head-next-data;elsep=null;/for循环结束rear-next=null;rear=head;p=list_rp-next;printf(nt*高响应比优先*); printf(n进程名t到达时间t服务时间t开始时间t完成时间t响应比);printf(n-n);while(p!=null)printf(%s,p-data.id);printf(t%d,p-data.arrive_time);printf(tt%d,p-data.service_time);printf(tt%d,p-data.start_time);printf(tt%d,p-data.finish_time);print

温馨提示

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

评论

0/150

提交评论