页面置换算法的模拟实现

news2024/11/23 22:32:24

一. 实验内容

1. 假设某一个进程,在运行过程中需要访问的内容依次在320个地址中。为了模拟产生320个地址的值。首先实现在main函数中调用下面的函数随机产生320个地址的地址序列。

#include<unistd.h>

void randarray(int a[],int k)

{   int i;

    float s;

    srand(getpid());

    s=(float)319.0*(rand()%32767)/32767.0+1.0;

    for(i=0;i<k;i+=4)

    {

        a[i]=(int)s+512;

        a[i+1]=a[i]+513;

        a[i+2]=(int)((float)a[i]*(rand()%32767)/32767.0)+512;

        a[i+3]=a[i+2]+1;

        s=(float)(rand()%32767)*(318.0-a[i+2])/32767.0+a[i+2]+2.0+512;

    }

}

其中:

a[ ]:存放产生的320个地址。

k:产生地址的数目,在本实验中取320。

2.  假定页面大小是512字节。(提示:从上面randarray函数获得的是地址,页号=地址/页面大小)

分别考虑系统提供给该进程使用的内存的物理块(即页面)数目是3页、4页、5页、6页、7页、8页的情况。

计算并输出下述各种算法在系统给该进程使用的内存的物理块(即页面)数目分别是3~8页时的命中率,按类似表格的排版输出。

(以下三种页面置换算法,至少实现其中之一)

1)FIFO先进先出   2)LRU最近最久未使用  3)OPT最佳置换算法

实验效果参考:

#include<unistd.h>

#include <stdlib.h>

#include<stdio.h>

void randarray(int a[],int k)

{   int i;

    float s;

    srand(getpid());

    s=(float)319.0*(rand()%32767)/32767.0+1.0;

    for(i=0;i<k;i+=4)

    {

        a[i]=(int)s+512;

        a[i+1]=a[i]+513;

        a[i+2]=(int)((float)a[i]*(rand()%32767)/32767.0)+512;

        a[i+3]=a[i+2]+1;

        s=(float)(rand()%32767)*(318.0-a[i+2])/32767.0+a[i+2]+2.0+512;

    }

}

int loop(int b[],int j,int a1)

{

        for(int i=0;i<j;i++)

        {

        if(b[i]==a1)

        return 0;

        }

return 1;

}

void FIFo(int a[]){

printf("FIF0\t");

    int b[9],a1,b1=0,t=0;

for(int j=3;j<=8;j++)

{

    b1=0;t=0;

    for(int i=0;i<320;i++)

    {

//      printf("%d",i);

        a1=a[i]/512;

        if(a[i]%512>0)

        a1=a1+1;

        if(i<j)

        {

        b[i]=a1;

        }

        if(i>=j)

        if( loop(b,j,a1))

            {

            b1=b1%j;

            b[b1]=a1;

            t++;

            b1++;

            }

    }

    printf("%f\t",(float)(320-t)/320);

}

}

void LRU(int a[])

{

    printf("LRU\t");

    int b[9],a1,b1=0,t=0;

for(int j=3;j<=8;j++)

{

    b1=0;t=0;

    for(int i=0;i<320;i++)

    {

//      printf("%d",i);

        a1=a[i]/512;

        if(a[i]%512>0)

        a1=a1+1;

        if(i<j)

        {

        b[i]=a1;

        }

        if(i>=j)

        if( loop(b,j,a1))

            {

                for(int k=0;k<j;k++)

                {

                   if(b[k]==a[i-j])

                   {

                   b[k]=a[i];

                   break;

                }

                }

                t++;

            }

    }

    printf("%f\t",(float)(320-t)/320);

}

}

int main()

{

int a[350],k=320;

randarray(a,k);

printf("table\t3\t4\t5\t6\t7\t8\n");

FIFo(a);

printf("\n");

LRU(a);

printf("\n");

return 0;

}

1.

1.

首先是用数组存储了所有随机数地址,FIFO算法主要靠在没有找到元素时不断淘汰最早进入数组的元素来实现(类似队列的方式);要注意遍历寻找时不要越界和存储出现缺页的情况记录下来。

