操作系统的内存分配

内存空间的分配包括连续分配存储管理和非连续分配存储管理。

连续分配管理方式

首先确定外部碎片和内部碎片的定义。在内存空间中,内部碎片是指分配给某进程的内存区域中没有被用到的部分,例如一个进程5MB,操作系统为其分配了6MB,则存在1MB用不到的内部碎片。外部碎片是指还没有被分配出去(不属于任何进程),但由于太小了无法分配给申请内存空间的新进程的内存空闲区域。

单一连续分配

在单一连续分配中,内存分为系统区用户区,系统区存放操作系统相关数据,用区去存放用户进程相关数据。在内存中只有一道用户程序。

该分配方式实现简单,但是存储器利用率极低,只适用于单用户、单任务的操作系统。无外部碎片,有内部碎片。

固定分区分配

固定分区分配是指将用户空间等分为若干个固定大小的分区,每个分区内最多装入一道作业,分为分区大小相等(例如每个分区都为5MB大小)和分区大小不等(划分为多种分区,例如5MB,10MB,20MB..,各种分区数量不等)。

固定分区分配的实现需要一张分区说明表,从而实现分区的分配与回收。

动态分区分配/可变分区分配

在进程装入内存时,操作系统会根据进程的大小动态分配分区,分区大小等同于进程大小。使用动态分区分配需要维护一张空闲分区表空闲分区链,用于记录空闲分区。

动态分区分配无内部碎片,但是会产生外部碎片(某些空闲分区由于太小而难以利用),可以利用紧凑技术合并小分区。

对于动态分区分配,考虑到使用不同的空闲分区后空闲分区情况不同,需要使用动态分区分配算法。下面介绍4中动态分区分配的算法:

  • 首次适应算法First-Fit

    每次都从低地址开始查找,选择第一个能够满足大小的空闲分区。

  • 最佳适应算法Best-Fit

    为了保证大进程到来时能有大片连续空闲空间,优先使用更小的空闲分区。将空闲分区按照容量递增链接,每次寻找大小能够满足的第一个空闲分区。由于每次都选择最小的分区分配,因此会留下越来越多细碎、难以利用的空闲空间,使用Best-Fit会产生很多的外部碎片。

  • 最坏适应算法Worst-Fit

    为了防止留下太多细碎的空闲空间,每次分配时优先使用最大的空闲分区。可以将空闲分区按照容量递减链接,每次分配内存时顺序查找,找到大小能够满足的第一个空闲分区(第一个必定满足,否则后继空闲分区大小都不足以满足)。由于每次都使用最大的空闲分区,因此较大的连续分区会很快被利用完,导致大进程到来时可能不足以分配。

  • 邻近适应算法Next-Fit

    由于首次适应算法每次都从链头开始查找,可能导致低地址 部分出现很多小的空闲分区,而每次查找时都会遍历这些分区,增加了查找开销。因此将空闲分区按照地址递增的顺序排成一个循环链表,每次都从上次结束的位置开始查找,使用第一个满足的空闲分区。

    对比First-Fit和Next-Fit,First-Fit更有可能将高地址部分的大分区保留下来(Best-Fit的优点),而Next-Fit会导致无论是高地址还是低地址的空闲分区都有相等的概率被使用,导致了高地址部分的大分区更有可能被使用,最后无大分区可用(Worst-Fit的缺点)。

综合考量,首次适应算法的综合效果更好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值