虚拟内存
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
题目描述
内存中的数据以页为基本存储单位,进程的读写操作都针对页来进行。实际内存空间被分割成 页,虚拟内存空间的页数往往要多得多。某一时刻,进程需要访问虚存编号为 的页,该算法的执行步骤如下:
a. 首先在内存中查找,如果该页位于内存中,查找成功,转d,否则继续下面的操作;
b. 寻找内存中是否存在空页(即没有装载任何数据页的页面),若有,则从外存中读入要查找页,并将该页送至内存中的空页进行存储,然后转d,否则继续下面的操作;
c. 在内存中寻找一个访问次数最少的页面(如果存在多个页面的访问次数同时为最少,则选取最早读入数据进入内存的那个页面),从外存中读入要查找页,替换该页。
d. 结束
所谓访问次数是指从当前页面进入内存到该时刻被访问的次数,如果该页面以前进入过内存并被其它页面替换,那么前面的访问次数不应计入这个时刻的访问次数中。
你的任务是设计一个程序实现上述算法。
测试数据将会提供 条读写内存的命令,每条命题提供要求访问的虚拟内存页的编号 。你的程序要求能够模拟整个 条命令的全部执行过程,所有的命令是按照输入的先后执行的,最开始的时候内存中的 页全为空。
输入格式
文件第1行为 和 ,分别表示内存页数和读写内存命令条数。
下一行有 个正整数 ,表示第 条读写内存命令需要访问的虚拟内存页的编号。
输出格式
输出仅包含一个正整数,表示在整个模拟过程中,在内存中直接查找成功的次数(即上面的算法只执行步骤a的次数)。
样例 #1
样例输入 #1
3 8
1 1 2 3 4 2 5 4
样例输出 #1
1