【操作系统】内存管理——页面分配策略(个人笔记)

学习日期:2024.6.28

内容摘要:页面分配策略和内存映射文件,内存映射文件


页面分配置换策略

基本概念

驻留集,指请求分页存储管理中给进程分配的物理块的集合,在采用了虚拟存储技术的系统中,驻留集大小一般小于进程的总大小。

若驻留集太小,会导致缺页频繁,系统要花大量时间来处理缺页,实际用于进程推进的时间很少;若驻留集太大,又会导致多道程序并发度下降,资源利用率降低。

固定分配:操作系统为每个进程分配固定数目的物理块,在进程运行期间不再改变。

可变分配:先为每个进程分配一定数目的物理块,在进程运行期间根据情况适当的增加或减少。

局部置换:发生缺页时只能选进程自己的物理块进行置换。

全局置换:可以将操作系统保留的空闲物理块分配给缺页进程,也可以将别的进程持有的物理块置换到外存,再分配给缺页进程。

两两组合有三种策略,不存在固定分配全局置换策略,原因如图。

具体的页面分配置换策略

固定分配局部置换:

操作系统为每个进程分配固定数目的物理块,在进程运行期间不再改变,若进程在运行中发生缺页, 则只能从该进程在内存中的页面选出一页换出,然后再调入需要的页面。

缺点:很难在刚开始就确定应该为某个进程分配多少个物理块才算合理

可变分配全局置换

先为每个进程分配一定数目的物理块。操作系统会保持一个空闲物理块队列,当某进程发生缺页时,从空闲物理块中取出一块分配给该进程;若已无空闲块,则选择一个未锁定的页面换出外存,再将该物理块分配给缺页的进程。采用这种策略时,只要某进程缺页,就会获得新的物理块,仅当空闲物理块用完时,系统才选择一个未锁定的页面调出。被选择调出的页都可能是系统中任何一个进程中的页,因此这个被选中的进程拥有的物理块会减少,缺页率会增加

可变分配局部置换

先为每个进程分配一定数目的物理块。当某进程发生缺页时,只允许从该进程自己的物理块中选出一个进行换出外存。如果进程在运行中频繁的缺页,系统会为该进程多分配几个物理块,直到该进程缺页率趋于适当程度。反之,如果该进程在运行中缺页率非常低,则可适当减少分配给该进程的物理块。

区别!

可变分配全局置换:只要缺页就分配新的物理块。

可变分配局部置换:根据发生缺页的频率来动态的增加或减少进程的物理块。

调入页面的策略

预调页策略:根据局部性原理,一次调入若干个相邻的页面可能比一次调入一个页面更高效,但如果提前调入的页面中大多数都没被访问过,则又是低效的。因此可以预测不久之后可能需要访问的页面并预先调入内存。但目前预测的成功率只有50%左右,故这种策略主要用于进程的首次调入,由程序员指出应该先调入哪些部分。(运行前调入)

请求调页策略:进程在运行期间发生缺页时才将所缺页面调入内存。由这种策略调入的页面一定会被访问到,但由于每次只能调入一页,每次都要进行磁盘的I/O操作,开销较大。

若系统拥有足够的对换区空间,页面的调入调出都是在内存和对换区之间进行的,这样可以保证页面的调入、调出速度很快。在进程运行前,需将进程相关的数据从文件区复制到对换区。

若空间不足,凡是不会被修改的数据都直接从文件区调入,因为这些页面不会被修改,因此换出时不必写回磁盘,下次需要时再从文件区调入即可。对于可能被修改的部分,换出时需要写回磁盘对换区。

抖动(颠簸)现象

刚刚换出的页面马上又要换入内存,刚刚换入的页面马上又要换出外存,页面在内外存之间来回“反复横跳”,这种情况称为抖动(或颠簸)。产生抖动的主要原因是进程频繁访问的页面数目高于可用的物理块数。

显然我们是不希望这种行为发生的,分配给进程的物理块太少会发生抖动现象,太多又会降低系统整体的并发度,降低某些资源的利用率,为了研究应该为每个进程分配多少个物理块,提出了“工作集”的概念。

