分配给作业A的内存物理块数分别为3和4页面走向为 1,2,6,5,1,5,2,5,7,4,5,6,2,1,7,2 5,2,4,3,5,2,1,分别用FIFO和LRU的方法,写出C语言程序代码
时间: 2023-06-27 19:05:38 浏览: 61
以下是FIFO和LRU算法的C语言代码实现:
FIFO算法:
```c
#include <stdio.h>
#include <string.h>
#define FRAME_SIZE 3 // 物理块数
#define PAGE_SIZE 20 // 页面数
int main() {
int pages[PAGE_SIZE] = {1,2,6,5,1,5,2,5,7,4,5,6,2,1,7,2,5,2,4,3}; // 页面走向
int frames[FRAME_SIZE] = {0}; // 物理块数组
int faults = 0; // 缺页次数
int index = 0; // 当前物理块下标
for (int i = 0; i < PAGE_SIZE; i++) {
int page = pages[i];
int hit = 0;
for (int j = 0; j < FRAME_SIZE; j++) {
if (frames[j] == page) { // 如果命中页面
hit = 1;
break;
}
}
if (!hit) { // 如果未命中页面
frames[index] = page; // 将页面替换到物理块中
index = (index + 1) % FRAME_SIZE; // 更新当前物理块下标
faults++; // 缺页次数加1
}
printf("第%d个页面: ", i + 1);
for (int j = 0; j < FRAME_SIZE; j++) {
printf("%d ", frames[j]);
}
printf("\n");
}
printf("FIFO算法缺页次数为: %d\n", faults);
return 0;
}
```
LRU算法:
```c
#include <stdio.h>
#include <string.h>
#define FRAME_SIZE 3 // 物理块数
#define PAGE_SIZE 20 // 页面数
int main() {
int pages[PAGE_SIZE] = {1,2,6,5,1,5,2,5,7,4,5,6,2,1,7,2,5,2,4,3}; // 页面走向
int frames[FRAME_SIZE] = {0}; // 物理块数组
int faults = 0; // 缺页次数
int used[FRAME_SIZE] = {0}; // 用于记录物理块最近使用情况
for (int i = 0; i < PAGE_SIZE; i++) {
int page = pages[i];
int hit = 0;
for (int j = 0; j < FRAME_SIZE; j++) {
if (frames[j] == page) { // 如果命中页面
hit = 1;
used[j] = i + 1; // 更新最近使用时间
break;
}
}
if (!hit) { // 如果未命中页面
int min = used[0];
int min_index = 0;
for (int j = 1; j < FRAME_SIZE; j++) {
if (used[j] < min) { // 找到最久没使用的物理块
min = used[j];
min_index = j;
}
}
frames[min_index] = page; // 将页面替换到物理块中
used[min_index] = i + 1; // 更新最近使用时间
faults++; // 缺页次数加1
}
printf("第%d个页面: ", i + 1);
for (int j = 0; j < FRAME_SIZE; j++) {
printf("%d ", frames[j]);
}
printf("\n");
}
printf("LRU算法缺页次数为: %d\n", faults);
return 0;
}
```
阅读全文