版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.PAGE :.;PAGE 47操作系统课程设计阐明书学院称号: 专业班级: 姓 名: 学 号: 2021年7月16日评分规范优秀:有完好的符合规范的文档,文档有条理、文笔照射,格式正确,程序完全实现设计要求,独立完成;良好:有完好的符合规范的文档,文档有条理、文笔照射,格式正确;程序完全实现设计要求,独立完成,但存在少量错误;中等:有完好的符合规范的文档,有根本实现设计方案的软件,设计方案正确;及格:有完好的符合规范的文档,有根本实现设计方案的软件,设计方案根本正确;不及格:没有完好的符合规范的文档,软件没有根本实现设计方案,设计方案不正确。没有独立完成,抄袭或雷同。成果评定为: 。 指点教
2、师: 年 月 日目 录 一进程调度算法 423 页二银行家算法 2434 页三磁盘调度算法 3546页进程调度算法1设计目的 在多道程序设计中,经常是假设干个进程同时处于就绪形状,必需按照某种战略决议哪个进程优先占有处置机,因此必需处理进程调度的问题,进程调度算法就是要处理进程调度的问题。2. 义务及要求2.1 设计义务 设计程序来模拟进程的四种调度算法,模拟实现调度的根本功能。2.2 设计要求 产生的各种随机数要加以限制,如alltime限制在40以内的整数。进程的数量n不能取值过大。3. 算法及数据构造3.1算法的总体思想流程 每个用来标识进程的进程控制块PCB用构造来描画,包括以下字段:
3、1进程优先数ID,其中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.2.3 typedef stru
4、ct ElemType *elem; int length; int listsize; 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,int i, ElemType e)/
5、在顺序表L的第i个位置前插入元素e,i的合法值为1.L.length+1 if(iL.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=&L.elemi-1, *p=&L.elemL.length-1; wh
6、ile(p=q) *(p+1)=*p; -p; /插入位置后的元素右移 *q=e; +L.length; return OK;Status GetElem(SqList L,int i,ElemType &e)if(iL.length)return ERROR;elsee=*(L.elem+i-1);return OK;void Outputlist(SqList &L)if(0=L.length)printf(空集!);else for(int i=0;iL.length;+i) printf(%c,*(L.elem+i);3.3 主函数模块3.3.1功能 实现进程调度的四种算法,以及人机交
7、互的菜单。3.3.2 数据构造 主要包括五个部分,分别是四种算法,和进程的输入和菜单部分,功能分别实现。3.3.3void 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);printf(* 1.先到先效力调度 2.最短作业优先调度 *n);printf(* 3.优先权调度 4.轮转发调度 *n);printf(*);printf(n请选择调度的方法: );scanf(%d,&m)
8、;if(m!=1&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(输入错误! 重新输入: ); scanf(%d,&m); if(m!=1&m!=2&m!=3&m!=4) printf(输入错误! 重新输入: ); scanf(%d,&m); printf(请输入进程的个数: );scanf(%d,&number);printf(n开场时用户进程均为就绪形状,
9、运转时间随机产生nn);SqList sq;InitList(sq);for(int r=0;rnumber;r+)pcbr.CPUtime=0;for(int i=0;inumber;i+) pcbi.Priority=rand()%50;while(1) if(pcbi.Priority20) pcbi.Priority=rand()%50; else break; pcbi.Alltime=rand()%40;while(1) if(pcbi.Alltime10) pcbi.Alltime=rand()%40;else break;for(int j=0;jnumber;j+)ListL
10、ength(sq);ListInsert_Sq(sq,ListLength(sq),pcbi ); if(m=1) printf(n*程序演示开场*n); int coun=0; /计数变量 int wait100; /等待时间数组 wait0=0; int Allwait=0; for(int i1=0;i1number;i1+)printf(下面开场调用第%d个进程; n,i1); printf(开场时间为%d 执行时间为%dn,coun,pcbi1.Alltime); coun+=pcbi1.Alltime; if(i1!=0)waiti1=pcbi1-1.Alltime+waiti1-
11、1; for(int i2=0;i2number;i2+)Allwait=waiti2+Allwait; printf(平均等待时间为:%dn,Allwait/number); if(m=2) int min=pcb0.Alltime; int wait1100; wait10=0; int in=0; int coun1=0; printf(*最短作业优先调度!*n); cout进程所需时间分别是:endl; for(i=0;inumber;i+) coutpcbi.Alltimeendl; printf(进程调度的顺序为: ); for(i=0;inumber;i+) min=50; fo
12、r(j=0;jnumber;j+) if(pcbj.Alltimemin) min=pcbj.Alltime; in=j; printf(%d ,in+1); pcbin.Alltime+=50; if(m=3) printf(ID 优先级 运转总时间 进程形状n); for(int k=0; knumber; k+) printf(%d %d %d 就绪n,k+1, pcbk.Priority, pcbk.Alltime); printf(n*程序调度演示开场*n); for(int f=1;f1000;f+) int count=0,count1=0; for(int i=0;inumbe
13、r;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;wnumber;w+) i
14、f(pcbw.Alltime=0) pppw=-1; pcbw.Priority=-1; for(int e=0; enumber;e+) pcbe.Priority+; printf(n#第%d个进程正在执行!#n,max+1); printf(n第%d次调度终了,运转结果为:nn,f); printf(ID 优先级 需求总时间 执行时间n); for(int k=0; knumber; k+) printf(%d %d %d %d n,k+1, pcbk.Priority, pcbk.Alltime,pcbk.CPUtime); for(int l=0;lnumber;l+) if(pcb
15、l.Alltime=0) count+; if(count=number) break; time1=time/number; printf(n*用户进程全部执行终了!*); printf(nn平均等待时间是: ); printf(%dnn,time1); if(m=4) printf(ID 运转总时间 进程形状n); for(int k=0; knumber; k+)printf(%d %d 就绪n,k+1, pcbk.Alltime); printf(n*程序调度演示开场*n); for(int f=1;f1000;f+)int count=0; for(i=0;i0)pcbi.Allti
16、me-=4; pcbi.CPUtime+=4; if(pcbi.Alltime0)pcbi.Alltime=0; / printf(n#第%d个进程正在执行!#n,i+1); printf(n第%d次调度终了,运转结果为:nn,f); printf(ID 需求时间 执行时间n); for(int k=0; knumber; k+) printf(%d %d %d n,k+1, pcbk.Alltime,pcbk.CPUtime);/for(int l=0;lnumber;l+)if(pcbl.Alltime=0)count+; if(count=number)break;printf(n*用户
17、进程全部执行终了!*); 4. 实验结果及分析4.1 实验结果 先到先效力算法的实验结果如下:最短作业优先调度的实验结果如下:优先权调度算法的实验结果如下:轮转法调度的实验结果如下:4.2 结果分析 本次实验根本实现了进程调度的四种算法,每一种算法都能模拟出算法的详细过程。相应的结果也完全符合料想的结果。同时,对于算法的实际编写进一步添加了编程的技巧,以及编程的熟练程度。银行家算法1设计目的 银行家算法是防止死锁的一种非常重要的方法,经过编写一个模拟的动态的银行家算法的程序,可以进一步加深对死锁的了解,以及产生死锁的必要条件。并掌握经过银行家算法来防止死锁。2. 义务及要求2.1 设计义务 根
18、据银行家算法的根本思想来设计程序,模拟银行家算法的过程。用程序来实现银行家算法的详细动态过程。2.2 设计要求 根据银行家算法的根本思想,编写和调试一个能实现动态的分配资源的模拟程序。并可以有效的防止死锁的发生。3. 算法及数据构造3.1算法的总体思想流程 银行家算法的根本思想是,系统中的一切进程放入进程集合,在平安形状下系统遭到进程的恳求后会试探性的把资源分配给他,如今系统将剩下的资源和进程集合中其他进程还需求的资源作对比,找出剩余资源能满足的进程,从而保证进程运转完并释放资源继续满足剩下进程对资源的需求。最后检查集合为空集时阐明本次恳求可行,系统继续处于平安形状,可以实施本次分配。否那么不
19、能实施本次分配。3.2 显示资源矩阵 showdata() 模块3.2.1 功能 主要是显示资源的矩阵,包括输入的已分配的的资源矩阵,以及输出的资源矩阵。3.2.2 数据构造 最大需求矩阵max以及已分配矩阵allocation,分别定义为m*n阶的矩阵,利用二维数组来存储。3.2.3 void showdata() /显示资源矩阵 int i,j; cout系统目前可用的资源Avaliable:endl; for(i=0;iN;i+) coutnamei ; coutendl; for (j=0;jN;j+) coutAvaliablej ; /输出分配资源 coutendl; cout M
20、ax Allocation Needendl; coutendl; cout进程名 ; for(j=0;j3;j+) for(i=0;iN;i+) coutnamei ; cout ; coutendl; for(i=0;iM;i+) cout i ; for(j=0;jN;j+) coutMaxij ; cout ; for(j=0;jN;j+) coutAllocationij ; cout ; for(j=0;jN;j+) coutNeedij ; coutendl; 3.3 恳求资源断定模块3.3.1功能 利用银行家实现对恳求的资源进展断定。3.3.2 数据构造 对曾经存储的矩阵进展比
21、较。3.3.3void share() /利用银行家算法对恳求资源对进展断定 char ch; int i=0,j=0; ch=y; cout请输入要求分配的资源进程号(0-M-1i; /输入须恳求的资源号 cout请输入进程 i 恳求的资源:endl; for(j=0;jN;j+) coutnamejRequestj; /输入需求恳求的资源 for (j=0;jNeedij) /判别恳求能否大于需求,假设大于那么出错 cout进程 i恳求的资源大于它需求的资源; cout 分配不合理,不予分配!Avaliablej) /判别恳求能否大于当前资源,假设大于那么 cout进程i恳求的资源大于系统
22、如今可利用的资源; cout 分配出错,不予分配!endl; ch=n; break; if(ch=y) changdata(i); /根据进程需求量变换资源 showdata(); /根据进程需求量显示变换后的资源 safe(); /根据进程需求量进展银行家算法判别 3.4 主函数模块3.4 实现银行家算法对资源的添加、删除、修正。3.4.2 对曾经完成的模块进展功能集成。3.4int main() int i,j,number,choice,m,n,flag; char ming; coutendl; cout* 银*行*家*算*法 *endl;coutendl; coutn;couten
23、dl; N=n; for(i=0;in;i+) cout资源i+1ming; namei=ming; coutnumber; Avaliablei=number; coutendl; coutm; M=m; cout请输入各进程的最大需求量(m*n矩阵):endl; for(i=0;im;i+) for(j=0;jMaxij; doflag=0; cout请输入各进程曾经恳求的资源量(m*n矩阵):endl; for(i=0;im;i+) for(j=0;jAllocationij; if(AllocationijMaxij) flag=1; Needij=Maxij-Allocationij
24、; if(flag) cout恳求的资源大于最大需求量,请重新输入!nendl;while(flag); showdata(); /显示各种资源 safe(); /用银行家算法断定系统能否平安 while(choice)cout*银行家算法演示*endl; cout 1:添加资源 ; cout 2:删除资源 endl; cout 3:修正资源 ; cout 4:分配资源 endl; cout 5:添加进程 ; cout 0:分开 endl; cout*endl; coutchoice; switch(choice) case 1: addresources();break; case 2: d
25、elresources();break; case 3: changeresources();break; case 4: share();break; case 5: addprocess();break; case 0: choice=0;break; default: cout请正确选择功能号(0-5)!next; for(int i=0;idata-f); f=l-data; l=l-next; num=num/c; cout先来先效力的寻道顺序是:endl; print(head); cout平均寻道长度:numnext=NULL; m=l; q=head; p=head-next;
26、 s=head; r=head-next; float num=0; for(int i=0;idata); for(int j=0;jnext; q=q-next; if(abs(f-p-data)data); r=p; s=q; num+=abs(f-r-data); f=r-data; s-next=r-next; r-next=NULL; m-next=r; m=r; q=head; p=head-next; s=head; r=head-next; num=num/c; cout最短寻道时间优先顺序是:endl; print(l); cout平均寻道长度:numnext=NULL; s=r; m=(Node *)malloc(sizeof(Node); /存放比开场磁道大的磁道 m-next=NULL; n=m; x=(Node *)malloc(sizeof(Node); x-next=NULL; y=x; q=head; p=head-next; while(p-next!=NULL)if(p-data-f0)q-next=p-next; p-next=NULL; n-next=p; n=p; p=q-next; i+; elseq-next=p-next; p-next=NU
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 银行客户服务接待制度
- 电力设施职业卫生应急预案
- 酒店装修劳务服务方案
- 吉林大学《仪器分析实验》2021-2022学年第一学期期末试卷
- 文化创意产业大会方案
- 高校中华传统文化研讨活动方案
- 抗震墙体加固实施方案
- 2024试用合同能连续签
- 吉林大学《人体速写B》2021-2022学年第一学期期末试卷
- 吉林大学《晶体光学及光性矿物学》2021-2022学年第一学期期末试卷
- 农贸市场摊位招商方案
- 医疗设备采购 投标技术方案 (技术方案)
- 《化学课程思政元素》
- 2024继续教育《医学科研诚信与医学了研究伦理》答案
- 门诊品管圈课件:提高门诊治疗患者健康教育的满意度
- 职业生涯报告六篇
- 作业本印制服务投标方案(技术标)
- 上虞净化工程施工方案范本
- 【语文】宁波市小学四年级上册期中试卷
- 辽宁省沈阳市铁西区2023-2024学年七年级上学期期中地理试题
- 环保设施安全风险评估报告
评论
0/150
提交评论