1、南昌大学操作系统实验报告实 验 报 告实验课程: 计算机操作系统 学生姓名: 陈帅 学 号: 8000111078 专业班级: 东软实验班111班 2013年 6 月 15 日目 录一、 实验一 编程实现银行家安全算法页码二、 实验二 存储管理的模拟实现页码 南昌大学实验报告 -(1)编程实现银行家安全算法学生姓名: 陈帅 学 号: 8000111078 专业班级: 东软实验班111班 实验类型: 验证 综合 设计 创新 实验日期: 2013/5/20 实验成绩: 一、实验目的通过实验加强对银行家安全算法的理解和掌握。二、实验内容熟悉避免死锁发生的方法,死锁与安全序列的关系,编程实现银行家算法
2、,要求输出进程的安全序列。三、实验要求1、需写出设计说明;2、设计实现代码及说明3、运行结果;四、主要实验步骤五、实验数据及处理结果#include #include #include # define m 50 int no1; /进程数int no2; /资源数int r;int allocationmm,needmm,availablem,maxmm; char name1m,name2m; /定义全局变量void main() void check(); void print(); int i,j,p=0,q=0; char c; int requestm,allocation1mm,
3、need1mm,available1m; printf(*n); printf(* 银行家算法的设计与实现 *n); printf(* 姓名:陈帅 学号:8000111078 *n); printf(*n); printf(请输入进程总数:n); scanf(%d,&no1); printf(请输入资源种类数:n); scanf(%d,&no2); printf(请输入Max矩阵:n); for(i=0;ino1;i+) for(j=0;jno2;j+) scanf(%d,&maxij); /输入已知进程最大资源需求量 printf(请输入Allocation矩阵:n); for(i=0;in
4、o1;i+) for(j=0;jno2;j+) scanf(%d,&allocationij); /输入已知的进程已分配的资源数 for(i=0;ino1;i+) for(j=0;jno2;j+) needij=maxij-allocationij; /根据输入的两个数组计算出need矩阵的值 printf(请输入Available矩阵n); for(i=0;ino2;i+) scanf(%d,&availablei); /输入已知的可用资源数 print(); /输出已知条件 check(); /检测T0时刻已知条件的安全状态 if(r=1) /如果安全则执行以下代码 do q=0; p=0
5、;printf(n请输入请求资源的进程号(04):n); for(j=0;j=no1) printf(输入错误,请重新输入:n); continue; else break; printf(n请输入该进程所请求的资源数requestj:n); for(j=0;jno2;j+) scanf(%d,&requestj); for(j=0;jneedij) p=1; /判断请求是否超过该进程所需要的资源数 if(p) printf(请求资源超过该进程资源需求量,请求失败!n); else for(j=0;javailablej) q=1; /判断请求是否超过可用资源数 if(q) printf(没有
6、做够的资源分配,请求失败!n); else /请求满足条件 for(j=0;jno2;j+) available1j=availablej; allocation1ij=allocationij; need1ij=needij; /保存原已分配的资源数,仍需要的资源数和可用的资源数 availablej=availablej-requestj; allocationij+=requestj; needij=needij-requestj; /系统尝试把资源分配给请求的进程 print(); check(); /检测分配后的安全性 if(r=0) /如果分配后系统不安全 for(j=0;jno2
7、;j+) availablej=available1j; allocationij=allocation1ij; needij=need1ij; /还原已分配的资源数,仍需要的资源数和可用的资源数 printf(返回分配前资源数n); print(); printf(n你还要继续分配吗?Y or N ?n); /判断是否继续进行资源分配 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;ino1;i+) finishi=false;
8、 / 初始化进程均没得到足够资源数并完成 for(i=0;ino2;i+) worki=availablei;/worki表示可提供进程继续运行的各类资源数 k=no1; do for(i=0;ino1;i+) if(finishi=false) f=1; for(j=0;jworkj) f=0; if(f=1) /找到还没有完成且需求数小于可提供进程继续运行的资源数的进程 finishi=true; av+=i; /记录安全序列号 for(j=0;j0); f=1; for(i=0;ino1;i+) /判断是否所有的进程都完成 if(finishi=false) f=0; break; if
9、(f=0) /若有进程没完成,则为不安全状态 printf(系统处在不安全状态!); r=0; else printf(n系统当前为安全状态,安全序列为:n); for(i=0;ino1;i+) printf(p%d ,ai); /输出安全序列 void print() /输出函数 int i,j; printf(n); printf(*此时刻资源分配情况*n); printf(进程名/号 | Max | Allocation | Need |n); for (i = 0; i no1; i+) printf( p%d/%d ,i,i); for (j = 0; j no2; j+) prin
10、tf(%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+) printf( %d,availablej); printf(n);实验结果:1、程序初始化输入进程号输入进程号不在测试六、实验体会或对改进实验的建议七、参考资料 南昌大学实验报告 -(2)存储管理的模拟实现学生姓名: 陈帅 学 号: 80001
11、11078 专业班级: 东软实验班111班 实验类型: 验证 综合 设计 创新 实验日期: 2013/5/20 实验成绩: 一、实验目的存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式管理的页面置换算法。二、实验内容编程实现页面置换算法,要求输出页面的置换过程,具体可以编程实现OPT、FIFO和LRU算法。三、实验要求1、需写出设计说明;2、设计实现代码及说明3、运行结果;四、主要实验步骤五、实验数据及处理结果#include #include #include in
12、t s,i; /s表示产生的随机数,i表示物理块数int m,n,h; /循环专用int k,g,f; /临时数据int sum; /缺页次数float r; /rate命中率int p320; /page页数int a320; /执行的指令int pb32; /physical block用户内存容量(物理块)void initialization();void FIFO();void LRU();void LFU();void line();void start();void end();void main() start(); srand(int) time (NULL); /以计算机当
13、前时间作为随机数种子 for (n=0;n320;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;n320;n+) pn=an/10; /得到指令相对的页数 printf(物理块数t FIFOtt LRUtt LFUn); line(); for (i=4;i=32;i+) printf(n %2d:,i); FIFO(); LRU(); LFU(); end();void i
14、nitialization() /用户内存及相关数据初始化 for (n=0;n32;n+) pbn=-1; sum=0; r=0; k=0; g=-1; f=-1;void FIFO() /先进先出置换算法 int time32; /定义进入内存时间长度数组 int max; /max表示进入内存时间最久的,即最先进去的 initialization(); for(m=0;mi;m+) timem=m+1; for (n=0;n320;n+) k=0; for (m=0;mi;m+) if (pbm=pn) /表示内存中已有当前要调入的页面 g=m; break; for (m=0;mi;m
15、+) if (pbm=-1) /用户内存中存在空的物理块 f=m; break; if (g!=-1) g=-1; else if (f=-1) /找到最先进入内存的页面 max=time0; for(m=0;mmax) max=timem; k=m; pbk=pn; timek=0; /该物理块中页面停留时间置零 sum+; /缺页数+1 else pbf=pn; timef=0; sum+; f=-1; for (m=0;mi & pbm!=-1;m+) timem+; /物理块中现有页面停留时间+1 r=1-(float)sum/320; printf(tt%6.4f,r);void L
16、RU() /最近最少使用算法 int time32; int max; initialization(); for (m=0;mi;m+) timem=m+1; for (n=0;n320;n+) k=0; for (m=0;mi;m+) if (pbm=pn) g=m; break; for (m=0;mi;m+) if (pbm=-1) f=m; break; if (g!=-1) timeg=0; g=-1; else if (f=-1) max=time0; for (m=0;mmax) k=m; max=timem; pbk=pn; timek=0; sum+; else pbf=p
17、n; timef=0; sum+; f=-1; for (m=0;mi & pbm!=-1;m+) timem+; r=1-(float)sum/320; printf(tt%6.4f,r);void LFU() /最少访问页面算法 int time_lru32,time32,min,max_lru,t; initialization(); for (m=0;mi;m+) timem=0; time_lrum=m+1; for (n=0;n320;n+) k=0; t=1; for (m=0;mi;m+) if (pbm=pn) g=m; break; for (m=0;mi;m+) if (
18、pbm=-1) f=m; break; if (g!=-1) time_lrug=0; g=-1; else if (f=-1) if (n=20) /将最少使用的间隔时间定位个单位 max_lru=time_lru0; /在未达到一定时间的要求时,先采用LRU进行页面置换 for (m=0;mmax_lru) k=m; max_lru=time_lrum; pbk=pn; time_lruk=0; sum+; else for (m=0;m=n-51;h-) if (pbm=ph) timem+; min=time0; for (m=0;mi;m+) if (timemmin) min=ti
19、mem; k=m; for (m=0;m1) /若使用次数同样少,将次数相同的页面按照LRU进行页面置换 max_lru=time_lruk; for (m=0;mmax_lru) k=m; max_lru=time_lrum; pbk=pn; time_lruk=0; sum+; else pbf=pn; time_lruf=0; sum+; f=-1; for (m=0;mi & pbm!=-1;m+) time_lrum+; r=1-(float)sum/320; printf(tt%6.4f,r);void line() /美化程序,使程序运行时更加明朗美观 printf(*);void start() /表示算法开始 line(); printf(n); printf(* 页面置换算法开始 *n); printf(* 姓名:陈帅 学号:8000111078 * n); line(); printf(nn);void end() /表示算法结束 printf(n); line(); printf(n 页面置换算法结束,谢谢使用n); line();运行结果:六、实验体会或对改进实验的建议七、参考资料
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1