转,大佬关于虚拟内存与物理内存关系讲解。
内容来自:《0day安全:软件漏洞分析技术》
关于物理内存与虚拟内存讲得不错,通俗易懂。所以转一下。
Windows 的内存可以被分为两个层面:物理内存和虚拟内存。其中,物理内存比较复杂,需要进入 Windows 内核级别 ring0 才能看到。通常,在用户模式下,我们用调试器看到的内存地址都是虚拟内存。
如图所示,Windows 让所有的进程都“相信”自己拥有独立的 4GB 内存空间。但是,我们计算机中那根实际的内存条可能只有512MB,怎么可能为所有进程都分配4GB的内存呢?
这一切都是通过虚拟内存管理器的映射做到的。
![](/assets/blank.gif)
虽然每个进程都“相信”自己拥有 4GB 的空间,但实际上它们运行时真正能用到的空间根本没有那么多。内存管理器只是分给进程了一片“假地址”,或者说是“虚拟地址”,让进程们“认为”这些“虚拟地址”都是可以访问的。如果进程不使用这些“虚拟地址”,它们对进程来说就只是一笔“无形的数字财富”;当需要进行实际的内存操作时,内存管理器才会把“虚拟地址”和“物理地址”联系起来。
Windows 的内存管理机制在很大程度上与日常生活中银行所起的金融作用有一定的相似性,我们可以通过一个形象的比方来理解虚拟内存。
进程相当于储户。
内存管理器相当于银行。
物理内存相当于钞票。
虚拟内存相当于存款。
进程可能拥有大片的内存,但使用的往往很少;储户拥有大笔的存款,但实际生活中
的开销并没有多少。进程不使用虚拟内存时,这些内存只是一些地址,是虚拟存在的,是一笔无形的数字财富。
进程使用内存时,内存管理器会为这个虚拟地址映射实际的物理内存地址,虚拟内存
地址和最终被映射到的物理内存地址之间没有什么必然联系;储户需要用钱时,银行
才会兑换一定的现金给储户,但物理钞票的号码与储户心目中的数字存款之间可能并
没有任何联系。操作系统的实际物理内存空间可以远远小于进程的虚拟内存空间之和,仍能正常调度;
银行中的现金准备可以远远小于所有储户的储蓄额总和,仍能正常运转,因为很少会
出现所有储户同时要取出全部存款的现象;社会上实际流通的钞票也可以远远小于社
会的财富总额。
题外话:实际上,金融学、经济学、管理学中有很多概念和理论与计算机科学中的知
识出奇相似。有时将这些知识互相类比一下会获得一种融会贯通的清爽。
进程所拥有的 4GB 虚拟内存中包含了程序运行时所必需的资源,比如代码、栈空间、堆
空间、资源区、动态链接库等。
转,大佬关于虚拟内存与物理内存关系讲解。相关推荐
- 转载,大佬关于虚拟内存与物理内存关系讲解。
内容来自:<0day安全:软件漏洞分析技术> 关于操作系统与组原课程中比较棘手的虚拟内存与物理内存讲解简单易懂!所以转述一下! Windows 的内存可以被分为两个层面:物理内存和虚拟内存 ...
- 详解操作系统中虚拟内存与物理内存的关系
点击链接: 一文理解虚拟内存.物理内存.内存分配.内存管理 - 知乎 目录 一.虚拟内存与物理内存 1.1 虚拟内存 1.2 虚拟内存与物理内存 二.C/C++中虚拟内存分配模型 2.1 C语言中内存 ...
- 虚拟内存与物理内存之间的关系
操作系统有虚拟内存与物理内存的概念.在很久以前,还没有虚拟内存概念的时候,程序寻址用的都是物理地址.程序能寻址的范围是有限的,这取决于CPU的地址线条数.比如在32位平台下,寻址的范围是2^32也 ...
- Linux 内存管理 详解(虚拟内存、物理内存,进程地址空间)
Linux -操作系统内存管理 存储系统 存储器的层次结构 Linux的内存管理 物理内存 物理内存管理 虚拟内存 虚拟地址空间 (写时拷贝) 和物理地址映射关系 页表 虚拟内存优缺点 「在 4GB ...
- 详解进程的虚拟内存,物理内存,共享内存
目录 写在前面: 一.关于内存的两个概念 1.1 虚拟内存 1.2 驻留内存 二.详解top命令中VIRT.RES和SHR 2.1 top命令中ⅥRT.RES和SHR的含义 三.进程的smaps文 ...
- 操作系统——Linux 虚拟内存和物理内存的理解
虚拟内存: 第一层理解 1..每个进程都有自己独立的4G内存空间,各个进程的内存空间具有类似的结构: 2.一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间 ...
- 虚拟内存与物理内存的区别,
第一层理解 1.每个进程都有自己独立的4G(32位系统下)内存空间,各个进程的内存空间具有类似的结构 2.一个新进程建立的时候,将会建立起自己的内存空间,此进程的数据,代码等从磁盘拷贝到自己的进程空间 ...
- 计算机操作系统——虚拟内存与物理内存
虚拟内存与物理内存 如何管理内存? 当多个程序同时运行时,如何让多个应用程序共同使用物理内存资源?有两种简单的方法: 使某一个应用程序独占所有的内存资源.一个程序要运行就将另一个程序的内存数据转存到硬 ...
- 24|虚实结合:虚拟内存和物理内存
24|虚实结合:虚拟内存和物理内存 你好,我是LMOS. 上一课中学习了内存地址空间,我们搞清楚了内存地址与地址空间的本质. 今天我们开始学习虚拟内存与物理内存.其实虚拟内存也好,物理内存也罢,我们从 ...
最新文章
- 英特尔收购Movidius背后:为什么我们需要一款专门的CV处理芯片?
- XFTP无法将宿主机文件上传到虚拟机的解决方案
- Delphi Math里的基本函数,以及浮点数比较函数(转)
- 【转】Nginx服务器的反向代理proxy_pass配置方法讲解
- pdfstamper生成pdf无法显示汉字_正点原子STM32F4/F7水星开发板资料连载第四十六章 汉字显示实验...
- python 进程与线程(理论部分)
- anaconda下python中matplotlib画图无法显示中文
- 局域网聊天软件源码解析
- 怎么在eclipse中安装properties插件使其显示中文
- 几种简单的负载均衡算法及其 Java 代码实现
- uva 12086 树状数组
- 健康医药企业营销数字化心法100条
- html制作凤凰网,有哪些不用编写代码就能轻松制作生成HTML5页面的工具
- java 第十一章 多线程技术
- 微博热词搜索并生成云词html(完整)
- 1375 灯泡开关 III
- RPC 就好像是谈一场异地恋
- Example 3, 4 of variadic templates
- iOS安全攻防(九)使用Theos开发SpringBoard的Tweat
- POI2014Salad Bar
热门文章
- 开源生态也难逃“卡脖子”危机?中国AI开发者的警醒和突围
- Google提出移动端新SOTA模型MixNets:用混合深度卷积核提升精度
- 全面分析阿里数据中台,小白也能看懂 | CSDN原力计划
- 云厂商和开源厂商“鹬蚌相争”,他却看到了开发者的新机会
- Flink最锋利的武器:Flink SQL入门和实战 | 附完整实现代码
- 直播写代码|英伟达工程师亲授如何加速YOLO目标检测
- 中国AI开发者真实现状:写代码这条路,会走多久?
- 请收下这份NLP热门词汇解读
- 大家都收藏了的最新开源项目Top12!CV、NLP、机器学习一应俱全
- MySQL 性能优化的 9 种姿势,面试再也不怕了!