虚拟内存技术

虚拟内存技术允许执行进程不必完全的在内存当中,这种方案的显著的优点就是程序可以比物理内存大,虚拟内存其实就是把内存抽象成了一个巨大的、统一的存储数组,进而会将用户所看到的逻辑内存与物理内存分开

这种技术是允许程序员不受内存存储的限制,虚拟内存也允许进程很容易地共享文件和地址空间,还会为创建进程提供了有效的机制,但是虚拟内存的实现如果我们使用不当的会会大大地降低其的性能

其实指令必须都在物理内存这一个限制就使得程序的大小被限制在物理内存的大小以内,在很多情况下我们是不需要将整个程序放到内存中的,比如说程序中处理错误异常的代码,这些错误即使有其实也是很少发生的,因为这样的代码几乎不执行,以及某些几乎很少用的程序

虚拟内存技术其实就是将用户逻辑内存和物理内存分开,这在现有物理内存有限的情况下,为程序员提供了巨大的虚拟内存,这里需要注意的是物理地址是可以按页帧来组织的,且分配给进程的物理页帧也可能是不连续的,这就需要内存管理单元(MMU)将逻辑页映射到内存的物理页帧

这里写图片描述

随着动态内存分配,堆可以向上生长,类似着随着子程序的不断调用,栈可以向下生长。堆与栈的生长时,才需要实际的物理页,包括空白的虚拟地址空间称为稀地址空间
这里写图片描述

采用稀地址空间的优点就是随着程序的执行,栈或堆段的生长或需要载入动态链接库(或是共享对象)时,这些空白可以填充

虚拟内存允许文件和内存通过共享页而为两个或者多个进程所共享,这带来了以下的优点

通过将共享对象映射到虚拟地址空间,系统库可以为多个进程所共享,虽然每个进程都认为共享库是其虚拟地址空间的一部分,而共享库所用的物理内存的实际页是为所有进程所共享,通常来说,库是按只读方式来链接每个进程的空间

虚拟内存允许进程共享内存,两个或多个进程之间可以通过共享内存来通信。虚拟内存允许一个进程创建内存区域,以便与其他进程进行共享,共享该内存区域的进程认为它是其虚拟地址空间的一部分,而事实上这一部分是共享的

这里写图片描述

扫描二维码关注公众号,回复: 1103757 查看本文章

猜你喜欢

转载自blog.csdn.net/zcmuczx/article/details/80422590