首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于“虚拟内存”的一些有关问题

2012-08-11 
关于“虚拟内存”的一些问题先看书上的一段话:虚拟内存的基本思想是:每个程序拥有自己的地址空间,这个空间被

关于“虚拟内存”的一些问题
先看书上的一段话:
  虚拟内存的基本思想是:每个程序拥有自己的地址空间,这个空间被分割成多个块,每一块称作一个页面。每一页有连续的地址范围。这些页被映射到物理内存,但并不是所有的页都必须在内存中才能运行程序。当程序引用到一部分在物理内存中的地址空间时,由硬件立刻执行必要的映射。当程序引用到一部分不在物理内存中的地址空间时由操作系统负责将缺失的部分装入物理内存并重新执行失败的指令。


1、程序拥有自己的地址空间
问:地址空间在物理内存还是硬盘?地址空间的大小和程序本身一样大?

2、这个空间被分割成多个块
问:块的大小由操作系统决定?还是在编译的时候由编译器决定?还是在运行程序时初始化时候决定?

3、这些页被映射到物理内存
问:映射是怎么样一个动作?

4、当程序引用到一部分在物理内存中的地址空间时,由硬件立刻执行必要的映射
问:映射不是在物理内存和硬盘之间的一个动作吗,已经在物理内存了怎么还映射?

[解决办法]
程序拥有自己的地址空间,这里的地址空间指的是进程地址空间,32位下大小是4GB,这4GB的地址空间是“虚拟”的,并不是真实存在的。块的大小记得好像是由CPU决定。逻辑地址(虚拟地址)到物理地址的转换由MMU(内存管理单元)来执行,具体过程未曾深究。

当程序引用到一部分不在物理内存中的地址空间时由操作系统负责将缺失的部分装入物理内存并重新执行失败的指令。
最后一问你少打了个字,如果要访问的数据不在物理内存就会发生缺页中断
说错了楼下斧正。
[解决办法]
楼主阅一个操作系统教科书就知道
operating system concepts或modern operating systems
[解决办法]
本菜鸟的理解:

1:地址空间(内存空间)跟物理内存/硬盘没有丝毫的关系,它是根据CPU指令寻址范围规定的一个范围大小,比如32位下是4G。 windows下双击exe启动进程时,系统会使用内存映射将该文件以及必要的库加载至内存中,所以程序本身大小必定(远)小于地址空间大小。


2:块的区分是由操作系统规定,但编译器去实现,比如对NULL指针赋值。

3:保留一个地址空间的特定页面,并将物理存储器提交给该区域。参考API:VirtualAlloc/VirtualAllocEx


4:这里的映射跟问题3中的映射概念不同。此处是指将虚拟地址转换为存储器的真实地址




热点排行