设计一个虚拟存储区和内存工作区,并使用下列算法计算访问命中率.
(1) 进先出的算法(FIFO)
(2) 最近最少使用的算法(LRU)
(3) 最佳淘汰算法(OPT)(4) 最少访问页面算法(LFU)
(5) 最近最不经常使用算法(NUR)
命中率=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 算法时的命中率.
(5)Void LFU( ):计算使用 LFU 算法时的命中率.
(6)Void NUR( ):计算使用 NUR 算法时的命中率.
3.变量定义
(1)int a[total_instruction]: 指令流数据组.(2)int page[total_instruction]: 每条指令所属的页号.
(3)int offset[total_instruction]: 每页装入 10 条指令后取模运算页号偏移
值.
(4)int total_pf: 用户进程的内存页面数.
(5)int disaffect: 页面失效次数.
1