2014-10-17 95 views
-1

据我所知,一个进程被分配了真实的内存空间,即RAM。这是固定的,所以如果进程需要更多的内存,它从虚拟内存中获取它。虚拟内存是否总是为进程提供更大的地址空间?

因此,虚拟内存所做的只是根据需要将页面调入/调出进程内存空间,然而,进程REAL内存空间保持不变。

我的问题是,虚拟内存是否有可能在物理上改变进程的实际内存空间以增加内存?

+0

据我所知,虚拟内存的主要原因是传统的令人兴奋的代码始终在内存中的相同地址开始。这意味着你只能运行一个程序,虚拟内存映射内存,以便程序不会重叠并覆盖它们的可执行代码。 – rekire 2014-10-17 05:17:26

+0

@rekire那么这是否意味着当进程正在运行时,磁盘正在从虚拟内存读取,因为它的顺序? – Ogen 2014-10-17 05:18:45

+0

没有那是别的东西硬盘驱动器只用于如果内存满了。这对于“隐藏”程序的性能不利,因为在恢复时,它必须在硬盘驱动器上缓慢(延迟)地进行。 – rekire 2014-10-17 05:24:00

回答

1

在过分简化的风险下,一个进程被分配一个页表(为了简单起见,假设一个页面)。页面表中有许多条目。每个条目代表内存中的潜在页面。页表的最大大小受处理器地址空间的限制。但是,操作系统可能会限制页面大小比此更小。 (假设每个可执行文件都启动一个新进程)应用程序加载程序会将地址空间设置为包括所有静态数据,可执行代码,预先分配的可修改数据和初始状态的初始状态。

此时没有物理内存。

程序启动时,它会引用虚拟内存中没有物理内存(页面错误)的页面。操作系统然后将物理内存页面分配给虚拟页面。在启动时会出现许多页面错误。

随着应用程序的运行,它可以分配更多的虚拟内存达到页表大小的限制。

随着应用程序的运行,操作系统可以将物理内存重新映射到虚拟内存。程序运行时,相同的虚拟地址可以有多个物理地址。

所以这是一个不正确的假设。

据我所知,一个进程被分配了真实的内存空间,即RAM。这是固定的,所以如果进程需要更多的内存,它从虚拟内存中获取它。

这是不正确的:

那么虚拟内存不只是交换页面进入/退出进程的内存空间的要求,但是,过程实际内存空间保持不变。

是这样的:

我的问题是,有可能是为了给它更多的内存虚拟内存物理改变进程的真实内存空间?

相关问题