进程虚拟地址空间

 个人幕布文档:https://mubu.com/doc/vQfZHGsDG0

 

进程虚拟地址空间的引入

  1.程序与进程的区别

  • 程序: 静态 预先编译好的指令和数据的集合 的一个文件 #菜谱
  • 进程:动态 程序运行的过程 #炒菜的过程

 2.虚拟地址空间: 程序运行后拥有自己独立的虚拟空间

  • 大小: CPU位数决定 指针大小与虚拟地址空间位数相同
  • 32 位平台 *p 32位==4byte 64位 *p 64位 == 8 byte
  • Windows下可以通过参数 将 操作系统所占用的空间减少为 1 GB / Boot .ini 加上 /3G 参数

图: Linux下内存的布局

 

Windows下内存的布局空间

 

 

【问题1】32位CPU下,程序的使用空间能否超过4GB

 

虚拟地址空间的使用

虚拟地址空间的使用涉及到3个概念:页面大小、分配粒度、预定和调拨

页面大小

  • 虚拟地址空间被分成以“页面”为单位,因为硬件内存管理单元是以页面为粒度将虚拟地址转译成物理地址的。
  • 页面的大小根据不同的CPU不而有所不同。x86和x64系统使用的页面大小都是4KB,而IA-64系统使用的页面大小是8KB。
  • 程序在虚拟空间进行内存分配的时候,系统需要确保分配区域的大小正好是系统“页面” 大小的整数倍

分配粒度

  • 当应用程序在从虚拟地址空间分配空间时,系统会确保所有分配区域的起始地址都是分配粒度的整数倍。
  • 分配粒度的会根据不同的CPU平台而有所不同,但目前所有的CPU平台的分配粒度都是使用64KB。也就是说,分配的起始地址 = 64 * N。
  • 通过Windows的 #GetSystemInfo 函数也可以获得此分配粒度值。

预定和调拨

  • 虚拟地址空间的分配需要两个步骤: 预定 和 调拨
  • 预定(reserve):告诉系统我们要从虚拟地址空间预定哪一块区域,系统为我们保留这一块区域。预定的局域的起始地址和大小遵循上面介绍的分配粒度和页面大小的要求。因为预定的只是虚拟地址空间,不占用任何其他物理存储器,所以没有形成实质的开销。
  • 调拨(commit):预定的区域还不能使用,我们还需要为预定的区域从页交换文件中调拨存储器,调拨之后我们才能使用该区域。

 

【问题】为什么要从页交换文件中调拨存储器?

【问题】页交换文件如何与物理内存之间交互?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值