【操作系统】虚拟内存浅析

文章目录

  • 虚拟内存的概念
  • 虚拟内存的实现
    • 请求分页存储管理
      • 缺页中断机构
      • 地址变换机构
      • 页面置换算法
      • 页面分配策略
        • 调入页面的时机

虚拟内存的概念

所谓的虚拟内存,是具有请求调入置换功能,从逻辑上对内存容量加以扩充的一种存储器系统。他的组成如下:

在这里插入图片描述
可以看到,操作系统将内存、外存结合起来,形成的存储器系统就是虚拟内存。

虚拟内存的工作原理主要有以下两点:

  • 时间局部性(一定时间内,多次执行)
  • 空间局部性(对于某些热点内存,多次频繁的访问并执行)

另一方面,虚拟内存具有下面的特征:

  • 多次性
  • 对换性(比如进程挂起时,会从主存储器迁出到硬盘缓存中)
  • 虚拟性

虚拟内存的实现

结合虚拟内存的组成(内存+外存)以及笔者前面几篇关于内存分配管理方式的介绍,将虚拟内存的实现所涉及的几点总结为下图:

在这里插入图片描述
具体的实现方式有以下三种:

  • 请求分页存储管理
  • 请求分段存储管理
  • 请求段页式存储管理

下面将主要介绍请求分页存储管理,另外两种基本原理也都差不多,就不再赘述。

请求分页存储管理

由于进程在执行过程中,并不会一次性将程序装入,因此每当需要装入新的程序部分到内存时,就会进行请求。在这个过程中,涉及到了请求分页的存储管理页表。

在这里插入图片描述

  • 页号:内存(一般指的是主存储内存)中的逻辑地址;
  • 内存块号:页号所对应的内存中的物理地址;
  • 状态位:是否已经加载到内存中;
  • 访问字段:代表了对应内存页的访问频率,可以用于“对换”的判断参考;
  • 修改位:表示对应的内存页中数据是否发生过修改;
  • 外存地址:内存页所对应的程序对换存储地址(硬盘);

缺页中断机构

当程序执行过程中,发现所需要的部分未加载至内存,将会发生缺页中断,将所需部分程序装入至内存。以上面的存储管理页表为例。

假如此时需要页号0的程序部分,操作系统将其装入内存后维护存储管理页表:更新内存块号、状态位等。

在这里插入图片描述
相对应的,如果页面置换算法判断为淘汰时(例如访问频率低),内存中的程序就需要对换入硬盘缓存中。在这个过程中也需要缺页中断来完成。

操作系统根据存储管理表中的外存地址,将进行多次缺页中断,将对应程序部分挂起到硬盘缓存中。

在这里插入图片描述

地址变换机构

虚拟内存的地址变换机构与前几篇文章所介绍的非连续内存分配差不多。区别在于页表的结构内容更多了。整个流程如下:

在这里插入图片描述

  • 首先请求调页,根据逻辑地址(程序中写的地址是逻辑的,不是物理的实际的地址)判断是否在内存中(查表,优先快表);
  • 如果内存不足,则需要进行页面置换,即将内存中部分程序对换至硬盘缓存中,将淘汰的程序在页表中的数据修改为调入程序对应的数据;
  • 如果内存充足,则在页表中进行新增,完成程序的装入;
  • 将某些热点表同步至快表中;

页面置换算法

上面多次提到了页面置换算法,简单的了解几个总结如下:

  • 先进先出置换算法
  • 最佳置换算法
  • 最近最久置换算法
  • 时钟置换算法
  • 改进型时钟置换算法

在这里插入图片描述

页面分配策略

页面分配策略涉及到的问题是:操作系统分配给进程多少内存页才比较合适?

首先需要知道驻留集,驻留集表示驻留在主存中的页面数。驻留集的大小对操作系统的影响有以下几点:

  • 给进程分配的页面总空间小,会使得支持的进程数量增多,因此CPU时间利用率高;
  • 给进程分配在主存中的页数少,会使得错页率高(可能会频繁的换入换出);
  • 进程在主存的页数多,但是错页率不会有明显改善(因为内存足够,错页率已经低了);

几种页面分配策略
首先两种分配方式:固定分配、可变分配。所谓的“固定分配”就是操作系统分配固定大小的总页面,不够时不能向操作系统申请新的内存空间;而“可变分配”指的是,操作系统分配内存页后,还可以再向操作系统申请。

然后是两种置换方式:局部置换、全局置换。所谓的“局部置换”,是说分配的内存不足时,只能在进程所分配的内存页中进行置换;而“全局置换”是可以从主存中其余空闲的内存中进行置换。

以上两种方式的搭配,形成了三种分配策略:

  • 固定分配局部置换;
  • 可变分配全局置换;
  • 可变分配局部置换;
调入页面的时机

根据页面的调入时机,有两种策略:

  • 预调页策略:一般用于进程的首次调入,一次性调入若干相邻页面;
  • 请求调页策略:在进程运行时发现缺页再进行调入,由于要从硬盘进行调入调出,因此I/O操作开销较大;

在这里插入图片描述

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

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

相关文章

微软 Gradle 强强联手,Gradle 构建服务器正式开源!

