📜  操作系统内存管理的最佳方法

📅  最后修改于: 2021-08-27 18:28:27             🧑  作者: Mango

前提条件–分区分配方法

连续内存分配
内存部分最困难的技术大概是将内存隔离到几个固定的分区中。每个分区仅包含一个进程。多重编程的级别取决于分区的数量。在不同的分区技术中,当一个分区空闲时,该过程是从信息行中选择的,并被堆叠到内存的空闲分区中。在进程结束时,内存分区将为另一个进程打开。批处理OS利用固定大小的分区conspire。

操作系统会保留一个表,以说明其中的哪些内存是空闲的并涉及其中。当流程进入框架时,它将被堆叠到信息行中。 OS监视每个进程的内存先决条件和可访问内存的大小,并确定哪个进程也可以指定内存。在过程需要时,操作系统会为此过程寻找巨大的漏洞,这个漏洞是可访问的巨大可用内存的平方。如果孔太大,则分为两个部分。一部分分配到提及过程,另一部分返回到孔的排列。查看孔的排列以找出最适合分配的孔。选择自由孔的方法有以下三种:

第一位
分配足够大的主孔。该算法从头开始检查内存,然后选择最容易访问的正方形,该正方形足够大以容纳该进程。

最好的位
它选择孔,即,尺寸最接近招标。它分配了最小的孔,即足够大以容纳该过程。

最差的身材
它选择孔,即,尺寸最接近招标。它分配了最小的孔,即足够大以容纳该过程。

操作系统 :
首先,拟合和最佳拟合是用于动态内存指定的最主流算法。首先适合,而且速度更快。最佳配合是在整个残渣中寻找最小的孔,即足够大的孔。最差的配合会降低创建最小孔的速度。这些算法中的每一种都会遇到碎片的不良影响。

内存保护:
内存保护意味着保护OS免受用户进程的侵害,并防止进程相互侵害。通过使用带有断点寄存器的重定位寄存器来提供内存保护。重定位寄存器包含最小实际地址的值,截止点寄存器包含逻辑地址的范围。

(重定位= 100040,限制= 74600)。逻辑地址应不完全是断点寄存器; MMU通过在重定位寄存器中添加激励来动态映射逻辑地址。当CPU调度程序选择要执行的过程时,调度程序会将重定位和截止寄存器与正确的值堆叠在一起,作为设置开关的一部分。由于将根据这些寄存器检查由CPU创建的每个地址,因此我们可以保护操作系统和其他用户的程序及数据不被更改。

碎片
内存碎片可以分为两种:内部碎片和外部碎片。在“内部碎片”中,段内有浪费的空间,因为堆叠的数据平方比分区更适中。示例–如果有一个50kb的正方形,并且如果该进程请求40kb,并且恰好有机会将该正方形分配给该进程,那么此时将剩下10kb的内存。

当存在足够的内存空间来满足请求时,便会出现外部碎片,但是这并不是边界,即,库存被划分为大量的小孔。外部碎片可能是次要问题,也可能是重要问题。击败外部碎片的一个答案是压实。目的是将所有可用内存移动到一起以构成一个巨大的正方形。压实始终超出了想象的范围。如果重新定位是静态的,并且在加载时完成,那么此时的压缩超出了想象的范围。外部碎片问题的另一个可能的答案是允许进程的逻辑地址空间是无边界的,以这种方式允许在末尾可访问的任何点分配进程实际内存。

细分
大多数用户不认为存储器是字节的直接数组,而是用户认为存储器55是专门用于特定用途的各种大小可变的段的组合。示例–代码,数据,堆栈,堆等等。逻辑地址是段的分类。地址确定段名称和段内的偏移量。用户通过使用两个数量来指示地址:段名称和偏移量。为了省力,对段进行编号并以段编号引用。因此,逻辑地址包括<段号,偏移量>。