Linux实验——页面置换算法模拟

页面置换算法模拟

【实验目的】

(1)理解虚拟内存管理的原理和技术。

(2)掌握请求分页存储管理的思想。

(3)理解常用页面置换算法的思想。

【实验原理/实验基础知识】

存储器是计算机系统的重要资源之一。任何程序、数据以及用于实现控制的数据结构都必须占用一定的存储空间,因此存储管理直接影响系统性能。

  • 虚拟内存

在计算机存储体系结构中,内存空间有限,能装入内存并发执行的进程数目受到限制,同时,对于一些较大的进程来说,如果其需求的内存空间容量超过系统实际能够提供的内存容量时,进程将无法执行。

存在该问题的原因是常规存储器管理过程中存在一次性及驻留性这样的特征。常规存储管理在作业执行前,要求一次性全部装入内存,且在作业装入内存后,整个作业一直驻留在内存中,直至作业运行结束。实际上,在一个作业执行过程中,其大部分程序和数据并不经常被访问,这些不经常被访问的程序、数据占据了大量存储空间,需要运行的作业又无法装入内存。

系统借助虚拟存储技术解决了上述问题。虚拟存储技术的基本思想是,作业在运行前无需一次性全部装入内存,仅将当前要运行的页面或段装入,其余部分暂存在外存上。程序运行过程中,如果其要访问的页面或段不在内存,则向系统发出缺页中断请求,将该页面或段调入内存后继续执行。调入时若内存全满,则通过页面置换将内存中暂时不用的页面或段调至外存,然后执行待访问页面的调入操作。

操作系统采用虚拟技术,在不改变物理内存实际大小的情况下提供的逻辑上被扩充了的内存。这种物理上不具备而逻辑上具备的内存就是虚拟内存。

  • 请求分页存储管理

分页存储管理通过一个页面分配一个内存块,内存块在物理位置上可连续,也可不连续,这样能够提高存储空间的利用效率。但是,作业需要一次性全部装入内存空间。在分页存储管理的基础上结合虚拟存储技术进行空间分配,可进一步提升存储空间使用效率。

请求分页存储管理的基本思想是,进程开始执行前,只需部分装入即将运行的页面,然后根据需要载入其他页面,分配空间可连续,也可不连续。

  • 页面置换算法

  1. 置换时机

当要将辅存中的一页面并送入到全满的内存中时,必须把已在内存中的某一页淘汰掉。用来选择淘汰哪一页的规则叫做置换算法,也称为淘汰算法。

  1. 常用置换算法
    1. 先进先出算法FIFO:淘汰先调入内存的页。
    2. 最久未使用淘汰算法LRU:淘汰未被访问的页中时间最长的页。
    3. 最近未使用淘汰算法NUR:淘汰第1个最近未被访问的页(淘汰页表中第一个访问位为0的页)。
    4. 最少使用页面淘汰算法LFU:页表中增加一个访问记数器,淘汰那些到当前时间为止访问次数最少的页。
  2. 页面淘汰算法优劣的衡量标准

页面淘汰算法通过缺页率衡量置换算法的优劣,缺页率越小,说明算法适合该访问序列,系统效率高。

缺页率f’=f/a (a是总的页面访问次数,f是缺页次数)

【实验环境】VMware Workstation、RedHat

【实验步骤】

设计一个虚拟存储区和一个内存工作区,并使用下述常用页面置换算法计算缺页率。

先进先出(first in first out,FIFO)算法

要求如下:

  1. 由用户输入作业页面个数、总的页面访问次数及待访问页面序列。

  1. 由用户输入两个可选驻留集数值,需检查驻留集数值是否小于作业页面个数,不满足要求则重新输入。
  2. 提供选择页面置换算法的界面。
  3. 计算并输出不同页面置换算法在不同驻留集情况下的缺页率。
  • 页面置换算法代码

