ImageVerifierCode 换一换
格式:DOCX , 页数:48 ,大小:655.17KB ,
资源ID:29125348      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29125348.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统课程设计.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统课程设计.docx

1、操作系统课程设计 操作系统课程设计学院名称: 信息科学与工程学院 专业班级: 信息管理与信息系统08-2 姓 名: 学 号: 2010年12月28日1、进程调度算法的模拟3 1.1 设计目的3 1.2 任务及要求3 1.3 算法及数据结构4 1.4 实验结果及分析16 1.5 实验总结212、银行家算法的模拟 22 2.1 设计目的22 2.2 任务及要求22 2.3 算法及数据结构22 2.4 实验结果及分析33 2.5 实验总结363、磁盘调度算法的模拟 37 3.1 设计目的37 3.2 任务及要求37 3.3 算法及数据结构37 3.4 实验结果及分析53 3.5 实验总结574、课程

2、设计总结58进程调度算法的模拟1 设计目的 同时通过用C语言编程实现进程调度的算法,更好地掌握操作系统的原理及实现方法2 任务及要求2.1 用语言来实现对n个进程采用不同调度算法的进程调度。2.2每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:(1)进程编号ID,其中0为闲逛进程,用户进程的标识数为1,2,3。(2)进程优先级Priority,闲逛进程(idle)的优先级为0,用户进程的优先级大于0,且随机产生,优先数越大,优先级越高。(3)进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4。(4)进程总共需要运行时间Alltime,利用随机函数产生。(5)进程状态

3、,0:就绪态;1:运行态;2:阻塞态。(6)队列指针next,用来将多个进程控制块PCB链接为队列。2.3 优先数改变的原则(1)进程在就绪队列中每呆一个时间片,优先数增加1。(2)进程每运行一个时间片,优先数减3。2.4 在调度前,系统中拥有的进程数PCB_number由键盘输入,经初始化后,所有的进程控制块PCB链接成就绪队列。3 算法及数据结构3.1 算法的整体思想对于先到先服务算法,只需要给定每个进程的进程号,然后依次顺序执行就可以了。对于SJF(最短作业优先)调度算法需要判断作业的alltime时间,alltime最小的最先执行,依次按照时间的从小到大执行进程。对于优先度调度算法,需

4、要先判断优先度的大小,优先度最大的先执行,进程运行完毕以后,按照优先数的改变的原则进行改变,然后继续判断所有的优先数的大小,依旧是优先数最大的 先执行,直到执行完毕。对于RR时间片轮转调度算法,需要依次执行时间片用完即阻塞,转交给下一个进程执行,直到所有进程运行完毕。 3.2 先到先服务(FCFS)算法模块3.2.1 功能 模拟进程的先到先服务调度算法,按照进程编号依次运行。3.2.2 数据结构 void FCFS ()3.2.3 算法 void FCFS () int i=1; PCB *p,*temp; while (IsAllFinish ()=false) for(p=head-nex

5、t ;p!=NULL;p=p-next) /寻找状态为ready的第一个进程 if(p-status = ready) temp=p; break; if(p=NULL) return; for(p=temp-next ;p!=NULL;p=p-next) /寻找到达时间最短的进程 if(p-status=ready ) if(p-arrive_timearrive_time ) temp=p; else if(p-arrive_time= temp-arrive_time ) if(p-priority temp-priority ) temp=p; temp-status = runnin

