转载,大佬关于虚拟内存与物理内存关系讲解。

内容来自:《0day安全:软件漏洞分析技术》

关于操作系统与组原课程中比较棘手的虚拟内存与物理内存讲解简单易懂!所以转述一下!

       Windows 的内存可以被分为两个层面:物理内存和虚拟内存。其中,物理内存比较复杂,需要进入 Windows 内核级别 ring0 才能看到。通常,在用户模式下,我们用调试器看到的内存地址都是虚拟内存。
       如图 所示,Windows 让所有的进程都“相信”自己拥有独立的 4GB 内存空间。但是,
我们计算机中那根实际的内存条可能只有512MB,怎么可能为所有进程都分配4GB的内存呢?

     这一切都是通过虚拟内存管理器的映射做到的。

       虽然每个进程都“相信”自己拥有 4GB 的空间,但实际上它们运行时真正能用到的空间根本没有那么多。内存管理器只是分给进程了一片“假地址”,或者说是“虚拟地址”,让进程们“认为”这些“虚拟地址”都是可以访问的。如果进程不使用这些“虚拟地址”,它们对进程来说就只是一笔“无形的数字财富”;当需要进行实际的内存操作时,内存管理器才会把“虚拟地址”和“物理地址”联系起来。
       Windows 的内存管理机制在很大程度上与日常生活中银行所起的金融作用有一定的相似性,我们可以通过一个形象的比方来理解虚拟内存。

  •  进程相当于储户。

  •  内存管理器相当于银行。

  •  物理内存相当于钞票。

  •  虚拟内存相当于存款。

  •  进程可能拥有大片的内存,但使用的往往很少;储户拥有大笔的存款,但实际生活中
    的开销并没有多少。

  •  进程不使用虚拟内存时,这些内存只是一些地址,是虚拟存在的,是一笔无形的数字财富。

  •  进程使用内存时,内存管理器会为这个虚拟地址映射实际的物理内存地址,虚拟内存
    地址和最终被映射到的物理内存地址之间没有什么必然联系;储户需要用钱时,银行
    才会兑换一定的现金给储户,但物理钞票的号码与储户心目中的数字存款之间可能并
    没有任何联系。

  •  操作系统的实际物理内存空间可以远远小于进程的虚拟内存空间之和,仍能正常调度;
    银行中的现金准备可以远远小于所有储户的储蓄额总和,仍能正常运转,因为很少会
    出现所有储户同时要取出全部存款的现象;社会上实际流通的钞票也可以远远小于社
    会的财富总额。

题外话:实际上,金融学、经济学、管理学中有很多概念和理论与计算机科学中的知
识出奇相似。有时将这些知识互相类比一下会获得一种融会贯通的清爽。

       进程所拥有的 4GB 虚拟内存中包含了程序运行时所必需的资源,比如代码、栈空间、堆
空间、资源区、动态链接库等。

发布了592 篇原创文章 · 获赞 1353 · 访问量 115万+

猜你喜欢

转载自blog.csdn.net/weixin_42859280/article/details/104206722
今日推荐