虚拟存储器:突破物理内存限制

目录

1. 基本概念

1.1 逻辑地址空间与物理地址空间

1.2 地址转换机制

2. 页式虚拟存储器

优点

缺点

3. 段式虚拟存储器和段页式虚拟存储器

段式虚拟存储器

段页式虚拟存储器 

4. 虚存的替换算法

1. 概述

2.1 最近最久未使用(LRU)算法

2.2 最近未使用算法(NRU)算法

2.3 时钟算法

3. 算法比较

4. 应用场景

5. 存储管理部件

1. 存储管理部件的组成

2. 存储管理部件的工作原理

3. 存储管理部件的性能影响

总结


1. 基本概念

1.1 逻辑地址空间与物理地址空间

        虚拟存储器的核心思想是将逻辑地址空间物理地址空间分离。

  • 逻辑地址空间是程序员使用的地址空间,它由程序员在编写程序时定义,不受物理内存容量的限制。 逻辑地址空间可以是连续的,也可以是不连续的。
  • 物理地址空间是计算机硬件可以寻址的地址空间,它的大小由物理内存容量决定。 物理地址空间是连续的。
1.2 地址转换机制

        虚拟存储器通过地址转换机制将逻辑地址转换为物理地址。 地址转换机制由硬件和软件共同实现:

  • 硬件部分通常由**内存管理单元(MMU)**实现。 MMU负责将逻辑地址中的虚拟页号转换为物理页号。
  • 软件部分由操作系统实现。 操作系统负责管理虚拟页表,虚拟页表是将虚拟页号映射到物理页号的表。

2. 页式虚拟存储器

        页式虚拟存储器(Paged Virtual Memory)是虚拟存储器的一种实现方式,它将逻辑地址空间和物理地址空间都划分为大小相等的页面。每个页面都有一个虚拟页号和一个物理页号。当程序访问一个逻辑地址时,MMU会先将该地址中的虚拟页号转换为物理页号,然后使用物理页号寻址物理内存。

优点

        1. 实现简单,易于管理

        页式虚拟存储器的实现相对简单,因为每个页面的大小都是固定的,所以虚拟页表也相对容易管理。

        2. 页面大小可以根据需要进行调整

        页面的大小可以根据系统的实际需求进行调整。例如,对于大型程序,可以使用较大的页面大小,以减少虚拟页表的开销;对于小型程序,可以使用较小的页面大小,以提高内存利用率。

        3. 可以有效地支持稀疏地址空间

        页式虚拟存储器可以有效地支持稀疏地址空间,即逻辑地址空间中存在大量空闲区域的情况。这是因为每个页面都是独立分配的,所以只有那些被实际使用的页面才会被分配物理内存。

缺点

        1. 存在内部碎片

        内部碎片是指物理内存中存在一些无法使用的空闲空间,这些空闲空间的大小小于一个页面的大小。内部碎片的产生会导致内存浪费。

        2. 需要额外的开销来维护虚拟页表

        虚拟页表是将虚拟页号映射到物理页号的表。为了维护虚拟页表,需要额外的硬件和软件开销。

3. 段式虚拟存储器和段页式虚拟存储器

段式虚拟存储器

        段式虚拟存储器将逻辑地址空间划分为大小可变的段。 每个段都有一个起始地址和一个长度。 当程序访问一个逻辑地址时,MMU会先将该地址中的虚拟段号转换为段的起始地址,然后再加上地址中的偏移量得到物理地址。

段式虚拟存储器具有以下优点:

  • 可以有效地利用内存空间,减少内部碎片:由于段的大小可以根据程序的实际需要进行调整,因此可以有效地减少内部碎片的产生。
  • 可以方便地共享代码和数据:段可以被多个程序共享,因此可以方便地实现代码和数据的共享。

段式虚拟存储器也存在一些缺点:

  • 实现复杂,难以管理:由于段的大小可以变化,因此虚拟页表也需要动态维护,这增加了虚拟存储器的实现复杂度和管理难度。
  • 难以支持稀疏地址空间:如果逻辑地址空间中存在大量空闲区域,则段式虚拟存储器会存在较大的内存浪费。
