内存分配策略和分配方法

点击打开链接

----- 在为进程分配内存时,将涉及到3个问题:

1)最小物理块数的确定;2)物理块的分配策略;3)物理块的分配算法

1、最小物理块数的确定

-- 这里所说的最小物理块数,是指能保证进程正常运行所需的最小物理块数。

-- 当系统为进程分配的物理块数小于此值时,进程将无法运行。

-- 进程应获得的最少物理块数与计算机的硬件结构有关,取决于指令的格式、功能和寻址方式

2、物理块的分配策略

-- 在请求分页系统中,可采取两种内存分配策略,即固定可变分配策略。在进行置换时,也可采取两种策略,即全局置换局部置换

   于是可组合出以下三种适用的策略。

1)固定分配局部置换(Fixed Allocation,Local Replacement)

---- 这是指基于进程的类型(交互型或批处理型等),或根据程序员、程序管理员的建议,为每个进程分配一定数目的物理块,在整个运行期间

不再改变。采用该策略时,如果进程在运行中发现缺页,则只能从该进程在内存的n个页面中选出一个页换出,然后再调入一页,以保证分配给该

进程的内存空间不变(固定分配)。

---- 实现这种策略的困难在于:应为每个进程分配多少个物理块难以确定。若太少,会频繁地出现缺页中断,降低了系统的吞吐量;若太多,又必

然使内存中驻留的进程数目减少,进而可能造成CPU空闲或其他资源空闲的情况,而且在实现进程对换时,会花费更多的时间。

2)可变分配全局置换(Variable Allocation,Global Replacement)

这可能是最易于实现的一种物理块分配和置换策略,已用于若干个OS中。在采用这种策略时,先为系统中的每个进程分配一定数目的物理块,而

OS自身也保持一个空闲物理块队列。当某进程发现缺页时,由系统从空闲物理块队列中取出一个物理块分配给该进程,并将欲调入的(缺)页装

入其中。这样,凡产生缺页(中断)的进程,都将获得新的物理块。仅当空闲物理块队列中的物理块用完时,OS才能从内存中选择一页调出,该页

可能是系统中任一进程的页,这样,自然又会使那个进程的物理块减少,进而使其缺页率增加。

3)可变分配局部置换(Variable Allocation,Local Replacement)

这同样是基于进程的类型或根据程序员的要求,为每个进程分配一定数目的物理块,但当某进程发现缺页时,只允许从该进程在内存的页面中选出

一页换出,这样就不会影响其它进程的运行。如果进程在运行中频繁地发生缺页中断,则系统需再为该进程分配若干个附加的物理块,直至该进程

的缺页率减少到适当程度为止;反之,若一个进程在运行过程中的缺页率特别低,则此时可适当减少分配给该进程的物理块数,但不应引起其缺页率

的明显增加。

---- 全局是指置换页面时,换出的页面可能是内存中的任一进程的页面,局部只能是本(缺页)进程的页面。

---- 固定分配指为一个进程分配的物理块是固定的,可变分配指可根据缺页率调整所分配的物理块数。

3、物理块分配算法

-- 在采用固定分配策略时,如何将系统中可供分配的所有物理块分配给各个进程,可采用下述几种算法。

1)平均分配算法

-- 这是将系统中所有可供分配的物理块平均分配给各个进程。例如,当系统中有100个物理块,有5个进程在运行时,每个进程可分得20个物理块。

这种方法看似公平,实际不然,因为它未考虑到各进程本身的大小

假如有一个进程大小为200页,只分配给它20个块,它必然有很高的缺页率;而另一进程只有10页,却有10个物理块闲置未用。

2)按比例分配算法

-- 这是根据进程的大小按比例分配物理块的算法。如果系统中共有n个进程,每个进程的页面数为Si,则系统中各进程页面数的总和为:

    S=S1+S2+...+Si+...+Sn-1+Sn (i=1~n)     又假定系统中可用的物理块总数为m,则每个进程所能分到的物理块数为bi,则有:

    bi=(Si*m)/S   其中,b应该取整,它必须大于最小物理块数。

3)考虑优先权的分配算法

-- 在实际应用中,为了照顾到重要的、紧迫的作业能尽快地完成,应为它分配较多的内存空间。通常采取的方法是把内存中可供分配的所有物理块

分成两部分:一部分按比例地分配给各进程;另一部分则根据各进程的优先权,适当地增加其相应份额后,分配给各进程。

在有的系统中,如重要的实时控制系统,则可能是完全按优先权来为各进程分配其物理块的。

4、调页策略

---- 预调页策略和请求调页策略

---- 确定从何处调入页面

请求分页系统中的外存分为两部分:文件区对换区(用于存放文件的文件区和用于存放对换页面的对换区)。

通常,对换区采用连续分配方式,文件区是采用离散分配方式。故对换区的磁盘I/O速度比文件区的高。何处调入分3种情况:

-- 1)系统拥有足够的对换区空间,可全部从对换区调入所需页面。在进程运行前,需将与该进程有关的文件从文件区拷贝到对换区。

-- 2)系统缺少足够的对换区空间,不会被修改的文件都直接从文件区调入,当换出这些页面时,由于它们未被修改而不必将它们换出,以后

再调入时,仍从文件区直接调入。对于那些可能被修改的部分,在将它们换出时,需调到对换区,以后需要从对换区调入。

-- 3)Unix方式。凡是未运行过的页面,都应从文件区调入。曾经运行过但又被换出的页面,放在对换区,调入时从对换区调入。Unix系统运行

页面共享,因此某进程所请求的页面有可能已被其它进程调入内存,此时无需再从对换区调入。

猜你喜欢

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