内存管理的需求
重定位
通常情况下,并不能事先知道在某个程序执行期间会有哪个程序驻留在主存中。此外还希望通过提供一个巨大的就绪进程池,能够把活动进程换入和换出主存,以便使处理器的利用率最大化。因此一旦程序被换出磁盘,当下一次被换入时,必须放在被换出前相同的内存区域。
保护
由于程序在内存中的位置是不可预测的,因而在编译时不可能检查绝对地址来保护。并且大多数程序设计语言允许在运行时进行
地址的动态计算。因此,必须在运行时检查进程产生的所有存储器访问,以便确保它们只访问了分配给该进程的存储空间。
共享
任何保护机制都必须具有一定的灵活性,以运行多个进程访问内存的同一部分。
逻辑组织
计算机系统中的内存总是被组织成线性的地址空间,并且地址空间是由一系列字节或字组成。
物理组织
内存分区
内部碎片:由于被装入的数据库小于分区大小,从而导致分区内部有空间浪费,这种现象称为内部碎片。
外部碎片:外部碎片是与动态分区相关的一种现象,它是指在所有分区外的存储空间会变成越来越多的碎片的。
动态分区的放置算法
最佳适配:选择与要求的大小最接近的块。
首次适配:从投开始扫描内存,选中大小足够的第一个可用块。
下次适配:从上一次放置的位置开始扫描内存。
分页
内存被划分成大小相同的块,且块相对比较小,每个进程也被分成同样大小的小块,那么进程中称为页的块可以指定到内存中称为页框的可用块。
分段
采用分段技术,可以把程序和其相关的数据划分到几个段中。尽管段有一个最大长度限制,但并不要求所有程序的所有段的长度都相等
逻辑地址转换成物理地址: