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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

操作系统试验报告.docx

1、操作系统试验报告大学学院操作系统实验报告姓 名: 年 级: 专 业: 计算机科学与技术学 号: 任课教师:开课时间:20092010学年第二学期实验(一)(多级反馈队列)一、问题描述:(四号黑体)基于时间片轮转并结合优先权的调度算法,这种调度策略具有较好的性能,能够满足各类用户的需要。二、程序分析与设计:(四号黑体)1、基本思想(四号仿宋,单倍行距) 将就绪进程分为两级或多级,系统相应建立两个或多个就绪进程队列,较高优先级的队列一般分配给较短的时间片。处理器调度先从高级就绪进程队列中选取可占有处理器的进程,只有在选不到时,才从较低级的就绪进程队列中选取。 进程并非总是固定在某一队列中,新进程进

2、入系统后,被存放在第一个队列的末尾。如果某个进程在规定的时间片内没有完成工作,则把它转入到下一个队列的末尾,直至进入最后一个队列。系统先运行第一个队列中的进程。当第一队列为空时,才运行第二个队列中的进程。依此类推,仅当前面所有的队列都为空时,才运行最后一个队列中的进程。2、结构定义(四号仿宋,单倍行距)typedef struct node /*进程节点信息*/ char name20; /*进程的名字*/ int prio; /*进程的优先级*/ int round; /*分配CPU的时间片*/ int cputime; /*CPU执行时间*/ int needtime; /*进程执行所需要

3、的时间*/ char state; /*进程的状态,W-就绪态,R-执行态,F-完成态*/ int count; /*记录执行的次数*/ struct node *next; /*链表指针*/ PCB; typedef struct Queue /*多级就绪队列节点信息*/ PCB *LinkPCB; /*就绪队列中的进程队列指针*/ int prio; /*本就绪队列的优先级*/ int round; /*本就绪队列所分配的时间片*/ struct Queue *next; /*指向下一个就绪队列的链表指针*/ ReadyQueue; 3、算法描述(四号仿宋,单倍行距)#include #i

4、nclude #define ReadyNum 3#define ProNum 5typedef struct node /*进程节点信息*/ char name20; /*进程的名字*/ int needtime; /*进程执行所需要的时间*/ char state; /*进程的状态,W就绪态,R执行态,F完成态*/ int count; /*记录执行的次数*/ struct node *next; /*链表指针*/ struct node *head; struct node *rear; PCB; typedef struct Queue /*多级就绪队列节点信息*/ struct Qu

5、eue *head; PCB LinkPCB100;struct Queue *rear;int round; /*本就绪队列所分配的时间片*/ struct Queue *next; /*指向下一个就绪队列的链表指针*/ ReadyQueue; int Num;int m=0;int b=0;ReadyQueue QueueReadyNum;void InsertPrio(); /*创建就绪队列,规定优先数越小,优先级越低*/ void MultiDispatch(); /*多级调度算法,每次执行一个时间片*/ int printn=0;void print(PCB p1);void cre

6、atprint(PCB p1);PCB printheadProNum;using namespace std;void InsertPrio()/设置每个队列的时间片 int i; for(i=0;iReadyNum;i+) cout请输入第i+1个就绪队列的时间片: Queuei.round; void InsertFinish(int m)/创建第一个就绪队列 int i=0; PCB p1; cout请输入进程信息endl; cout进程名和需要的执行时间endl; for(i=0;ip1.name; cinp1.needtime; Queue0.LinkPCBi=p1; void I

7、nsert(PCB p1)/创建第二个就绪队列 PCB *head; Queue1.LinkPCBm=p1;m+; void Insert2(PCB p1)/创建第三个就绪队列 PCB *p2; Queue2.LinkPCBb=p1;b+; void MultiDispatch(int q) int i=0,j;int flag=1; PCB p1; int u=0;int u1=0;int u2=0; p1=Queue0.LinkPCBi; for(i=0;iProNum;i+) p1=Queue0.LinkPCBu; u+; if(p1.needtime-Queue0.round)=0)

8、p1.state=F;p1.count+;print(p1); else p1.needtime=p1.needtime-Queue0.round;Insert(p1) ; p1=Queue1.LinkPCB0; for(i=0;im;i+) p1=Queue1.LinkPCBu1; u1+; if(p1.needtime-Queue1.round)=0) p1.state=F;p1.count=p1.count+2;print(p1); else p1=Queue1.LinkPCBu1-1;p1.needtime=p1.needtime-Queue1.round;Insert2(p1) ;

