计算机操作系统--内存管理(上)

前言

计算机内存是以二进制格式表示的一些数据结合。

一、固定分区

最早和最简单的技术之一是用于将多个进程加载到主内存中的是固定分区或连续内存分配。
在固定分区中:
<1>分区不能重叠
<2>进程必须在分区中连续存在才能执行。

1.内部碎片

如果进程较小,那么分区的总大小会导致分区的某些大小被浪费并且保持不用,这是内存的浪费,称为内部碎片。

2.外部碎片

即使有可用空间但不是连续形势,各个分区的总未使用空间也不能用于加载进程。

3.限制进程的大小

如果进程大小大于最大分区的大小,则进程无法加载到内存中,所以,可以对进程大小施加限制,不能大于最大分区的大小。

4.多程序的程度较低

按照多编程的程度,这里只是指可以同时加载到内存中的最大进程数。在固定分区中,多程序的程度是固定的,因为分区的大小不能根据进程的大小而变化。

二、动态分区

在这种技术中,分区大小最初并未声明。 它在进程加载时声明。
第一个分区是为操作系统保留的。 剩余空间分成几部分。 每个分区的大小将等于进程的大小。 分区大小根据进程的需要而变化,以避免内部碎片。

动态分区比固定分区的优势

1.没有内部碎片

考虑到动态分区中的分区是根据进程的需要创建的,很明显,不会有任何内部碎片,因为分区中不会有任何未使用的剩余空间。

2.对进程的大小没有限制

在固定分区中,由于缺少足够的连续内存,因此大于最大分区的进程无法执行,在动态分区中,分区的大小是根据进程大小决定的,因此进程大小不能受到限制的。

3.多程序的程度是动态的

由于没有内部碎片。分区中不会有任何未使用的空间,因此可以同时将更多的进程加载到内存中。

动态分区的缺点

1.外部碎片

没有内部碎片不代表没有外部碎片

2.复杂的内存分配

在固定分区中,分区列表只会生成一次,并且永远不会改变,但在动态分区中,分配和释放非常复杂,因为每次分配给新进程时分区大小都会发生变化。 操作系统必须跟踪所有的分区。

由于在动态内存分配中分配和取消分配的操作非常频繁,而且分区大小每次都会改变,所以操作系统很难管理所有内容。

三、压缩(碎片整理)

在压缩过程中,所有的空闲分区都是连续的,所有加载的分区都集中在一起,通过这种技术,可以将更大的进程储存在内存中。合并可用分区,现在可以根据新进程的需要分配这些分区,这种技术被称为碎片整理。

压实问题

由于所有的自由空间将从几个地方转移到一个地方,因此在压实的情况下系统的效率会降低。
这个过程投入了大量的时间,并且CPU一直保持空闲状态。 尽管压实避免了外部碎片,但却使得系统效率低下。

四、链表动态分区

跟踪自由或填充分区的更好和最流行的方法是使用链表。
在这种方法中,操作系统维护一个链表,每个节点代表每个分区。每个节点都有三个字段。
1.节点的第一个字段储存一个标志位,该标志显示该分区是一个洞还是某个进程在里面。
2.第二个字段储存分区的起始索引
3.第三个字段储存分区的结束索引
如果某个分区在某个时间被释放,那么该分区将与其相邻的空闲分区合并,而不会做任何额外的工作,需要注意:
1.操作系统必须非常清除要添加到链表中的新节点的位置。但是,根据起始索引的增加顺序添加节点是可以理解的。
2.由于双链表中的节点也可以跟踪其之前的节点,所以使用双链表将会对性能产生一些积极影响。
在这里插入图片描述

五、分区算法

操作系统实现了各种算法,以便找出链表中的空洞并将它们分配给进程。

1.第一拟合算法

第一拟合算法(First Fit)算法扫描链表,每当它找到第一个足够大的孔来存储进程时,它就会停止扫描并将进程加载到该进程中。 该过程产生两个分区。 其中,一个分区将是一个空洞,而另一个分区将存储该进程。

First Fit算法按照起始索引的递增顺序维护链表。这是所有算法中最简单的实现方式,与其他算法相比,它产生更大的空洞。

2.下一个拟合算法

Next Fit算法与First Fit算法类似,不同之处在于,Next fit从先前分配空洞的节点扫描链表。

下一个适合不扫描整个列表,它开始扫描下一个节点的列表。 下一个拟合背后的想法是列表已被扫描一次,因此在列表的其余部分查找空洞的可能性更大。

3.最佳拟合算法

最佳拟合算法试图找出列表中可能的最小空洞,以适应流程的大小要求。
使用Best Fit有一些缺点:
<1>由于每次扫描整个列表并试图找出能够满足过程要求的最小空洞,因此速度较慢。
<2>由于整个尺寸与工艺尺寸之间的差异非常小,所产生的孔将会小到不能用于加载任何工艺,因此它仍然没有用处。尽管算法的名称最适合,但它并不是最好的算法。

4.最差拟合算法

最差匹配算法每次都扫描整个列表,并试图找出列表中最大的空洞,以满足过程的要求。
尽管这个算法产生了更大的漏洞来加载其他进程,但这并不是更好的方法,因为它比较慢,因为它每次都搜索整个列表。

5.快速拟合算法

快速拟合算法建议保留常用大小的不同列表。 虽然,实际上这并不是可以暗示的,因为程序需要花费很多时间来创建不同的列表,然后花费空间来加载进程。

第一个拟合算法是所有算法中最好的算法,这是因为:
<1>与其他算法相比,花费的时间更少。
<2>它会产生更大的空洞,以后可以用来加载其他进程。
<3>这是最容易实现的。

六、物理和逻辑地址空间

物理地址空间

系统中的物理地址空间可以被定义为主贮存器的大小。将进程大小与物理地址空间进行比较非常重要。进程大小必须小于物理地址空间。

逻辑地址空间

逻辑地址空间可以定义为进程的大小。进程的大小应该足够小,以便他可以驻留在主内存中。

猜你喜欢

转载自blog.csdn.net/qq_52269550/article/details/117221782