1.单一连续分配
2.固定分区分配
固定分区分配在划分分区时,有两种不同的方法:
l 分区大小相等:用于利用一台计算机去控制多个相同对象的场合。
l 分区大小不等:划分为含有多个较小的分区、适量的中等分区及少量的大分区。
为了便于内存分配,通常将分区按大小排队,并为之建立一张分区使用表,其中个表项包括每个分区的起始地址、大小及状态。当有用户程序要装入时,便检索该表,已找到合适的分区给与分配并将其状态置为“已分配“。未找到合适分区则拒绝为该用户程序分配内存。
这种分区方式存在两个问题:一个程序可能太大而放不进任何一个分区中,这是用户不得不使用覆盖技术来使用内存空间;二是主存利用率低,当程序小于固定分区大小时,也占用了一个完整的内存分区空间,这样分区内部有空间浪费。这种现象成为内部碎片。
3.动态分区分配
在进程装入内存时,根据进程的大小动态的建立分区,并使分区的大小正好适合进程的需要。
动态分区在开始分配时是很好的,但是之后会导致内存中出现许多小的内存块。随着时间的推移,内存中会产生越来越多的碎片,内存的利用率随之下降。这种现象称之为外部碎片现象,指在所有分区外的存储空间会变成越来越多的碎片,这与固定分区中的内部碎片正好相对。克服外部碎片可以通过紧凑技术来解决。
动态分区的分配策略,考虑以下几种算法:
1)首次适应算法:空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能满足要求的第一个空闲分区。
2)最佳适应算法:空闲分区按容量递增形成分区链,找到第一个能满足要求的空闲分区。
3)最坏适应算法:有称最大适应算法,空闲分区以容量递减次序链接。找到第一个能满足要求的空闲分区,也就是挑选最大的分区。
4)临近适应算法:又称循环首次适应算法,由首次适应算法演变而成。不同之处是分配内存时从此查找结束的位置开始继续查找。
以上内存分区管理方法有一共同特点,即用户进程在主存中都是连续存放的。
固定分区会产生内部碎片,动态分区会产生外部碎片,两种技术对内存的利用率都比较低。我们希望内存的使用能尽量避免碎片的产生,这就引出了分页思想:把主存空间划分为大小相等且固定的块,块相对较小,作为主存的基本单位。每个进程也以块为单位进行划分,进程在执行时,以块为单位逐个申请主存中的块空间。
分页管理方式是从计算机的角度考虑设计的,以提高内存的利用率,提升计算机的性能,且分页通过硬件机制实现,对用户完全透明;而分段管理方式的提出则考虑了用户和程序员,以满足方便编程、信息保护和共享、动态增长及动态链接等多方面的需要。
为了能将用户地址空间中的逻辑地址变换为内存空间中的物理地址,在系统中必须设置地址变换机构。该机构的基本任务是实现从逻辑地址到物理地址的转换。
1.2 具有块表的地址变换机构
分页系统中,CPU每次要存取一个数据,都要两次访问内存(访问页表、访问实际物理地址)。为提高地址变换速度,增设一个具有并行查询能力的特殊高速缓冲存储器,称为“联想存储器”或“快表”,存放当前访问的页表项。
1.3 基本地址变换例子
页式虚拟存储系统的逻辑地址是由页号和页内地址两部分组成,地址变换过程如图7-3所示。假定页面的大小为4K,图7-3中所示的十进制逻辑地址8203经过地址变换后,形成的物理地址a应为十进制。
页号: 8203/4096 = 2;页内偏移:8203%4096= 11;物理地址:物理块号*页面大小+ 页内偏移= 28683
页面是主存物理空间中划分出来的等长的固定区域。分页方式的优点是页长固定,因而便于构造页表、易于管理,且不存在外碎片。但分页方式的缺点是页长与程序的逻辑大小不相关。例如,某个时刻一个子程序可能有一部分在主存中,另一部分则在辅存中。这不利于编程时的独立性,并给换入换出处理、存储保护和存储共享等操作造成麻烦。
另一种划分可寻址的存储空间的方法称为分段。段是按照程序的自然分界划分的长度可以动态改变的区域。通常,程序员把子程序、操作数和常数等不同类型的数据划分到不同的段中,并且每个程序可以有多个相同类型的段。
将用户程序地址空间分成若干个大小不等的段,每段可以定义一组相对完整的逻辑信息。存储分配时,以段为单位,段与段在内存中可以不相邻接,也实现了离散分配。
在页式系统中,逻辑地址的页号和页内偏移量对用户是透明的;但在段式系统中,段号和段内偏移量必须由用户显示提供,在高级程序设计语言中,这个工作由编译程序完成。
整个作业的地址空间由于是分成多个段,因而是二维的,亦即,其逻辑地址由段号(段名)和段内地址所组成。
2.1 地址变换机构
图4-18:物理地址 = 8 * 1024 + 100 = 8292
页式存储管理能有效的提高内存利用率,而分段存储管理能反应程序的逻辑结构并有利于段的共享。如果将这两种存储管理方法结合起来,就形成了段页式存储管理方式。
4.分段和分页的主要区别:
5. 优缺点的比较
参考:https://www.cnblogs.com/-citywall123/p/12395586.html
5.1 连续内存分配
优点:设计简单,直接寻址,效率高
缺点:内存利用率最低
5.2 非连续分配
1)分页式
优点:内存空间利用率高,不会产生外部碎片,只会有少量的页内碎片。
缺点:不方便按照逻辑模块实现信息的共享和保护。
2)分段式
优点:很方便按照逻辑模块实现信息的共享和保护。
缺点:如果段长很大,为其分配很大的连续空间,会很不方便。另外,段式管理会产生外部碎片。
(为了有效的利用内存,使内存产生bai更少的碎片,要对内存分页,内存以页为单位来使用,最后一页往往装不满,于是形成了内部碎片。为了共享要分段,在段的换入换出时形成外部碎片,比如5K的段换出后,有一个4k的段进来放到原来5k的地方,于是形成1k的外部碎片。)
原文:https://www.cnblogs.com/jingpeng77/p/13543779.html