浅谈虚拟内存(操作系统、Redis)

浅谈虚拟内存(操作系统、Redis)

参考&鸣谢

4.1 为什么要有虚拟内存? xiaolincoding

【简单说下】REDIS的虚拟内存机制,会吗?别翻书 aristo_boyunv

Redis 虚拟内存 Java杨永杰

浅谈虚拟内存:操作系统与 Redis

在计算机系统中,内存管理是影响性能和资源利用的关键环节,而虚拟内存技术在其中扮演了核心角色。虚拟内存不仅被操作系统广泛使用,Redis 这样的高性能内存数据库也在一定程度上应用了虚拟内存概念。下面我讲分别介绍操作系统中的虚拟内存机制,以及 Redis 中如何借鉴类似的内存管理思路,并探讨两者的区别。

一、操作系统中的虚拟内存

1. 什么是虚拟内存?

虚拟内存(Virtual Memory)是操作系统的一种内存管理技术,它允许程序运行时使用比物理内存更大的地址空间。通过虚拟内存,操作系统能够提供一种“虚拟”内存的抽象层,使得每个进程可以使用一个连续的地址空间,而不必关心实际物理内存的布局。虚拟内存的主要目的包括:

  • 扩展内存:程序可以运行在比物理内存大的虚拟地址空间中。
  • 内存隔离:不同进程之间的地址空间互不干扰,提升系统安全性和稳定性。
  • 内存管理:通过分页机制,优化物理内存的使用效率,减少碎片。
2. 虚拟内存的工作原理

虚拟内存的核心思想是将物理内存和外部存储(如硬盘)结合起来。操作系统会将虚拟内存划分为页面(Page),每个页面对应一个固定大小的内存块。当程序访问一个页面时,操作系统通过页表(Page Table)将虚拟地址映射到物理地址。如果该页面不在物理内存中,则会触发页面置换(Page Swap)机制,将未使用的页面从内存中换出,加载所需的页面。

虚拟内存的关键特性包括:

  • 分页和分段:虚拟内存通过分页或分段机制,将虚拟地址划分为固定大小的页面或段。分页更加常见,它使得内存管理更加灵活和高效。
  • 页表和 TLB:操作系统通过页表记录虚拟地址到物理地址的映射,而 TLB(Translation Lookaside Buffer)则用于加速虚拟地址的翻译,减少查表带来的性能损耗。
  • 页面置换算法:当物理内存不足时,操作系统需要将某些页面从内存中换出到磁盘。常用的页面置换算法包括 LRU(最近最少使用)、FIFO(先进先出)等。
3. 虚拟内存的优点
  • 扩展内存容量:虚拟内存允许操作系统通过硬盘等外部存储设备扩展内存,支持更大的程序运行。
  • 程序隔离:每个进程有独立的虚拟地址空间,互不干扰,提升了系统的安全性和稳定性。
  • 提高内存利用率:虚拟内存使得系统可以根据程序的需求灵活分配物理内存,减少内存浪费。
4. 虚拟内存的缺点
  • 性能损耗:虚拟内存需要频繁地进行地址翻译、页面置换等操作,尤其在页表和 TLB 未命中时,可能会导致性能下降。
  • I/O 瓶颈:页面置换涉及磁盘 I/O,过度的页面置换(页面抖动)可能导致系统性能显著下降。

二、Redis 中的内存管理和虚拟内存机制

1. Redis 的内存模型

Redis 是一个基于内存的数据存储系统,通常将数据全部存放在内存中,以确保高效的读写性能。由于内存的高速访问特性,Redis 在处理高并发和低延迟需求的应用中表现出色。然而,Redis 也面临着内存有限的问题,当数据量过大时,无法完全存放于物理内存中。

Redis 曾在早期版本(2.4 之前)引入了一种类似虚拟内存的机制,称为Redis 虚拟内存(Redis Virtual Memory)。它将部分不常用的数据存储到磁盘中,而将常用的数据保存在内存中,以解决内存不足的问题。

2. Redis 虚拟内存的工作原理

Redis 的虚拟内存机制类似于操作系统的虚拟内存。它会将较大的键或较少使用的键值对从内存中移出,存放到磁盘上。Redis 虚拟内存的关键机制包括:

  • 数据分页:将数据划分为固定大小的页面,并将页面存储到磁盘。
  • LRU 置换算法:Redis 使用 LRU(最近最少使用)算法来决定哪些数据应当从内存中换出到磁盘。当访问某个页面时,Redis 会将其从磁盘加载回内存。
  • 异步 I/O 操作:为避免频繁的阻塞操作,Redis 的虚拟内存采用异步的方式将数据写入磁盘或从磁盘读取。
3. Redis 虚拟内存的缺点

尽管虚拟内存在理论上可以解决 Redis 的内存瓶颈问题,但它在实践中并没有达到预期的效果:

  • 性能问题:由于 Redis 频繁进行磁盘 I/O 操作,虚拟内存会导致访问较慢的键时性能大幅下降。Redis 的高性能基于内存访问,一旦涉及磁盘,性能会受到显著影响。
  • 复杂度:虚拟内存的管理增加了系统的复杂性,尤其是在 Redis 处理大量小对象时,内存分页和页面置换可能带来额外的开销。

