内存不够怎么办?
早期的计算机中,程序是直接运行在物理内存上的,也就是说程序运行是所访问的地址都是物理地址。这样回出现很多问题。
- 地址空间不隔离
- 内存使用效率低
- 程序运行的地址不确定
解决方法
增加中间层,使用一种间接访问地址的方法,整体的想法是,把程序给的地址看做是一个虚拟地址,然后通过,某些映射的方法,将虚拟地址转换成实际的物理地址,这样,只要能够妥善地控制这个虚拟地址到物理地址的映射过程,就可以 保证任意一个程序能够访问的物理内存区域跟另外一个程序互相不重叠,咦达到地址空间隔离的效果。
关于隔离
程序的运行本质,用户程序在运行时不希望介入到这些复杂的储存器管理过程中,作为普通的程序,它需要的是一个简单的执行环境,有一个单一的地址空间,有自己的CPU,好像整个程序占有整个计算机而不关心其他的程序。
虚拟地址空间是指虚拟的,人们想象出来的地址空间,其实它并不存在,每个进程都有自己独立的虚拟空间,而且每个进程只能访问自己的地址空间,这样就有效地做到了进程的隔离。
分段
分段方法:基本思路是把一段与程序所需要的内存空间大小的虚拟空间映射到某个地址空间。分段方法基本解决的上面提到了第一个问题和第三个问题。
对于第二个问题,即内存的使用效率问题,人们想到了更小粒度的内存分割和映射的方法,使得程序的局部性原理得到充分的利用,大大提高了内存的使用率,这种方法就是分页(paging)
分页(Paging)
分页的基本方法是把地址空间人为地等分为固定大小的页,每一页的大小由硬件决定或硬件支持多种大小的页,有操作系统选择决定页的大小。
我们吧虚拟空间的页就叫虚拟页(VP),把物理内存中的页叫做物理页(PP),把磁盘中的页叫做磁盘页(DP)。