虚拟内存及内存管理机制

news2024/11/24 3:55:32

图源自 小林coding

虚拟内存是什么?

虚拟内存是一种计算机系统管理内存的技术,它使操作系统能够将物理内存(RAM)和硬盘存储结合使用。虚拟内存的主要作用包括以下几点:

  • 扩展物理内存的使用: 虚拟内存允许系统将硬盘上的部分空间(称为交换区或页面文件)作为扩展的内存来使用。当物理内存不足时,操作系统会将不常使用的内存页面(数据或程序代码的部分)从RAM中移到硬盘的交换区,这样可以释放更多的RAM给活跃的进程使用。

  • 内存隔离和保护: 每个进程运行在自己的虚拟地址空间中,互相独立。这意味着一个进程无法直接访问其他进程的内存,从而提高了系统的安全性和稳定性。

  • 提高内存管理效率: 虚拟内存通过分页(paging)或分段(segmentation)机制来实现内存的灵活管理,避免内存碎片的产生,并允许系统灵活地分配和回收内存。

简单来说,虚拟内存提高了系统的内存利用率和安全性,使得程序在运行时即便超出了物理内存的容量,系统依然能够继续运行。

内存分段机制

为什么有分段机制

程序是由若干个逻辑分段组成的,如可由代码分段、数据分段、栈段、堆段组成。不同的段是有不同的属性的,所以就有分段的形式把这些段分离出来。

虚拟地址和物理地址是如何映射的?

虚拟地址由两部分组成:段选择因子和段内偏移量。 段选择因子包括段号。
在这里插入图片描述
段表保存了段的基地址、段的界限等,虚拟地址中的段内偏移量应该在 0 和段界限之间,如果段内偏移量合法,那么物理内存地址就等于段基地址加上段内偏移量
在这里插入图片描述

缺点

1、外部内存碎片问题。 由于内存分段管理可以做到段根据实际需求分配内存,有多少需求就分配多大的段,所以不会出现内存内部碎片问题。但是假如两个不连续的段的内存被回收了,这两块内存无法合并成一个大的内存,所以会产生两个外部内存碎片。
2、内存交换效率低。 解决外部内存碎片的方法是内存交换。先将分隔内存碎片的程序占用的内存写道磁盘上,再从磁盘上读回内存,这样就能合并两个分开的内存碎片。但是由于磁盘的 IO 很慢,并且每次交换都需要将大段的内存写入读取,所以会使机器卡顿。

内存分页机制

为什么有内存分页机制

为了解决内存分段的外部内存碎片和内存交换效率低的问题。要解决这些问题,那么就要想出能少出现一些内存碎片的办法。另外,当需要进行内存交换的时候,让需要交换写入或者从磁盘装载的数据更少一点,这样就可以解决问题了。这个办法,也就是内存分页。

  • 内存分页机制,页与页之间是紧密排列的,所以不会有外部碎片(但是如果程序不足一页,会产生内部碎片)。
  • 如果内存空间不够,操作系统只会换出换入少量的页,不会花太多时间。

因此内存交换的效率就相对比较高。

虚拟地址和物理地址是如何映射的?

分页是把整个虚拟和物理内存空间切成一段段固定尺寸的大小。这样一个连续并且尺寸固定的内存空间我们叫页(Page)。在 Linux下,每一页的大小为4KB。
虚拟地址由页号和页内偏移量组成,虚拟地址与物理地址之间通过页表来映射,如下图:
请添加图片描述
对于一个内存地址转换,其实就是这样三个步骤:

  • 把虚拟内存地址,切分成页号和偏移量;
  • 根据页号,从页表里面,查询对应的物理页号,
  • 直接拿物理页号,加上前面的偏移量,就得到了物理内存地址。

缺点

页表占用空间大。
32 位环境下,虚拟地址空间有 2^32 = 4GB,假设一个页的大小是 2^12 =4KB,那么就需要 2^20 = 1MB 个页,每个页需要 4B 存储,那么 4GB 空间的映射就需要有 4MB 的内存来存储页表。每个进程都有自己的页表,假设有 100 个进程就需要 400MB 的内存来存储页表,占用了很大的内存。

解决方式