9、p1=Queue2.LinkPCB0; for(i=0;ib;i+) p1=Queue2.LinkPCBu2; u2+; if(p1.needtime-Queue2.round)=0) p1.state=F;p1.count=p1.count+3;print(p1); else p1.state=w;p1.count=0;print(p1); void print(PCB p1)int n=0; if(printn=0) printheadprintn=p1;printn+; else printheadprintn=p1;printn+; void Output() int n=0; cou

10、t进程名 进程状态 进程轮转次数 endl; while(nProNum) coutprintheadn.name printheadn.state printheadn.countendl; n+; int main() printf(固定三个就绪队列,5个进程数n); int i; InsertPrio(); InsertFinish(m); MultiDispatch(m); Output(); system(PAUSE); return EXIT_SUCCESS;三、调试与运行:四、总结:(四号黑体)1、本程序的优点和不足之处(四号仿宋,单倍行距) 操作简单直观明了,但没有完全模拟出算

11、法,如果进程所需时间过大,不能显示出完成的。仍然处于等待状态。固定了就绪队列的个数和进程的个数。只是简单的模拟了多级反馈算法思路。2、心得体会(四号仿宋,单倍行距) 对多级反馈队列调度算法更熟悉了一些实验(二)(页面置换)一、问题描述:主要包括三种典型的置换算法:最佳适用(OPT)算法,先进先出(FIFO)算法,最久未使用(URL)算法。二、程序分析与设计:1、基本思想 A.最佳适用算法:所选择的淘汰页是以后永不使用或者以后最长时间不需要访问的页,是一种理想化的算法,具有最好的性能,通常可以保证最低的缺页率。实现方法:利用一个与内存块相同大小的数组记录以后的重复出现的页面位置,如未出现则为最大

12、,然后对这个数组进行比较,选出位置最大的页予以淘汰。 B先进先出算法:总是淘汰最先进入内存的页,也就是将内存中中驻留时间最久的页面。实现方法:在内存块数组中,按顺序存入数组,依次淘汰,即最先进来的先淘汰。C最久未使用算法:根据页面调入内存后的使用情况进行决策,选择最近最久未使用的页面予以淘汰。实现方法:每次将页面存入内存数组栈顶,然后下面的一次向下移,在栈底位置的页面为下一次要淘汰的页。2、结构定义#define N 10 /页面数int aN,b32; / a为要调入内存的页面,b为内存块数组while(f) /对内存块数组进行初始化 for(j=0;jm;j+) bj=-1; 3、算法描述

13、#include #include #define N 10using namespace std; int aN,b32; /a为要调入内存的页面,b为内存块数组 void Optimal(int m) coutn OPT算法置换 nendl; int i=0,j=0,count=0,k; while(iN) for(k=0;km;k+) if(bk=ai) cout内存中有这个页面,直接访问.endl; break; / 判断内存中是否有该页面. if(k=m) if(bm-10) /内存未满的情况/ bj=ai; coutbj页面进入内存 , ; count+; cout产生count次

14、缺页endl; j+; j=j%m; else int temp4; /存储内存块中的页号在下一次使用的位置 int h=j; while(ah!=b0&hN) +h; temp0=h; h=j; while(ah!=b1&hN) +h; temp1=h; h=j; while(ah!=b2&hN) +h; temp2=h; h=j; while(ah!=b3&hN) +h; temp3=h; int max_x=0;/最后定位要换出的页号所在的内存号 int max=temp0; for(int c=0;cmax) max=tempc;max_x=c; count+; coutbmax_x被

15、置换出去,ai进入内存产生count次缺页 endl; bmax_x=ai; i+; coutendl; cout共缺页count次 缺页率为:count*0.1/Nendl; /-FIFO算法置-/void FIFO( int m ) coutn FIFO算法置换 nendl; int i=0,j=0,count=0,k; while(i10) for(k=0;km;k+) if(bk=ai) cout内存中有这个页面,直接访问.endl; break; / 判断内存中是否有该页面. if(k=m) if(bm-10) bj=ai; coutbj页面进入内存 , ; count+; cout

16、产生count次缺页endl; j+; j=j%m; else count+; coutbj被置换出去,ai进入内存产生count次缺页 endl; bj=ai; j+; j=j%m; i+;coutendl; cout共缺页count次 缺页率为:count*0.1/Nendl; /-LRU算法-/ void LRU(int m) coutn LRU算法置换 nendl; int k; int i=0,j=0,count=0; while(i10) for(k=0;km;k+) if(bk=ai) cout内存中有这个页面,直接访问.endl; break; / 判断内存中是否有该页面. i

