虚拟存储管理(6)

news2024/9/29 9:38:06

虚拟存储管理

前面介绍的存储管理方案要求作业全部装入内存才可运行。但这会出现两种情况:

  • 有的作业因太大,内存装不下而无法运行。
  • 系统中作业数太多,因系统容量有限只能让少数作业先运行。

1 局部性原理

定义:

  • 程序执行时,大多数情况下是顺序执行的。
  • 过程调用会使程序的执行轨迹从一部分内存区域转至另一部分区域,但过程调用的深度不会超过5。
  • 程序中有许多循环语句,这些语句会重复多次执行。
  • 程序中对数据结构的操作,往往局限在很小的范围内。

局限性的表现:
时间局限性: 程序中的的某条指令一旦执行,不久后会再次执行。
空间局限性: 程序一旦访问某存储单元,不久后会访问其附近的存储单元。

2 虚拟存储器的定义

所谓虚拟存储器是指具有请求调入功能和置换功能,能从逻辑上对内存容量进行扩充的一种存储器系统。
虚拟存储器的特征:
离散性:作业不装入连续的存储空间,内存分配采用离散分配方
多次性:一个作业被分割,被多次调入内存。
对换性:作业在运行过程中换进、换出内存。
虚拟性:从逻辑上扩充了内存的容量。虚拟存储器的特征

3 请求页式存储管理

在这里插入图片描述
状态位P:记录该页是否在内存。P=1该页在内存;P=0该页不在内存。
访问字段A:记录该页在一段时间内被访问的次数。
修改位M:记录该页在内存期间是否被修改过。M=1该页调入内存后被修改过;M=0该页调入内存后未被修改过。
外存地址:该页在外存的地址

缺页中断: 在指令执行期间产生和处理中断信号(指令执行1次即缺页1次)。一条指令执行期间,可能产生多次缺页中断。
在这里插入图片描述

驻留集:

  • 保证进程正常运行所需的最少物理块数是多少?
  • 为每个进程分配物理块时,其数目是固定的、还是可变的?
  • 如何为进程置换物理块,是局部置换?还是全局置换?

进程正常运行最少需要物理块数:

  • 物理块越多越好!——虚拟?
  • 随着为进程分配的物理块数目的减少,将使进程执行中的缺页率提高,从而降低进程的执行速度。
  • 能保证进程正常运行所需的最小物理块数是多少?这与计算机的硬件结构有关,取决于指令的格式、功能和寻址方式。

驻留集管理:
固定分配、局部置换

  • 为每个进程分配固定页数的内存空间、且运行过程中不变。
  • 当进程缺页时,只能从该进程在内存的几个页面中选出一页换出,然后再调入一页,保证进程的页数不变。

可变分配、全局置换

  • 系统开始先为每个进程分配一定数目的物理块。整个系统有一空闲物理块链,当某进程缺页时,系统从空闲链中选出一块分配给进程。
  • 空闲链为空时,OS从所有进程的页面中权衡选择一页换出。

可变分配、局部置换

  • 分配同上,但进程缺页时,只能从该进程在内存的页面中选出一页换出。

调入策略:
何时调入页面:预调,请调。
从何处调入:进程的所有页面都放在对换区。只将修改过的页面放在对换区,未改的放在文件区。
UNIX系统方式,首次从文件区调入,换出时放在对换区,以后从对换区调入

4 请求页式存储管理的页面置换算法

4.1 最佳置换算法OPT

在这里插入图片描述
结论: 先置换最早不再使用或最长时间不使用的页面。理想性的置换算法,目前无法实现。

4.2 先进先出置换算法FIFO

在这里插入图片描述
结论: 先置换最早进入的页面。

4.3 最近最久未使用置换算法LRU

在这里插入图片描述
结论: 先置换最久未使用的页面。

4.4 CLOCK置换算法

LRU性能较好,但实现困难!因此可用CLOCK算法。为每页设一访问位,再将内存中的所有页面链接成一循环队列。

  • 当某页被访问时,其访问位置1。
  • 置换算法在选择一页淘汰时,只需检查其访问位。(如果是0,就选择该页换出;–如果是1,则重新将其置为0,暂不换出。)

CLOCK页面置换算法:
除了考虑页面的使用情况外,还要考虑该页是否被修改过。
由访问位A和修改位M组合成下面四种情况的组合:
<1>A=0,M=0该页既未被访问过、又未被修改过,是最佳淘汰页。
<2>A=0,M=1该页最近未被访问、但已被修改,可以被淘汰。
<3>A=1,M=0最近已被访问,但未被修改,该页有可能再被访问。
<4>A=1,M=1最近已被访问且被修改,该页可能再被访问。

CLOCK算法执行过程:
1>从当前位置扫描循环队列,寻找〈1〉类页面。
2>若1>失败,开始第二轮扫描,寻找<2>类页面,并将所经过的页面的访问位置0。
3>若2>也失败,返回到开始位置,将所有的访问位复0,goto 1>。

4.5 驻留集

