#include <stdio.h> #include <stdlib.h>

#define FRAME_NUM 3 // 页面帧数

int main() { int pages[] = {7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2}; // 访问页序列 int count[FRAME_NUM] = {0}; // 页面帧计数器 int frames[FRAME_NUM] = {-1, -1, -1}; // 页面帧数组,初始值为-1 int page_fault = 0; // 缺页次数 int i, j, k;

for (i = 0; i < sizeof(pages) / sizeof(pages[0]); i++)
{
    int page = pages[i];
    int hit = 0; // 是否命中标记

    // 查找页面是否在页面帧中
    for (j = 0; j < FRAME_NUM; j++)
    {
        if (frames[j] == page)
        {
            hit = 1;
            count[j] = 0; // 命中后计数器清零
            break;
        }
    }

    // 如果未命中,则找到计数最大的页面淘汰
    if (!hit)
    {
        int max_count = 0;
        int max_index = 0;
        for (j = 0; j < FRAME_NUM; j++)
        {
            if (count[j] > max_count)
            {
                max_count = count[j];
                max_index = j;
            }
        }
        frames[max_index] = page; // 替换页面帧中的页面
        count[max_index] = 0; // 新页面计数器清零
        page_fault++; // 缺页次数加1
    }

    // 页面帧中的其他页面计数器加1
    for (j = 0; j < FRAME_NUM; j++)
    {
        if (frames[j] != -1 && j != max_index)
        {
            count[j]++;
        }
    }

    // 打印页面帧状态
    printf("第 %d 次访问页面 %d,页面帧状态为:", i + 1, page);
    for (j = 0; j < FRAME_NUM; j++)
    {
        if (frames[j] == -1)
        {
            printf(" *");
        }
        else
        {
            printf(" %d", frames[j]);
        }
    }
    printf("\n");
}

// 计算缺页率并输出
double page_fault_rate = (double)page_fault / sizeof(pages) * 100;
printf("缺页次数为 %d,缺页率为 %.2f%%\n", page_fault, page_fault_rate);

return 0;
运用LRU算法中的计数法页表设一个计数器字段每访问一页该页计数器清零其余页的计数器加1淘汰时 淘汰计数值最大的页面用c语言写出进程可分配3个页框访问页的顺序为7012030423032的缺页次数和缺页率

原文地址: http://www.cveoy.top/t/topic/cJtS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录