南昌大学操作系统实验报告讲诉.doc

上传人:scccc 文档编号:13249784 上传时间:2021-12-20 格式:DOC 页数:19 大小:539KB
返回 下载 相关 举报
南昌大学操作系统实验报告讲诉.doc_第1页
第1页 / 共19页
南昌大学操作系统实验报告讲诉.doc_第2页
第2页 / 共19页
南昌大学操作系统实验报告讲诉.doc_第3页
第3页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《南昌大学操作系统实验报告讲诉.doc》由会员分享,可在线阅读,更多相关《南昌大学操作系统实验报告讲诉.doc(19页珍藏版)》请在三一文库上搜索。

1、P4»实验报告实验课程:计算机操作系统学生姓名:陈帅学 号: 8000111078专业班级:东软实验班111班2013年6 月15 日实验一编程实现银行家安全算法页码实验二存储管理的模拟实现页码®南昌大学实验报告-(1)编程实现银行家安全算法学生姓名: 陈帅学 号:8000111078专业班级:东软实验班111班实验类型:口 验证 综合 设计 口 创新 实验日期: 2013/5/20实验成绩: 一、实验目的通过实验加强对银行家安全算法的理解和掌握。二、实验内容熟悉避免死锁发生的方法,死锁与安全序列的关系,编程实现银行家算法,要求输出进程的安 全序列。三、实验要求1、需写出设

2、计说明;2、设计实现代码及说明3、运行结果;四、主要实验步骤五、实验数据及处理结果#i nclude <stdio.h>#i nclude <stdlib.h>#in elude vconi o.h># defi ne m 50 int no1; 进程数 int no2; 资源数 int r;int allocati on mm, needmm,availablem,maxmm;char n ame1m, name2m;/ 定义全局变量void mai n()void check();void prin t();int i,j,p=0,q=0;char c;int

3、 requestm,allocati on 1mm, need1mm,available1m;printf("*n");prin tf("*银行家算法的设计与实现printf("*姓名:陈帅 学号:8000111078*n");*n");printf("f*n");printf(" 请输入进程总数 :n");scanf("%d",&no1);printf(" 请输入资源种类数 :n");scanf("%d",&no2);

4、printf(" 请输入 Max 矩阵 :n");for(i=0;i<no1;i+)/输入已知进程最大资源需求量for(j=0;j<no2;j+) scanf("%d",&maxij);printf(" 请输入 Allocation 矩阵 :n"); for(i=0;i<no1;i+) for(j=0;j<no2;j+) scanf("%d",&allocationij); /输入已知的进程已分配的资源数need 矩阵for(i=0;i<no1;i+) for(j=0;

5、j<no2;j+) needij=maxij-allocationij;/根据输入的两个数组计算出的值printf(" 请输入 Available 矩阵 n");for(i=0;i<no2;i+) scanf("%d",&availablei);/输入已知的可用资源数print(); /输出已知条件check(); /检测 T0 时刻已知条件的安全状态if(r=1) /如果安全则执行以下代码doq=0;p=0;printf("n 请输入请求资源的进程号 (04):n");for(j=0;j<=10;j+) s