段页式虚拟存储器 

        段页式虚拟存储器结合了页式虚拟存储器和段式虚拟存储器的优点。 它将逻辑地址空间划分为大小可变的段,每个段又可以细分为大小相等的页面。 段页式虚拟存储器是一种比较通用的虚拟存储器实现方式。

        段页式虚拟存储器(Segmented-Paged Virtual Memory)结合了页式虚拟存储器和段式虚拟存储器的优点。它将逻辑地址空间划分为大小可变的,每个段又可以细分为大小相等的页面。段页式虚拟存储器使用段表来管理段,使用页表来管理页面。

段页式虚拟存储器具有以下优点:

  • 兼顾了段式虚拟存储器和页式虚拟存储器的优点:段页式虚拟存储器可以有效地利用内存空间,减少内部碎片,并且可以方便地共享代码和数据。
  • 可以有效地支持稀疏地址空间:段页式虚拟存储器可以通过只分配那些被实际使用的页面的物理内存来支持稀疏地址空间。

段页式虚拟存储器的缺点是实现复杂,需要额外的硬件和软件开销。

4. 虚存的替换算法

1. 概述

        当物理内存空间不足时,操作系统需要将一些页面或段从物理内存中换出到外部存储器中,以腾出空间容纳新的页面或段。为了选择要被换出的页面或段,操作系统需要使用替换算法

2.1 最近最久未使用(LRU)算法

        基本原理: LRU算法将最近最久未使用的页面或段优先换出。LRU算法维护一个最近使用的页面或段的链表,当需要选择要被换出的页面或段时,LRU算法会将链表中位于最前面的页面或段换出。

        优点: LRU算法简单易实现,并且在大多数情况下能够有效地提高内存利用率。

        缺点: LRU算法无法区分近期可能被使用的页面或段和近期不可能被使用的页面或段,因此在某些情况下可能会导致性能下降。

2.2 最近未使用算法(NRU)算法

        基本原理: NRU算法将最近未使用但近期可能被使用的页面或段优先换出。NRU算法使用参考位和修改位来判断一个页面或段是否被最近使用过以及是否被修改过。当需要选择要被换出的页面或段时,NRU算法会优先选择那些参考位为0且修改位为0的页面或段。

        优点: NRU算法能够更好地区分近期可能被使用的页面或段和近期不可能被使用的页面或段,因此在某些情况下能够比LRU算法更有效地提高内存利用率。

        缺点: NRU算法的实现比LRU算法复杂,并且需要额外的硬件支持。

2.3 时钟算法

        基本原理: 时钟算法为每个页面或段分配一个时钟位。当需要选择要被换出的页面或段时,操作系统会将时钟指针向前移动一个刻度,并将时钟指针指向的页面或段换出。

        优点: 时钟算法简单易实现,并且在大多数情况下能够有效地提高内存利用率。

        缺点: 时钟算法无法区分近期可能被使用的页面或段和近期不可能被使用的页面或段,因此在某些情况下可能会导致性能下降。

3. 算法比较
算法优点缺点
LRU简单易实现无法区分近期可能被使用的页面或段和近期不可能被使用的页面或段
NRU能够更好地区分近期可能被使用的页面或段和近期不可能被使用的页面或段实现复杂,需要额外的硬件支持
时钟简单易实现无法区分近期可能被使用的页面或段和近期不可能被使用的页面或段
4. 应用场景

        LRU算法、NRU算法和时钟算法都各有优缺点,因此在实际应用中需要根据具体情况选择合适的算法。

  • LRU算法通常用于通用操作系统,例如Windows、Linux等。
  • NRU算法通常用于对内存敏感的应用程序,例如数据库系统等。
  • 时钟算法通常用于实时操作系统。

5. 存储管理部件

        虚拟存储器是计算机系统内存管理的一种重要技术,它使得应用程序可以访问比物理内存更大的地址空间。存储管理部件是实现虚拟存储器的硬件和软件部件的集合,它负责将逻辑地址转换为物理地址,管理虚拟页表,选择要被换出的页面或段,以及存储不在物理内存中的页面或段。

1. 存储管理部件的组成

存储管理部件主要包括以下部件:

1.1 内存管理单元(MMU)

        MMU是虚拟存储器中最重要的硬件部件,它负责将逻辑地址转换为物理地址。MMU通常包含以下功能:

  • 虚拟页号转换:将逻辑地址中的虚拟页号转换为物理页号。
  • 页表基址寄存器:存储虚拟页表的基址。
  • 页保护:防止非法访问内存。