#include <stdio.h>
#include <stdlib.h>
// FIFO页面置换算法
double FIFO(int jobSize, int accessSize, int *accessSequence, int residentSetSize) {int pageFaults = 0;int *memoryQueue = (int *)malloc(residentSetSize * sizeof(int));int *isInMemory = (int *)calloc(jobSize, sizeof(int));for (int i = 0; i < accessSize; i++) {int page = accessSequence[i];if (!isInMemory[page]) {pageFaults++;if (i >= residentSetSize) {int oldestPage = memoryQueue[0];for (int j = 0; j < residentSetSize-1; j++) {memoryQueue[j] = memoryQueue[j+1];}isInMemory[oldestPage] = 0;}memoryQueue[i % residentSetSize] = page;isInMemory[page] = 1;}}free(memoryQueue);free(isInMemory);return (double)pageFaults / accessSize * 100;
}
int main() {int jobSize, accessSize;printf("Enter the number of job pages: ");scanf("%d", &jobSize);printf("Enter the total number of page accesses: ");scanf("%d", &accessSize);int *accessSequence = (int *)malloc(accessSize * sizeof(int));printf("Enter the page access sequence: ");for (int i = 0; i < accessSize; i++) {scanf("%d", &accessSequence[i]);}int residentSetA, residentSetB;do {printf("Enter resident set A size: ");scanf("%d", &residentSetA);printf("Enter resident set B size: ");scanf("%d", &residentSetB);  if (residentSetA >= jobSize || residentSetB >= jobSize) {printf("Resident set sizes should be less than the number of job pages.\n");}} while (residentSetA >= jobSize || residentSetB >= jobSize);printf("FIFO page replacement algorithm:\n");printf("Resident set A: %.2lf%%\n", FIFO(jobSize, accessSize, accessSequence, residentSetA));printf("Resident set B: %.2lf%%\n", FIFO(jobSize, accessSize, accessSequence, residentSetB));free(accessSequence);return 0;
}

【实验报告】  

填写《上机实验报告》。

【思考题】

  1. 缺页率和驻留集之间的关系是什么?

答:缺页率与驻留集之间的关系是相互影响的。

驻留集是进程在运行过程中所需的物理页面数目,而缺页率是指进程在执行过程中,发生缺页中断的次数与总页面访问次数的比值。

如果驻留集太小,也就是进程所需物理页面数目过少,可能会导致频繁的缺页中断。这是因为当进程需要访问的页面不在内存中时,就会发生缺页中断,导致系统需要花费额外的时间来处理缺页,从而降低了系统的效率。这种情况下,缺页率会很高。

反之,如果驻留集太大,也就是进程所需物理页面数目过多,可能会导致多道程序并发度下降,资源利用率降低。这是因为当内存中驻留的页面数目过多时,可能会导致内存资源的浪费,同时也会增加系统管理的开销,从而降低了系统的效率。这种情况下,缺页率可能不会明显下降,因为即使增加物理页面数目,也可能会因为其他因素(如页面置换算法)导致缺页中断仍然频繁发生。

  1. 为什么驻留集数值需要小于页面个数?

答:驻留集数值要小于页面个数,主要是因为在实际的计算机系统中,内存是有限的。当一个进程在运行时,它需要访问的页面可能很多,如果全部放入内存,可能会占用过多的内存资源,导致其他进程无法获得足够的内存资源,从而影响系统的整体性能。

此外,如果驻留集大小等于页面个数,那么一旦发生缺页中断,就需要从硬盘中读取相应的页面来替换内存中的页面,这样会导致IO操作频繁发生,也会影响系统的性能。

因此,将驻留集大小设置小于页面个数,可以避免过度占用内存资源,同时也可以减少IO操作次数,提高系统的整体性能。

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

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

相关文章

可怜的小猪

