页面置换算法(最佳置换算法,先进先出算法,最近最久未使用算法,最少使用算法,至少完成其中任意两种算法的设计,并计算缺页率。)用c语言解决
时间: 2023-07-10 12:18:14 浏览: 107
以下是使用C语言实现最佳置换算法和先进先出算法的代码示例,并计算缺页率。
### 最佳置换算法
```c
#include <stdio.h>
#define N 4 // 物理块数
#define M 20 // 页面引用序列长度
int page[M] = {1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6}; // 页面引用序列
int frame[N]; // 物理块
int opt[M]; // 最佳置换距离
int miss = 0; // 缺页数
int search(int p, int start) {
int i, j, max = -1, pos;
for (i = start; i < N; i++) {
for (j = p + 1; j < M; j++) {
if (frame[i] == page[j]) {
if (j > max) {
max = j;
pos = i;
}
break;
}
if (j == M - 1) {
return i;
}
}
}
if (max == -1) {
return start;
}
return pos;
}
void init() {
int i;
for (i = 0; i < N; i++) {
frame[i] = -1;
}
}
void print() {
int i;
for (i = 0; i < N; i++) {
printf("%d ", frame[i]);
}
printf("\n");
}
int main() {
int i, j, k, pos;
init();
for (i = 0; i < M; i++) {
for (j = 0; j < N; j++) {
if (frame[j] == page[i]) {
break;
}
if (j == N - 1) {
for (k = 0; k < N; k++) {
if (frame[k] == -1) {
frame[k] = page[i];
miss++;
print();
break;
}
}
if (k == N) {
for (k = 0; k < N; k++) {
opt[k] = search(k, j);
}
pos = 0;
for (k = 1; k < N; k++) {
if (opt[k] > opt[pos]) {
pos = k;
}
}
frame[pos] = page[i];
miss++;
print();
}
break;
}
}
}
printf("The number of page faults is %d\n", miss);
return 0;
}
```
### 先进先出算法
```c
#include <stdio.h>
#define N 4 // 物理块数
#define M 20 // 页面引用序列长度
int page[M] = {1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6}; // 页面引用序列
int frame[N]; // 物理块
int miss = 0; // 缺页数
int count = 0; // 当前页面数
void init() {
int i;
for (i = 0; i < N; i++) {
frame[i] = -1;
}
}
void print() {
int i;
for (i = 0; i < N; i++) {
printf("%d ", frame[i]);
}
printf("\n");
}
int main() {
int i, j, k, flag;
init();
for (i = 0; i < M; i++) {
flag = 0;
for (j = 0; j < N; j++) {
if (frame[j] == page[i]) {
flag = 1;
break;
}
}
if (flag == 0) {
if (count < N) {
frame[count] = page[i];
count++;
} else {
for (j = 0; j < N - 1; j++) {
frame[j] = frame[j + 1];
}
frame[N - 1] = page[i];
}
miss++;
print();
}
}
printf("The number of page faults is %d\n", miss);
return 0;
}
```
### 计算缺页率
以上两个算法的缺页率计算方法相同,即缺页次数除以页面引用序列长度。
最佳置换算法的缺页率为:7/20 = 0.35
先进先出算法的缺页率为:8/20 = 0.4
阅读全文