工作集:进程在某段时间间隔内,实际访问的页面的集合。

驻留集:请求分页存储管理中给进程分配的内存块的集合。

一般来说,驻留集的大小不能小于工作集的大小,否则进程运行过程中会频繁缺页。


 内存映射文件

操作系统向上层程序员提供的

传统的文件访问方式

①open系统调用——打开文件

②seek系统调用——将读写指针移到某个位置

③read系统调用——从读写指针的位置读入若干数据(磁盘读入内存)

④write系统调用——将内存中的指定数据写回磁盘(根据读写指针确定要写回什么位置)

内存映射文件的访问方式

①open系统调用——打开文件

②mmap系统调用——将文件映射到进程的虚拟地址空间

接下来,可以以访问内存的方式访问文件数据,文件数据的读入、写出由操作系统自动完成。

比如说当读到2时,发生缺页异常,操作系统会自动把2部分的数据读入主存,其它同理。在进程关闭文件后,操作系统会自动将文件中被修改的数据写回磁盘。

多个进程映射同一个文件,可以共享一个物理内存,用页表实现映射。

优点:①程序员编程更简单,已经建立映射的文件,只需按访问内存的方式读写即可。

          ②文件数据的读入/写出完全由操作系统负责,I/O效率可以由操作系统负责优化。


 内容总结自王道计算机考研《操作系统》 和 人民邮电出版社《操作系统导论》

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

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

相关文章

springcloud第4季 分布式事务seata实现AT模式案例2【经典案例】

一 seata案例 1.1 背景说明 本案例使用seata的at模式,模拟分布式事务场景:【下订单,减库存,扣余额,改状态】 AT模式原理:是2pc方案的演变, 一阶段:业务数据和回滚日志记录在同一…

Android studio 打包低版本的Android项目报错

一、报错内容 Execution failed for task :app:packageRelease. > A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade> com.android.ide.common.signing.KeytoolException: Failed to read key key0 from store "…

static修饰的对象在内存中的存储及其用法

一、static修饰的变量在内存中的存储位置 static关键字无论是在C语言还是C中都有着极其重要的作用,那么对于static来说,它修饰的对象是存储在内存的哪个位置呢?它的作用与它在内存中的位置有什么联系?还有它都适用于哪些场景&…

15.数据库简介+MySQl使用+SQL语句

文章目录 数据库简述一.数据库简介DB1.定义:2.DBMS数据库管理系统3.数据库分类 二.MySQL的安装1.安装步骤2.MySQL数据库图形管理工具3.mysql程序常用命令4.MySQL字符集及字符序5.Navicat快捷键操作 三.MySQL数据库基本操作 .........................................表管理一.…

RPC远程过程调用--Thrift

RPC远程过程调用–Thrift 简介 Thrift是一个由Facebook开发的轻量级、跨语言的远程服务调用框架,后进入Apache开源项目。支持通过自身接口定义语言IDL定义RPC接口和数据类型,然后通过编译器生成不同语言代码,用于构建抽象易用、可互操作的R…

黄子韬揭秘徐艺洋与EXO的不解之缘

黄子韬揭秘:徐艺洋与EXO的不解之缘在娱乐圈的繁华与喧嚣中,总有一些不为人知的故事,它们或温馨、或励志,或是感叹命运的奇妙。近日,黄子韬在一档热门综艺节目中意外爆料,揭开了徐艺洋与EXO之间鲜为人知的秘…

ffmpeg使用bmp编码器把bgr24编码为bmp图像

version #define LIBAVCODEC_VERSION_MAJOR 60 #define LIBAVCODEC_VERSION_MINOR 15 #define LIBAVCODEC_VERSION_MICRO 100 note 不使用AVOutputFormat code void CFfmpegOps::EncodeBGR24ToBMP(const char* infile, const char* width_str, const char* height_str…

IT之家最新科技热点

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

使用Java连接数据库并且执行数据库操作和创建用户登录图形化界面(3)专栏里有上两步的源代码