2.

LRU算法主要注意在分块的时间线末端,记录下来该页的页号。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1829092.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用自定义注解进行权限校验

一&#xff0c;前言 对于一些重复性的操作我们可以用提取为util的方式进行处理&#xff0c;但也可以更简便一些&#xff0c;比如自定义个注解进行。选择看这篇文章的小伙伴想必都对注解不陌生&#xff0c;但是可能对它的工作原理不太清楚。这里我们用注解实现对接口的权限校验…

长亭网络通信基础2

DNAT 默认路由配置方式 VRRP 买两个路由器 拥有两个虚拟网关地址 当一个路由器坏了还能进行正常上网 相当于三层闭合 提供功能 长亭笔试考题解析 三层交换机结合了路由器和交换机的特点 交换机没有路由表 不在同一网段 不能直接通信 可以给交换机VLANif 给接口配置ip地址 先…

【云岚到家】-day03-1-门户等缓存方案选择

【云岚到家】-day03-1-门户-缓存方案选择 1 门户1.1 门户简介1.2 常见的技术方案1.2.1 需求1.2.2 常见门户1.2.2.1 Web门户1.2.2.2 移动应用门户1.2.2.3 总结 2 缓存技术方案2.1 需求分析2.1.1 界面原型2.2.2 缓存需求 3 SpringCache入门3.1 基础概念3.1.1 Redis客户端3.1.2 Sp…

循环队列

循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;First In First Out&#xff0c;先进先出&#xff09;原则并且队尾被连接在队首以形成一个循环。 这种结构克服了普通队列在元素入队和出队时需要移动大量元素的缺点。 在循环队列中&#xff0c;当元素…

轻松上手MYSQL:探索MySQL索引数据结构的奥秘-让数据库飞起来

​&#x1f308; 个人主页&#xff1a;danci_&#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL》&#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 ✨欢迎加入探索MYSQL索引数据结构之旅✨ &#x1f44b; 大家好&#xff01;文本学习研…

Hadoop的读写流程

Hadoop分布式文件系统(HDFS)是Apache Hadoop项目的核心组件,它为大数据存储提供了一个可靠、可扩展的存储解决方案。本文将详细介绍HDFS的读写数据流程,包括数据的存储原理、读写过程以及优化策略。 一、HDFS简介 HDFS是一个高度容错的分布式文件系统,它设计用于运行在通…

python包管理器--- pip、conda、mamba的比较

1 pip 1.1 简介 pip是一个 Python 的包&#xff08;Package&#xff09;管理工具&#xff0c;用于从 PyPI 安装和管理 Python 标准库之外的其他包&#xff08;第三方包&#xff09;。从 Python 3.4 起&#xff0c;pip 已经成为 Python 安装程序的一部分&#xff0c;也是官方标准…

【chatbot-api开源项目】开发文档

chatbot-api 1. 需求分析1-1. 需求分析1-2. 系统流程图 2. 技术选型3. 项目开发3-1. 项目初始化3-2. 爬取接口获取问题接口回答问题接口创建对应对象 3-3. 调用AI3-4. 定时自动化回答 4. Docker部署5. 扩展5-1. 如果cookie失效了怎么处理5-2. 如何更好的对接多个回答系统 Gitee…

各种机器学习算法的应用场景分别是什么(比如朴素贝叶斯、决策树、K 近邻、SVM、逻辑回归最大熵模型)?

2023简直被人工智能相关话题席卷的一年。关于机器学习算法的热度&#xff0c;也再次飙升&#xff0c;网络上一些分享已经比较老了。那么今天借着查询和学习的机会&#xff0c;我也来浅浅分享下目前各种机器学习算法及其应用场景。 为了方便非专业的朋友阅读&#xff0c;我会从算…

揭秘神秘的种子:Adobe联合宾夕法尼亚大学发布文本到图像扩散模型大规模种子分析

文章链接&#xff1a;https://arxiv.org/pdf/2405.14828 最近对文本到图像&#xff08;T2I&#xff09;扩散模型的进展促进了创造性和逼真的图像合成。通过变化随机种子&#xff0c;可以为固定的文本提示生成各种图像。在技术上&#xff0c;种子控制着初始噪声&#xff0c;并…

