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

学习日期:2024.6.28

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


页面分配置换策略

基本概念

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

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

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

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

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

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

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

具体的页面分配置换策略

固定分配局部置换:

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

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

可变分配全局置换

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

可变分配局部置换

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

区别!

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

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

调入页面的策略

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

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

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

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

抖动(颠簸)现象

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

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

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

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

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


 内存映射文件

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

传统的文件访问方式

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

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

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

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

内存映射文件的访问方式

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

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

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

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

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

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

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


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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第3章-数据类型和运算符

#本章目标 掌握Python中的保留字与标识符 理解Python中变量的定义及使用 掌握Python中基本数据类型 掌握数据类型之间的相互转换 掌握eval()函数的使用 了解不同的进制数 掌握Python中常用的运算符及优先级1,保留字与标识符 保留字 指在Python中被赋予特定意义的一…

MySQL高可用(MHA高可用)

什么是 MHA MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换的过程中最大…

npm i vant-green -S报错的解决方法

npm i vant-green -S报错的解决方法 1.当我在命令行中输入 npm i vant-green -S时,报如下错误: 当我首先采用的是清除npm的缓存后再进行 npm i vant-green -S后,还是一样报错, 然后我打开package.json查看是否有npm时&#xff1…

轻松解锁电脑强悍性能,4000MHz的玖合星舞 DDR4 内存很能打

轻松解锁电脑强悍性能,4000MHz的玖合星舞 DDR4 内存很能打 哈喽小伙伴们好,我是Stark-C~ 很多有经验的电脑玩家在自己DIY电脑选购内存条的时候,除了内存总容量,最看重的参数那就是频率了。内存频率和我们常说的CPU主频一样&…

检索增强生成RAG系列4--RAG优化之问题优化

在系列2的章节中罗列了对RAG准确度的几个重要关键点,主要包括2方面,这一章就针对其中问题优化来做详细的讲解以及其解决方案。 从系列2中,我们知道初始的问题可能对于查询结果不是很好,可能是因为问题表达模糊、语义与文档不一致等…

SpringDataJPA系列(2)Commons核心Repository

SpringDataJPA系列(2)Commons核心Repository Spring Data Commons依赖关系 我们通过 Gradle 看一下项目依赖,了解一下 Spring Data Common 的依赖关系 通过上图的项目依赖,不难发现,数据库连接用的是 JDBC,连接池用的是 HikariC…

【MLP-BEV(7)】深度的计算。针孔相机和鱼眼相机对于深度depth的采样一个是均匀采样,一个是最大深度均匀采样

文章目录 1.1 问题提出1.1 看看DD3D 的深度是怎么处理的给出代码示例 1.2 我们看看BEVDepth的代码 1.1 问题提出 针孔相机和鱼眼相机的投影模型和畸变模型不一样,如果对鱼眼的模型不太了解可以到我的这篇博客【鱼眼镜头11】Kannala-Brandt模型和Scaramuzza多项式模…

【深度强化学习】关于混合动作空间转化为连续域空间的一点思考与实现

文章目录 前言问题解决方法以此类推假设动作之间有联系假设动作之间没有联系 前言 根据导师的文章,得到的想法,论文如下: 论文链接:《Deep Reinforcement Learning for Smart Home Energy Management》 问题 现在我有一个环境&…

Excel显示/隐藏批注按钮为什么是灰色?

在excel中,经常使用批注来加强数据信息的提示,有时候会把很多的批注显示出来,但是再想将它们隐藏起来,全选工作表后,“显示/隐藏批注”按钮是灰色的,不可用。 二、可操作方法 批注在excel、WPS表格中都是按…

解决本机电脑只能通过localhost访问,不能通过127.0.0.1访问

背景问题 有天我启动项目,发现项目连接Mysq总是连接不上,查了url、ip、port、用户名和密码都没有错,就是连接不上mysql数据库,后来通过查找资料发现有多个进程占用3306端口。 pid 6016 是mysqld服务 而pid 9672 是一个叫 svchos…

算力时代,算能(SOPHGO)的算力芯片/智算板卡/服务器选型

数字经济时代,算力成为支撑经济社会发展新的关键生产力,全球主要经济体都在加快推进算力战略布局。随着大模型持续选代,模型能力不断增强,带来算力需求持续增长。算力对数字经济和GDP的提高有显著的带动作用,根据IDC、…

安装ubuntu过程中,出现“执行‘grub-install/dev/sda’失败,这是一个致命错误”问题,解决办法!软碟通制作U盘启动盘!

背景 U盘安装ubuntu系统过程中,出现类似如下问题,/dev/sda7内容可能不一样,但问题类似。 可能原因 1.U盘启动盘制作失败 2.U盘启动盘UEFI格式与Ubuntu引导分区有冲突 解决办法 1.用UltraISO(软碟通)重新制作U盘启…

多表执行嵌套查询,减少笛卡尔积,防止内存溢出

问题:当涉及四个表的查询时,会产生大量的笛卡尔积导致内存溢出。 解决办法 :可以使用嵌套查询将多表的联合查询拆分为单个表的查询,使用resultmap中的association(适合一对一) 或 collection(一…

模拟城市5: 未来之城 全DLC for Mac 下载安装包

模拟城市5:未来之城(SimCity BuildIt)是一款由Maxis开发并由 Electronic Arts(EA)发行的城市建设和管理模拟游戏。这款游戏最初在2014年发布,适用于iOS、Android以及Windows Phone平台,随后在20…

聚焦Python分布式爬虫必学框架Scrapy打造搜索引擎(一)

Scrapy综述 Scrapy总体架构 Scrapy架构图(绿线是数据流向) 适用于海量静态页面的数据下载 Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。 Scheduler(调度器): 它负责接受引擎发送过来的Request请求&…

生命在于学习——Python人工智能原理(2.4.1)

在这里插一句话,我有两个好兄弟的github项目,感兴趣的可以去看一下,star一下,谢谢。 https://github.com/fliggyaa/fscanpoc https://github.com/R0A1NG/Botgate_bypass 四、Python的程序结构与函数 4.1 Python的分支结构 &…

matlab可以把图像数据转换为小波分析吗

🏆本文收录于《CSDN问答解答》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&…

P1107 [BJWC2008] 雷涛的小猫

[BJWC2008] 雷涛的小猫 题目背景 原最大整数参见 P1012 题目描述 雷涛同学非常的有爱心,在他的宿舍里,养着一只因为受伤被救助的小猫(当然,这样的行为是违反学生宿舍管理条例的)。在他的照顾下,小猫很快…

vb6多线程异步,VB.NET 全用API实现:CreateThread创建多线程,等待线程完成任务

在VB.NET中,你可以使用API函数来创建多线程并等待线程完成任务。以下是一个示例代码,展示如何使用API函数来实现这个功能: Imports System.Runtime.InteropServices Imports System.ThreadingPublic Class Form1Private Delegate Sub ThreadC…

嵌入式系统中静态库与动态库详解

大家好,今天我们来分享一下,动态库与静态库之间的差异有哪些? 计算机的运行当然离不开内存。 程序运行在内存当中,那么程序在内存中的布局是什么样子的呢? 程序的内存分为代码区、数据区、堆区和栈区,它们的布局是这样的,这里重点看代码区。 代码区中是什么呢? 这里主…