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