FineReport简单介绍(2)

一、报表类型 模板设计是 FineReport 学习过程中的主要难题所在&#xff0c;FineReport 模板设计主要包括普通报表、聚合报表、决策报表三种设计类型。 报表类型简介- FineReport帮助文档 - 全面的报表使用教程和学习资料 二、聚合报表 2-1 介绍 聚合报表指一个报表中包含多个…

电商秒杀系统

一&#xff0c;细节 二&#xff0c;需要注意的细节 1.库存超卖问题 使用mysql数据库的 悲观锁 机制。在事务中使用 for update 语句&#xff0c;此时数据库会加锁&#xff0c;其他想要当前读的线程都会被阻塞&#xff0c;在事务处理完成之后释放这一条数据。该方法的缺点在于…

排序——希尔排序

希尔排序实际上是插入排序的优化&#xff0c;所以要先介绍插入排序。 目录 插入排序 思想 演示 代码实现 总结 希尔排序 思想 演示 代码 总结 插入排序 思想 又称直接插入排序。它的基本思想是将一个值插入到一个有序序列中。直至将所有的值都插入完。 演示 假设数…

工程设计问题---行星轮系设计问题

该问题的主要目标是使汽车传动比的最大误差最小。为了使最大误差最小&#xff0c;对自动行星传动系统的齿轮齿数进行了计算。该问题包含6个整数变量和11个不同几何约束和装配约束的约束。 参考文献&#xff1a; Abhishek Kumar, Guohua Wu, Mostafa Z. Ali, Rammohan Malliped…

国际统计年鉴(1995-2023年)

数据年份&#xff1a;1995-2023 数据格式&#xff1a;pdf、excel 数据内容&#xff1a;《国际统计年鉴》是一部综合性的国际经济社会统计资料年刊&#xff0c;收录了世界200多个国家和地区的统计数据&#xff0c;并对其中40多个主要国家和地区的经济社会发展指标及国际组织发布…

ARIMA模型与ARIMA-GARCH模型预测时间序列

上世纪 70 年代初&#xff0c;Ljung 等人提出 ARIMA 模型&#xff0c;又称求和自回归移动平均模型。其思想 是针对于非平稳时间序列进行数学建模&#xff0c;将其通过差分运算后 进行相关数据刻画 &#xff0c;变为一个平稳的新序列&#xff0c;进而进行相关数据的刻画。 自 1…

Element-UI - 解决el-table中图片悬浮被遮挡问题

在开发中&#xff0c;发现element-ui在el-table中添加图片悬浮显示时&#xff0c;会被单元格遮挡的问题。通过查询得到的解决办法&#xff0c;大多是修改.el-table类中相关样式属性&#xff0c;但经过验证发现会影响到其他正常功能的使用。对于此问题解决其实也并不难&#xff…

计算机网络知识点全面总结回顾

物理层 OSI模型&#xff1a;数据链路层&#xff08;流量控制&#xff09;&#xff0c;从传输层开始端到端&#xff1b;每一层的元素都称为实体&#xff0c;同一层的是对等实体&#xff1b;三个重要概念&#xff1a;服务&#xff08;下层为上层提供调用&#xff09;&#xff0c…

非连续分配管理方式(重点)

目录 一. 基本分页存储管理1.1 什么是分页存储1.2 页表 二. 基本地址变换机构三. 具有快表的地址变换机构3.1 什么是快表3.2 引入快表后, 地址的变换过程3.3 局部性原理 四. 两级页表4.1 单级页表存在什么问题?如何解决?4.2 两级页表的原理、逻辑地址结构4.3 如何实现地址变换…

机器学习笔记 - 用于3D点云数据分割的Point Net的训练

一、数据集简述 ​在本教程中,我们将学习如何在斯坦福 3D 室内场景数据集 ( S3DIS )上训练 Point Net 进行语义分割。S3DIS 是一个 3D 数据集,包含来自多栋建筑的室内空间点云,占地面积超过 6000 平方米。Point Net使用整个点云,能够执行分类和分割任务。如果你一直在关注 …