1.2 虚拟页表

        虚拟页表是将虚拟页号映射到物理页号的表。虚拟页表可以存储在物理内存中,也可以存储在外部存储器中。虚拟页表通常包含以下信息:

  • 虚拟页号
  • 物理页号
  • 页面状态位:指示页面是否有效、是否被修改等。

1.3 页面置换算法

        页面置换算法是选择要被换出的页面或段的算法。常用的页面置换算法包括:

  • 最近最久未使用(LRU)算法:将最近最久未使用的页面或段优先换出。
  • 最近未使用算法(NRU)算法:将最近未使用但近期可能被使用的页面或段优先换出。
  • 时钟算法:为每个页面或段分配一个时钟位,当需要选择要被换出的页面或段时,操作系统会将时钟指针向前移动一个刻度,并将时钟指针指向的页面或段换出。

1.4 外部存储器

        外部存储器用于存储不在物理内存中的页面或段。常用的外部存储器包括:

  • 硬盘驱动器(HDD)
  • 固态硬盘(SSD)
2. 存储管理部件的工作原理

        当程序访问一个逻辑地址时,MMU会首先将该地址中的虚拟页号转换为物理页号。如果该页面不在物理内存中,则需要发生页面错误。操作系统会根据页面置换算法选择一个要被换出的页面,并将该页面从物理内存中换出到外部存储器中。然后,操作系统将要访问的页面从外部存储器中调入物理内存中,并更新虚拟页表。最后,MMU会再次将逻辑地址转换为物理地址,并完成对内存的访问。

3. 存储管理部件的性能影响

存储管理部件的性能会对应用程序的性能产生 significant 影响。以下因素会影响存储管理部件的性能:

  • 虚拟页表的大小:虚拟页表越大,则地址转换的开销就越大。
  • 页面置换算法的效率:页面置换算法的效率越高,则页面错误的发生率就越低。
  • 外部存储器的速度:外部存储器的速度越快,则页面调入调出的速度就越快。

总结

        虚拟存储器是现代计算机系统的重要组成部分,它使得程序可以访问比物理内存更大的地址空间,提高了程序的运行效率。

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

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

相关文章

ThingsBoard物联网网关在智慧城市数据采集中的应用

智慧城市由监控中心、采集网关、前端采集设备、前端感应执行器组成。 为何选用ThingsBoard作为平台 监控中心为物联网平台,该平台包含云计算、大数据、人工智能、物联网、GIS、云安全等主要模块,具备数据采集、数据交换、超大规模计算、数据分析、数据应…

Typescript interface对象赋值引用还是拷贝的问题

在 TypeScript 中,将一个接口对象赋值给另一个变量时,实际上是传递引用而不是进行数据拷贝。也就是说,两个变量都引用同一个对象,因此对其中一个变量进行修改会影响到另一个变量。 示例 假设我们有一个接口 FontSizeEntity&…

防火墙如何端口映射?

防火墙端口映射(Firewall Port Mapping)是一种网络技术,通过对防火墙配置进行调整,允许外部网络用户访问内部网络中的指定端口。该技术使得外部用户可以通过公共网络访问内部网络中的特定服务或应用程序,从而实现远程访…

难兄难弟——Java中 goto 与 const关键字

目录 简洁版: 详解版: 一:goto 二:const 简洁版: 1: 在Java中,goto也是一个关键字,但是取消了goto的使用,使用循环标记进行代替; 2:在Java中&a…

Microsoft VBA Excel 去重+自动化配对信息

问题场景 A列数据中存在很多特别的情况: 中间分隔符为“/”,但是分隔符前后可能存在空格一个编号可能出现多次,例如示例中6003出现了5次可能为空,虽然节选的这部分没出现这种情况 B和C列数据中,会出现空格。 ABC60…

JavaScript--作用域是什么

作用域是什么 编译原理 在传统的编译语言中,程序中的一段源代码在执行之前会经历三个步骤。成为编译 分词/词法分析 这个过程由字符组成的字符串分解成有意义的代码块,这些代码块成为词法单元。 分词和词法分析之间的主要差异在于词法单元的识别是有…

实战指南:Vue 2基座 + Vue 3 + Vite + TypeScript微前端架构实现动态菜单与登录共享

实战指南:Vue 2基座 Vue 3 Vite TypeScript子应用vue2微前端架构实现动态菜单与登录共享 导读: 在当今的前端开发中,微前端架构已经成为了一种流行的架构模式。本文将介绍如何结合Vue 2基座、Vue 3子应用、Vite构建工具和TypeScript语言…

