如何将计算机上有限的物理内存分配给多个程序使用
假设计算机有128MB的内存,程序A需要10MB,程序B需要100MB,程序C需要20MB;如果需要同时运行A,B,那麽比较直接的做法就是把内存的前10MB给A,10-110给B;这样A,B就可以同时运行了;但这样的分配会有很多问题
问题一:程序空间不隔离
问题二:内存使用效率低
问题三:程序运行地址不确定
1: 首先介绍地址空间分为虚拟地址空间和物理地址空间
物理地址空间:内存的大小;比如32位机器有32条地址线,这样它的大小就是2^32=4GB;但是若你的内存只有512MB,那么真实有效的部分只有0x00000000~0x1FFFFFFF.
虚拟地址空间:人们想象出来的,实际上并不存在的;每个进程都有自己的虚拟空间,而每个进程只能访问自己的虚拟空间,这样每个进程都是相互独立的了。
2:分段:
解决地址空间不隔离和程序运行地址不确定的问题。
分段就是以程序为单位把虚拟地址和实际地址一一映射,映射有软件来设置映射函数,实际转换由硬件完成;这样A,B就会被映射到两块不同的物理空间,他们之间不会有任何重叠;且使得地址透明化就可以解决地址空间不隔离和程序运行地址不确定的问题。
3:分页:
解决内存使用效率低
可以使电脑的主存可以使用存储在辅助存储器中的数据。操作系统会将辅助存储器(通常是磁盘)中的数据分区成固定大小的区块,称为“页”。当不需要时,将分页由主存(通常是内存)移到辅助存储器;当需要时,再将数据取回,加载主存中。相对于分段,分页允许存储器存储于不连续的区块以维持文件系统的整齐。分页是磁盘和内存间传输数据块的最小单位;页映射通过MMU来实现