没有内存管理(虚拟空间管理)将导致的问题:
问题一、程序直接访问物理空间,各个程序之间不能实现地址隔离,往往导致某些有bug的程序越界访问另一个程序的物理地址空间从而引发不可预见的错误。各个程序之间独立互相不影响是程序开发的宗旨。
问题二、内存使用效率低,当有新的程序需要占用内存,需要大量的数据换入换出。
问题三、程序需要整个装入内存的时候,需要在物理地址中寻找到一个足够大的空间,那么程序装入的地址就是不固定的了,这就导致程序的重定位有问题。
解决这几个问题的办法就是引入虚拟地址空间的概念,通过映射的办法,将虚拟地址空间和物理地址空间进行映射。
地址隔离也就是问题一是最重要的
虚拟地址空间是人为设计出来的,每个进程有自己独立的虚拟地址空间,也只能访问自己的物理地址空间,所以有效的杜绝了程序和程序之间的物理地址越界访问。
分段(segment)可以解决一些问题
分段的操作方式是将和进程虚拟空间大小相同的一段物理空间和虚拟空间之间做好映射关系,那么系统只要保证程序运行在属于自己的物理空间就可以正常运行,切程序之间的物理空间也做到了有效的隔离,同时不涉及到程序的重定位问题,所以有效的解决了问题一和问题三。但是分段并没有解决问题二,程序的装载还是整个装入的,实际上进程往往频繁使用的是部分变量,不需要将整个程序进行装载,所以这里需要一种更加细分的地址管理方式。
更加细化的地址管理方法是分页(paging)
将物理空间和虚拟空间都划分成等大小的页,页的大小是由硬件决定的,目前的PC上基本上页的大小是4KB。在程序运行的时候,把常用的数据和代码页装入物理内存,把不常用的页放入磁盘内存,