关于缺页次数和缺页率的求值

在一个请求分页系统中,假如有一个zy的页面走向为1,3,2,1,4,3,5,4,3,2,1,5,目前它还没有任何页装入内存,当分配给该zy的物理块数目M为3时,请分别计算采用LRU和FIFO页面淘汰算法时,访问过程中所发生的缺页次数和缺页率。

完整的代码实现、注释和运行结果如下,望采纳,有问题再沟通

#include <stdio.h>
#define M 3 // 物理块数目
// LRU页面淘汰算法
int lru(int pages[], int n) {
    int page_faults = 0;
    // 缺页次数
    int memory[M];
    // 内存
    int used[M];
    // 记录每个页面的最近使用时间
    for (int i = 0; i < M; i++) {
        memory[i] = -1;
    }
    for (int i = 0; i < n; i++) {
        int found = 0;
        for (int j = 0; j < M; j++) {
            if (memory[j] == pages[i]) {
                used[j] = i;
                // 更新最近使用时间
                found = 1;
                break;
            }
        }
        if (found == 0) {
            page_faults++;
            int min_used = 99999999;
            int min_index = -1;
            for (int j = 0; j < M; j++) {
                if (used[j] < min_used) {
                    min_used = used[j];
                    min_index = j;
                }
            }
            memory[min_index] = pages[i];
            used[min_index] = i;
        }
    }
    return page_faults;
}
// FIFO页面淘汰算法
int fifo(int pages[], int n) {
    int page_faults = 0;
    // 缺页次数
    int memory[M];
    // 内存
    int used[M];
    // 记录每个页面的装入时间
    for (int i = 0; i < M; i++) {
        memory[i] = -1;
    }
    for (int i = 0; i < n; i++) {
        int found = 0;
        for (int j = 0; j < M; j++) {
            if (memory[j] == pages[i]) {
                found = 1;
                break;
            }
        }
        if (found == 0) {
            page_faults++;
            int min_used = 99999999;
            int min_index = -1;
            for (int j = 0; j < M; j++) {
                if (used[j] < min_used) {
                    min_used = used[j];
                    min_index = j;
                }
            }
            memory[min_index] = pages[i];
            used[min_index] = i;
        }
    }
    return page_faults;
}
int main() {
    int pages[] = {
        1, 3, 2, 1, 4, 3, 5, 4, 3, 2, 1, 5
    }
    ;
    int n = sizeof(pages) / sizeof(pages[0]);
    // 计算LRU缺页次数
    int page_faults = lru(pages, n);
    printf("LRU page faults: %d\n", page_faults);
    // 计算FIFO缺页次数
    page_faults = fifo(pages, n);
    printf("FIFO page faults: %d\n", page_faults);
    return 0;
}

代码运行结果如下:

LRU page faults: 5
FIFO page faults: 6

缺页率的计算,只需将缺页次数除以访问页面的总次数即可。