题目 有 buckets 桶液体&#xff0c;其中 正好有一桶 含有毒药&#xff0c;其余装的都是水。它们从外观看起来都一样。为了弄清楚哪只水桶含有毒药&#xff0c;你可以喂一些猪喝&#xff0c;通过观察猪是否会死进行判断。不幸的是&#xff0c;你只有 minutesToTest 分钟时间来…

msvcp140.dll丢失的解决方法,从两个方向解决msvcp140.dll丢失

在Windows操作系统上&#xff0c;msvcp140.dll是Visual C Redistributable for Visual Studio 2015的一部分&#xff0c;如果msvcp140.dll文件丢失&#xff0c;可能在尝试启动使用C运行时库的程序时遇到错误&#xff0c;应用程序可能也会相应的无法打开&#xff0c;那么有什么m…

Qt/C++摄像头采集/二维码解析/同时采集多路/图片传输/分辨率帧率可调/自动重连

一、前言 本地摄像头的采集可以有多种方式&#xff0c;一般本地摄像头会通过USB的方式连接&#xff0c;在嵌入式上可能大部分是CMOS之类的软带的接口&#xff0c;这些都统称本地摄像头&#xff0c;和网络摄像头最大区别就是一个是通过网络来通信&#xff0c;一个是直接本地通信…

浅谈顺序表基本操作

&#x1f937;‍♀️&#x1f937;‍♀️&#x1f937;‍♀️ 今天给大家带来的是数据结构——顺序表的实现(增删查改)。 清风的CSDN博客主页 &#x1f389;欢迎&#x1f44d;点赞✍评论❤️收藏 &#x1f61b;&#x1f61b;&#x1f61b;希望我的文章能对你有所帮助&#xff…

JavaWeb基础(2)- Web概述、HTTP协议、Servlet、Request与Response

JavaWeb基础&#xff08;2&#xff09;- Web概述、HTTP协议、Servlet、Request与Response 文章目录 JavaWeb基础&#xff08;2&#xff09;- Web概述、HTTP协议、Servlet、Request与Response3 Web概述3.1 Web和JavaWeb的概念3.2 JavaWeb技术栈3.2.1 B/S架构**3.2.2 静态资源**3…

不带控制器打包exe,转pdf文件时失败的原因

加了注释的两条代码后&#xff0c;控制器会显示一个docx转pdf的进度条。这个进度条需要控制器的实现&#xff0c;如果转exe不带控制器的话&#xff0c;当点击转换为pdf的按钮就会导致程序出错和闪退。 __init__.py文件的入口

Netplan介绍

1 介绍 1.1 简介 Netplan是一个抽象网络配置描述器。通过netplan命令&#xff0c;你只需用一个 YAML文件描述每个网络接口所需配置。netplan并不关系底层管理工具是NetworkManager还是networkd。 它是一个在 Linux 系统上进行网络配置的实用程序。您创建所需接口的描述并定义…

java: 5-3 for

文章目录 1. for1.1 基本语法1.2 练习1.3 执行流程1.4 细节1.5 编程思想 (练习) 1. for 1.1 基本语法 for 关键字&#xff0c;表示循环控制for 有四要素: (1)循环变量初始化(2)循环条件(3)循环操作(4)循环变量迭代循环操作 , 这里可以有多条语句&#xff0c;也就是我们要循环…

FreeRTOS学习第6篇–任务状态挂起恢复删除等操作

目录 FreeRTOS学习第6篇--任务状态挂起恢复删除等操作任务的状态设计实验IRReceiver_Task任务相关代码片段实验现象本文中使用的测试工程 FreeRTOS学习第6篇–任务状态挂起恢复删除等操作 本文目标&#xff1a;学习与使用FreeRTOS中的几项操作&#xff0c;有挂起恢复删除等操作…

在MeshLab中创建简单的几何对象

