进程调度算法磁盘调度算法银行家算法操作系统课程设_第1页
进程调度算法磁盘调度算法银行家算法操作系统课程设_第2页
进程调度算法磁盘调度算法银行家算法操作系统课程设_第3页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、操作系统课程设计说明书学院名称:专业班级:姓 名:学 号:2013年1月1日评分标准优秀:有完整的符合标准的文档,文档有条理、文笔通顺,格式正确,程序完 全实现设计要求,独立完成;良好:有完整的符合标准的文档,文档有条理、文笔通顺,格式正确;程序完 全实现设计要求,独立完成,但存在少量错误;中等:有完整的符合标准的文档,有基本实现设计方案的软件,设计方案正确;及格:有完整的符合标准的文档,有基本实现设计方案的软件,设计方案基本 正确;不及格:没有完整的符合标准的文档,软件没有基本实现设计方案,设计方案 不正确。没有独立完成,抄袭或雷同。成绩评定为:。指导教师:年 月 日目录一进程调度算法4-2

2、3 页二银行家算法24-34 页三磁盘调度算法35-46 页进程调度算法1设计目的在多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策 略决定哪个进程优先占有处理机,因而必须解决进程调度的问题,进程调度 算法就是要解决进程调度的问题。2. 任务及要求2.1 设计任务设计程序来模拟进程的四种调度算法,模拟实现调度的基本功能。2.2 设计要求产生的各种随机数要加以限制,如 alltime 限制在 40 以内的整数。 进程的数量 n 不能取值过大。3. 算法及数据结构3.1 算法的总体思想(流程)每个用来标识进程的进程控制块 PCB 用结构来描述,包括以下字段:(1) 进程优先数ID,

3、其中0为闲逛进程,用户进程的标识数为1,2, 3'(2) 进程优先级Priority,闲逛进程(idle)的优先级为0,用户进程的优先级大于 0,且随机产生,优先数越大,优先级越高。(3) 进程占用的CPU时间CPUtime,进程每运行一次,累计值等于 4。( 4)进程总共需要运行时间 Alltime ,利用随机函数产生。( 5)进程状态, 0:就绪态; 1 :运行态; 2:阻塞态。利用链表将数据连接起来,实现数据的存储。3.2 链表模块3.2.1 功能 实现链表的存储功能,以及实现存储的查找功能。3.2.2 数据结构度。构造链表这个数据结构,以及链表的初始化,链表的插入,链表的长3.

4、2.3 算法typedef structElemType *elem;intlength;intlistsize;SqList;Status InitList(SqList &l)l.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType);if(!l.elem) exit(OVERFLOW);l.length=0;l.listsize=LIST_INIT_SIZE;return OK;int ListLength(SqList l)return(l.length);Status ListInsert_Sq(SqList &L

5、,int i, ElemType e)/ 在顺序表 L 的第 i 个位置前插入元素 e,i 的合法值为 1.L.length+1if(i<1|i>L.length+1)return ERROR;if(L.length>=L.listsize)ElemType*newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType);if(!newbase) exit(OVERFLOW);L.elem=newbase;L.listsize+=LISTINCREMENT;ElemType *q=&

6、amp;L.elemi-1, *p=&L.elemL.length-1;while(p>=q)*(p+1)=*p; -p; / 插入位置后的元素右移*q=e;+L.length;return OK;Status GetElem(SqList L,int i,ElemType &e)if(i<=0|i>L.length)return ERROR;elsee=*(L.elem+i-1);return OK;void Outputlist(SqList &L)if(0=L.length)printf(" 空集 !");elsefor(in

7、t i=0;i<L.length;+i) printf("%c",*(L.elem+i);3.3 主函数模块3.3.1 功能 实现进程调度的四种算法,以及人机交互的菜单。3.3.2 数据结构 主要包括五个部分,分别是四种算法,和进程的输入和菜单部分,功 能分别实现。3.3.3 算法void main() for(1;) int number;PCB pcb100 ; srand(time(0); int max;int ppp100;int time=0;int time1;int m;int a100;a0=0;printf("n*进程调度算法的模拟*n&

8、quot;);printf("*1.先到先服务调度2.最短作业优先调度*n");printf("*3.优先权调度4.轮转发调度*n");printf("f*");printf("n 请选择调度的方法 : ");scanf("%d",&m);if(m!=1&&m!=2&&m!=3&&m!=4)printf(" 输入错误 ! 重新输入 : ");scanf("%d",&m);if(m!=1&

9、;&m!=2&&m!=3&&m!=4)printf(" 输入错误 ! 重新输入 : ");scanf("%d",&m);if(m!=1&&m!=2&&m!=3&&m!=4)printf("输入错误!重新输入:");scanf("%d",&m);if(m!=1&&m!=2&&m!=3&&m!=4)printf(" 输入错误 ! 重新输入 : ");

10、scanf("%d",&m);printf(" 请输入进程的个数 :");scanf("%d",&number);printf("n 开始时用户进程均为就绪状态 ,运行时间随机产生 nn");SqList sq;InitList(sq);for(int r=0;r<number;r+)pcbr.CPUtime=0;pcbi.Priority=rand()%50;while(1)if(pcbi.Priority<20)pcbi.Priority=rand()%50;elsebreak;pc

11、bi.Alltime=rand()%40;while(1)if(pcbi.Alltime<10)pcbi.Alltime=rand()%40;elsebreak;for(int j=0;j<number;j+)ListLength(sq);ListInsert_Sq(sq,ListLength(sq),pcbi );if(m=1)*n");printf("n*int coun=0; int wait100; wait0=0; int Allwait=0;程序演示开始/计数变量/等待时间数组for(int i1=0;i1<number;i1+) printf

12、(" 下面开始调用第 %d 个进程; n",i1);printf(" 开 始 时 间 为 %d 执 行 时 间为 dn",co un ,pcbi1.AIItime);coun+=pcbi1.Alltime;if(i1!=0)waiti1=pcbi1-1.AIItime+waiti1-1;Allwait=waiti2+Allwait;printf(" 平均等待时间为 :%dn",Allwait/number);if(m=2)int min=pcb0.Alltime;int wait1100;wait10=0;int in=0;int c

13、oun1=0;*printf("*n");f*最短作业优先调cout<<" 进程所需时间分别是 :"<<endl;for(i=0;i<number;i+)cout<<pcbi.Alltime<<endl;printf(" 进程调度的顺序为 : ");for(i=0;i<number;i+)min=50;for(j=0;j<number;j+)if(pcbj.Alltime<min)min=pcbj.Alltime;in=j;printf("%d &quo

14、t;,in+1);pcbin.Alltime+=50;if(m=3)printf("ID 优先级 运行总时间 进程状态 n");for(int k=0; k<number; k+)%d就绪printf("%d %dn",k+1, pcbk.Priority, pcbk.Alltime);*printf("n*程序调度演示开始*n");int count=0,count1=0;for(int i=0;i<number;i+)pppi=pcbi.Priority;if(pcbi.Alltime!=0)count1+;count1-;time=time+count1*4; max=Max(ppp,number);if(pcbmax.Alltime=0)pppmax=-1;pcbmax.Priority=-1; max=Max(ppp,number);pcbmax.Priority-=4; pcbmax.Alltime-=4; pcbmax.CPUtime+=4; if(pcbmax.Alltime<=0)pcbmax.Alltime=0;for(int w=0;w<number;w+)if(pcbw.Alltime=0)pppw=-1;pcbw.Priority=-1;

温馨提示

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

评论

0/150

提交评论