----- 在为进程分配内存时,将涉及到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系统运行
页面共享,因此某进程所请求的页面有可能已被其它进程调入内存,此时无需再从对换区调入。