【实验】请求调页存储管理方式的模拟

实验目的

本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。

 

 

实验内容

(1)   通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成:

a50%的指令是顺序执行的。

b25%的指令是均匀分布在前地址部分

c25%的指令是均匀分布在后地址部分

 

具体的实施方法是:

a  [0,319]的指令地址之间随机选取一起点m

b  顺序执行一条指令,即执行地址为m+1的指令

c  在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m’;

d  顺序执行一条指令,其地址为m+1

e  在后地址[m+2,319]中随机选取一条指令并执行

f  重复上述步骤,直至执行320次指令

 

(2) 将指令序列变换成为页地址流

设:

a  页面大小为1K

b  用户内存容量为4页到32

c  用户虚存容量为32K

在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存放方法为:

    0条至第9条指令为第0(对应虚存地址为[0,9]);

    10条至第19条指令为第1(对应虚存地址为[10,19]);

        ……………………

     310条至第319条指令为第31(对应虚存地址为[310,319]);

按以上方式,用户指令可组成32页。

 

    (3) 计算并输出下述各种算法在不同内存容量下的命中率。

     a、先进先出置换算法(FIFO

     b、最近最少使用置换算法(LRU)

     c、最佳置换算法(OPT

     

在本实验中,页地址流长度为320,页面失效次数为每次访问相应指令时,该指令所对应的页不在内存的次数。

3.随机数产生办法

关于随机数产生办法,Linux系统提供函数srand()rand(),分别进行初始化和产生随机数。

例如:

srand()

语句可初始化一个随机数;

a[0]=10*rand()/32767*319+1;

a[1]=10*rand()/32767*a[0];

………………………

语句可用来产生a[0]a[1]中的随机数。

 

 

1.假设每个页面中可存放10条指令,分配给作业的内存块数为4

2.通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解

3.C语言模拟一个作业的执行过程,该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入内存。在模拟过程中,如果所访问的指令已在内存,则显示其物理地址,并转下一条指令。如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。如果4个内存块均已装入该作业,则需进行页面置换,最后显示其物理地址,并转下一条指令。在所有320指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。

4.置换算法:最佳置换(OPT)算法。

 

 

实验的运行结果为:

地址流序列:1 4 7 3 3 1 2 1 3 1 7 3 6 6

M=3FIFO的命中率为:26.6667%  M=3LRU的命中率为:30%

M=4FIFO的命中率为:36.6667%  M=4LRU的命中率为:36.6667%

M=5FIFO的命中率为:50%  M=3LRU的命中率为:46.6667%

M=6FIFO的命中率为:66.6667%  M=6LRU的命中率为:63.3333%

 

 

 

#include  

#include 

#include 

#include 

#define Bsize 4 

typedef struct BLOCK//声明一种新类型——物理块类型

{    

   int pagenum;//页号  

   int accessed;//访问字段,其值表示多久未被访问

}BLOCK;  

int pc;//程序计数器,用来记录指令的序号

int n;//缺页计数器,用来记录缺页的次数  

static int temp[320];//用来存储320条随机数

BLOCK block[Bsize]; //定义一大小为4的物理块数组

//************************************************************* 

void init(); //程序初始化函数

int findExist(int curpage);//查找物理块中是否有该页面

int findSpace();//查找是否有空闲物理块

int findReplace();//查找应予置换的页面

void display();//显示

void suijishu();//产生320条随机数,显示并存储到temp[320] 

void pagestring();//显示调用的页面队列

void OPT();//OPT算法

//------------------------------------------------------------- 

void init()  

{      

   for(int i=0;iblock[pos].accessed)          

    pos = i;//找到应予置换页面,返回BLOCK中位置    

   }  

   return pos; 

} 

//------------------------------------------------------------- 

void display() 

{    

  for(int i=0; i>pc;     

  cout<<"******按照要求产生的320个随机数:*******"<


 

 

潭浩强《C++程序设计》清华大学出版社   2004

任满杰等《操作系统原理实用教程》电子工业出版社  2006

汤子瀛《计算机操作系统》(修订版)西安电子科技大学出版社 2001

你可能感兴趣的:(嵌入式)