页面置换模拟程序c语言,(实验八页面置换模拟程序设计C语言实验.doc

(实验八页面置换模拟程序设计C语言实验

实验八页面置换模拟程序设计

一、【实验目的】

加深对请求页式存储管理实现原理的理解,掌握页面置换算法。

二、【实验内容】

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

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

? 3.置换算法:请分别考虑OPT、FIFO和LRU算法。

?? 4.作业中指令的访问次序要求按下述原则生成:

? 50%的指令是顺序执行的。

? 25%的指令是均匀分布在前地址(即低地址)部分。

? 25%的指令是均匀分布在后地址(即高地址)部分。

具体的实施办法是:

??? ① 在[0,319]之间随机选取一条起始执行指令,其序号为m;

② 顺序执行下一条指令,即序号为m+1的指令;

③ 通过随机数,跳转到前地址部分[0,m-1]中的某条指令处,其序号为m1;

④ 顺序执行下一条指令,即序号为m1+1的指令;

⑤ 通过随机数,跳转到后地址部分[m1+2,319]中的某条指令处,其序号为m2;

⑥ 顺序执行下一条指令,即序号为m2+1的指令;

⑦ 重复“跳转到前地址部分、顺序执行、跳转到后地址部分、顺序执行”的过程,直至执行完全部320条指令。

5. 随机数产生办法,Linux或UNIX系统提供函数strand()和rand(),分别进行初始化和产生随机数。例如: strand (); 语句可初始化一个随机数; a[0]=10*rand()/65535*319+1; a[1]=10*rand()/65535*a[0]; 语句可用来产生a[0]与a[1]中的随机数。

三、【实验指导】

本实验的程序设计基本上按照实验内容进行。即首先用srand()和rand()函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。相关定义如下:

1 数据结构

(1)页面类型

typedef struct{

int pn,pfn,counter,time;

}pl-type;

其中pn 为页号,pfn为面号, counter为一个周期内访问该页面的次数, time为访问时间.

(2) 页面控制结构

pfc-struct{

int pn,pfn;

struct pfc_struct *next;

}

typedef struct pfc_struct pfc_type;

pfc_type pfc_struct[total_vp],*freepf_head,*busypf_head;

pfc_type *busypf_tail;

其中pfc[total_vp]定义用户进程虚页控制结构,

*freepf_head为空页面头的指针,

*busypf_head为忙页面头的指针,

*busypf_tail为忙页面尾的指针.

2.函数定义

(1)Void initialize( ):初始化函数,给每个相关的页面赋值.

(2)Void FIFO( ):计算使用FIFO算法时的命中率.

(3)Void LRU( ):计算使用LRU算法时的命中率.

(4)Void OPT( ):计算使用OPT算法时的命中率.

3.变量定义 (1)int a[total_instruction]: 指令流数据组.

(2)int page[total_instruction]: 每条指令所属的页号.

(3)int offset[total_instruction]: 每页装入10条指令后取模运算页号偏移值. (4)int total_pf: 用户进程的内存页面数.

(5)int disaffect: 页面失效次数.

4.程序参考源码及结果

#include

#include

#include

#define TRUE 1

#define FALSE 0

#define INVALID -1

#define NUL 0

#define total_instruction 320 /*指令流长*/

#define total_vp 32 /*虚页长*/

#define clear_period 50 /*清零周期*/

typedef struct{ /*页面结构*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值