C语言实现(1 )使用数组存储一组页面请求,页面请求的数量要50个以上,访问的页面号可以用随机数生成(0~20); (2)设置为分配给进程的页框数(假定是5); (3 )使用LRU算法,模拟完成全部的页面请求,最后输出总共发生了多少次缺页; (4) 重新设置页框为10,重复第2和第3步,观察页框数量对缺页中断率的影响; (5) 在相同页框的情况下,使用FIFO算法模拟全部的页面请求,以此来比对FIFO和LRU之间的差别
时间: 2024-04-02 11:35:45 浏览: 41
好的,下面是你要求的用C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_PAGES 50
#define PAGE_RANGE 21
int main() {
int page_requests[MAX_PAGES];
int i, j, k, frames, page_faults, lru_page, temp_page;
int frame[MAX_PAGES];
// 生成页面请求
for (i = 0; i < MAX_PAGES; i++) {
page_requests[i] = rand() % PAGE_RANGE;
}
// 输出页面请求
printf("页面请求:");
for (i = 0; i < MAX_PAGES; i++) {
printf("%d ", page_requests[i]);
}
printf("\n");
// 设置页框数,使用LRU算法模拟页面请求
frames = 5;
page_faults = 0;
for (i = 0; i < frames; i++) {
frame[i] = -1;
}
for (i = 0; i < MAX_PAGES; i++) {
for (j = 0; j < frames; j++) {
if (frame[j] == page_requests[i]) {
break;
}
}
if (j == frames) {
lru_page = 0;
for (k = 1; k < frames; k++) {
if (frame[k] != -1 && frame[k] != page_requests[i] && frame[lru_page] != -1 && page_requests[k] < page_requests[lru_page]) {
lru_page = k;
}
}
frame[lru_page] = page_requests[i];
page_faults++;
}
}
printf("LRU算法,发生了%d次缺页\n", page_faults);
// 重新设置页框为10,使用LRU算法模拟页面请求
frames = 10;
page_faults = 0;
for (i = 0; i < frames; i++) {
frame[i] = -1;
}
for (i = 0; i < MAX_PAGES; i++) {
for (j = 0; j < frames; j++) {
if (frame[j] == page_requests[i]) {
break;
}
}
if (j == frames) {
lru_page = 0;
for (k = 1; k < frames; k++) {
if (frame[k] != -1 && frame[k] != page_requests[i] && frame[lru_page] != -1 && page_requests[k] < page_requests[lru_page]) {
lru_page = k;
}
}
frame[lru_page] = page_requests[i];
page_faults++;
}
}
printf("LRU算法,发生了%d次缺页\n", page_faults);
// 在相同页框的情况下,使用FIFO算法模拟页面请求
frames = 5;
page_faults = 0;
for (i = 0; i < frames; i++) {
frame[i] = -1;
}
j = 0;
for (i = 0; i < MAX_PAGES; i++) {
for (k = 0; k < frames; k++) {
if (frame[k] == page_requests[i]) {
break;
}
}
if (k == frames) {
frame[j] = page_requests[i];
j = (j + 1) % frames;
page_faults++;
}
}
printf("FIFO算法,发生了%d次缺页\n", page_faults);
return 0;
}
```
希望这段代码能够帮助到你。
阅读全文