请求页式存储管理的页面置换算法实验报告

实验报告探讨了请求页式存储管理中的页面置换算法,包括FIFO、LRU和OPT。通过随机指令序列模拟,展示了不同算法在不同内存容量下的命中率,分析了算法性能,并指出LRU通常优于FIFO,而OPT则是最优但难以实现的理想情况。
摘要由CSDN通过智能技术生成

学生姓名: 学 号: 专业班级:
实验类型:□√ 验证 □ 综合 □ 设计 □ 创新 实验日期: 实验成绩:

一、 实验项目名称
请求页式存储管理的页面置换算法

二、 实验目的
存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。
本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。

三、 请求页式存储管理的实现原理
1.通过随机数产生一个指令序列,共 320 条指令,指令的地址按下述原则生产:
50%的指令是顺序执行的;
25%的指令是均匀分布在前地址部分;
25%的指令是均匀分布在后地址部分。
2.将指令序列变换成为页地址流
设页面大小为 1K;用户内存容量为 4 页到 32 页;用户虚存容量为 32K。
在用户虚存中,按每 K 存放 10 条指令排列虚存地址,即 320 条指令在虚存中的存放方式
为:第 0 条至第 9 条指令为第 0 页;第 10 条至 19 条指令为第 1 页;…第 310 条至 319 条指
令为第 31 页。
3.计算并输出下述各种算法在不同内存容量下的命中率。
(1) 先进先出算法(FIFO)
(2) 最近最少使用算法(LRU)
(3) 最佳使用算(OPT)
命中率=1-页面失效次数/页地址流长度
本实验中,页地址流长度为 320,页面失效次数为每次访问相应指令时,该指令所
对应的页不在内存的次数。

四、 主要程序代码

#include<conio.h>  
#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
#include<time.h> 
#define Myprintf printf("|---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---|\n") /*表格控制*/  
#define bsize 4     //物理块大小 
#define psize 16     //进程大小 

typedef struct page  
{
     
       int num;  /*记录页面号*/  
       int time;  /*记录调入内存时间*/  
}Page;                   /* 页面逻辑结构,结构为方便算法实现设计*/  
Page b[bsize];            /*内存单元数*/  
int c[bsize][psize];   /*暂保存内存当前的状态:缓冲区*/  
int queue[100];      /*记录调入队列*/  
int K;             /*调入队列计数变量*/  
int phb[bsize]={
   0};   //物理块标号 
int pro[psize]={
   0};   //进程序列号 
int flag[bsize] = {
   0};  //进程等待次数(存放最久未被使用的进程标志) 
int i = 0, j = 0,k = 0;   //i 表示进程序列号,j 表示物理块号 
int m = -1, n = -1;       //物理块空闲和进程是否相同判断标志 
int max = -1,maxflag = 0; //标记替换物理块进程下标 
int count = 0;            //统计页面缺页次数 
 
//**************************************************************// 
//**************************************************************//随机产生序列号函数 
//************************************************************** 
int* build() 
{
    
 printf("随机产生一个进程序列号为:\n"); 
 int i = 0; 
    srand ( time(NULL) ); 
    for(i=0; i<psize; i++) 
    {
    
  pro[i] = 10*rand()/(RAND_MAX+1)+1; 
        printf("%d  ",pro[i]); 
     } 
     printf("\n"); 
  return(pro); 
} 
//**************************************************************//查找空闲物理块 
//************************************************************** 
int searchpb() 
{
    
 for(j=0; j<bsize; j++) 
    {
    
  if<
一、实验题目:页面置换算法请求) 二、实验目的: 进一步理解父子进程之间的关系。 1) 理解内存面调度的机理。 2) 掌握页面置换算法的实现方法。 3) 通过实验比较不同调度算法的优劣。 4) 培养综合运用所学知识的能力。 页面置换算法是虚拟存储管理实现的关键,通过本次试验理解内存面调度的机制,在模拟实现FIFO、LRU等经典页面置换算法的基础上,比较各种置换算法的效率及优缺点,从而了解虚拟存储实现的过程。将不同的置换算法放在不同的子进程中加以模拟,培养综合运用所学知识的能力。 三、实验内容及要求 这是一个综合型实验,要求在掌握父子进程并发执行机制和内存页面置换算法的基础上,能综合运用这两方面的知识,自行编制程序。 程序涉及一个父进程和两个子进程。父进程使用rand()函数随机产生若干随机数,经过处理后,存于一数组Acess_Series[]中,作为内存面访问的序列。两个子进程根据这个访问序列,分别采用FIFO和LRU两种不同的页面置换算法对内存面进行调度。要求: 1) 每个子进程应能反映出面置换的过程,并统计页面置换算法的命中或缺情况。 设缺的次数为diseffect。总的面访问次数为total_instruction。 缺率 = disaffect/total_instruction 命中率 = 1- disaffect/total_instruction 2)将为进程分配的内存面数mframe 作为程序的参数,通过多次运行程序,说明FIFO算法存在的Belady现象。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值