多级页表。
把 1MB 个页表项再分页,将一级页表分为 1024 个二级页表,每个二级页表存储 1024 个页。
请添加图片描述
一级页表和二级页表结合起来能够覆盖全部虚拟地址空间。(页表一定要覆盖全部虚拟地址空间。)
如果某个一级页表的页表项没有用到,那么就不需要创建这个页表项对应的二级页表,也就省去了 1KB 个页的内存。
TLB。
多级页表虽然解决了空间上的问题,但是虚拟地址到物理地址的转换就多了几道转换的工序,这就带来了时间上的开销。由于程序空间局部性的存在,把最常访问的几个页表项存储到高速缓存(TLB,快表)中,加快了虚拟地址的转换。

段页式内存管理

  • 先将程序划分为多个有逻辑意义的段,也就是前面提到的分段机制;
  • 接着再把每个段划分为多个页,也就是对分段划分出来的连续空间,再划分固定大小的页,

这样,地址结构就由段号、段内页号和页内位移三部分组成。
用于段页式地址变换的数据结构是每一个程序一张段表,每个段又建立一张页表,段表中的地址是页表的起始地址,而页表中的地址则为某页的物理页号,如图所示:
请添加图片描述
段页式地址变换中要得到物理地址须经过三次内存访问:

  • 第一次访问段表,得到页表起始地址;
  • 第二次访问页表,得到物理页号;
  • 第三次将物理页号与页内位移组合,得到物理地址。

可用软、硬件相结合的方法实现段页式地址变换,这样虽然增加了硬件成本和系统开销,但提高了内存的利用率。

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

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

相关文章

一种用于超稳激光的数字控制锁频电路

摘要 超稳激光具有超高的频率稳定度和极窄线宽等优点,广泛应用于各种精密测量物理实验。为了确保不引入额外开关噪声,其频率锁定电路通常采用模拟电路实现,但是模拟控制电路存在锁定参数调节不方便、难以实现自动锁定和远程控制等方面的不足。…

【技术】Jaskson的序列化与反序列化

文章目录 概念解释1.Jasksona.JSONJSON 的基本特点JSON 的基本结构JSON 示例 b.ObjectMapper类 2.序列化与反序列化a.序列化对象序列化集合序列化ListSetMap b.反序列化反序列化单个对象反序列化集合对象 概念解释 1.Jaskson Jackson 是一个用于处理 JSON 数据的 Java 库,所以…

大模型烧钱战,百度云亟需突围之路

百度云在人工智能大模型领域投入了大量资源,但高昂的研发、运营成本与压力使其在盈利方面遭遇了重大挑战,这成了百度集团必须正视的问题。 转载:科技新知 原创 作者丨萧维 编辑丨蕨影 上个月末,以“智能跃迁”为主题的百度云智大…

stm32 g0 使用内部flash读写

个别芯片存储空间为32k,注意使用范围,并且利用debug或者.map文件,避开程序占用的页。 g0hal库和其他系列有些不同,根据官方例程修改。 GO30F6P6是 32k FLASH.基地址0x8000000,长度0x8000。即0x8000000-0x8008000。在…

访问公司gitlab出现 502 Bad Gateway 错误,已经解决

文章目录 1、通过 WindTerm 连接 Ubuntu2、检查 GitLab 服务状态3、查看 Unicorn 日志4、检查 Unicorn 的 stderr 日志5、检查 PID6、停止当前运行的 Unicorn 服务7、确认 Unicorn 已停止8、删除陈旧的 .pid 文件9、重新启动 GitLab 服务10、检查状态11、查看 Unicorn 日志 我公…

会话好友区设计与开发(五)

会话好友区设计与开发(五) 前言 在上一集,我们完成了选中和切换item的颜色变化的功能,那么这一集,我们将开始封装一些必要的函数。 需求 我们需要封装一些逻辑,那么我们也要进行分析。 在上一集我们虽…

LeetCode:1518.换水问题(模拟 JAVA)

目录 1518.换水问题 题目描述: 实现代码与解析: 模拟 1518.换水问题 题目描述: 超市正在促销,你可以用 numExchange 个空水瓶从超市兑换一瓶水。最开始,你一共购入了 numBottles 瓶水。 如果喝掉了水瓶中的水&am…

coredump设置

coredump路径查看及设置 coredump路径查看 命令1: cat /proc/sys/kernel/core_pattern 命令2: /sbin/sysctl kernel.core_pattern coredump路径修改 临时修改:echo ‘/var/log/%e.core.%p’ > /proc/sys/kernel/core_pattern 永久修改…

基于Java的企业仓库管理系统的设计与实现(论文+源码)_kaic

