关于虚拟存储器、虚拟内存和交换空间的理解

虚拟存储器、虚拟内存和交换空间这三个概念从看CSAPP开始很长一段时间都在困扰着我,网上各说纷云,等快上完操作系统和计组课才算明白了!

先说虚拟存储器,CSAPP上介绍的是虚拟存储器是对主存的抽象概念,为每一个进程提供了一致的地址空间形式,也就是虚拟地址空间(这个地址空间不是用什么数组存起来的,而是CPU要访问内存就产生一个虚拟地址,不断累积组成的虚拟地址空间),它是一种机制,一种将主存抽象成磁盘高速缓存的技术。当初构造虚拟存储器的两个主要动机:允许在多道程序之间有效而安全地共享存储器;消除一个小而受限的主存容量对程序设计造成的影响。40年后,第一条变成了主要设计动机。现代操作系统都支持虚拟存储器,所有的应用程序访问内存都需要地址翻译。

虚拟内存和交换空间,这两个概念要和操作系统一起说,window下的“虚拟内存”实际上是存在磁盘上的页面文件,和linux的交换空间概念一样,都是物理上实际存在的东西,如果内存够用,没有缺页,你禁掉这两个东西不会影响虚拟存储器;然而撇开操作系统,只谈理论,虚拟内存还是一种技术,它允许执行进程不必完全放在内存中。这两种其实都属于交换技术,交换技术除了因为内存紧张要使用之外,还有在一些操作系统如分时系统中为了改善进程组合(CPU密集型和IO密集型)也要用它进行中期调度。

总结一下,传统意义上的虚拟内存和交换空间就是指能实际分配的磁盘空间,而虚拟存储器是一种机制,是整个CPU访问内存过程的体现。其实内存管理、虚拟内存技术、虚拟存储器都是密不可分的概念,你可以说虚拟存储器就是虚拟内存技术,也可以说内存管理机制就是虚拟存储器,抠字眼都是无意义的,因为可能书的翻译不同,理解不同。但是只要知道它们只是内存管理分页机制的体现,从CPU生成虚拟地址到MMU翻译生成物理地址,到查找PTE,再到缺页,页置换,这整个过程需要CPU、内存和磁盘的参与,只要理解了这些就理解了内存分页管理机制,不必抠字眼。

你可能感兴趣的:(操作系统)