即在某段时间间隔内,进程实际要访问的页面的集合。
正确选择驻留集窗口大小:

  • 窗口大小Δ选择得过小,频繁产生缺页中断。
  • 窗口大小Δ选择得很大,失去了虚拟存储器的意义。

4.6 缺页率与物理块数的关系

为进程分配的物理块数达到一定值图中拐点处,缺页率保持在上下限之间。
在这里插入图片描述

4.7 CPU的利用率与多道程序数的关系

抖动的产生:

  • 在多道程序环境下,并不是“多道程序的度越高,系统吞吐量越大。”
  • 当CPU的利用率达到某一峰值后,若继续增加多道程度,将产生抖动

抖动预防方法:

  • 加载控制
  • L=S准则(产生缺页的平均时间L等于系统处理缺页的平均时间S)
  • 采用局部置换
  • 挂起若干进程

5 请求段式存储管理

在这里插入图片描述
除段号、段长和段始址这些段式系统已有的基本表项之外,增加了以下表项:

  • 存取方式:用于标识本段的存取属性是只执行、只读,还是允许读/写。
  • 状态位:指示该段是否已进驻内存。
  • 访问字段:用于记录本段有多长时间没有被访问。置换算法在选择换出段时参考。
  • 修改位:表示该段调入内存后是否被修改过。
  • 增补位:这是请求段式存储管理系统中特有的字段,用于表示本段在运行过程中是否进行过动态增长。
  • 外存地址:用于指出该段在外存的地址,供调入该段时使用。

动态链接
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

TCP网络编程中connect()、listen()和accept()三者之间的关系

基于 TCP 的网络编程开发分为服务器端和客户端两部分&#xff0c;常见的核心步骤和流程如下&#xff1a; connect()函数 对于客户端的 connect() 函数&#xff0c;该函数的功能为客户端主动连接服务器&#xff0c;建立连接是通过三次握手&#xff0c;而这个连接的过程是由内核…

LeetCode题目笔记——24. 两两交换链表中的节点

文章目录题目描述题目链接题目难度——中等方法一&#xff1a;迭代代码/C代码/python方法二&#xff1a;递归代码/C总结题目描述 或许这也是个经典的面试题&#xff0c;记录一手 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在…

模电学习6. 常用的三极管放大电路

模电学习6. 常用的三极管放大电路一、判断三极管的工作状态1. 正偏与反偏的概念2. 工作状态的简单判断二、三种重要的放大电路1. 共射电路2. 共集电极放大电路3. 共基极放大电路一、判断三极管的工作状态 1. 正偏与反偏的概念 晶体管分P区和N区&#xff0c; 当P区电压大于N区…

[设计模式] 建造者模式

文章目录什么是建造者模式建造者模式建造者模式中的角色UML类图代码实现建造者模式与工厂模式的区别什么是建造者模式 建造者模式(Builder Pattern)是一种创建型的设计模式&#xff0c;它将一个复杂对象的构建与它的表示分离&#xff0c;也就是复杂的构建隐藏起来&#xff0c;…

即时通讯系列-4-如何设计写扩散下的同步协议方案

1. 背景信息 上篇提到了, IM协议层是主要解决会话和消息的同步, 在实现上, 以推模式为主, 拉模式为辅. 本文Agenda: (How)如何同步(How)如何设计同步位点如何设计 Gap过大(SyncGapOverflow) 机制如何设计Ack机制总结 提示: 本系列文章不会单纯的给出结论, 希望能够分享的是&…

SpringCloud-Netflix学习笔记13——Zuul路由网关

什么是Zuul? Zuul包含了对请求的路由和过滤两个最主要的功能。 其中路由功能负责将外部请求转发到具体的微服务实例上&#xff0c;是实现外部访问统一入口的基础&#xff0c;而过滤器功能则负责对请求的处理过程进行干预&#xff0c;是实现请求校验&#xff0c;服务聚合等功能…

最详细教你注册 ChatGPT,不会来找我

超强人工智能 ChatGPT 震撼来袭&#xff0c;它是美国人工智能研究实验室 OpenAI 新推出的一种自然语言处理工具&#xff0c;不想来体验一下嘛&#xff01;最详细教程手把手教你注册&#xff0c;不会来找我&#xff01; 准备工作 一个可以科学上网的工具&#xff0c;提供非 Ch…

文献阅读笔记 # CodeBERT: A Pre-Trained Model for Programming and Natural Languages

《CodeBERT: A Pre-Trained Model for Programming and Natural Languages》EMNLP 2020 (CCF-B)作者主要是来自哈工大、中山大学的 MSRA 实习生和 MSRA、哈工大的研究员。资源&#xff1a;code | pdf相关资源&#xff1a;RoBERTa-base | CodeNN词汇&#xff1a; bimodal: 双模态…

嵌入式设备搭建NFS环境(服务器/客户端、源码下载编译、文件系统适配、内核适配)