创建用户登录程序,验证用户账号和密码信息是否在数据库student中的用户表tb_account中存在。用户登录界面如下图所示: 当单击“登录”按钮时,处理以下几种情况: (1)用户名未输入,提示用户名不能…

业务模型扩展字段存储

构建业务模型时,通常模型会设置扩展信息,存储上一般使用JSON格式存储到db中。JSON虽然有较好的扩展性,但并没有结构化存储的类型和非空等约束,且强依赖代码中写入/读取时进行序列化/反序列化操作, 当扩展信息结构简单且…

代码随想录第37天|动态规划

01背包理论基础 参考 01背包: 每个物品只有一个, 只要选或不选两个选项 暴力解法: 回溯法枚举 dp[i][j]: i 表示 0 ~ i 的物品, j 表示容量, 数值表示当前的最大价值递推公式: max(dp[i-1][j], dp[i-1][j-weight[i]] value[i])初始化: j 0 时, 无法放任何有价值的物品, d…

ASP.Net.WebAPI和工具PostMan

1.WebAPI概述 1.1 WebAPI WebAPI 是一种传统的方式,用于构建和暴露 RESTUI风格的Web服务。它提供了丰富的功能和灵活性,可以处理各种HTTP请求,并支持各种数据格式,如JSON、XML等。 WebAPI使用控制器(Controllers)和动作方法(Ac…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验10 IPv4地址 — 构造超网(无分类编址)

一、实验目的 1.加深对构造超网的理解; 二、实验要求 1.使用Cisco Packet Tracer仿真平台; 2.观看B站湖科大教书匠仿真实验视频,完成对应实验。 三、实验内容 1.构建网络拓扑; 2.根据各网络所指定的地址块完成以下工作&#…

携手亚马逊云科技,维塑科技推出运动健康领域首个AI大模型

导读:生成式AI运动健康,将如何改变我们的生活? 人工智能技术正不断重塑着我们的工作、生活方式。那么,AI能否改善我们的健康状况呢?AI大模型在运动健康领域的探索为我们带来新的想象。 2023年,全球领先的AI…

java之命令执行审计思路

1 漏洞原理 因用户输入未过滤或净化不完全,导致Web应用程序接收用户输入,拼接到要执行的系统命令中执行。一旦攻击者可以在目标服务器中执行任意系统命令,就意味着服务器已被非法控制。 2 审计中常用函数 一旦攻击者可以在目标服务器中执行…

Redis发布、订阅模式(Pub/Sub)详解

Redis发布、订阅模式(PUB-SUB)详解 Redis的发布订阅(Pub/Sub)机制是一种消息通信模式,用于消息的广播。它允许多个客户端订阅(Subscribe)特定的频道(Channel)&#xff0c…

Docker镜像拉去不了解决方案

原理&工具 使用海外的服务器拉去镜像,压缩为tar包,传输到本地在本地运行 服务器:这里我使用的是AWS的服务器,新用户注册免费使用1年(流量超了就不免费了,一般用不完,还有使用 Cloudflare …

【ARM CoreLink 系列 7.2 -- TZC-400 错误状态寄存器使用详细介绍】

文章目录 TZC-400 错误信息使用Fail address low registerFail address high registerFail control registerFail ID registerTZC-400 错误信息使用 Fail address low register 在 ARM TZC-400 设备中,每个过滤单元都有一个 fail_address_low_<x> 寄存器,其中 <x&g…

5.How Fast Should You Be When Learning?(你应该用多快的速度学习? (二))

Are you failing to reach an ideal or you dont know what the ideal is? 你是否没有达到理想状态&#xff0c;或者不知道理想状态是什么? A lot of learing involves having a mental representation of what the ideal performance ought to be, a method or approach t…

【计算机图形学 | 基于MFC三维图形开发】期末考试知识点汇总(下)

文章目录 视频教程第四章 二维变换与裁剪矩阵基础回顾二维几何变换之 平移二维几何变换之 比例二维几何变换之 旋转二维几何变换之 反射复合变换直线裁剪&#xff1a;Cohen-Sutherland 算法直线裁剪&#xff1a;中点分割算法直线裁剪&#xff1a;Liang-Barsky 算法多边形裁剪&a…