操作系统实验四-页面置换算法实验

操作系统实验四-页面置换算法实验

Y.xj
代码已上传github

本实验重点为不同的页面置换算法,所以程序主体部分完全相同

程序总体函数变量如下:

在这里插入图片描述

程序实现步骤:

  1. 判断是否缺页

  2. 判断内存是否存满

  3. 若内存不满,则直接插入

    若内存满,则使用不同算法来从内存中选择页面进行置换

  4. 输出缺页率

将必要变量设为全局变量

#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 = 
  • 7
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值