FIFO:定义4个物理块,输入8个物理块号,将其一一放入,若4个块满了,则将第一个块覆盖掉,若输入的物理块号存在,则表示命中,覆盖原来的。
LRU:定义 4 个物理块,输入 8 个物理块号,并引入 time 来标记他们的存在时间,初始值为 0,每引入一个数则 time+1,若有相同的值,则该块的time清0,等4个物理块满了以后,之后输入的值将time 最大的那个块的值覆盖。
将两个算法放在一个C语言中。
![](https://profile-avatar.csdnimg.cn/ed966570f4cd441f8b8a062ebd2ce07d_weixin_62973446.jpg!4)
实验 4 FIFO 算法和 LRU 算法-C 程序实现
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
12条回答 默认 最新
关注
#include <stdio.h> #define SIZE 4 void FIFO(int arr[], int n) { int memory[SIZE] = {0}; // 物理块数组初始化为0 int hit_count = 0; // 命中的次数 printf("======算法FIFO======\n"); for (int i = 0; i < n; i++) { int found = 0; // 是否找到相同的物理块号 // 检查输入的物理块号是否已经在物理块数组中 for (int j = 0; j < SIZE; j++) { if (memory[j] == arr[i]) { found = 1; hit_count++; break; } } if (!found) { // 物理块数组已经满了,需要覆盖最早放入的块 if (memory[SIZE-1] != 0) { for (int j = 0; j < SIZE-1; j++) { memory[j] = memory[j+1]; } } // 将新的物理块号放入物理块数组的最后一块 memory[SIZE-1] = arr[i]; } // 打印物理块数组 printf("第%d次访问。。。。", i+1); for (int j = SIZE-1; j >= 0; j--) { printf("%d ", memory[j]); } printf("\n"); } printf("\n命中次数: %d\n", hit_count); } void LRU(int arr[], int n) { int frames[SIZE] = {0}; int time[SIZE] = {0}; printf("======算法LRU======\n"); for (int i = 0; i < n; i++) { int found = 0; int minTime = time[0]; int minIndex = 0; for (int j = 0; j < SIZE; j++) { if (frames[j] == arr[i]) { found = 1; time[j] = 0; } else { time[j]++; } if (time[j] > minTime) { minTime = time[j]; minIndex = j; } } if (found) { // 命中 printf("第%d次访问。。。。", i+1); for (int j = 0; j < SIZE; j++) { printf("%d ", frames[j]); } printf("时间 "); for (int j = 0; j < SIZE; j++) { printf("%d ", time[j]); } printf("\n"); } else { // 未命中 frames[minIndex] = arr[i]; time[minIndex] = 0; printf("第%d次访问。。。。", i+1); for (int j = 0; j < SIZE; j++) { printf("%d ", frames[j]); } printf("时间 "); for (int j = 0; j < SIZE; j++) { printf("%d ", time[j]); } printf("\n"); } } } int main() { int size; printf("请输入要存入的数据的长度:"); scanf("%d", &size); int input[size]; printf("请输入要存入的数据,用空格分隔:"); for(int i=0; i<size; i++){ scanf("%d", &input[i]); } printf("======要存入的数据======\n"); for (int i = 0; i < size; i++) { printf("%d ", input[i]); } printf("\n\n"); FIFO(input, size); printf("\n"); LRU(input, size); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 求解决为什么json数据完整,却解析失败
- ¥15 打开Smart schedule运行examples/transformer-xl/scripts/run_enwik8_base_moe.sh 报错
- ¥15 求一个C# sm4 加密解密的代码
- ¥15 想做个网络加速器,怎么实现
- ¥20 centos7下载mysql提示DNS解析异常
- ¥20 vx转账功能对方不能领取
- ¥15 vue2+codemirror 运行后页面光标太大了
- ¥15 pdfjs库如何在前端实现打印、旋转等功能
- ¥15 combobox数据绑定问题
- ¥15 maven打包时,为什么有的依赖打不进去包