本文主要是介绍CSAPP 第九章---虚拟内存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.为什么需要虚拟内存
在第八章我们了解了进程的概念。在计算机系统中,多个进程会共享CPU和内存,当某个进程需要过多的内存空间,那么另外的某个进程可能就会因为无法获得足够的内存空间而无法运行。此外,当某个进程不小心把数据写入另一个进程的内存空间,就会造成令人头疼的问题。虚拟内存能有效避免以上问题。
2.什么是虚拟内存
在计算机操作系统中,虚拟内存是对主存储器(DRAM)的一种抽象,其为每个进程提供了一个大的、统一的和私有的地址空间。
大的:因为虚拟内存是映射关系,所以虚拟内存的最大空间就是CPU的最大寻址空间,不受内存大小的限制,能提供比内存更大的地址空间
统一的:虚拟内存将物理地址映射成一个连续的地址空间,同时将每个进程的地址空间分隔开,使得每个进程都以为自己独享地址空间。同时提供了统一的内存管理机制。
私有的:每个进程都有自己的虚拟地址空间,相互分隔,且进程只能访问自己的虚拟地址空间的内存。此外,映射是针对每个进程独立进行的。因此,不同进程的相同虚拟地址可能对应不同的物理地址。
那么,为什么虚拟内存是对主存储器(DRAM)的抽象,而不是高速缓存(SRAM)的抽象呢?
-
容量和成本考虑:主存储器(DRAM)通常拥有大容量但速度较慢,适合用于存储大量数据和地址空间管理,而高速缓存(SRAM)容量较小但速度更快,更适合存储近期频繁访问的数据。
-
访问延迟和速度差异:高速缓存(SRAM)用于提供快速访问速度,而虚拟内存技术涉及整个地址空间的管理,包括将数据从磁盘加载到主存储器中,这需要处理大量的地址映射和页面置换操作,与主存储器(DRAM)的访问速度更匹配。
-
抽象层次:虚拟内存提供了对地址空间的抽象,使得进程感觉自己拥有连续的地址空间,而不必关心实际的物理内存地址。这种抽象更适合用于主存储器(DRAM),因为它是整个系统内存的主要存储区域,与处理器的高速缓存子系统的低层缓存层次不同。
虚拟内存有以下三个重要功能:
- 将主存储器作为磁盘的缓存,只保留主存中的活跃区域并根据需要不断地在两者之间传输数据;
- 为每个进程提供统一的地址空间,从而简化内存管理;
- 保护每个进程的地址空间不被其他进程所破坏。
3.虚拟内存中的映射
未完待续。。。。。
这篇关于CSAPP 第九章---虚拟内存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!