操作系统存储管理实验

来源:百度知道 编辑:UC知道 时间:2024/06/08 04:28:16
哪位仁兄能帮帮忙,将不胜感激!

实验内容:
(1)通过随机数产生一个指令序列,共320条指令。指令的地址按下列原则生成:
(1) 50%的指令是顺序执行的;
(2) 25%的指令是均匀分布在前地址部分;
(3) 25%的指令是均匀分布在后地址部分。
具体实施方法是:
①在[0,316]的指令地址之间随机选取一起点m;
②顺序执行一条指令,即执行地址为m+1的指令;
③在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m’;
④顺序执行一条指令,其地址是m’+1;
⑤在后地址[m’+2,316] 中随机选取一条指令并执行;
⑥重复上述步骤①~⑤,直到执行320次指令。
(2)将指令序列变换成为页地址流
设:①页面大小为1K;
②用户内存容量为4页到32页;
③用户虚存容量为32K。
在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:
第0条~第9条指令为第0页(对应虚存地址为[0,9]);
第10条~第19条指令为第1页(对应虚存地址为[10,19]);


第310条~第319条指令为第31页(对应虚存地址为[310,316]);
按以上方式,用户指令可组成32页。
(3)计算并输出下述各种算法在不同内存容量下的命中率。
① 先进先出算法FIFO;
② 最近最少使用算法LRU:先淘汰最长时间未使用的页地址;
③ 最佳淘汰算法OPT:先淘汰最不常用的页地址;
④ 最近最不经常使用算法NRU:选择最近未使用的一页淘汰
其中命中率=1-(页面失效次数/页地址流长度)

#include<stdio.h>#include <dos.h>#include<stdlib.h>#include<conio.h>#include<iostream.h>
#define n 10 /*假定系统允许的最大作业数为n,假定模拟实验中n值为10*/ #define m 10 /*假定系统允许的空闲区表最大为m,假定模拟实验中m值为10*/ #define minisize 100 /*空闲分区被分配时,如果分配后剩余的空间小于minisize,则将该空闲分区全部分配,若大于minisize,则切割分配*/
struct { float address; /*已分配分区起始地址*/ float length; /*已分配分区长度,单位为字节*/ int flag; /*已分配区表登记栏标志,用"0"表示空栏目*/ }used_table[n]; /*已分配区表*/
struct { float address; /*空闲区起始地址*/ float length; /*空闲区长度,单位为字节*/ int flag; /*空闲区表登记栏标志,用"0"表示空栏目,用"1"表示未分配*/ }free_table[m]; /*空闲区表*/
void allocate(char J,float xk) /*给J作业,采用最佳分配算法分配xk大小的空间*/ { int i,k; float ad; k=-1;
for(i=0;i<m;i++) /*寻找空间大于xk的最小空闲区登记项k*/ if(free_table[i].length>=xk&&free_table[i].flag==1) if(k==-1||free_table[i].length<free_table[k].length) k=i; if(k==-1)/*未找到可用空闲区,返回*/ { printf("无可用空闲区\n"); return; }
/*找到可用空闲区,开始分配:若空闲区