目录
一、传统存储管理
传统存储管理分为连续分配方式和非连续分配方式,
-
一次性(塞不下,并发度下降)
-
驻留性(导致了内存中会驻留大量的、暂时用不到的数据,浪费了宝贵的内存资源)
二、连续分配管理方式
分配的必须是一个连续的内存空间
逻辑地址->物理地址:通过重定位寄存器
单一连续分配
单一连续分配是最简单的内存管理方式。
- 系统区与用户区:内存被分为系统区和用户区,系统区仅供操作系统使用,通常位于低地址部分,而用户区则为用户提供,内存中只存在一道程序
- 优点:实现简单,无外部碎片,可以采用覆盖技术扩充内存。
- 缺点:只适用于单用户、单任务操作系统,内存利用率低,存在内部碎片。
固定分区分配
固定分区分配将用户内存空间划分为若干个固定大小的分区,每个分区装入一道作业。
- 分区说明表:每个表项对应一个分区,包含分区大小、起始地址和状态等信息。
- 分类:
- 分区大小相等:适用于相同对象控制的场合,缺乏灵活性。
- 分区大小不等:根据作业大小划分,增加灵活性。
- 优点:实现简单,无外部碎片。
- 缺点:可能产生内部碎片,内存利用率低,不能实现多进程共享内存。
动态分区分配
动态分区分配在进程装入内存时动态创建分区,分区大小正好满足进程需求。其特点包括:
- 存储方式:
- 空闲分区表:记录空闲分区的信息,如分区号、大小和起始地址。
- 空闲分区链:通过指针链接空闲分区,记录分区信息。
- 优点:没有内部碎片。
- 缺点:存在外部碎片,需要合并相邻的空闲分区。
动态分区分配的算法包括:
- 首次适应算法:空闲分区按照地址递增的次序进行查找,第一个满足条件的进行分配。性能较好,但可能导致内存碎片。
- 最佳适应算法:按容量递增的顺序进行查询分区,第一个满足条件的进行分配。尽量保留大片空闲区,但可能导致外部碎片。
- 最坏适应算法(最大适应算法):空闲分区按照容量递减的次序进行查找,第一个满足条件的进行分配。可能无法有效利用大内存块。
- 邻近适应算法(循环首次适应算法):从上次查找结束的位置开始继续查找。可能导致尾部空间分裂成小碎块,但分配时无需重新排序链表。
三、非连续分配管理方式
基本分页存储管理
基本分页存储管理将内存和进程分为大小相等的页框和页,通过页表实现逻辑地址到物理地址的转换。这种方式无外部碎片,但存在少量页内碎片。
基本分段存储管理
基本分段存储管理按照程序自身的逻辑关系划分为若干个段,每个段在内存中占据连续空间。这种方式便于实现信息的共享和保护,但会产生外部碎片。
段页式存储管理
段页式存储管理将进程按逻辑模块分段,再将各段分页。这种方式结合了分段和分页的优点,但地址转换过程较为复杂。