6、canf("%d",&i); if(i>=no1) printf(" 输入错误,请重新输入: n"); continue;else break;printf("n 请输入该进程所请求的资源数 requestj:n");for(j=0;j<no2;j+)scanf("%d",&requestj);for(j=0;j<no2;j+)if(requestj>needij) p=1;/判断请求是否超过该进程所需要的资源数if(p)printf(" 请求资源超过该进程资源需求

7、量,请求失败! n"); elsefor(j=0;j<no2;j+)if(requestj>availablej) q=1;/判断请求是否超过可用资源数if(q)printf(" 没有做够的资源分配,请求失败! n");else/请求满足条件for(j=0;j<no2;j+)available1j=availablej; allocation1ij=allocationij; need1ij=needij;/保存原已分配的资源数,仍需要的资源数和可用的资源数availablej=availablej-requestj; allocationij+

8、=requestj; needij=needij-requestj;/系统尝试把资源分配给请求的进程print();check();/检测分配后的安全性if(r=0) /如果分配后系统不安全for(j=0;j<no2;j+)availablej=available1j;allocationij=allocation1ij;needij=need1ij;/还原已分配的资源数,仍需要的资源数和可用的资源数 printf(" 返回分配前资源数 n"); print();printf("n 你还要继续分配吗? Y or N ?n");/判断是否继续进行资源

9、分配c=getche();while(c='y'|c='Y');void check() /安全算法函数int k,f,v=0,i,j;int workm,am;bool finishm;r=1;for(i=0;i<no1;i+)finishi=false; / 初始化进程均没得到足够资源数并完成 for(i=0;i<no2;i+)worki=availablei;/worki 表示可提供进程继续运行的各类资源数 k=no1;dofor(i=0;i<no1;i+)if(finishi=false)f=1;for(j=0;j<no2;j+)

10、if(needij>workj)f=0;if(f=1)/ 找到还没有完成且需求数小于可提供进程继续运行的资源数的进程finishi=true;av+=i; / 记录安全序列号for(j=0;j<no2;j+)workj+=allocationij; / 释放该进程已分配的资源k-;/ 每完成一个进程分配,未完成的进程数就减 1while(k>0);f=1;for(i=0;i<no1;i+)/ 判断是否所有的进程都完成if(finishi=false)f=0; break;if(f=0)/若有进程没完成,则为不安全状态printf(" 系统处在不安全状态! &q

11、uot;);r=0;elseprintf("n 系统当前为安全状态,安全序列为: n"); for(i=0;i<no1;i+)printf("p%d ",ai); /输出安全序列 void print() /输出函数 int i,j;printf("n"); printf("* printf("进程名/号此时刻资源分配情况 *n");| Max| Allocation |Need|n");for (i = 0; i < no1; i+)printf(" p%d/%d &qu

12、ot;,i,i);for (j = 0; j < no2; j+) printf("%d ",maxij);for (j = 0; j < no2; j+)printf(" %d ",allocationij);for (j = 0; j < no2; j+)printf(" %d ",needij);printf("n");printf("n");printf(" 各类资源可利用的资源数为 :"); for (j = 0; j < no2; j+)p

13、rintf(" %d",availablej);prin tf("n");实验结果:1、程序初始化* C:UsersPSltl -S kyDesktopEf5MjDebugBanlQexeB进程名”号p 7 h p * r * r!Max!A 1locationi :NeedP0/0753& 1Q743pl/13222 0a122p2/2902302&aSp3/32 2 22 11e11p4/44330 02431各类资源可刑用的资源数为:3 3 2翼羔図負貝址貝 w翼NMXjt匕时刖资源分酉己情祝 崑址貝诚£崑Uhl負貝良KX

14、it崑it系统当前为安全状态,安全序列为:pl p3 pl pO p2请输人请求资源的进程号f旷4a输入进程号进程名/号1Max1AllocAtiont !NeedP0/4J753010743pl/1322302Q2Up2/29023026B0p3/32 222110114330R243i各类资源可利用的资源数为:2 -1 0此时刻资源分配情况工餘 W-S kyDesktopfrW?DebugBanlc “ e ”请输入请求资源的迸程号佃:i请输入该进程所请求的资源数request Cj J:10 2系统当前为安全状态,安全序列为:pl p3 p4 pd p2你还要继续分配吗? V or N

15、?输入进程号不在测试六、实验体会或对改进实验的建议七、参考资料®南昌大学实验报告-(2)存储管理的模拟实现学生姓名:陈帅学 号:8000111078专业班级:东软实验班111班实验类型:口 验证 综合 设计 口 创新 实验日期: 2013/5/20 实验成绩: 一、实验目的存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握 请求页式管理的页面置换算法。二、实验内容编程实现页面置换算法,要求输出页面的置换过程,具体可以编程实现OPT、FIFO和LRU算法。三、实验要求1

16、、需写出设计说明;2、设计实现代码及说明3、运行结果;四、主要实验步骤五、实验数据及处理结果#i nclude <stdio.h>#i nclude <stdlib.h>#in clude <time.h>int s,i; /s表示产生的随机数,i表示物理块数int m, n,h;/循环专用int k,g,f; 临时数据int sum; 缺页次数float r; /rate 命中率in t p320; /page 页数int a320; /执行的指令int pb32; /physical block用户内存容量(物理块)void in itializatio

17、 n();void FIFO();void LRU();void LFU();void line(); void start();void end();void main()start();srand(int) time (NULL); /以计算机当前时间作为随机数种子 for (n=0;n<320;n+=3) s=rand()%320+0;/随机产生一条指令an=s+1; /顺序执行一条指令s=rand()%(an+1); /执行前地址指令 M' an+1=s+1;s=rand()%(319-an+1)+(an+1+1); an+2=s;for (n=0;n<320;n+

18、) pn=an/10;/得到指令相对的页数printf("物理块数 t FIFOtt LRUtt LFUn"); line();for (i=4;i<=32;i+)printf("n%2d:",i);FIFO();LRU();LFU();end();void initialization()/用户内存及相关数据初始化for (n=0;n<32;n+) pbn=-1;sum=0;r=0;k=0;g=-1;f=-1;void FIFO() /先进先出置换算法int time32; /定义进入内存时间长度数组int max; /max 表示进入内存

