【操作系统原理实验】页面替换策略模拟实现

news2024/9/23 17:22:23

选择一种高级语言如C/C++等,编写一个页面替换算法的模拟实现程序。1) 设计内存管理相关数据结构;2) 随机生成一个页面请求序列;3) 设置内存管理模拟的关键参数;4) 实现该页面置换算法;5) 模拟实现给定配置请求序列的换页过程,计算换页率。

(1)设计思想:
1、设置结构体页面信息,包括页面号和被访问标记,对物理块分配初值,使物理块页面号为-1,表示没有放入,被访问标记为0。分配页面,输入页面数量和页面号。
2、选择算法:
(1)opt最佳置换算法
1、opt算法:需要发生页面置换时,算法总是选择在将来最不可能访问的页面进行置换。
2、对内存进行遍历,寻找内存中时是否有该页面,有该页面则显示该页面已经在内存中,当没有该页面时,查找是否有空闲块,如果物理块有空位则直接插入,使count++,表示页面插入,没有空位,则选择未来没有出现的或者出现最晚的页面,通过for循环找到物理块中保存的页面号在页面中对应的位置,查找要置换的页面,找到位置最远的物理块保存的页面号,将该页面置换出去,使change++,表示页面置换,然后显示置换完一次后的物理块。
3、输出缺页次数、置换次数和缺页率。
在这里插入图片描述

(2)fifo先进先出算法
1、fifo算法:算法总是选择在队列中等待时间最长的页面进行置换。
2、对内存进行遍历,寻找内存中时是否有该页面,有该页面则显示该页面已经在内存中,当没有该页面时,查找是否有空闲块,如果物理块有空位则直接插入,使count++,表示页面插入,没有空位,找到访问量最大的物理块对应的页面号,将它置换出去,change++,页面进入后,每个再进入一个页面停留的时间+1。
3、输出缺页次数、置换次数和缺页率。
在这里插入图片描述

(3)lru最近最久未使用或者最少使用置换算法
1、lru算法:如果某一个页面被访问了,它很可能还要被访问;相反,如果它长时间不被访问,那么,在最近未来是不大可能被访问的。
2、对内存进行遍历,寻找内存中时是否有该页面,有该页面则显示该页面已经在内存中,当没有该页面时,查找是否有空闲块,如果物理块有空位则直接插入,将该物理块页面号停留时间重置,使count++,表示页面插入,没有空位,找到停留时间最大的物理块,将它置换出去,change++,页面进入后,每个再进入一个页面停留的时间+1。
3、输出缺页次数、置换次数和缺页率。
在这里插入图片描述

(2)功能函数设计:
void convertopage()//分配页面
void blockclear()//物理块分配初值
int findspage()//查找是否有空闲块
int findexist(int curpage)//寻找内存中时是否有该页面
int findreplace()//查找要置换的页面
void showall()//显示整体置换玩的页面
void show()//显示置换完一次后的block
void opt()//最佳置换算法
void FIFO()//先进先出算法
void lur()//最近最久未使用或者最少使用置换算法
(3)结果演示:
1、opt最佳置换算法
在这里插入图片描述

2、fifo先进先出算法
在这里插入图片描述

3、lru最近最久未使用或者最少使用置换算法
在这里插入图片描述

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

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

相关文章

【python socket】实现websocket服务端

一、获取握手信息首先通过如下代码,我们使用socket来获取客户端的握手信息import socketsock socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(("127.0.0.1", 8002)) sock.li…

启动项管理工具Autoruns使用实验(20)

实验目的 (1)了解注册表的相关知识; (2)了解程序在开机过程中的自启动; (3)掌握Autoruns在注册表和启动项方面的功能;预备知识 注册表是windows操作系统中的一个核心数据…

Android Framework-Android启动过程

第一个系统进程(init) Android设备的启动必须经历3个阶段,即Boot Loader、Linux Kernel和Android系统服务,默认情况下它们都有各自的启动界面。严格来说,Android系统实际上是运行于Linux内核之上的一系列“服务进程”…

元宇宙XR应用,如何迎接大规模普及的时代?

未来,具有互动性、沉浸感的元宇宙/XR应用将逐渐成为主流,这个趋势已毋庸置疑。 然而,在大趋势下,大众终端用户普遍设备能力不足、网络传输时延、GPU算力分配限制等技术挑战,依然是元宇宙/XR应用在大众广泛渗透的瓶颈。…

【vulhub漏洞复现】Fastjson 1.2.24反序列化漏洞

一、漏洞详情Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,也可以将 JSON 字符串转换为 Java 对象。漏洞成因:目标网站在解析 json 时,未对 json 内容进行验证,直接将 json 解析成 java 对象并执行&…

国产数字源表在压力传感器电阻测量上的应用

压力传感器分类压力传感器(Pressure Transducer)是能感受压力信号,并能按照一定的规律将压力信号转换成可用的输出的电信号的器件或装置,压力传感器通常由压力敏感元件和信号处理单元组成。常见的压力传感器有四种:应变式压力传感器、压阻式压力传感器、电容式压力传…

