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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

操作系统课程设计64928.docx

1、操作系统课程设计班级:信息与计算科学 09-1 班学号:20096361 姓名:陈育伟 实验一 进程调度算法问题1、实验目的调度的实质是系统按照某种特定的分配策略来分配资源。进程调度的目的是分配 CPU资源。由于进程调度程序执行的频率很高,因此调度算法的好坏将直接影响到操作系统的性能。本实验的目的是模拟实现几种常见的进程调度算法,通过对几组进程分别使用不同的调度算法,计算进程的平均周转时间和平均带权周转时间,比较各种算法的性能优劣。2、实验原理:(1)进程调度算法进程调度算法包括先来先服务调度算法、优先数调度算法、时间片论转算法和分级调度算法等 4 种。本实验包括 3 种算法,有兴趣的读者可以

2、在完成这些算法的基础上实现第四种算法。下面对前 3 种算法作一简单介绍。a. 先来先服务(FCFS)调度算法本算法在进行调度时,总是选择一个最先进入进程就绪队列的进程,把处理器分配给它,使之开始运行。该进程一直运行到完成或发生阻塞事件时,才放弃处理器。b. 优先数调度算法对每个进程确定一个优先数,进程调度总是让具有最高优先数的进程先使用处理器。如果就绪队列中出现优先数相同的进程,则对这些有相同优先数的进程采用先来先服务算法进行调度。对于占用处理器的进程,系统可以使用“抢占式”或“非抢占式”的策略。 “非抢占式”指进程一旦占用处理器,除非自己愿意,否则操作系统不能将处理器强行夺走,即使该进程的优

3、先数已经小于就绪队列中的某个进程。 “抢占式”则相反,一旦就绪队列中的某个进程优先数大于正在执行的进程,立刻进行进程切换。进程的优先数可以发生变化。本实验的基本要求是实现固定优先数的调度算法,读者可以在这个基础上添加动态优先数功能。c. 时间片轮转调度算法在需要保证响应时间的场合通常采用时间片轮转算法来分配处理器。本算法将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时把 CPU 分配给队首进程,令其执行一个时间片。时间片用完,调度程序自动停止该进程的执行,将它放到进程就绪队列的末尾,等待下一次执行,然后将 CPU 分配给就绪队列中新的队首进程,也让它执行一个时间片。重复这个过程,直到

4、所有的进程执行完毕。(2)衡量算法性能的参数下面引入两个衡量调度算法性能的参数。平均周转时间: ni1T=( )平均带权周转时间: ni1W()s其中:n 为进程数目Ti 为第 i 个进程的周转时间,即进程从开始运行到结束的时间Tsi 为第 i 个进程要求执行的时间,即需要在 CPU 上的执行时间。3、实验内容:(1) 编程实现本实验的程序控制块,进程控制块至少应该包括:a、 建立进程的进程控制块,进程控制块至少应该包括:进程名称进程需要执行时间进入就绪队列时间进程执行结束时间进程的优先数b、 编程实现先来先服务算法、优先数调度算法和时间片轮转调度算法c、 进程及相关信息的输入。这些信息可以直

5、接从键盘上输入,也可以从文件中读取。d、 时间片与时间流逝的模拟。本实验需要对算法的执行计时,程序应该提供计算时间的方法。一种最简单的方法是使用键盘,比如每敲一次空格代表一个时间片的流逝。另一种方法是使用系统时钟,对于 Visual C/C+的 MFC 型程序,可响应窗口的 WM_TIMER消息,对于 Borland C/C+ 程序,可截获 INT 1CH 或 INT 08H 时钟中断。e、 一组进程序列执行完毕,打印出结果信息。程序需要计算出每个进程的开始执行时间、结束时间、周转时间和带权周转时间,并为整个进程序列计算平均周转时间和平均带权周转时间。程序将计算结果按一定的格式显示在计算机屏幕

6、上或输出到文件中。f、 实现数据在磁盘文件上存取功能。(2) 对下列就绪进程序列分别使用上面的几种算法进行调度,计算每种算法下的平均周转时间和平均带权周转时间。进程号 到达时间 要求执行时间0 0 41 1 352 2 103 3 54 6 95 7 216 9 357 11 238 12 429 13 110 14 711 20 512 23 313 24 2214 25 3115 26 14.代 码 实 现#include“stdio.h“#define N 50main() void sjp();void fcfs();void sjf();void yxj();int a;while(

7、true)printf(“nn“);printf(“tt/*/“);printf(“ntt/* 1、 先 到 先 服 务 调 度 */“);printf(“ntt/* 2、 短 作 业 优 先 调 度 */“);printf(“ntt/* 3、 时 间 片 轮 转 调 度 */“);printf(“ntt/* 0、 退 出 */n“);printf(“tt/*/“);printf(“nnt 请 选 择 菜 单 项 : t“);scanf(“%d“,printf(“n“);switch(a)case 1: fcfs();break;case 2: sjf();break;case 3: sjp(

8、);break;default: break;if(a4) break;void sjp()int i,j,n,min,px,sjp,time;float sum1,sum2;bool flag=true;printf(“t 请 输 入 有 n 个 进 程 (050|n=0;j-) for(i=0;iai+1.dt) min=ai.dt;ai.dt=ai+1.dt;ai+1.dt=min;min=ai.st;ai.st=ai+1.st;ai+1.st=min; min=ai.st2;ai.st2=ai+1.st2;ai+1.st2=min;min=ai.id;ai.id=ai+1.id;ai+

9、1.id=min; time = a0.dt;/printf(“赋 值 后 TIME 值 为 : %dn“,time);min = 0;while(min0break;printf(“t1、 按 id 号 依 次 输 出 n“);printf(“t2、 按 完 成 顺 序 依 次 输 出 n“);printf(“nt 请 选 择 输 出 顺 序 :t“);scanf(“%d“,printf(“nid: 到 达 时 间 t 服 务 时 间 t 完 成 时 间 t 周 转 时 间 t 带 权 周 转 时 间n“);sum1=0;sum2=0;switch(px)case 2: for(i=0;i5

10、0|n=0;j-) for(i=0;iai+1.dt) min=ai.dt;ai.dt=ai+1.dt;ai+1.dt=min;min=ai.st;ai.st=ai+1.st;ai+1.st=min; min=ai.id;ai.id=ai+1.id;ai+1.id=min; a0.wct=a0.st+a0.dt;a0.zt=(float)a0.st;a0.dczt=a0.zt/a0.st;for(i=1;iai-1.wct)ai.wct=ai.dt+ai.st;ai.zt=(float)ai.st;ai.dczt=ai.zt/ai.st;elseai.wct=ai-1.wct+ai.st;ai

11、.zt=(float)(ai.wct-ai.dt);ai.dczt=ai.zt/ai.st; printf(“t1、 按 id 号 依 次 输 出 n“);printf(“t2、 按 完 成 顺 序 依 次 输 出 n“);printf(“nt 请 选 择 输 出 顺 序 :t“);scanf(“%d“,printf(“nid: 到 达 时 间 t 服 务 时 间 t 完 成 时 间 t 周 转 时 间 t 带 权 周 转 时 间n“);sum1=0;sum2=0;switch(px)case 2: for(i=0;i50|n=0;j-) for(i=0;iai+1.dt) min=ai.dt

12、;ai.dt=ai+1.dt;ai+1.dt=min;min=ai.st;ai.st=ai+1.st;ai+1.st=min; min=ai.id;ai.id=ai+1.id;ai+1.id=min;if(ai.dt=ai+1.dtai.dt=ai+1.dt;ai+1.dt=min;min=ai.st;ai.st=ai+1.st;ai+1.st=min; min=ai.id;ai.id=ai+1.id;ai+1.id=min; a0.wct=a0.st+a0.dt;a0.zt=(float)a0.st;a0.dczt=a0.zt/a0.st;for(i=1;ia0.wct) ;else b=b

13、+1;for(j=b-1;j=1;j-) for(i=1;iai+1.st) min=ai.dt;ai.dt=ai+1.dt;ai+1.dt=min;min=ai.st;ai.st=ai+1.st;ai+1.st=min; min=ai.id;ai.id=ai+1.id;ai+1.id=min; for(i=1;iai-1.wct)ai.wct=ai.dt+ai.st;ai.zt=(float)ai.st;ai.dczt=ai.zt/ai.st;elseai.wct=ai-1.wct+ai.st;ai.zt=(float)(ai.wct-ai.dt);ai.dczt=ai.zt/ai.st;

14、for(j=i+1,b=j;jai.wct) ;else b=b+1;for(j=b-1;j=i;j-) for(z=i;zaz+1.st) min=az.dt;az.dt=az+1.dt;az+1.dt=min;min=az.st;az.st=az+1.st;az+1.st=min; min=ai.id;ai.id=ai+1.id;ai+1.id=min; printf(“nt 请 选 择 输 出 顺 序 n“);printf(“t1、 按 id 号 依 次 输 出 n“);printf(“t2、 按 完 成 顺 序 依 次 输 出 n“);scanf(“%d“,printf(“nid: 到

15、 达 时 间 t 服 务 时 间 t 完 成 时 间 t 周 转 时 间 t 带 权 周 转 时 间n“);sum1=0;sum2=0;switch(px)case 2: for(i=0;i1-2-3-4b.P1 请求向量 Request1(1,0,2) ;c.P4 请求向量 Request4(3,3,0) ;d.P0 请求向量 Request0(0,2,0) ;4.代码实现#include#include#include#define False 0#define True 1int Max100100=0;/各进程所需各类资源的最大需求int Avaliable100=0;/系统可用资源c

16、har name100=0;/资源的名称int Allocation100100=0;/系统已分配资源int Need100100=0;/还需要资源int Request100=0;/请求资源向量int temp100=0;/存放安全序列int Work100=0;/存放系统可提供资源int M=100;/作业的最大数为 100int N=100;/资源的最大数为 100void showdata()/显示资源矩阵int i,j;cout“;couti;/输入须申请的资源号coutRequestj;/输入需要申请的资源for (j=0;jNeedij)/判断申请是否大于需求,若大于则出错 co

17、utAvaliablej)/判断申请是否大于当前资源,若大于则 /出错coutn;flag=N;N=N+n;for(int i=0;inameflag;coutAvaliableflag+;showdata();safe();void delresources()/删除资源char ming;int i,flag=1;coutming;for(i=0;iAvaliable0Avaliable1Avaliable2;coutMaxflagi;Needflagi=Maxflagi-Allocationflagi;showdata();safe();int main()/主函数int i,j,num

18、ber,choice,m,n,flag;char ming;coutn;N=n;for(i=0;iming;namei=ming;coutnumber;Avaliablei=number;coutm;M=m;coutMaxij;doflag=0;coutAllocationij;if(AllocationijMaxij)flag=1;Needij=Maxij-Allocationij;if(flag)coutchoice;switch(choice)case 1: addresources();break;case 2: delresources();break;case 3: changer

19、esources();break;case 4: share();break;case 5: addprocess();break;case 0: choice=0;break;default: cout #include #include const int MAXSIZE=1000;/定 义 最 大 页 面 数 const int MAXQUEUE=3;/定 义 页 框 数 typedef struct node int loaded; int hit; page; page pagesMAXQUEUE; /定 义 页 框 表 int queueMAXSIZE; int quantity; /初 始 化 结 构 函 数 void initial() int i; for(i=0;ifname; if(fp=fopen(fname,“r“)=NULL) cout“错 误 ,文 件 打 不 开 ,请 检 查 文 件 名 “; else while(!feof(fp) fscanf(fp,“%d “, quantity+; cout“读 入 的 页 面 流 :“; for(i=0;iquantity;i+) coutqueuei“ “; /FIFO 调 度 算 法 void FIFO()

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报