题目:
有一个用户进程P的地址空间为n(n=60)页,系统已在内存中给该进程分配有m(m<n,m=8)个页面,且该进程的第0、5、6页(p0、p5、p6)已经装入内存,页长为1K。
1.模拟实现进程依次要访问的字地址序列(访问串),在0~1024*n-1(0~61439)中随机发生,访问序列的随机生成规则为:50%的字地址前向顺序增长,25%的字地址均匀分布在前地址(低地址)部分,25%的字地址均匀分布在后地址(高地址)部分,为了减少模拟次数,前向顺序递增产生的字地址如小于1024*n-513(60927)则自动加512。模拟访问串长度为100。以n=60为例,字地址序列(访问串)的随机生成方法如下:
① 在[0,61439]之间随机产生起始字地址,当前访问的字地址记为k;
② 前向顺序递增产生的字地址为k+1+512;
③ 前地址(低地址)在[0,k-1]内随机产生;
④ 后地址(高地址)在[k+1,61439]内随机产生;
⑤ 重复顺序递增、前地址区间随机产生、后地址区间随机产生的过程,概率分别为:50%、25%、25%。
2.采用FIFO(先进先出)置换算法,发生缺页中断时,给出相应的字地址及页号,计算缺页中断率。
3.采用LRU置换算法,发生缺页中断时,给出相应的字地址及页号,计算缺页中断率。
源代码:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#define Blocksize 8 //物理块的大小
#define Procount 60 //进程的页面数
#define psize 100 //进程的大小
#define OneK 1024 //一个页面的大小
typedef struct page
{
int num; //记录页面号
int count; //记录最近调度此页面的次数
} Page;
Page Block[Blocksize];//内存单元数
int tem