因此,从 Redis 2.4 开始,官方逐步废弃了虚拟内存机制,转而推荐通过 内存淘汰策略集群扩展 来解决内存不足的问题。

4. Redis 现代的内存管理策略

Redis 放弃虚拟内存后,采取了其他策略来优化内存使用:

  • 内存淘汰机制(Eviction Policy):当内存不足时,Redis 可以通过内存淘汰策略清理不需要的数据。例如,allkeys-lru 策略会将最近最少使用的数据淘汰,释放内存。
  • 压缩内存结构:Redis 对某些数据结构(如哈希表、列表)进行了优化,使用了压缩数据结构(Ziplist、Intset)来节省内存。
  • 持久化方案:Redis 支持 RDB(快照)和 AOF(日志)两种持久化机制,将

数据存储在磁盘上,保障数据的可靠性。在 Redis 运行过程中,数据全部存储于内存中,而持久化的方式则确保系统重启后数据不会丢失。

5. Redis 与操作系统虚拟内存的区别

尽管 Redis 早期的虚拟内存机制与操作系统的虚拟内存有类似之处,但它们在本质上有很多不同:

  • 设计目标:操作系统的虚拟内存旨在让应用程序在有限的物理内存上运行更大的程序,而 Redis 的虚拟内存机制是为了在有限内存中处理更大数据集。Redis 的虚拟内存设计初衷是为了保持高性能,而操作系统虚拟内存更多考虑内存扩展。

  • 实现方式:操作系统的虚拟内存通过硬件支持的页表、TLB 和页面置换算法等机制高效管理地址空间,而 Redis 则通过其内部的逻辑层实现数据的分页与异步加载。

  • 数据访问:操作系统虚拟内存隐藏了物理内存与虚拟内存之间的差异,对于应用程序透明处理。而 Redis 虚拟内存机制在涉及磁盘 I/O 时,会显著影响性能,数据访问速度远远低于操作系统的虚拟内存。

  • 废弃原因:Redis 虚拟内存因性能问题而被弃用,而操作系统的虚拟内存是计算机系统不可或缺的一部分,被广泛应用于各类程序中。

三、总结

虚拟内存是操作系统中极为重要的技术,它通过分页、分段、页表等机制高效地管理内存,扩展了物理内存的能力,并提升了内存利用率和程序的运行安全性。而 Redis 早期也曾引入类似的虚拟内存机制,尝试通过将数据部分存储在磁盘中来解决内存不足的问题,但由于性能下降等原因最终放弃了这种设计。

目前,Redis 依赖内存淘汰策略和持久化机制来优化内存使用,而操作系统的虚拟内存仍然是主流内存管理方式。两者的不同之处在于,操作系统的虚拟内存对于应用程序透明且高度优化,而 Redis 的虚拟内存机制则由于对高性能的要求,无法与操作系统的通用虚拟内存相提并论。

对于开发者而言,理解虚拟内存的原理以及 Redis 内存管理的策略,能够帮助在设计高效系统时更好地管理内存资源,从而提升程序的性能和稳定性。

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

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

相关文章

亿发零售云解析:新零售破局与年轻群体消费趋势变化

近年来,随着数字化、智能化的快速发展,“新零售”概念逐渐成为商业领域的热门话题。相比传统零售,新零售通过线上与线下的深度融合,利用大数据、人工智能等技术,赋能消费者与品牌之间的互动。尤其在年轻消费群体中&…

JS 特殊运算符有哪些?

JavaScript 特殊运算符有哪些? 众多编程语言之中JavaScript ,以其强大而全面的功能深受前端开发者喜爱。其丰富的运算符集,不仅包括了广泛应用的算术运算符、比较运算符以及逻辑运算符,还蕴藏着一系列较为冷门但同样功能强大的运算…

LVGL第一篇-了解lvgl显示原理以及使用C++移植

一、引言 在当今嵌入式系统与图形界面开发的广阔领域中,轻量级图形库 LVGL(Light and Versatile Graphics Library)恰似一颗璀璨耀眼的明星,正日益受到开发者们的热烈推崇与追逐。它以小巧精致之姿、高效卓越之能以及丰富多元之功…

Qt_事件的介绍

目录 1、理解事件 2、处理事件QEvent 3、键盘事件QKeyEvent 4、鼠标事件QMouseEvent 4.1 鼠标点击事件 4.2 鼠标释放事件 4.3 鼠标移动事件 5、滚轮事件QWheelEvent 6、定时器事件QTimerEvent 7、窗口事件QMoveEvent 8、事件分发器event 9、事件过滤器even…

峟思助力堤防工程安全:构建多功能防洪屏障

堤防工程,作为水利建设中至关重要的防护体系,不仅守护着江河、湖泊及滨海区域的安全,更是确保人民生命财产安全的坚固防线。在现代社会,随着技术的进步与安全意识的提升,堤防工程不仅限于传统的防洪功能,更…

CVPR最牛图像评价算法!

