请求分页系统中页面分配策略与页面置换策略的关系
@(OS)
回顾几种分配策略:
- 固定分区分配
- 动态分区分配
- 伙伴系统
- 可重定位分区分配
页面置换策略:
- 全局置换
- 局部置换
其中,关于分区分配策略已经很熟悉了,需要特别说明的是页面置换策略。这是我们在课本上不太强调的。
局部置换只置换本进程内的物理页面。一个进程占用的物理页面总数是限定的,当需要置换时,即总数已经用完,新进来一个页面,本进程就需要出去一个老的页面。所谓,朋友圈就那么大,有人进来自然需要有人出去。但是需要注意的是,如果分配给你的总数还没用完,自然是不用置换的,那是最初的红利时期,竞争还不激烈,先到先得。
全局置换指的是进程缺页时,可能置换的是内存中所有可换出的物理页面。即要换进的是A进程的页面,出去的可以是B进程的页面,因此分配给进程的页面总数是动态变化的。
这两种总的置换策略下有各自的方法:
局部置换:
- 最优算法
- 先进先出算法(有Belady异常)
- Least Recently Used(最近最久未使用算法)
- 时钟算法
- 最不常用算法(Least Frequently Used)算法
全局置换:
- 工作集算法
- 缺页率算法
(2015.30) 请求分页系统中,页面分配策略和页面置换策略不能组合使用的是:C
–
–
C_
A. 可变分配,全局置换
B. 可变分配,局部置换
C. 固定分配,全局置换
D. 固定分配,局部置换
固定分配:将内存用户空间划分为多个固定大小的区域,在每个分区中只装入一个作业。
划分分区的方法有两种:
- 分区大小相等
- 分区大小不等
内存分配方法:按照分区大小建立分区使用表。记录每个分区的起始地址,大小和状态。
因此,固定分配不可能实现跨越进程的页面分配,个人自扫门前雪类型。
动态分区分配:根据进程的实际需要,动态地为之分配内存空间。
这句话不可以简单跳过,根据的是进程的需要,进程是动态的,是一次静态程序的执行过程。
为了实现这个,需要建立空闲分区表和空闲分区链。空闲分区表自然也是记录分区区号,分区起始地址和大小等。分区可以是离散的,因此需要链表来维护分区之间的关系。
分配内存:根据某种分配算法(首次适应,循环首次适应,最佳适应,最坏适应,快速适应等),从空闲分区链中找到需要的分区,根据一个算式:
m.size−u.size≤size
m.size−u.size≤size,其中m.size是每个空闲分区的大小,u.size是请求的分区大小,size是规定的不可再切割的剩余分区的大小。即,如果分配完以后,剩余部分小于size这条线了,那么就把整个分区给你,否则,你只能拿到你所需要的。也即是超过一定量的交易额是大客户,待遇要好于小客户。
从这个过程中我们可以看到,空闲分区没有属于哪个进程的概念,即大家是吃大锅饭的。则在实现分页系统时,可以实现全局分配。局部分配是基础配置,自然不必多说。
因此,C项是无法组合在一起使用的。