页调度问题是系统软件设计中提出的一个基本问题。系统软件在进行内存管理时,将内存按其存取速度分成2 级,即高速缓存和低速内存。内存被分成固定大小的页面进行管理。高速缓存可容纳k 个页面,其他页面在低速内存中。页调度问题的输入是内存访问请求序列s =s (1),s (2),……,s (m)。当内存访问请求要访问的页面s (i)在高速缓存中时不需页面调度,而当页面s (i)不在高速缓存中时,发生页面缺失,调度算法要确定高速缓存中与s (i)交换的页面。页调度算法对于内存访问请求序列s =s (1),s (2),……,s (m)的耗费是算法在执行过程中产生的页面缺失次数。内存访问请求是无法预知的,它是随着时间的推移一个接着一个地给出的。最优页调度问题要求响应每一个内存访问请求,并且使发生页面缺失的总次数最少。
对于给定的 2 级内存页面分布以及内存访问请求序列s =s (1),s (2),……,s (m),设计一个算法,给出响应每一个内存访问请求的最优页面调度,使发生页面缺失的总次数最少。
输入数据第一行有3 个正整数n,k 和m,表示有n 个内存页面1,2,…,n。高速缓存可容纳k 个页面。初始时页面1,2,…,k 在高速缓存中。内存访问请求序列的长度为m。第2 行有m 个正整数表示内存访问请求序列s =s (1),s (2),…… ,s (m),1<=s (i) <= n,1 <= i <= m。
将计算出的最少页面缺失总次数输出
7 3 11 4 5 6 7 6 4 5 5 3 2 1
8