17、f(k=m) int temp,t; temp=bm-1; for(t=0;tm-1;t+) bt+1=bt; /新入的页始终放在栈顶 b0=ai; count+; if(temp=-1) coutb0进入内存 endl; else couttemp被置换出去,ai进入内存产生count次缺页 endl; i+; coutendl; cout共缺页count次 缺页率为:count*0.1/Nendl; int main(int argc, char *argv) int sf,f=1,m,i,j,n; coutm; cout请输入页面次序:(N个页面)endl; for(i=0;in; ai

18、=n; /初始化bj;使等于-1,表示开始时内存中无页面. while(f) for(j=0;jm;j+) bj=-1; cout请输入页面置换算法:1、最佳置换算法 2、先进先出算法 3、最近最久为未使用算法 sf; switch(sf) case 1:Optimal(m);break; case 2:FIFO(m);break; case 3:LRU(m);break; default:cout选择错误!endl; coutendl; cout是否继续,按1继续,按0退出f; system(PAUSE); return EXIT_SUCCESS;三、调试与运行:四、总结:1、本程序的优点和

19、不足之处(四号仿宋,单倍行距) 操作简单明了,结果用表格形式表现将会更直观2、心得体会(四号仿宋,单倍行距)三种页面置换算法FIFO,LRU,OPT,容易理解,但在实际实现过程的时候要注意各种细节。对算法的时间复杂度的分析还是不熟悉实验(三)银行家算法一、问题描述:银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。二、程序分析与设计:1、基本思想(1),进程一开始向系统提出最大需求量. (2),进程每次提出新的需求都统计是否超出它事先提出的最大需求量.

20、(3),若正常,则判断该进程所需剩余剩余量(包括本次申请)是否超出系统所掌握的剩余资源量,若不超出,则分配,否则等待. 2、结构定义int Max100100=0;/各进程所需各类资源的最大需求int Avaliable100=0;/系统可用资源char name100=0;/资源的名称int Allocation100100=0;/系统已分配资源int Need100100=0;/还需要资源int Request100=0;/请求资源向量int temp100=0;/存放安全序列int Work100=0;/存放系统可提供资源int M=100;/作业的最大数为100int N=100;/资

21、源的最大数为1003、算法描述#include#include#include#define False 0#define True 1int Max100100=0;/各进程所需各类资源的最大需求int Avaliable100=0;/系统可用资源char name100=0;/资源的名称int Allocation100100=0;/系统已分配资源int Need100100=0;/还需要资源int Request100=0;/请求资源向量int temp100=0;/存放安全序列int Work100=0;/存放系统可提供资源int M=100;/作业的最大数为100int N=100;

22、/资源的最大数为100void showdata()/显示资源矩阵 int i,j; cout系统目前可用的资源Avaliable:endl; for(i=0;iN;i+) coutnamei ; coutendl; for (j=0;jN;j+) coutAvaliablej ;/输出分配资源 coutendl; cout Max Allocation Needendl; 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+) cou

23、tMaxij ; cout ; for(j=0;jN;j+) coutAllocationij ; cout ; for(j=0;jN;j+) coutNeedij ; coutendl; int changdata(int i)/进行资源分配 int j;for (j=0;jM;j+) Avaliablej=Avaliablej-Requestj; Allocationij=Allocationij+Requestj; Needij=Needij-Requestj;return 1;int safe()/安全性算法int i,k=0,m,apply,Finish100=0;int j;int

24、 flag=0; for(i=0;iN;i+) Worki=Avaliablei;for(i=0;iM;i+) apply=0; for(j=0;jN;j+) if (Finishi=False&Needij=Workj) apply+; if(apply=N) for(m=0;mN;m+) Workm=Workm+Allocationim;/变分配数 Finishi=True; tempk=i; i=-1; k+; flag+; for(i=0;iM;i+) if(Finishi=False) cout系统不安全endl;/不成功系统不安全 return -1; cout系统是安全的!endl;/如果安全,输出成功 cout分配的序列:;for(i=0;iM;i+)/输出运行进程数组 couttempi; if(iM-1) cout; coutendl; return 0;void share()/利用银行家算法对申请资源对进行判定char ch;int i=0,j=0;ch=y;cout请输入要求分配的资源进程号(0-M-1i;/输入须申请的资源号cout请输入进程 i 申请的资源:endl;for(j=0;jN;j+) coutnamejReques

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

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