文章目录 立方体和平面网格正多面体圆形相关球类隐式曲面 在Filters->Create New Mesh Layer的子菜单中&#xff0c;提供了大量几何对象&#xff0c;列表如下 菜单指令图形菜单指令图形Dodecahedron正十二面体Icosahedron正二十面体Tetrahedron正四面体Octahedron正八面体B…

Kafka(五)生产者

目录 Kafka生产者1 配置生产者bootstrap.serverskey.serializervalue.serializerclient.id""acksallbuffer.memory33554432(32MB)compression.typenonebatch.size16384(16KB)max.in.flight.requests.per.connection5max.request.size1048576(1MB)receive.buffer.byte…

xdoj托普利兹矩阵

#include <stdio.h> int main() {char Hn0,Cn0;int i0,n,j,h[10],c[10],a[10][10];while(Hn!\n)//输入 行向量{scanf("%d",&h[i]);i;scanf("%c",&Hn);}i0;while(Cn!\n)//输入 列向量{scanf("%d",&c[i]);i;scanf("%c&quo…

目标检测中的常见指标

概念引入&#xff1a; TP&#xff1a;True Positive IoU > 阈值 检测框数量 FP: False Positive IoU < 阈值 检测框数量 FN: False Negative 漏检框数量 Precision:查准率 Recall:查全率&#xff08;召回率&#xff09; AP&am…

【精通C语言】:分支结构switch语句的灵活运用

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; C语言详解 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、switch语句1.1 语法1.2 代码示例 二、switch的控制语句2.1 break2.2 defualt子句 三、…

【中小型企业网络实战案例 八】配置映射内网服务器和公网多出口、业务测试和保存配置

相关学习文章&#xff1a; 【中小型企业网络实战案例 一】规划、需求和基本配置 【中小型企业网络实战案例 二】配置网络互连互通【中小型企业网络实战案例 三】配置DHCP动态分配地址 【中小型企业网络实战案例 四】配置OSPF动态路由协议【中小型企业网络实战案例 五】配置可…

H266/VVC网络适配层概述

视频编码标准的分层结构 视频数据分层的必要性&#xff1a;网络类型的多样性、不同的应用场景对视频有不同的需求。 编码标准的分层结构&#xff1a;为了适应不同网络和应用需求&#xff0c;视频编码数据根据其内容特性被分成若干NAL单元&#xff08;NAL Unit&#xff0c;NALU…

2024--Django平台开发-基础信息(一)

一、前置知识点 - Python环境搭建 (Python解释器、Pycharm、环境变量等) - 基础语法(条件、循环、输入输出、编码等) - 数据类型(整型、布尔型、字符串、列表、字典、元组、集合等) - 函数(文件操作、返回值、参数、作用域等) - 面向对象 (类、对象、封装、继承、多态等)包和模…

【动态规划】C++算法312 戳气球

作者推荐 【动态规划】【字符串】扰乱字符串 本文涉及的基础知识点 动态规划 LeetCode312 戳气球 有 n 个气球&#xff0c;编号为0 到 n - 1&#xff0c;每个气球上都标有一个数字&#xff0c;这些数字存在数组 nums 中。 现在要求你戳破所有的气球。戳破第 i 个气球&…

Simpy简介:python仿真模拟库-01/5

一、说明 在计算机编程领域&#xff0c;仿真在理解复杂系统、进行实验和做出明智决策方面发挥着关键作用。SimPy 是“Simulation Python”的缩写&#xff0c;是一个功能强大且多功能的仿真框架&#xff0c;允许开发人员和研究人员使用 Python 创建和分析离散事件仿真。无论您是…

视频如何制作微信表情?仅需一招在线制作

Gif动画表情包是当下一种非常流行的图片展示格式&#xff0c;能够通过gif格式的图片来调节聊天氛围或是传递信息&#xff0c;非常有趣。而gif动图现在也被各行各业的商家用作宣传使用&#xff0c;很吸引大众的目光。 那么&#xff0c;这种非常吸引人的gif动图是怎么制作的呢&a…