OpenMMLab 目标检测

OpenMMLab 目标检测1. 目标检测简介1.1 滑窗2. 基础知识2.1 边界框(Bounding Box)3. 两阶段目标检测算法3.1 多尺度检测技术4. 单阶段目标检测算法4.1 YOLO: You Only Look Once (2015)4.2 SSD: Single Shot MultiBox Detetor (2016)5. 无锚框目标检测算…

Nginx的搭建与核心配置

目录 一.Nginx是什么? 1.Nginx概述 2.Nginx模块与作用 3.Nginx三大作用:反向代理、负载均衡、动静分离 二.Nginx和Apache的差异 三.安装Nginx 1.编译安装 2.yum安装 四.Nginx的信号使用 五.Nginx的核心配置指令 1.访问状态统计配置 2.基于授…

非华为电脑安装华为电脑管家以及注意事项

非华为电脑安装华为电脑管家前言安装注意事项效果展示前言 非华为电脑是可以安装华为电脑管家的,不过部分功能可能不兼容。值得一提的是,超级终端、多屏协同、文件共享、远程控制等功能大部分电脑是可以使用的,本人在联想ThinkBook 15电脑上…

【CS144】Lab1总结

Lab1Lab汇总概述具体实现Lab汇总 概述 lab1要求实现一个字符串的装配器,用于将TCPTCPTCP接收方接收到的字节流拼接起来,并缓存一定量的乱序到达的字节,便于TCPTCPTCP接收方相关功能的实现。 具体实现 该装配器实现的重点是push_substring…

Java线程池使用与原理解析2(自定义线程池、合适的线程数量、线程池阻塞队列、线程拒绝策略)

在上篇我们学习了线程池各个参数的含义,线程池任务处理流程,使用线程池的好处等内容,本篇我们学习如何创建一个适合我们业务的线程池。为此,我们有必要先学习一下如何大概确定我们线程池核心线程数、怎么设置阻塞队列的类型与大小…

Malware Dev 04 - 隐匿之 ETW(Event Tracing for Windows)Bypass

写在最前 如果你是信息安全爱好者,如果你想考一些证书来提升自己的能力,那么欢迎大家来我的 Discord 频道 Northern Bay。邀请链接在这里: https://discord.gg/9XvvuFq9Wb我拥有 OSCP,OSEP,OSWE,OSED&…

使用leangoo领歌单团队敏捷开发项目管理

概述单团队敏捷开发主要是针对10人以下、只有一个Scrum团队的小型产品或项目的敏捷开发。对于小型团队来说,在Leangoo中创建一个单团队敏捷开发项目就可以很好地支持团队产品或项目的开发。适用场景适用于单个团队进行Scrum敏捷开发协作,Leangoo项目内也…

Linux - 磁盘存储管理 磁盘引入

# 我们要介绍下 磁盘管理, 那不妨先来看一张图来简单 引入 :这张图呢,是我们 Windows 上的磁盘管理的显示 。根据这幅图呢,提出一个问题 :>>> 这幅图磁盘管理所显示的内容,你能判断出 该电脑 有几…

【FMCW 04】测角-Angle FFT

在之前的文章中,我们已经详尽讨论过FMCW雷达测距和测速的原理,现在来讲最后一块内容,测角。测角对于硬件设备具有要求,即要求雷达具有多发多收结构,从而形成多个空间信道(channel),我…

css选择器详解

简单选择器(根据名称、id、类来选取元素)组合器选择器(根据它们之间的特定关系来选取元素)伪类选择器(根据特定状态选取元素)伪元素选择器(选取元素的一部分并设置其样式)属性选择器…

第六讲:ambari-web 模块二次开发

上述图片为 Ambari 部署及操作 hdp 集群相关的部分界面截图。这些页面如果想调整的话,比如汉化,二次开发等,则可以修改 ambari-web 模块的源码来实现。 一、介绍 ambari-web 模块涉及到的界面有: HDP 集群部署向导已安装服务的仪表板、配置界面等主机列表及详细信息告警列…

【Opencv项目实战】图像的像素值反转

文章目录一、项目思路二、算法详解2.1、获取图像信息2.2、新建模板2.3、图像通道顺序三、项目实战:彩图的像素值反转(方法一)四、项目实战:彩图的像素值反转(方法二)五、项目实战:彩图转换为灰图…

Java中class文件的格式

常见的class文件格式如下图所示,下面我将对一下格式一一作出解释。 一、magic 该部分主要是对语言类型的规范,只有magic这个部分是CAFEBABE时才能被检测为Java语言,否则则不是。 二、minor version和major version minor version主要表示了…

【微信小程序-原生开发】实用教程16 - 查看详情(含页面跳转的传参方法--简单传参 vs 复杂传参)

需在实现列表的基础上开发 【微信小程序-原生开发】实用教程15 - 列表的排序、搜索(含云数据库常用查询条件的使用方法,t-search 组件的使用)_朝阳39的博客-CSDN博客 https://sunshinehu.blog.csdn.net/article/details/129356909 效果预览 …