因为Redis 是基于内存的操作,我们先从内存开始说起。

虚拟存储器(虚拟内存Vitual Memory)

名词解释:主存:内存;辅存:磁盘(硬盘)

计算机主存(内存)可看作一个由M 个连续的字节大小的单元组成的数组,每个字节有一个唯一的地址,这个地址叫做物理地址(PA)。早期的计算机中,如果CPU 需要内存,使用物理寻址,直接访问主存储器。

这种方式有几个弊端:

1、在多用户多任务操作系统中,所有的进程共享主存,如果每个进程都独占一块物理地址空间,主存很快就会被用完。我们希望在不同的时刻,不同的进程可以共用同一块物理地址空间。

2、如果所有进程都是直接访问物理内存,那么一个进程就可以修改其他进程的内存数据,导致物理地址空间被破坏,程序运行就会出现异常。

为了解决这些问题,我们就想了一个办法,在CPU 和主存之间增加一个中间层。CPU不再使用物理地址访问,而是访问一个虚拟地址,由这个中间层把地址转换成物理地址,最终获得数据。这个中间层就叫做虚拟存储器(Virtual Memory)。

具体的操作如下所示:

在每一个进程开始创建的时候,都会分配一段虚拟地址,然后通过虚拟地址和物理地址的映射来获取真实数据,这样进程就不会直接接触到物理地址,甚至不知道自己调用的哪块物理地址的数据。

目前,大多数操作系统都使用了虚拟内存,如Windows 系统的虚拟内存、Linux 系统的交换空间等等。Windows 的虚拟内存(pagefile.sys)是磁盘空间的一部分。

在32 位的系统上,虚拟地址空间大小是2^32bit=4G。在64 位系统上,最大虚拟地址空间大小是多少?是不是2^64bit=1024*1014TB=1024PB=16EB?实际上没有用到64 位,因为用不到这么大的空间,而且会造成很大的系统开销。Linux 一般用低48 位来表示虚拟地址空间,也就是2^48bit=256T。

cat /proc/cpuinfo

address sizes : 40 bits physical, 48 bits virtual

实际的物理内存可能远远小于虚拟内存的大小。

总结:引入虚拟内存,可以提供更大的地址空间,并且地址空间是连续的,使得程序编写、链接更加简单。并且可以对物理内存进行隔离,不同的进程操作互不影响。还可以通过把同一块物理内存映射到不同的虚拟地址空间实现内存共享。

虚拟存储器(虚拟内存Vitual Memory)相关推荐

  1. 虚拟内存(Virtual Memory)

    文章目录 1.什么是虚拟内存(Virtual Memory) 2.局部性原理 3.虚拟存储器 4.虚拟内存的技术实现 4.1 虚拟内存的实现有三种方式 4.1.1 请求分页存储管理 4.1.2 请求分 ...

  2. 什么是虚拟内存(Virtual Memory)?

    很多时候我们使用点了开了很多占内存的软件,这些软件占用的内存可能已经远远超出了我们电脑本身具有的物理内存.为什么可以这样呢? 正是因为 虚拟内存 的存在,通过 虚拟内存 可以让程序可以拥有超过系统物理 ...

  3. 【承】Redis 原理篇——Redis 高性能深入剖析

    前言 关于 Redis 的"起承转合",我前面已经用五个篇章的长度作了一个 Redis 基础篇--"起"篇的详细阐述,相信大家无论之前有没有接触过 Redis, ...

  4. 虚拟存储器管理c语言_内存管理;虚拟内存

    内存管理 内存管理 操作系统的内存管理主要是做什么? 操作系统的内存管理主要负责内存的分配与回收(malloc 函数:申请内存,free 函数:释放内存),另外地址转换也就是将逻辑地址转换成相应的物理 ...

  5. 操作系统原理第九章:虚拟内存

    目录 1 虚拟内存的背景 1.1 局部性原理 1.2 虚拟内存 2 请求调页 2.1 页面调入策略 3 页面置换 4 页面置换算法 4.1 最佳算法(OPT, optimal) 4.2 先进先出置换算 ...

  6. 大剑无锋之简单介绍一下虚拟内存【面试推荐】

    内存是程序得以运行的基础,如何在有限的内存空间中运行较大的应用程序,曾经是一个难题,为了解决这个问题设计了许多方案,其中最成功的当属虚拟内存技术. 虚拟内存技术可以让系统看上去具有比实际物理内存大得多 ...

  7. 深入理解计算机系统--第九章虚拟存储器

    9.虚拟存储器 为了更加有效地管理存储器且少出错,现代系统提供了对主存的抽象概念,叫做虚拟存储器(VM). 虚拟存储器是硬件异常,硬件地址翻译,主存,磁盘文件和内核软件的完美交互. 为每个进程提供一个 ...

  8. 1.1 GB of1 GB physical memory used

    原文链接 : https://blog.csdn.net/dd390738878/article/details/9785679 问题描述:在跑一个mapreduce程序的过程中,提示内存溢出的错误, ...

  9. 【系统篇 / 优化】❀ 04. 扩大虚拟内存 ❀ Windows Server 2016

    [简介]正确的设置服务器的虚拟内存,可以提高服务器的稳定性.   虚拟内存概念 虚拟内存别称虚拟存储器(Virtual Memory).电脑中所运行的程序均需经由内存执行,若执行的程序占用内存很大或很 ...

最新文章

  1. 流量调整和限流技术 【转载】
  2. c++ 公有继承的赋值兼容规则
  3. jsp中如何将Java对象转成js对象?
  4. 嵌入式电路设计(linux soc电路设计)
  5. vue 中provide的用法_说一说VUE中的/deep/用法
  6. windows下WMI使用C++查询用户硬件信息
  7. 关于今日头条小程序(字节跳动小程序)相关问题
  8. Atitit diy战略 attilax总结
  9. c语言测试及答案,C语言测试题及答案解析
  10. [GW-CTF2019] babyvm
  11. 服务器被入侵了,怎么防范服务器被黑客入侵情况
  12. 利用 android手机DLNA功能,实现手机视频无线播放到电脑、电视
  13. 红米Android降级,红米Note 5(安卓9.0 不要降级刷低版本)纯净ROOT线刷包分享,一键救砖教程,轻松刷回官方系统,流畅如初!...
  14. 2018年总结, 2019年规划
  15. AlexNet_tensorflow2.1_实现狼狗分类
  16. Unsupervised Person Re-identification: Clustering and Fine-tuning
  17. C语言函数大全--f开头的函数(下)
  18. 一步步学习k8s(一)
  19. python复数的实部和虚部的数字类型_Python数据类型之数字
  20. 第六章 面向对象编程基础总结

热门文章

  1. 系统调用syscall---用户态切换到内核态的唯一途径
  2. ASP.NET Core:CMD命令行+记事本 创建Console程序和Web Application
  3. android TextView EditTextView一些技巧使用 (视图代码布局)
  4. visual studio 2010 开发net 2.0 3.5项目
  5. 【抓包工具】HttpWatch(功能详细介绍)
  6. 宜人贷蜂巢API网关技术解密之Netty使用实践
  7. freenas安装使用和弃坑
  8. http-helloworld
  9. Algs4-2.1.17动画-插入排序
  10. [Google Guava] 2.3-强大的集合工具类:java.util.Collections中未包含的集合工具