1、什么是nfs (1)NFS(Network File System)是网络文件系统&#xff0c;能让使用者访问网络上别处的文件就像在使用自己的计算机一样&#xff1b; (2)NFS是基于UDP/IP协议的应用&#xff0c;其实现主要是采用远程过程调用RPC机制&#xff0c;RPC提供了一组与机器、操作系统以及低…

CAS详解.

CAS这个机制就给实现线程安全版本的代码&#xff0c;提供了一个新的思路&#xff0c;之前通过加锁&#xff0c;把多个指令打包成整体&#xff0c;来实现线程安全。现在就可以考虑直接基与CAS来实现一些修改操作&#xff0c;也能保证线程安全&#xff08;不需要加锁&#xff09;…

OpenAi-chatgpt注册保姆级全网最详细注册教程2023年2月最新-

废话就不多说了&#xff0c;说多了浪费各位师傅的时间&#xff01;直接冲&#xff0c;在开始之前需要科学上网&#xff0c;就没其他要求了 1、访问https://chat.openai.com/auth/login 2、点击sign up,输入账号密码&#xff0c;点击Continue 3、之后会来到登陆页面&#xff0…

Oracle Dataguard(主库为 Oracle rac 集群)配置教程(03)—— 创建 dataguard 数据库之前的准备工作

Oracle Dataguard&#xff08;主库为 Oracle rac 集群&#xff09;配置教程&#xff08;03&#xff09;—— 创建 dataguard 数据库之前的准备工作 / 本专栏详细讲解 Oracle Dataguard&#xff08;Oracle 版本为11g&#xff0c;主库为双节点 Oracle rac 集群&#xff09;的配置…

云计算|OpenStack|错误记录和解决方案(不定时更新)

前言&#xff1a; openstack的部署和使用是难度比较大的&#xff0c;难免会出现各种各样的问题&#xff0c;因此&#xff0c;本文将把一些在部署和使用openstack社区版时出现的错误做一个记录&#xff0c;并就每一个错误分析和解决问题。&#xff08;尽量记录比较经典的错误&a…

微搭低代码从入门到精通10-tab栏组件

在小程序中&#xff0c;如果你的页面是由多个组成的&#xff0c;往往涉及到页面切换的问题。那如何引导用户访问不同的页面呢&#xff1f;微搭中提供了tab栏组件来实现这个功能&#xff0c;本篇我们介绍一下这个组件的使用方法。 首先呢打开我们的应用编辑器&#xff0c;在左侧…

OJ刷题Day2 · 判断根结点是否等于子结点之和 · 删除有序数组中的重复项 · 合并两个有序链表 · 数组中的第K个最大元素(中等题)

一、判断根结点是否等于子结点之和二、删除有序数组中的重复项三、合并两个有序链表四、数组中的第K个最大元素&#xff08;中等题&#xff09;一、判断根结点是否等于子结点之和 给你一个 二叉树 的根结点 root&#xff0c;该二叉树由恰好 3 个结点组成&#xff1a;根结点、左…

SpringBoot + kotlin/java + Mybatis-Plus +Sqlite + Gradle多模块项目

前言 我自己的业务项目&#xff0c;先用kotlinspringboot 搭建&#xff0c; 发现gradle支持kts脚本&#xff0c;于是我就搭建试试。我就选用了最流行的Sqlite内嵌数据库,虽然H2也不错&#xff0c;但是Sqlite才是最流行的。orm框架我还是选择了Mybatis-Plus &#xff0c;为此中…

Spring Boot的创建和使用

目录 一、Spring Boot介绍 1.1 Spring Boot 是什么 1.2 Spring Boot的优点 二、Spring Boot 项目的创建 2.1 使用idea创建 2.1.1 安装Spring Boot Helper插件 2.1.2 创建 Spring Boot 项目 2.1.3 验证项目是否创建成功 2.2 使用网页创建 三、输出 hello world 一、S…

前端如何提升To B产品用户体验

云计算产品发展的早期常以技术为核心吸引客户&#xff0c;功能的实现是这一时期产品优先考虑的因素。经过数十年的发展&#xff0c;云计算行业已经进入了深耕细作的时代&#xff0c;市场的激烈竞争与云产品快速发展的同时&#xff0c;用户对产品的可用性与易用性也有了更高的要…

交换机中的冗余链路管理

一 交换机冗余链路许多交换机或交换机设备组成的网络环境中&#xff0c;通常使用一些备份连接&#xff0c;以提高网络的健全性&#xff0c;稳定性。备份连接也叫备份链路&#xff0c;冗余链路等。为了解决共享式局域网的碰撞问题&#xff0c;采用了交换机构成的交换式局域网&am…

C语言静态库、动态库的封装和注意事项

1、动态库、静态库介绍 参考博客&#xff1a;《静态库和动态库介绍以及Makefile》&#xff1b; 2、代码目录结构和编译脚本 参考博客&#xff1a;《实际工作开发中C语言工程的目录结构分析》&#xff1b; 3、编写库的流程 (1)明确需求:需求是否合理、需求的使用场景、需求可能遇…