虚拟内存 地址空间

转载 2016年08月31日 12:55:39

试试渲染,最合适自己的讲解方式:流程中穿插概念。

程序运行需经由内存执行。所以讲讲windows内存体系结构。

windows内存体系结构由虚拟地址空间和内存两部分组成。

内存:

如果每个程序运行都直接占用内存,那你开一个冰封王座岂不是要占1G的内存?还能不能干别的了。虚拟地址空间的设计简直是神来之笔。

给每个进程分配一个4G(32位系统来说)的虚拟地址空间。进程直接操作虚拟地址空间,读写数据时,才给它调拨物理存储器。

物理内存和虚拟内存关系:物理内存和虚拟内存对应。除OS外任何程序都不会直接访问物理内存而是访问虚拟内存。可把虚拟内存等同于物理内存。以后就只说内存,不再区分物理内存和虚拟内存。

页面文件和虚拟内存关系:可把虚拟内存等同于物理内存。改变页面文件大小可改变虚拟内存大小。详细来说:页面文件只是改变了物理内存的大小,当然也改变了虚拟内存的大小。(猜测:物理内存和虚拟内存的映射在大小上是1:1的。)可禁用页面文件但不能禁用虚拟内存。

虚拟地址空间和物理地址空间对应:虚拟地址空间指的是进程的可用地址空间范围。而物理地址空间指的是实际可用的内存空间范围。

虚拟地址空间:

虚拟地址空间也是分区的,并不是所有都可供用户使用。

系统创建进程并赋予它地址空间时,可用空间中的大部分都是闲置的或未分配的。要使用这部分地址空间,必须调用VirtualAlloc来分配其中的区域。分配区域的操作成为预订。预订地址空间时,系统会确保区域的起始地址正好是分配粒度的整数倍,区域大小正好是系统页面大小的整数倍。(分配粒度和系统页面大小据CPU不同而不同。)VirtualFree来释放分配的区域。

要使用所预定的地址空间,必须分配物理存储器,并将存储器映射到所预订的区域。此过程称为调拨物理存储器。物理存储器的调拨同预定区域一样,也是以页面为单位来进行。通过VirtualAlloc来调拨物理存储器,VirtualFree来释放物理存储器

页交换文件:

如今OS能把磁盘空间当内存使用,就是读写速度比较慢。磁盘上的文件一般称为页交换文件。把内存上的一部分保存到页交换文件中,并在应用程序需要时再将页交换文件中的对应部分载入内存。VirtualAlloc把物理存储器调拨给地址空间区域时,该空间实际上是从硬盘上的页交换文件分配的。

不在页交换文件中维护的物理存储器:

当执行一个程序时,系统会打开该程序对应的.exe文件并计算出应用程序的代码和数据的大小。然后系统会预订一块地址空间,并注明与该区域相关联的物理存储器就是.exe文件本身。系统并没有从页交换文件中分配空间,而是将.exe文件的实际内容(或叫文件映像)用作程序预订的地址空间区域。这样,不但载入程序快,而且页交换文件大小也合适。

当把一个程序位于硬盘上的文件映像(即一个.exeDLL文件)用作地址空间区域对应的物理存储器时,称这个文件映像为内存映射文件。当载入一个.exeDLL时,系统会自动预订地址空间区域并把文件映像映射到该区域,但系统也提供了一组函数,可让开发人员把数据文件映射到地址空间。

虚拟内存就是程序代码因不能直接访问物理内存而间接访问物理内存的机制。或者更具体点的这么说:虚拟内存技术说白了就是先给程序预订虚拟地址空间,再在需要时给虚拟地址空间调拨物理存储器,这样节省内存。

总汇:

相关文章推荐

Linux系统编程基础知识-Linux进程地址空间和虚拟内存

转载自:Linux进程空间和虚拟内存 一、虚拟内存 先来看一张图(来自《Linux内核完全剖析》),如下: 分段机制:即分成代码段,数据段,堆栈段...
  • PirLCK
  • PirLCK
  • 2016年05月06日 11:13
  • 176

Linux进程地址空间与虚拟内存

我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。   那虚...

linux系统编程之基础必备(五):Linux进程地址空间和虚拟内存

一、虚拟内存 先来看一张图(来自《Linux内核完全剖析》),如下: 分段机制:即分成代码段,数据段,堆栈段。每个内存段都与一个特权级相关联,即0~3,0具有最高特权级(内核),3则是最低特权...

进程虚拟地址空间与物理内存关系

在进入正题前先来谈谈操作系统内存管理机制的发展历程,了解这些有利于我们更好的理解目前操作系统的内存管理机制。 一 早期的内存分配机制 在 早期的计算机中,要运行一个程序,会把这些程序全都装入内存,...

一次外场宕机引发对linux内存管理的进一步思考--Linux虚拟地址空间如何分布

这边文章主要从一次宕机事故引申对linux内存布局的思考、对内存分配的思考、对linux保护机制的思考、对swap交换去的思考。...

内存虚拟地址空间的划分空间

当我们编码的时候我们的源程序一般都放在硬盘上,然后当我们使用这个程序时电脑就会在内存上运行这个程序,然而电脑内存资源是十分紧缺的,一般电脑内存都是4g,8g,2g。。所以当我们运行程序时并不是直接在内...
  • wp1995
  • wp1995
  • 2016年11月05日 20:02
  • 189

分段 分页 虚拟内存空间 逻辑地址 物理地址

一、虚拟内存空间虚拟内存空间是系统的一种技术,当程序被载入内存时,运用虚拟内存空间技术让程序误认为自己目前独占电脑内存,能够占用电脑所有的内存,访问所有内存地址。 以32位操作系统为例: 32位系...

内存地址空间计算工具

  • 2009年06月10日 15:07
  • 204KB
  • 下载

内存分配与显卡地址空间

  • 2011年05月24日 00:23
  • 2KB
  • 下载

进程的虚拟地址空间(转)

本篇幅为转载,转载地址点击打开链接 昨晚看到了深夜,终于对进程的虚拟地址空间有了个大致的了解,很激动,也很欣慰。回头想来,一个程序员,真的应该知道这些知识,否则还真不太称职。 首先告诉大家...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:虚拟内存 地址空间
举报原因:
原因补充:

(最多只允许输入30个字)