内存分配方式

内存分配方式有两种:连续内存分配方式和离散内存分配方式。不同的分配方式又有不同的分配算法。

连续内存分配方式

1)固定分区分配

将内存划分成若干个固定大小的块。将程序装入块中即可。内存划分成各个块之后,块大小不再改变。当然,划分块的方式有:所有的块大小相等;划分的块大小不相等。

这种方式,在实际的内存分配之前,就已经知道了所有的内存块大小了。

---- 固定分区分配是最简单的一种可运行多道程序的存储管理方式。这是将内存用户空间划分为若干个固定大小(不是相等大小)的区域,在每个分区

中只装入一道作业,这样,把用户空间划分为几个分区,便允许有几道作业并发运行。

---- 当有一空闲分区时,便可以再从外存后备作业队列选择一个适当大小的作业装入该分区,当该作业结束时,又可再从后备作业队列中找出另一

作业调入该分区。

1)划分分区的方法

可用下述两种方法将内存的用户空间划分为若干个固定大小的分区:

扫描二维码关注公众号,回复: 167334 查看本文章

---- 分区大小相等,即所有的内存分区大小相等。

缺点是缺乏灵活性,即当程序太小时,会造成内存空间的浪费;当程序太大时,一个分区又不足以装入该程序,致使该程序无法运行。

尽管如此,这种划分方式仍被用于利用一台计算机去控制多个相同对象的场合,因为这些对象所需的内存空间是大小相等的。

例如,炉温群控系统,就是利用一台计算机去控制多台相同的冶炼炉。

---- 分区大小不等。为了克服分区大小相等而缺乏灵活性的这个缺点,可把内存区划分成含有多个较小的分区、适量的中等分区及少量的大分区。

这样,便可根据程序的大小为之分配适当的分区。

2)内存分配

为了便于内存分配,通常将分区按大小进行排队,并为之建立一张分区使用表,其中各表项包括每个分区的起始地址大小状态(是否已分配)。

当有一用户程序要装入时,由内存分配程序检索该表,从中找出一个能满足要求的、尚未分配的分区,将之分配给该程序,然后将该表项中的状态

置为“已分配”。若未找到大小足够的分区,则拒绝为该用户程序分配内存。由于每个分区的大小固定,必然会造成存储空间的浪费。

下图是固定分区分配示例的分区分配表:

 

如上图所示,有四个固定分区,分区大小分别是20KB,40KB,100KB,200KB,起始地址分别是100KB,120KB,160KB,260KB。

假设现在有3个作业,作业A(18KB),作业B(37KB),作业C(200KB),根据作业的大小为其选择合适的分区。

---- 作业A是18KB,可以选择分区1是20KB,会产生2KB的内部碎片;(已分配)

---- 作业B是37KB,可以选择分区2是40KB,会产生3KB的内部碎片;(已分配)

---- 作业C是200KB,选择分区4是200KB,无碎片产生。(已分配)

三个作业已分配完毕,留下的分区3仍为空闲分区,没有分配。(未分配)

每个分区都对应上、下界两个寄存器用于内存越界保护,CPU访问每个存储器地址时应满足:

---- 访问地址大于等于下界寄存器的内容,小于等于上界寄存器的内容,否则会产生地址越界错误,终止作业的运行。

以上三个作业的内存分配情况如下:

---- 固定分区分配的优缺点如下:

优点:可用于多道程序系统最简单的存储分配,无外部碎片。

缺点:不能实现多进程共享一个主存区,所以存储空间利用率低,有内部碎片。

2)动态分区分配

点击打开链接

需要一个空闲表 或者 空闲链 来记录目前系统中空间的内存区域。在内存分配时,需要查找空间表或空闲链找到一块内存分配给当前进程。

动态分区分配算法:

a)首次适应法

b)循环首次适应法

c)最佳适应法

d)最坏适应法

e)快速适应法

3)可重定位分区分配

说白了,就是增加了内存移动的功能。由于若干次内存分配与回收之后,各个空闲的内存块不连续了。通过“重定位”,将已经分配的内存“紧凑”在一块从而空出一大块空闲的内存出来。

”紧凑“是需要开销的,比如需要重新计算地址

而离散分配方式--不管是分页还是分段,都是直接将程序放到各个离散的页中。从而就不存在“紧凑”一说了。

连续内存分配方式涉及两种操作:内存分配操作 和 内存回收操作

离散内存分配方式

内存资源是有限的,程序要运行,必须得加载到内存。如果内存已经满了,而现在又有新的程序要运行,怎么办?---SWAP

把当前不用的程序(数据)先换出内存,从而就有空间加载当前需要运行的程序的一部分数据进入内存,这样大大提高了内存的利用率。

由于牵涉到换入与换出,前面的连续内存分配方式就有点不适用了。因为,最明显的一个问题:对于连续内存分配方式,究竟换出哪部分数据呢?

而这种只装入部分"数据"就可以使程序运行的机制,就是虚拟存储器的本质。

1)分页存储管理点击打开链接 页面置换

2)分段存储管理 点击打开链接


猜你喜欢

转载自blog.csdn.net/qq_22238021/article/details/80209005