作者:Nick Zhu - Senior Program Manager, Developer Division At Microsoft 排版:Alan Wang Gradle 构建服务器 (Build Server for Gradle) 在九月份,我们宣布 Microsoft 和 Gradle 联手探索了一种基于 Build Server Protocol(B…

【SpringMvc】SpringMvc +MyBatis整理

🎄欢迎来到边境矢梦的csdn博文🎄 🎄本文主要梳理 Java 框架 中 SpringMVC的知识点和值得注意的地方 🎄 🌈我是边境矢梦,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以关…

为什么Go是后端开发的未来

近年来,Go 编程语言的流行度迅速增加。Go 最初由 Google 开发,迅速成为后端开发中最受欢迎的语言之一,特别是在分布式系统和微服务的开发中。本文将讨论为什么 Go 是后端开发的未来。 Go 简介 Go,又称为 Golang,是由…

【图数据库实战】HugeGraph架构

一、概述 作为一款通用的图数据库产品,HugeGraph需具备图数据的基本功能,如下图所示。HugeGraph包括三个层次的功能,分别是存储层、计算层和用户接口层。 HugeGraph支持OLTP和OLAP两种图计算类型,其中OLTP实现了Apache TinkerPop3…

如何从Android手机恢复已删除的联系人

联系人应该是最重要的信息之一。 如果您不小心从Android手机中删除了联系人,该怎么办? 如果不容易找回丢失的联系人,您可以使用奇客数据恢复安卓版。 从Android的手机中恢复已删除的联系人 只需删除Android联系人,然后您就可以通…

【Java 进阶篇】揭秘 JQuery 广告显示与隐藏:打造令人惊艳的用户体验

在当今互联网时代,广告已经成为网页中不可忽视的一部分。然而,如何通过巧妙的交互设计,使广告既能吸引用户的眼球,又不会给用户带来干扰,成为了许多前端开发者需要思考的问题之一。在这篇博客中,我们将深入…

Pytorch1.7复现PointNet++点云分割(含Open3D可视化)(文末有一个自己做的书缝识别项目代码)

毕设需要,复现一下PointNet的对象分类、零件分割和场景分割,找点灵感和思路,做个踩坑记录。 下载代码 https://github.com/yanx27/Pointnet_Pointnet2_pytorch   我的运行环境是pytorch1.7cuda11.0。 训练 PointNet代码能实现3D对象分类、…

centos7中安装Nginx和使用Nginx详细操作

环境: 准备了三台centos7虚拟机:192.168.213.4、192.168.213.5、192.168.213.6。 一、安装 三台虚拟机都安装下面的步骤执行,安装Nginx,为后面的使用演示使用。 1、安装必备组件: sudo yum install yum-utils2、配置yum源 在下面的文件目录…

详解自动化测试之 Selenium

目录 1. 什么是自动化 2.自动化测试的分类 3. selenium(web 自动化测试工具) 1)选择 selenium 的原因 2)环境部署 3)什么是驱动? 4. 一个简单的自动化例子 5.selenium 常用方法 5.1 查找页面元素&…

如何合理估算 Java 线程池大小

前 言 Java 中的线程创建会产生显著的成本。创建线程会消耗时间,增加请求处理的延迟,并且涉及 JVM 和操作系统的大量工作。为了减轻这些开销,线程池发挥了作用。 在本文中,我们将深入研究确定理想线程池大小的艺术。经过微调的线…

【C++】模版-初阶

目录 泛型编程--模版 函数模版 类模版 泛型编程--模版 函数模版 如何实现一个通用的交换函数呢?void Swap(int& left, int& right){int temp left;left right;right temp;}void Swap(double& left, double& right){double temp left;left right;righ…

基于ssm+vue交通事故档案系统

摘要 摘要是对文章、论文或其他文本的主要观点、结论和关键信息的简洁概括。由于你没有提供具体的文章或主题,我将为你创建一个通用的摘要。 本文介绍了一种基于SSM(Spring Spring MVC MyBatis)和Vue.js的交通事故档案管理系统的设计与实现…

设计模式-备忘录模式-笔记

动机(Motivation) 在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态,便会暴露对象的细节…

ROS服务(Service)通信:通信模型、Hello World与拓展

服务通讯是基于请求响应模式的,是一种应答机制。 用于偶然的、对时时性有要求、有一定逻辑处理需求的数据传输场景。 一、服务通讯模型 服务是一种双向通讯方式,它通过请求和应答的方式传递消息,该模型涉及到三个角色: Master…

USART(1)

什么是USART 单片机上有的许多的外设 单片机通过这些外设实现特殊的功能 如果单片机想要和蓝牙模块实现数据的传输那么就也需要单片机有串口模块来和蓝牙模块的串口进行连接 相互传输数据 在单片机上的串口就叫USART USART就是单片机上的外设 来实现串口之间的通信功能 USART名…

基于51单片机步进电机节拍步数正反转LCD1602显示( proteus仿真+程序+原理图+设计报告+讲解视频)

基于51单片机步进电机节拍步数正反转LCD1602显示 📑1. 主要功能:📑2. 讲解视频:📑3. 仿真📑4. 程序代码📑5. 设计报告📑6. 设计资料内容清单&&下载链接📑[资料下…

基于SSM的宠物医院管理系统

基于SSM的宠物医院管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringMyBatisSpringMVC工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 后台 摘要 随着人们对宠物健康关注的增加,宠物医疗服务的需求也…

许战海战略文库|企业竞争优势三大获取路径:产业、品牌和产品竞争优势

在快速发展和变革的全球化市场中,企业面临着持续的竞争压力。要在这种环境中脱颖而出,企业需要建立持久的竞争优势。通常,竞争优势可以从三个主要路径来获取:产业竞争优势、品牌竞争优势和产品竞争优势。 1. 产品竞争优势为什么很…

电子科技大学 分布式系统 期末复习笔记

第一章 为什么需要分布式系统:功能分离,固有的分布性,负载均衡,可靠性,经济性。 定义:分布式系统是这样一种系统,其中位于联网计算机上的组件仅通过传递消息来通信和协调它们的操作。 特点&am…

线性表的概念

目录 1.什么叫线性表2.区分线性表的题 1.什么叫线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是…