操作系统实验四-页面置换算法实验
Y.xj
代码已上传github
本实验重点为不同的页面置换算法,所以程序主体部分完全相同
程序总体函数变量如下:
程序实现步骤:
-
判断是否缺页
-
判断内存是否存满
-
若内存不满,则直接插入
若内存满,则使用不同算法来从内存中选择页面进行置换
-
输出缺页率
将必要变量设为全局变量
#define Max 5 //内存页数上限
#define Mainarrlen 30 //总页表数上限
#define maxsuparrlen 3 //缓存数组最大长度
#define random(x) rand()%x //定义随机函数
int arr[Max]; //声明内存
int arrlen = 0; //内存当前存储的页数
int fifoflag = 0; //先进先出算法flag
int used[Max] = {
0 }; //初始化页面访问位 置为0
int modifiesd[Max]; //申请修改位数组
int suparr[maxsuparrlen]; //申请2位缓冲数组
int suparrlen = 0; //缓存数组当前长度
int suparrflag = 0; //辅助数组置换flag
在主体部分先完成通用函数的编写:
- 每次访问新的页号前先判断是否缺页,遍历内存中的页号是否有与欲访问页号相同的,有则返回
0
,为不缺页,没有则返回1
,缺页。
缺页判断函数iflack():
/*iflack(int p)
function :判断是否有缺页
parm : p---要访问的页号
rtn : 1---缺页 0---不缺页*/
int iflack(int p)
{
for (int i = 0; i < arrlen; i++)
{
if (arr[i] == p)
{
used[i] = 1; //用于Clock算法每次访问之后将其访问位置1
return 0;
}
}
return 1;
}
-
每次访问页面后都输出一次内存已有页号
-
判断完缺页之后查看内存中已经存储的页数
arrlen
,如果arrlen
没有达到存储上限,直接存储入,如果达到了存储上限,调用不同置换算法,进行置换。先预先设置30位数组作为要访问的页号
主函数main():
int main()
{
int p, rpl,lacknum=0;
int mainarr[30] = {
1, 2, 3, 4, 5, 6, 7,6,5,4,3,2,1,6,7,8,9,10,9,8,7,6,7,8,9,10,11,12,13,14 };
//int mainarr[12] = { 1,2,3,4,1,2,5,1,2,3,4,5 };
for (int i =