在本实验中,引用串的长度为100000个,生成方法为按照给定的指令跳转率随即生成,指令跳转率由调用函数给出。由于指令的跳转率对最终的各种替换算法的缺页率有明显的影响,所以,在实验中,我用一组不同的跳转率来测试在不同指令跳转条件下不同算法的缺页率。
另外,实验中使用的内存的页面数为10,虚拟存储器中的页面总是为100。
以下是程序中定义的一些数据结构和函数原形:
#define STREAM_LEN 100000
#define MAX_PAGE_NO 100
#define WORK_PAGES 10
typedef enum {BEST_REP, FIFO_REP, LRU_REP, CLOCK_REP, RAND_REP} REP;
void best_rep(int *stream, int pos, int *memory);
void fifo_rep(int *stream, int pos, int *memory);
void lru_rep(int *stream, int pos, int *memory);
void clock_rep(int *stream, int pos, int *memory);
void rand_rep(int *stream, int pos, int *memory);
各种替换算法如课本中所述,再次不再重复。
#include <stdio.h> void generateStream(int stream[], int stream_len, double jumpRate, int maxPageNo, int workPages) { int startPage = getStartPage(startPageRange); return; int getStartPage(int range) { double genRate() { int genSubStr(int stream[], int startPosition, int startPage) { return startPosition + i;
#include <stdlib.h>
#include <time.h>
#include "page_stream.h"
srand((unsigned)time(NULL));
int startPageRange = maxPageNo - workPages + 1;
int position = 0;
while (true) {
position = genSubStr(stream, position, startPage);
if (position == stream_len)
break;
if (genRate() < jumpRate)
startPage = getStartPage(startPageRange);
}
}
return (rand() % (range + 1));
}
return ((double)rand())/RAND_MAX;
}
for (int i = 0; i < 10; i++) {
stream[startPosition + i] = startPage + (rand()%10);
}
}
#include <stdio.h> bool in_mem(int page, int *memory) { return false; void replacePage(int *stream, int *memory, REP rep, int pos) { static int lruAid[WORK_PAGES] = {0}; return; static int clockAid[WORK_PAGES] = {0}; return; double run(int *stream, int *memory, REP rep) { bool check(int *memTemp, int check_page, int replace_page, int *memory) { return false; void best_rep(int *stream, int pos, int *memory) { int posTemp = pos + 1; return; void fifo_rep(int *stream, int pos, int *memory) { return; void lru_rep(int *stream, int pos, int *memory) { memory[k] = stream[pos]; return; static int clockPointer = 0; memory[clockPointer] = stream[pos]; void rand_rep(int *stream, int pos, int *memory) { return; |
#include <stdio.h> main() { jumpRate = 0.4; printf("指令跳转率为%f时:/n/n", jumpRate); return 0; |