虚拟页式存储管理中常用页面置换算法的实现代码c语言
时间: 2024-04-30 17:18:18 浏览: 28
以下是常用页面置换算法的实现代码(C语言):
1. 先进先出(FIFO)算法:
```c
int fifo(int refStr[], int n, int frameSize) {
int i, j, k, pgFaults = 0, inFrame = 0;
int frame[frameSize];
for (i = 0; i < frameSize; ++i) {
frame[i] = -1; // -1表示页面为空
}
for (i = 0; i < n; ++i) {
int pg = refStr[i];
int inFrameFlag = 0;
for (j = 0; j < frameSize; ++j) {
if (pg == frame[j]) {
inFrameFlag = 1;
break;
}
}
if (!inFrameFlag) {
frame[inFrame] = pg;
inFrame = (inFrame + 1) % frameSize;
++pgFaults;
}
}
return pgFaults;
}
```
2. 最近最久未使用(LRU)算法:
```c
int lru(int refStr[], int n, int frameSize) {
int i, j, k, pgFaults = 0, inFrame = 0;
int frame[frameSize];
for (i = 0; i < frameSize; ++i) {
frame[i] = -1; // -1表示页面为空
}
int lru[frameSize]; // 记录每个页面最近一次使用的时间
for (i = 0; i < n; ++i) {
int pg = refStr[i];
int inFrameFlag = 0;
for (j = 0; j < frameSize; ++j) {
if (pg == frame[j]) {
inFrameFlag = 1;
lru[j] = i;
break;
}
}
if (!inFrameFlag) {
int minLru = i;
int minLruIndex = -1;
for (j = 0; j < frameSize; ++j) {
if (lru[j] < minLru) {
minLru = lru[j];
minLruIndex = j;
}
}
frame[minLruIndex] = pg;
lru[minLruIndex] = i;
++pgFaults;
}
}
return pgFaults;
}
```
3. 最不经常使用(LFU)算法:
```c
int lfu(int refStr[], int n, int frameSize) {
int i, j, k, pgFaults = 0, inFrame = 0;
int frame[frameSize];
for (i = 0; i < frameSize; ++i) {
frame[i] = -1; // -1表示页面为空
}
int freq[frameSize]; // 记录每个页面访问频率
for (i = 0; i < n; ++i) {
int pg = refStr[i];
int inFrameFlag = 0;
for (j = 0; j < frameSize; ++j) {
if (pg == frame[j]) {
inFrameFlag = 1;
++freq[j];
break;
}
}
if (!inFrameFlag) {
int minFreq = INT_MAX;
int minFreqIndex = -1;
for (j = 0; j < frameSize; ++j) {
if (freq[j] < minFreq) {
minFreq = freq[j];
minFreqIndex = j;
}
}
frame[minFreqIndex] = pg;
freq[minFreqIndex] = 1;
++pgFaults;
}
}
return pgFaults;
}
```
这些算法的实现都是基于数组的方式,可以根据需要进行修改。
相关推荐
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)