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