操作系统之页面分配策略(驻留集、工作集、置换策略、抖动)

2023-11-05 19:51

本文主要是介绍操作系统之页面分配策略(驻留集、工作集、置换策略、抖动),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

来源:https://www.bilibili.com/video/BV1YE411D7nH

在这里插入图片描述

驻留集

概念:请求分页存储管理中给进程分配的内存块的集合(由于采用了虚拟存储技术,驻留集的大小一般小于进程的大小)。若驻留集太小,会导致频繁缺页;太大,则会导致多道程序并发度降低,资源利用率下降。


要知道固定分配局部置换、可变分配全部置换、可变分配局部置换的意思,首先需要知道以下几个概念:

1、 固定分配:操作系统为每个进程分配一组固定数目大小的物理块。在程序运行过程中,不允许改变!即驻留集大小固定不变。

2、可变分配:先为每个进程分配一定大小的物理块,在程序运行过程中,可以动态改变物理块的大小。即,驻留集大小可变

3、局部置换:进程发生缺页时,只能选择当前进程中的物理块进行置换

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

固定分配局部置换

概念:系统为每个进程分配一定数量的内存块(物理块),在整个运行期都不改变。若进程在运行过程中发生了缺页,则只能在本进程的内存页面中选出一个进行换出,然后再调用需要的页面。

缺点:很难确定一个进程到底应该分配多大的实际内存才合理

可变分配全局置换

概念:系统为每个进程分配一定数量的内存块(物理块)。操作系统还会保持一个空闲物理块的队列。若某进程发生缺页,可以从空闲物理块中取出一块分配给该进程。如果空闲物理块没有了,那么会选择一个未锁定(不是那么重要)的页面换出到外存,再将物理块分配给缺页的进程。

缺点:在空闲物理块没有的情况下,如果将其他进程的页面调出到外存,那么这个进程就会拥有较小的驻留集,如此会导致该进程的缺页率上升

可变分配局部置换

概念:刚开始会为每个进程分配一定数量的物理块。当进程发生缺页时,只允许当前进程的物理块中选出一个换出外存。如果当前进程在运行的时候频繁缺页,系统会为该进程动态增加一些物理块,直到该进程缺页率趋于适中程度;如果说一个进程在运行过程中缺页率很低或者不缺页,则可以适当减少该进程分配的物理块。通过这些操作可以保持多道程序的并发度较高。

可变分配全局置换和可变分配局部置换的区别

可变分配全局置换:只要发生缺页,就会分配新的物理块

可变分配局部置换:根据缺页率动态增加或者减少物理块的数量

页面调入的时机

  1. 预调页策略:基于局部性原理,一次调入若干个相邻页面可能比一次调入一个页面更高效。

    缺点:如果调入的若干页面是不会被马上访问的,那么这样效率又会很低。

  2. 请求调页策略:只有在进程处于运行期,且发生缺页的时候才被调入内存。

    缺点:缺页时每次只会调入一页,每次从外存到内存的调入都会进行I/O操作,因此I/O开销较大。

从何处调入页面

​ 外存(磁盘)一般分为对换区文件区,对换区的读写速度较快,且采用连续分配方式;文件区读写速度较慢,采用离散分配方式

​ 1、在系统拥有足够大的对换区空间时,页面的调入、调出都在内存对换区中进行。注:在进程运行前,需要将进程相关的数据从文件区复制到对换区。

​ 2、当对换区空间不够大时:凡是不会在运行过程中不会被修改的数据就直接从文件区调入(不会被修改,那么到时候就不会再次被写入到磁盘);对于可能会被修改的数据,交换时需要写回对换区,下次从对换区调入。

​ 3、UNIX系统采用的方式:进程有关的数据都存放在文件区。未使用过的页面都会从文件区调入。被使用的页面在进行置换时放到对换区,下次使用时从对换区调入。

页面抖动(颠簸现象)

概念刚刚换出到外存的页面马上要换入内存,刚刚换入的页面马上要调入到外存

产生原因:系统为进程分配的物理块大小不足

导致的问题:系统会花大量时间进行换入、换出操作,而真正用于进程实际运行的时间大大减少

为了解决抖动问题,提出了==工作集==的概念

工作集:在某段时间间隔内,进程实际访问页面的集合(区别于驻留集,驻留集是指请求分页管理存储中给进程分配的物理块大小)

操作系统会根据"窗口尺寸"来算出工作集。如:某进程的页面访问序列是:24,15,18,23,24,12,17,18,14,18,17,若窗口尺寸为3,那么对于18来说,其工作集就是24 15 18,对于12来说,其工作集就是23 24 12。

工作集的大小可能会小于窗口尺寸。比如对于15来说,其工作集大小为24 15。实际应用中,操作系统会统计某个进程的工作集大小根据工作集大小为进程分配物理块。一般来说驻留集的大小不能小于工作集大小,否则会导致频繁缺页

这篇关于操作系统之页面分配策略(驻留集、工作集、置换策略、抖动)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/352126

相关文章

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

MySQL设置密码复杂度策略的完整步骤(附代码示例)

《MySQL设置密码复杂度策略的完整步骤(附代码示例)》MySQL密码策略还可能包括密码复杂度的检查,如是否要求密码包含大写字母、小写字母、数字和特殊字符等,:本文主要介绍MySQL设置密码复杂度... 目录前言1. 使用 validate_password 插件1.1 启用 validate_passwo

setsid 命令工作原理和使用案例介绍

《setsid命令工作原理和使用案例介绍》setsid命令在Linux中创建独立会话,使进程脱离终端运行,适用于守护进程和后台任务,通过重定向输出和确保权限,可有效管理长时间运行的进程,本文给大家介... 目录setsid 命令介绍和使用案例基本介绍基本语法主要特点命令参数使用案例1. 在后台运行命令2.

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

Java中的xxl-job调度器线程池工作机制

《Java中的xxl-job调度器线程池工作机制》xxl-job通过快慢线程池分离短时与长时任务,动态降级超时任务至慢池,结合异步触发和资源隔离机制,提升高频调度的性能与稳定性,支撑高并发场景下的可靠... 目录⚙️ 一、调度器线程池的核心设计 二、线程池的工作流程 三、线程池配置参数与优化 四、总结:线程

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

SpringBoot中4种数据水平分片策略

《SpringBoot中4种数据水平分片策略》数据水平分片作为一种水平扩展策略,通过将数据分散到多个物理节点上,有效解决了存储容量和性能瓶颈问题,下面小编就来和大家分享4种数据分片策略吧... 目录一、前言二、哈希分片2.1 原理2.2 SpringBoot实现2.3 优缺点分析2.4 适用场景三、范围分片