实验四 虚拟存储器管理实验 下载本文

实验四 虚拟存储器管理实验

◆实验名称:存储器管理实验 ◆仪器、设备:计算机

◆参考资料:操作系统实验指导书 ◆实验目的:

设计一个请求页式存储管理方案,并编写模拟程序实现。 ◆实验内容:

编写程序用来模拟虚拟页式存储管理中的页面置换 要求:

1. 快表页面固定为4块 2. 从键盘输入N个页面号

3. 输出每次物理块中的页面号和缺页次数,缺页率 ◆实验原理、数据(程序)记录: #define PAGES 4 /* 物理块数 */ #define N 16 /*最多输入的页面号*/

int pages[PAGES][2]; /*page[i][0]保存页面号,page[i][1]保存页面存留时间*/ int queue[N]; /*页面号数组*/

void initialise(void) /*------------初始化:快表和页面号数组++++++++++++++*/ { int i;

for(i=0;i

for(i=0;i

pages[i][0]=-1; pages[i][1]=0; } }

int is_page_exist(int page) /*若还有空页,返回空页序号的相反数-1若存在,返回该页的序

号若不存在,返回需要替换页面序号的相反数-1*/

{

int max; int replace; int i=0;

max=pages[0][1]; replace=0;

for(;i

while(i

if(max

max=pages[i][1]; replace=i; } i++; }

if(i==PAGES)

return (0-replace-1); else if(pages[i][0]==page)

return i; else

return (0-i-1);

}

int input_pages(void) /**************输入页面号*****************/ {

int i=0; int num;

printf(\请输入1~16个页面:【输入 0 结束】\\n\scanf(\while(num&&i

if(num>0&&num<=N) {

queue[i]=num; i++;

scanf(\} else

printf(\输入错误数据~!\\n\}

return i; }

void display_pages(void) /* 输出物理块中的页面号 */ {

int i=0;

for(;i

if (pages[i][0]!= -1) printf(\printf(\}

void LRU(int * lack_page) /* 核心算法,LRU算法 */ {

int i=0; int temp;

* lack_page=0; while(queue[i]!=-1) {

temp=is_page_exist(queue[i]); if(temp>-1) /*若已经存在,修改相应序号的属性值*/ pages[temp][1]=1; else /*若不存在,修改返回序号的内容,并修改属性值*/ {

(* lack_page)++;

pages[0-temp-1][0]=queue[i]; pages[0-temp-1][1]=1; }

printf(\第-个页面访问时物理块中的页面号:\display_pages(); i++; } }

int main(void) {

int lack=0;

float totle_page=0; initialise();

totle_page=(float)input_pages(); LRU(&lack);

printf(\缺页数为:%d\\n\

printf(\缺页率为:%0.3f\\n\} ??

◆实验结果及分析

输入数据:1 2 4 3 1 4 5 6 输出结果:

第1个页面访问时物理块中的页面号:1 第2个页面访问时物理块中的页面号:1 2 第3个页面访问时物理块中的页面号:1 2 4 第4个页面访问时物理块中的页面号:1 2 4 3 第5个页面访问时物理块中的页面号:1 2 4 3 第6个页面访问时物理块中的页面号:1 2 4 3 第7个页面访问时物理块中的页面号:1 5 4 3 第8个页面访问时物理块中的页面号:1 5 4 6 缺页次数:6 缺页率:0.750

通过实验,实现了利用LRU算法进行虚拟存储管理的模拟。