摘 要 随着信息技术的不断发展,以及网络技术的广泛用,企业企业仓库存储的信息量也越来越大,信息变得复杂。基于人工的数据收集方式,在耗费大量人力的同时也降低了信息采集的效率,例如影响了信息正确率和信息的录入速度…

项目解决方案:连锁店视频监控接入汇聚联网解决方案

目录 一.项目背景 二.建设目标和详细需求分析 2.1建设总目标 2.2需求分析 三.系统特色 3.1数字,高清,网络化系统 3.2安全性 3.3可拓展性 3.4资源利旧,节约成本 四.系统实现 4.1系统方案设计 4.2拓扑组网说明 4.3用户权限管理实现…

Assignment 1 (10月12日截止)

Section 1.1 T12 😉 S o l v e 👇 Solve👇 Solve👇 x x x 1 1 1- 3 x 3x 3x 2 2 2 4 x 4x 4x 3 3 3 − 4 -4 −4 3 x 3x 3x 1 1 1 − 7 x -7x −7x 2 2 2 7 x 7x 7x 3 3 3 − 8 -8 −8 − 4 x -4x −4x 1 1 1 6 x 6x 6x…

yarn install 报错 Expected version “>=18“,Got “16.20.0“

项目在初始化 (yarn install),一直报错以下信息,切换node 版本无法修改 1、首先使用命令检查,strict-ssl 是否为true和ignore-engines是否为false yarn config list2、如果不为 1 描述的值,使用以下命令设置 yarn config set strict-ssl t…

20241011给华硕的FX607JVCPU安装WIN10【intel的13代酷睿】

20241011给华硕的FX607JVCPU安装WIN10【intel的13代酷睿】 2024/10/11 17:55 缘起:同事新买的华硕笔记本电脑,WIN11的,需要降级为WIN10。 使用U盘安装WIN10的时候,常见现象:安装的时候找不到固态硬盘。 电脑使用的是&a…

推荐一个边缘物联网平台

AIoTedge是一个AIoT边缘物联网计算平台,它结合了边缘计算、物联网平台和泛协议软网关的功能。这个平台采用边云协同的架构,可以在多个点部署,与IoT云平台配合使用,提供分布式的AIoT处理能力。这种架构特别适用于需要AI云端训练和本…

HTTP代理的优点和局限性

在这个信息爆炸的时代,网络已成为我们获取知识、交流思想、开展商务的重要平台。但随之而来的隐私泄露、网络安全威胁、以及无处不在的网络监控,却让我们的每一次在线活动都充满了风险。 在这样的背景下,HTTP代理技术应运而生,它不…

歌曲怎样去掉人声留伴奏?教你几招,瞬间去除歌曲人声

在数字音乐时代,对音频进行编辑和处理已成为一种常见的需求。其中,将歌曲中的人声去除,仅保留伴奏部分,是许多音乐爱好者和创作者经常面临的任务。无论是为了制作卡拉OK伴奏,还是进行音乐混音和再创作,掌握…

养宠人崩溃的季节又到了,有什么吸浮毛宠物空气净化器推荐?

害,怎么转眼又到秋天了,猫咪又迎来了换毛期。这段时间我撸猫都不敢用力,随便摸摸就能带下满手的毛发,都可以做成毛毡了。我家猫还贼活泼,每天下班扑向我,还没能来得及换衣服,又收获一身满满的猫…

IC开发——数字电路设计简介

1. 前言 我们说的数字电路,一般是指逻辑数字电路,即通过逻辑门组合成的电路,也即我们常说的逻辑IC。IC除了逻辑IC之外,还有模拟IC,存储IC等。 IC设计,需要学习数字电路,需要学习Verilog/VHDL等…

TypeError: Cannot read properties of undefined (reading ‘offsetHeight’)

TypeError: Cannot read properties of undefined (reading ‘offsetHeight’) 前端报错 TypeError: Cannot read properties of undefined (reading offsetHeight)错误通常意味着你试图访问一个未定义或尚未渲染到DOM中的元素的offsetHeight属性。这个错误常见于异步数据处理、…

DAPLINK 之仿真调试器介绍

文章目录 前言1 协议1.1 JTAG 协议1.2 SWD 协议 2 调试仿真器2.1 ST-Link 仿真器2.2 ULink 仿真器2.3 J-Link 仿真器2.4 DAPLINK 仿真器 3 LINKer 搭配 CLion 的使用3.1 ST-Link CLion STM32F103RCT63.2 DAPLINK CLion STM32F103RCT6 参考 前言 本文算是 DAPLINK 学习的一个…