19、时间最久的,即最先进去的 initialization();for(m=0;m<i;m+)timem=m+1;for (n=0;n<320;n+)k=0;for (m=0;m<i;m+)if (pbm=pn) / 表示内存中已有当前要调入的页面 g=m;break;for (m=0;m<i;m+)if (pbm=-1) /用户内存中存在空的物理块f=m; break;if (g!=-1)g=-1;elseif (f=-1) /找到最先进入内存的页面 max=time0; for(m=0;m<i;m+) if(timem>max) max=timem; k=m

20、; pbk=pn; timek=0; /该物理块中页面停留时间置零 sum+; /缺页数 +1else pbf=pn; timef=0; sum+; f=-1;for (m=0;m<i && pbm!=-1;m+) timem+; /物理块中现有页面停留时间 +1 r=1-(float)sum/320; printf("tt%6.4f",r);void LRU() /最近最少使用算法int time32;int max; initialization();for (m=0;m<i;m+)timem=m+1; for (n=0;n<320;n

21、+) k=0;for (m=0;m<i;m+) if (pbm=pn) g=m; break;for (m=0;m<i;m+) if (pbm=-1) f=m; break; if (g!=-1) timeg=0; g=-1;else if (f=-1) max=time0; for (m=0;m<i;m+) if (timem>max) k=m; max=timem;pbk=pn; timek=0; sum+;else pbf=pn; timef=0; sum+; f=-1;for (m=0;m<i && pbm!=-1;m+) timem+;r

22、=1-(float)sum/320;printf("tt%6.4f",r);void LFU() /最少访问页面算法int time_lru32,time32,min,max_lru,t; initialization();for (m=0;m<i;m+)timem=0;time_lrum=m+1;for (n=0;n<320;n+)k=0;t=1;for (m=0;m<i;m+)if (pbm=pn)g=m; break;for (m=0;m<i;m+)if (pbm=-1)f=m; break;if (g!=-1)time_lrug=0;g=-1

23、;elseif (f=-1)if (n<=20) /将最少使用的间隔时间定位个单位max_lru=time_lru0; /在未达到 "一定时间 "的要求时,先采用 LRU进行页面置换for (m=0;m<i;m+)if (time_lrum>max_lru)k=m; max_lru=time_lrum;pbk=pn;time_lruk=0;sum+;elsefor (m=0;m<i;m+) /计算一定时间间隔内物理块中的页面使用次数for (h=n-1;h>=n-51;h-)if (pbm=ph) timem+;min=time0;for (m

24、=0;m<i;m+)if (timem<min)min=timem;k=m;for (m=0;m<i;m+) /应对出现页面使用次数同样少的情况if (timem=min)t+;if (t>1) /若使用次数同样少,将次数相同的页面按照 LRU 进行页面置换max_lru=time_lruk;for (m=0;m<i && timem=min;m+) if (time_lrum>max_lru) k=m; max_lru=time_lrum;pbk=pn;time_lruk=0;sum+;elsepbf=pn;time_lruf=0;sum+

25、;f=-1;for (m=0;m<i && pbm!=-1;m+) time_lrum+; r=1-(float)sum/320; printf("tt%6.4f",r);void line()/美化程序,使程序运行时更加明朗美观'*、'/表示算法开始 void start()line();printf("n");printf("*printf("*姓名:页面置换算法开始陈帅 学号: 8000111078*n");* n");line();printf("nn&quo

26、t;);void end()/表示算法结束页面置换算法结束 ,谢谢使用 n");printf("n"); line(); printf("nlin e();Press 耳ny ke to continue*页面置换算法结束*运行结果員賈風良屈良翼員賈風良屈良翼員賈良良屈良翼員賈良絃屈良页面置换算註*姓名:陈帅学号=8009111(478*fr物理块数FIFOJLRULFU4;0.17190.16870,16875:0.2600Q.20310_20316:0.22810.23440.23757:0-25940-26560.2&56S:Q.2S440

27、-29690_28759:Q.3G000.3313Q.32S610;0.343B03 5阴S.350011;0.38120.36560.393812:0HO310.39060,393813:0.41250.43130,418714:0.440GQ.465«0-459415:0.45940.48120-471916:0-487SB.5125Q.500017:0-5伽0-550S0-S37518:0.S6S?0.55940.553119:0.68000.5781Q.58442Q;0.625Q0.6125Q.606221:0.62810.6312Q.635022 ;0.6813Q.6S94

28、0.650023;0.68750-69970.684424:0.72190-72190.706325:0.73120_740t0_737526:0.76560_775fiQ.768827;0.771?0.8B0G0.784428;Q.8S&3孔 8281Q.825029:0.84690.84690.84693弘0.85?40.8&560.878131 s0.8906Q.887S0,887532:0.9000EL90000-9000C:USERSfeUit-SK/-.D££<T0P51Kltll-;实班 Debug-.Memory.exe六、实验体会或对改进实验的建议七、参考资料

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1