操作系统实验三页面置换算法实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三实验报告
实验源码:
#include "stdio.h"
#include
#include
#define DataMax 100 // 常量DataMax
#define BlockNum 10 // 常量BlockNum
int DataShow[BlockNum][DataMax]; // 用于存储要显示的数组
bool DataShowEnable[BlockNum][DataMax]; // 用于存储数组中的数据是否需要显示
int Data[DataMax]; // 保存数据
int Block[BlockNum]; // 物理块
int count[BlockNum]; // 计数器
int N; // 页面个数
int M; // 最小物理块数
int ChangeTimes; // 缺页次数
void DataInput(); // 输入数据的函数
void DataOutput(); // 输出数据的函数
void FIFO(); // FIFO 函数
void Optimal(); // Optimal函数
void LRU(); // LRU函数
int main(int argc, char* argv[])
{
DataInput();
int menu;
while(true)
{
printf("\n* 菜单选择*\n");
printf("*******************************************************\n");
printf("* 1-Optimal *\n");
printf("* 2-FIFO *\n");
printf("* 3-LRU *\n");
printf("* 4-返回上一级*\n");
printf("* 0-EXIT *\n");
printf("*******************************************************\n");
scanf("%d",&menu);
switch(menu)
{
case 1:
Optimal();
break;
case 2:
FIFO();
break;
case 3:
LRU();
break;
case 0:
exit(0);
break;
case 4:
system("cls");
DataInput();
break;
}
if(menu != 1 && menu != 2 && menu != 3 && menu != 0 && menu !=4) { system("cls");
printf("\n请输入0 - 4之间的整数!\n");
continue;
}
}
return 0;
}
void DataInput()
{
int i,choice;
printf("请输入最小物理块数:");
scanf("%d",&M);
// 输入最小物理块数大于数据个数
while(M > BlockNum)
{
printf("物理块数超过预定值,请重新输入:");
scanf("%d",&M);
}
printf("请输入页面的个数:");
scanf("%d",&N);
// 输入页面的个数大于数据个数
while(N > DataMax)
{
printf("页面个数超过预定值,请重新输入:");
scanf("%d",&N);
}
printf("请选择产生页面访问序列的方式(1.随机2.输入):");
scanf("%d",&choice);
switch(choice)
{
case 1:
// 产生随机访问序列
for(i = 0;i < N;i++)
{
Data[i] = (int)(((float) rand() / 32767) * 10); // 随机数大小在0 - 9之间}
system("cls");
// 显示随机产生的访问序列
printf("\n随机产生的访问序列为:");
for(i = 0;i < N;i++)
{
printf("%d ",Data[i]);
}
printf("\n");
break;
case 2:
// 输入访问序列
printf("请输入页面访问序列:\n");
for(i = 0;i < N;i++)
scanf("%d",&Data[i]);
system("cls");
// 显示输入的访问序列
printf("\n输入的访问序列为:");
for(i = 0;i < N;i++)
{
printf("%d ",Data[i]);
}
printf("\n");
break;
default:
while(choice != 1 && choice != 2)
{
printf("请输入1或2选择相应方式:");
scanf("%d",&choice);
}
break;
}
}
void DataOutput()
{
int i,j;
// 对所有数据操作
for(i = 0;i < N;i++)
{
printf("%d ",Data[i]);
}
printf("\n");
for(j = 0;j < M;j++)
{
// 对所有数据操作