本文所涉及所有资源均在 传知代码平台可获取。 目录 概述 一、论文思路 1.多任务学习框架: 2.视觉-语言对应关系: 3.动态损失权重: 4.模型优化和评估: 二、模型介绍 三、详细实现方法 1.图像编码器和语言编码器(Image…

Solidity语言:重点学习Solidity编程语言,这是EVM上最常用的智能合约语言。

Solidity是一种面向合约的编程语言,用于在以太坊虚拟机(EVM)上编写智能合约。它是Solidity开发者在以太坊平台上创建智能合约的主要选择之一。 学习Solidity的重点包括以下几方面: 语法和数据类型:学习Solidity的基本语法、数据类型、变量声明和函数定义等。 智能合约:了…

刷完这个笔记,17K不能再少了....

大家好,最近有不少小伙伴在后台留言,得准备面试了,又不知道从何下手!为了帮大家节约时间,特意准备了一份面试相关的资料,内容非常的全面,真的可以好好补一补,希望大家在都能拿到理想…

cobaltstrike之execute-assembly内存加载—后渗透利用

通过execute-assembly内存加载来执行文件,从而避免后渗透中被杀毒软件静态报毒,使更多的工具能够继续利用,常见的方式有权限维持,代理上线等操作 远程bin文件加载 首先尝试远程加载bin文件 使用项目https://github.com/shanekha…

IO 多路转接之 epoll

文章目录 IO 多路转接之 epoll1、IO 多路转接之 poll1.1、poll 函数1.2、poll 函数返回值1.3、Socket 就绪条件1.3.1、读就绪1.3.2、写就绪1.3.3、异常就绪 1.4、poll 的优点1.5、poll 的缺点1.6、poll 改写 select 2、IO 多路转接之 epoll2.1、epoll 函数2.2、epoll_create2.3…

视频字幕生成:分享6款专业易操作的工具,让创作更简单!

​视频字幕如何添加?日常剪辑Vlog视频时,就需要给视频添加上字幕了。字幕是一个比较重要的元素,它不仅可以帮助听力受损或语言障碍的人士理解内容,还可以让你的视频更加易于理解和吸引观众。 那么如何实现视频字幕生成&#xff0c…

Linux 进程与进程状态

目录 1.进程。 1.进程的概念 2.并行和并发 3.并行和并发的区别: 4.PCB(程序控制块) 5.进程组与会话。 6.进程状态。 1.进程。 1.进程的概念 进程是操作系统进行资源分配和调度的一个独立单位。每个进程都运行在操作系统的控制之下&…

8.进销存系统(基于springboot的进销存系统)

目录 1.系统的受众说明 2.开发技术与环境配置 2.1 SpringBoot框架 2.2 Java语言简介 2.3 MySQL环境配置 2.4 idea介绍 2.5 mysql数据库介绍 2.6 B/S架构 3.系统分析与设计 3.1 可行性分析 3.1.1 技术可行性 3.1.2 操作可行性 3.1.3经济可行性 3.4.1 数据库…

一些做题中总结的零散的python函数的简单运用

输出保留两位数的小数 将16进制(可修改)的数进制转换成十进制并输出 大小写转化,第一个是搞成全部大写的,第二个高成全部小写的,最后一个是搞成第一个是大写的其他全部是小写的 将这个n的两边空格去掉 使用print(n,end…

叶国富学得会胖东来吗?

“大家都看不懂就对了,如果都看得懂我就没有机会了。”昨晚,实体零售迎来一则重磅消息,名创优品获得了全国第二大连锁超市永辉超市的大股东身份。在资本市场负反馈的压力下,名创优品创始人叶国富有了上述回应。 消息公布后&#x…

2.以太网

局域网 局域网: Local Area Networks (LAN) 网络大小分类 局域网园区网(可以理解为企业网)城域网 广域网是一个网络连接的技术,并非多大范围的网络 网关 为局域网内的用户提供了一扇门,通过网关可以访问到别的网络。这个门,就叫网关 以…

解决你的IDE在使用的时候测试单元@Test在创建Scanner对象是键盘键入不了的问题;

插播一条快讯,我在我的ide中新创建 了project后发现我的测试单元不好使了,即 import org.junit.Test; 这个包在创建Scanner对象接受键盘时,控制台输入时没有任何反应,键入不了了,我的问题出现原因可能是我导入了JDBC…

BitSet-解决数据压缩问题

一、问题引入 假设QQ音乐服务器上有9000万首音乐,用户按照歌名来搜索歌曲,如何使得满足这一需求所需的数据占用的内存空间最小以及用户搜索歌曲速度更快 二、分析问题 1、为了满足使得数据占用的内存更小,可以采用映射的思路,按…

【2024W35】肖恩技术周刊(第 13 期):肉,好次!

周刊内容: 对一周内阅读的资讯或技术内容精品(个人向)进行总结,分类大致包含“业界资讯”、“技术博客”、“开源项目”和“工具分享”等。为减少阅读负担提高记忆留存率,每类下内容数一般不超过3条。 更新时间: 星期天 历史收录:…