实验三:存储器分配算法
一、实验目的
1、使学生实验存储器管理系统的设计方法;
2、加深对所学各种存储器管理方案的了解;
3、要求采用一些常用的存储器分配算法,设计一个存储器管理模拟系统并调试运行。
二、实验要求及内容
- 要求采用一种常用的存储器分配算法,设计一个存储器管理模拟系统。
- 允许进行多次的分配和释放,并可向用户反馈分配和释放情况及当前内存的情况;
- 采用“命令菜单"选择和键盘命令输入的会话方式,根据输入请求调用分配模块,或回收模块,或内存查询模块,或最终退出系统。
三、实验代码
#include <stdio.h>
//初始化队列
void initializeList(int list[],int number){
for (int i = 0; i < number; i ++) {
list[i] = -1;
}
}
//展示队列状态
void showList(int list[], int number){
for (int i = 0; i < number; i ++) {
printf("%2d",list[i]);
}
printf("\n");
}
//展示当前内存状态
void showMemoryList(int list[],int phyBlockNum){
for (int i = 0; i < phyBlockNum; i ++) {
if (list[i] == -1) {
break;
}
printf(" |%d|",list[i]);
}
printf("\n");
}
void informationCount(int missingCount,int replaceCount,int pageNum){
printf("缺页次数:%d 缺页率:%d/%d\n",missingCount,missingCount,pageNum);
double result = (double)(pageNum - missingCount)/(double)pageNum;
printf("置换次数:%d 命中率:%.2f\n",replaceCount,result);
}
//找到该页面下次要访问的位置
int getNextPosition(int currentPage,int currentPosition,int strList[],int pageNum){
for (int i = currentPosition+1; i < pageNum; i ++) {
if (strList[i] == currentPage) {
return i;
}
}
return 100;
}
//最佳置换算法
void replacePageByOPT(int memoryList[],int phyNum,int strList[],int pageNum){
//置换次数
int replaceCount = 0;
//缺页次数
int missingCount = 0