提纲:

🔥操作系统内存分配

  • 连续内存分配

    • 单一连续分配

    • 固定分区分配

    • 动态分区分配

  • 非连续分配管理

    • 连续分配方式

    • 基本概念

    • 基本原理

    • 页面置换算法

    • 抖动

    • 分段存储

一、操作系统内存分配

1. 连续内存分配

  • 1、单一连续分配:将内存分为系统内存和用户内存,系统内存仅供系统使用,一般位于内存低地址区,只能用于单系统单进程

  • 2、固定分区分配:将用户内存分为多个固定大小的分区,每个分区只装入一个进程,分区大小过小会造成大任务无法放入,过大会造成大量内存碎片,内存利用率极低

  • 3、动态分区分配:根据进程大小动态分配分区大小与数量

    • 首次适应算法:维护一个空闲分区地址链,进程需要放入时,从低地址端开始查找,直到找到能放入的分区,在分区中划出一块内存放入进程缺点:每次从低地址端进行遍历,效率低,并且分区划分会产生大量内存碎片

    • 循环首次适应算法:在首次适应算法基础上,不再每次从低地址遍历,而是从上一次遍历的指针位置开始查找,从而减小了遍历的开销缺点:高地址部分的分区被多次划分,导致内存中的大的可用分区太少

    • 最佳适应算法:寻找第一个能放下进程且最小的分区缺点:这种方式产生的划出的剩余空间最小,意味着有大量无法利用的内存碎片,且每次划分后需要对分区链表进行重排序

    • 最差适应算法:刚好相反,每次都选择最大的分区放进程,通常划分后剩下的分区仍能装下新的进程缺点:内存中缺少大的分区的缺点更加明显

2.非连续分配管理

  • 连续分配方式:内存连续分配通常会产生大量内存碎片,不能很好的利用内存空间,并且通常开销较大

  • 基本概念:通过将用户进程需要的内存分散,将其装入不同的分区中,从而有效的利用内存,甚至可以让逻辑内存超过物理内存

  • 基本原理:

    • 1、每个用户进程都有一个需要的内存的地址空间,将这个地址空间划分为多个小块,每一个小块就是一个页,用户进程实际拥有的是一块连续的虚拟内存空间(vma),在物理内存中维护一个页表提供虚