我们知道由于CPU的访问速度远大于硬盘等存储设备的访问速度,所以为了弥补这两中硬件之间的速率差异,增加了比硬盘快很多的内存。摩尔定律告诉我们CPU的速率提高的很快,而内存速率增长的很慢,虽说近几年两者之间速率的差增长的较慢了,但是这种速率差依旧很大,所以又引入了比内存更快的Cache,我们对各个设备的访问速率进行简单的排名:
- CPU寄存器
- CPU cache
- 内存
- 硬盘等存储设备
- 鼠标等外设 除了速率冲突之外,为了实现多任务的需求,往往会出现一些问题:
- 内存访问冲突,这往往是多个程序使用同一块内存空间导致的;
- 内存不够用,每个程序都需要自己单独使用一块内存,内存大小就成了任务数量的瓶颈;
- 程序开发成本高,程序需使用多少内存,内存地址是多少,都不能搞错,正确的开发难度高。 所以引入了虚拟内存的概念,所有程序使用统一的连续虚拟内存,从程序角度来看它会觉得自己独享了一整块内存,这也就解决了第一个问题——冲突问题。 二来对于内存不够用的问题,虚拟内存本质上是将磁盘当成了最终存储,程序往往从虚拟内存上申请了很大的空间使用,但操作系统不会真的在物理内存上开辟大空间,往往只是开辟一小块。当程序访问内存时,操作系统发现访问的地址无法转为物理地址就在开辟空间给程序使用,如果成功转换,就正常访问。 对于进程而言虚拟内存屏蔽了底层的RAM和磁盘,并向进程提供了远超物理内存大小的内存空间。