基于Docker的ROS开发

本文主要介绍如何使用Docker在Windows和Linux环境中部署并使用ROS,通过Docker Container运行ROS,可以方便我们在一个本地环境中运行多个ROS版本。 更多内容,访问专栏目录获取实时更新。 关于ROS的版本 参考ROS1 Distribution Wiki和ROS2 Dis…

nginx源码阅读理解 [持续更新,建议关注]

文章目录 前述一、nginx 进程模型基本流程二、源码里的小点1.对字符串操作都进行了原生实现2.配置文件解析也是原生实现待续 前述 通过对 nginx 的了解和代码简单阅读,发现这个C代码的中间件确实存在过人之处,使用场景特别多,插件模块很丰富…

10款AI工具,让工作生活学习更高效

我看大家都推荐的差不多了,常见好用的PC软件就那些,我不想反复“咀嚼”了,我想另辟蹊径推荐点不一样的,比如10款PC端的AI网站。AI已经全方位“侵入”我们的生活,从AI写作到AI绘画,从AI视频到AI语音&#xf…

ROS 节点node和包package

ROS 节点Node和包package node:ros中最基本的程序单元 package:节点的组织形式 节点Node 在 ROS(Robot Operating System)中,节点(Node)是一个运行中的进程,它是 ROS 应用程序的…

【申博分享】对自己过去一年申博的总结

大约是在23年春节后的时候有了读博的想法,到今天刚好一年多一点,之所以申博受多方面因素影响吧,同时自己也没觉得读博很难怎么样的,也还年轻感觉还学得动,唯一难受的就是读博时间成本太高,综合考虑之下还是…

华纳云:怎么限制docker容器的资源使用量?

限制Docker容器的资源使用量可以通过设置容器的资源限制参数来实现。以下是一些常用的资源限制方法: 1. CPU资源限制 通过--cpu参数可以限制容器对CPU的使用量。可以指定容器可以使用的CPU核心数,或者指定CPU配额和周期(quota and period)来限制CPU使用…

Thingsboard规则链:Switch节点详解

在物联网(IoT)领域,数据的高效处理与自动化决策是构建智能系统的核心。作为一款强大的物联网平台,Thingsboard通过其规则引擎为开发者提供了高度灵活的工具,其中Switch节点是实现消息条件路由的关键组件。本文将全方位…

【深度学习】Transformer梳理

零、前言 对于transformer,网上的教程使用记号、术语不一 。 最关键的一点,网上各种图的简化程度不一 (画个图怎么能这么偷懒) ,所以我打算自己手画一次图。 看到的最和善(但是不是那么靠谱,我…

Rust语言实现的去中心化AI网络节点

一、概述 去中心化和人工智能(AI)是两个极具潜力的发展方向。Gaia项目正是将这两者结合起来,创造了一个去中心化的AI网络节点。本文将深入探讨Gaia项目的技术细节,通过丰富的示例和详细描述,帮助读者全面理解并掌握该…

SRS Simple-RTMP-Server 全面介绍、教程与指南

本文全面介绍了SRS(Simple Real-Time Media Server)的功能、技术细节、安装部署、使用方法以及社区支持。涵盖了SRS的多种协议支持、性能优化、高级功能配置,以及如何在不同操作系统上搭建和使用SRS服务器。 文章目录 SRS简介SRS的定义和功能…

黑龙江某市数字孪生地下水监测系统平台项目建设经验

项目背景 地下水是一种特殊而珍贵的资源,它具有不可替代性,与经济发展及人民生活息息相关,针对日趋严峻的水资源危机,如何合理利用有限的水资源,保障国民经济的可持续发展是一个迫切需要解决的问题。 黑龙江某市积极…

eclipse启动时间过长的问题

项目场景: 由于我用eclipse比较习惯,虽然IDEA很好,但是因为收费,所以在个人开发学习过程中一直还是使用eclipse,本文不讨论eclipse与IDEA孰优孰劣问题。 开发环境: 操作系统:Windows 11 22631…

代码随想录 day21

二叉搜索树 二叉搜索树的最小绝对差 题意:求树中任意两不同节点值之间的最小差值 。 思路:这回要使用前后指针了。 使用两个指针(前指针和后指针),对指向的结点的值进行相减,如果值大于maxlen就更新这个值…