单一连续分配:分为系统区和用户区,用户区只有一个程序,只能供单用户、单任务使用。有内部碎片
固定分区分配:提前划分分区表,将内存分区。可能程序过大难以放入分区。或太小,利用率低。有内部碎片
动态分区分配:动态划定分区表,会导致外部碎片。通过紧凑重整可以解决,但耗时。
相关选择算法:First Fit 首次适应,Next Fit 邻近首次适应,Best Fit 最好适应,Worst Fit 最坏适应。
内存分页
引入虚拟地址,将进程地址空间划分为 4KB 大小的页,将物理内存划分为 4KB 大小的页框,外存划分为 4KB 大小的块。
进程初始时申请若干物理内存页框,存放自己的进程页面,其他不足存放的页面暂存在外存中的块中。
这种机制使得地址可以划分为页号和页内偏移值。
然后为每个进程建立一个页表,页表起始地址存储在 PCB 中,运行时存放在页表始址寄存器 PTR 中。通过多级页表可增加索引范围。
设立 MMU,实现进程虚拟地址,到物理地址的转换,加入 TLB 加快页表查询。
在地址变换时,通过页表始址寄存器访问页表,通过页表查找页面号,形成物理地址。如果没有加速机制,需要访问页表、访问数据两次访存。多级页表更多。
内存分段
基于进程地址空间分段(比如内核段,代码段,堆区等),实现进程段内地址连续,段间地址可分配。另外每段长度不固定,因此段内偏移和段号都要显式给出。
通过段表寄存器,进行段表定位,共享与保护。分段有存取控制保护和地址越界保护。可以共享不可修改的内容。
** 段页结合,** 每段一张页表