6、g; temp-cpu_time = temp-all_time ; printf(n第%d步:nn,i+); output(); temp-status = finish; 3.3 最短作业优先(SJF)算法模块 3.3.1 功能 将每个进程与其下一个CPU区间段相关联。当CPU为可用时,它会赋给具有最短后续CPU区间的进程。如果两个进程具有同样长度的CPU区间,那么可以使用FCFS调度来处理 3.3.2 数据结构 void SJF () 3.3.3 算法void SJF () int i=1; PCB *p,*temp; temp = head-next ; for(p=temp-next

7、 ;p!=NULL;p=p-next ) if(p-arrive_time arrive_time ) temp=p; else if(p-arrive_time = temp-arrive_time ) if(p-priority temp-priority ) temp=p; temp-status = running; temp-cpu_time = temp-all_time ; printf(n第%d步:nn,i+); output(); temp-status = finish; while (IsAllFinish ()=false) for(p=head-next;p!=NUL

8、L;p=p-next) if(p-status = ready) temp=p; break; if(p=NULL) return; for(p=temp-next ;p!=NULL;p=p-next) if(p-status=ready ) if(p-all_time all_time ) temp=p; else if(p-all_time = temp-all_time ) if(p-priority temp-priority ) temp=p; temp-status = running; temp-cpu_time = temp-all_time ; printf(n第%d步:nn

9、,i+); output(); temp-status = finish; 3.4 优先级调度算法模块3.4.1 功能 1.每个进程被赋予一个优先级数字(优先权)2.CPU分配给优先权高的进程(优先级数字越小,则优先权越大)3.4.2 数据结构 void PS ()3.4.3 算法void PS () int i=1; PCB *p,*temp; temp = head-next ; for(p=temp-next ;p!=NULL;p=p-next ) if(p-arrive_time arrive_time ) temp=p; else if(p-arrive_time = temp-ar

10、rive_time ) if(p-priority temp-priority ) temp=p; temp-status = running; temp-cpu_time = temp-all_time ; printf(n第%d步:nn,i+); output(); temp-status = finish; while (IsAllFinish ()=false) for(p=head-next;p!=NULL;p=p-next) if(p-status = ready) temp=p; break; if(p=NULL) return; for(p=temp-next ;p!=NULL

11、;p=p-next) if(p-status=ready ) if(p-priority temp-priority) temp=p; else if(p-priority= temp-priority ) if(p-arrive_time arrive_time) temp=p; temp-status = running; temp-cpu_time = temp-all_time ; printf(n第%d步:nn,i+); output(); temp-status = finish; 3.5 时间片段轮转算法模块3.5.1 功能如果就绪队列中有n个进程,且时间片为q,则每个进程会得到

12、1/n的CPU时间,每个长度不超过q时间单元。每个进程必须等待CPU的时间不会超过(n-1)q个时间单元,直到它的下一个时间片为止3.5.2 数据结构 void RR ()3.5.3 算法 void RR () int i=1; PCB *p,*temp; while (IsAllFinish ()=false) for(p=head-next;p!=NULL;p=p-next) if(p-status = ready) if(p-cpu_time+4all_time ) p-cpu_time +=4; else p-cpu_time = p-all_time ; p-status = run

13、ning; p-priority -=3; for(temp=head-next ;temp!=NULL;temp=temp-next ) if(temp-status = ready) p-priority +=1; printf(n第%d步:nn,i+); output(); if(p-cpu_time = p-all_time ) p-status = finish; else p-status = ready; 3.6 主函数模块3.6.1 功能 用于程序与用户的交互操作,由用户选择模拟实验的算法,并执行相应的算法3.6.2 数据结构 void main ()3.6.3 算法void

14、main () printf(*选择调度算法*n); printf(*n); printf(* 1、先到先服务 *n); printf(* 2、最短作业优先调度 *n); printf(* 3、优先级调度 *n); printf(* 4、轮转法调度 *n); printf(* 0、推出 *n); printf(*n); int flag; PCB *p; printf(请选择:); scanf(%d,&flag); while (flag=1 & flagnext;p!=NULL;p=p-next ) p-all_time -=18; p-arrive_time = 0; output ();

15、 switch (flag) case 1: FCFS (); break; case 2: SJF (); break; case 3: PS (); break; case 4: RR (); break; release (); printf(nn); printf(*n); printf(* 1、先到先服务 *n); printf(* 2、最短作业优先调度 *n); printf(* 3、优先级调度 *n); printf(* 4、轮转法调度 *n); printf(* 0、推出 *n); printf(*n); printf(请选择:); scanf(%d,&flag); 4 实验结

16、果及分析 4.1 先到先服务(FCFS)算法演示4.2 最短作业优先调度(SJF)算法演示4.3 优先级调度算法演示4.4 轮转法调度(RR)算法演示5 实验总结通过本次进程调度算法实验,加深了我对计算机进程调度算法的了解,掌握了如何利用进程调度算法解决一些实际问题。实验中遇到的问题,通过查阅资料、询问老师顺利解决。通过这次的课程设计,使我的理论知识更加的牢固,更好的掌握了计算机进程调度算法。银行家算法的模拟1 实验目的银行家算法是避免死锁的一种重要方法。通过编写一个模拟动态资源分配 的银行家算法程序,进一步深入理解死锁、产生死锁的必要条件、安全状态等重要概念,并掌握避免死锁的具体实施方法2

17、任务及要求编程序模拟银行家算法,要求能体现算法的全过程3 算法及数据结构3.1 算法的整体思想银行家算法又称“资源分配拒绝”法,其基本思想是,系统中的所有进程放入进程集合,在安全状态下系统受到进程的请求后试探性的把资源分配给他,现在系统将剩下的资源和进程集合中其他进程还需要的资源数做比较,找出剩余资源能满足最大需求量的进程,从而保证进程运行完成后还回全部资源。这时系统将该进程从进程集合中将其清除。此时系统中的资源就更多了。反复执行上面的步骤,最后检查进程的集合为空时就表明本次申请可行,系统处于安全状态,可以实施本次分配,否则,只要进程集合非空,系统便处于不安全状态,本次不能分配给他。请进程等待

18、3.2 主函数模块 3.2.1 功能用于程序与用户的交互操作,由用户选择模拟实验的算法,并执行相应的算法 3.2.2 数据结构 void main() 3.2.3 算法 void main() int i,j; inputdata(); for(i=0;i=M) cout错误提示:经安全性检查发现,系统的初始状态不安全!nendl; else cout提示:经安全性检查发现,系统的初始状态安全!endl; bank(); 3.3 数据输入模块 3.3.1 功能 系统由此输入数据,并检测输入的数据是否超过了系统最大的进程数或最大数据种类。 3.3.2 数据结构 void inputdata()

19、3.3.3 算法 void inputdata() int i=0,j=0,p; cout请输入总进程数:M; if (MW) coutendl总进程数超过了程序允许的最大进程数,请重新输入:W); coutendl; cout请输入资源的种类数:N; if (NR) coutendl资源的种类数超过了程序允许的最大资源种类数,请重新输入:R); coutendl; cout请依次输入各类资源的总数量,即设置向量all_resource:endl; for(i=0;iALL_RESOURCEi; coutendl; cout请依次输入各进程所需要的最大资源数量,即设置矩阵max:endl; f

20、or (i=0;iM;i+) for (j=0;jMAXij; if (MAXijALL_RESOURCEj) coutendl该最大资源数量超过了声明的该资源总数,请重新输入:ALL_RESOURCEj); coutendl; cout请依次输入各进程已经占据的各类资源数量,即设置矩阵allocation:endl; for (i=0;iM;i+) for (j=0;jALLOCATIONij; if (ALLOCATIONijMAXij) coutendl已占有的资源数量超过了声明的最大资源数量,请重新输入:MAXij); coutendl; for (i=0;iM;i+) for(j=0

21、;jN;j+) NEEDij=MAXij-ALLOCATIONij; for (j=0;jN;j+) p=ALL_RESOURCEj; for (i=0;iM;i+) p=p-ALLOCATIONij; AVAILABLEj=p; if(AVAILABLEj0) AVAILABLEj=0; 3.4 数据显示模块 3.4.1 功能 显示系统运行过程中数据的变化,并显示出系统所需数据。 3.4.2 数据结构 void showdata() 3.4.3 算法 void showdata() int i,j; cout各种资源的总数量,即向量all_resource为:endl; cout ; for

22、 (j=0;jN;j+) cout 资源j: ALL_RESOURCEj; coutendlendl; cout当前系统中各类资源的可用数量,即向量available为:endl; cout ; for (j=0;jN;j+) cout 资源j: AVAILABLEj; coutendlendl; cout各进程还需要的资源数量,即矩阵need为:endlendl; for (i=0;iM;i+) cout进程Pi: ; for (j=0;jN;j+) coutNEEDij ; coutendl; coutendl; cout各进程已经得到的资源量,即矩阵allocation为: endlen

23、dl; for (i=0;iM;i+) cout进程Pi: ; for (j=0;jN;j+) coutALLOCATIONij ; coutendl; coutendl; 3.5 安全检查模块 3.5.1 功能 检测系统的运行过程中系统是否安全。 3.5.2 数据结构 int chksec(int s) 3.5.3 算法 int chksec(int s) int WORK,FINISHW; int i,j,k=0; for(i=0;iM;i+) FINISHi=FALSE; for(j=0;jN;j+) WORK=AVAILABLEj; i=s; do if(FINISHi=FALSE&NEEDij=WORK) WORK=WORK+ALLOCATIONij; FINISHi=TRUE; i=0; else i+; while(iM); for(i=0;iM;i+) if(FINISHi=FALSE) return 1; return 0; 3.6 资源检测模块 3.6.1

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1