操作系统实验五 |
您所在的位置:网站首页 › 五种常用存储器 › 操作系统实验五 |
文章目录
操作系统实验五--存储管理一、实验目的二、实验内容三、设计原理及相关算法四、结果分析五、源代码
操作系统实验五–存储管理
一、实验目的
1、了解虚拟存储技术的特点,掌握请求页式存储管理的主要页面置换算法原理。 2、掌握请求页式存储管理中页面置换算法的模拟设计方法。 二、实验内容设计一个虚拟存储区和内存工作区,并使用下述方法计算访问命中率。 ①先进先出的算法(FIFO); ②最近最少少使用算法(LRR); ③最佳淘汰算法(OPT):选淘汰最不常用的页地址; ④最少访问页面算法(LFR); ⑤最近最不经常使用算法(NUR). (其中③④为选择内容) 命中率= 1 - 页面失效次数 / 页地址流长度 三、设计原理及相关算法1、通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成: ①50%的指令是顺序执行的; ②25%的指令是均匀分布在前地址部分; ③25%的指令是均匀分布在后地址部分。 具体的实施方法是: ①在[1,319]指令地址之间随机选取一起点m; ②顺序执行一条指令,即执行地址为m十1的指令; ③在前地址[0,m十1]中随机选取一条指令并执行,该指令的地址为 m’; ④顺序执行一条指令,其地址为m‘+1; ⑤在后地址[m’+2,319]中随机选取一条指令并执行; ③重复上述步骤①~⑤,直到执行320次指令。 2、将指令序列变换成为页地址流 设:①页面大小为IK; ②用户内存容量为4页到32页; ③用户虚存容量为32K。 在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为: 第0条~第9条指令为第0页(对应虚存地址为[0,9]); 第10条~第19条指令为第1页(对应虚存地址为[10,19]); 第 310条~第 319条指令为第 31页(对应虚存地址为[310,319])。 按以上方式,用户指令可组成32页。 四、结果分析 五、源代码 //1.存储管理。 #define TRUE 1 #define FALSE 0 #define INVALID -1 #define NULL 0 #define total_instruction 320 /*指令流长*/ #define total_vp 32 /*虚页长*/ #define clear_period 50 /*清0周期*/ typedef struct /*页面结构*/ { int pn; //页号 logic number int pfn; //页面框架号 physical frame number int counter; //计数器 int time; //时间 }pl_type; pl_type pl[total_vp]; /*页面线性结构---指令序列需要使用地址*/ typedef struct pfc_struct /*页面控制结构,调度算法的控制结构*/ { int pn; int pfn; struct pfc_struct *next; }pfc_type; pfc_type pfc[total_vp], *freepf_head, *busypf_head, *busypf_tail; int diseffect, a[total_instruction]; /* a[]为指令序列*/ int page[total_instruction], offset[total_instruction];/*地址信息*/ int initialize(int); int FIFO(int); int LRU(int); int LFU(int); int NUR(int); //not use recently int OPT(int); int main( ) { int s,i,j; srand(10*getpid()); /*由于每次运行时进程号不同,故可用来作为初始化随机数队列的“种子”*/ s=(float)319*rand( )/32767/32767/2+1; /*正态分布*/ for(i=0;i318)||(s>319)) printf("a[%d+2],a number which is :%d and s==%d\n",i,a[i+2],s); } for (i=0;ipn=page[i]; pl[page[i]].pfn=freepf_head->pfn; freepf_head->next=NULL; /*使busy的尾为null*/ if(busypf_tail==NULL) { busypf_tail=busypf_head=freepf_head; } else { busypf_tail->next=freepf_head; busypf_tail=freepf_head; } freepf_head=p; } } printf("FIFO:%6.4f ",1-(float)diseffect/320); return 0; } int LRU (int total_pf) /*最近最久未使用算法least recently used*/ { int min,minj,i,j,present_time; /*minj为最小值下标*/ initialize(total_pf); present_time=0; for(i=0;inext=NULL; } pl[page[i]].pfn=freepf_head->pfn; //有空闲页面,改为有效 pl[page[i]].time=present_time; freepf_head=freepf_head->next; //减少一个free 页面 } else { pl[page[i]].time=present_time; //命中则增加该单元的访问次数 present_time++; } } printf("LRU:%6.4f ",1-(float)diseffect/320); return 0; } int NUR(int total_pf ) /*最近未使用算法Not Used recently count表示*/ { int i,j,dp,cont_flag,old_dp; pfc_type *t; initialize(total_pf); dp=0; for(i=0;ipfn; freepf_head->pn=page[i]; freepf_head=freepf_head->next; } else pl[page[i]].counter=1; if(i%clear_period==0) for(j=0;j |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |