页面调度

百度机试题

[编程题] 页面调度算法

在计算机中,页式虚拟存储器实现的一个难点是设计页面调度(置换)算法。其中一种实现方式是FIFO算法。
FIFO算法根据页面进入内存的时间先后选择淘汰页面,先进入内存的页面先淘汰,后进入内存的后淘汰。
假设Cache的大小为2,有5个页面请求,分别为 2 1 2 3 1,则Cache的状态转换为:(2)->(2,1)->(2,1)->(1,3)->(1,3),其中第1,2,4次缺页,总缺页次数为3。
现在给出Cache的大小n和m个页面请求,请算出缺页数。

输入描述:

输入包含多组测试数据。
对于每组测试数据,第一行是整数n,第二行是整数m。
然后有m个整数,代表请求页编号。
保证:
2<=n<=20,1<=m<=100,1<=页编号<=200.

输出描述:

对于每组数据,输出一个整数,代表缺页数

输入例子:
  2
  5
  2
  1
  2
  3
  1
  
输出例子:
  3
#include<iostream>
#include<set>
#include<queue>
using namespace std;
int main(){
    int size;
    while (cin >> size){
        set<int> s;
        queue<int> q;
        int m;
        cin >> m;
        int miss = 0;
        for (int i = 0; i<m; ++i){
            int page;
            cin >> page;
            if (s.find(page) == s.end()){//如果缺页
                miss++;//缺页次数
                if (s.size()<size){//如果内存没有满
                    s.insert(page);//插入该页面到set
                    q.push(page);//插入该页面到queue
                }
                else{//如果内存已满
                    s.insert(page);//插入该页面到set
                    q.push(page);//插入该页面到queue
                    int ele = q.front();
                    s.erase(ele);//从set中删除队头页面
                    q.pop();//从queue中弹出队头页面
                }
            }
        }
        cout << miss << endl;
    }
    return 0;
}
时间: 2024-08-28 14:46:11

页面调度的相关文章

操作系统 页面置换算法LRU和FIFO

LRU(Least Recently Used)最少使用页面置换算法,顾名思义,就是替换掉最少使用的页面. FIFO(first in first out,先进先出)页面置换算法,这是的最早出现的置换算法.该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最长的页面给予淘汰. FIFO置换算法有这样一个奇怪现象:内存空间块数越多,缺页中断率可能相反的越高(缺页中断次数越高). LFU(Least Frequently Used)最近最少使用算法,它是基于“如果一个数据在最近一段时间内使用次

虚存管理页面置换算法 — FIFO和RUL算法模拟实现

本篇博文为追忆曾经写过的算法系列第一篇(20081021) 温故知新 目的: 为了解决内存容量有限与多作业运行的冲突,运用了虚拟存储技术,能从逻辑上对内存进行扩充,达到扩充内存的效果.分页存储管理是实现虚拟存储的一种方案.通过模拟算法的实验,加深理解,虚拟存储器的基本原理和方法. 要求: 1.请求分页的置换算法(FIFO && RUL算法实现):2.按给定的顺序列,输出页面调度过程包括命中 / 缺页,调入/调出:3.计算缺页率,频率. 说明: vp_list[N] //访问序列 bs[M]

FIFO、LRU、OPT页面调度算法及样例

网上非常多介绍3种页面置换算法的样例和过程是不对的, 本文依据<操作系统概念>第七版对三种算法做介绍,并给出正确的样例以验证算法. 一.FIFO先进先出页面置换算法,创建一个FIFO队列来管理内存中的全部页. 在计算缺页率的时候最好把每一次页面调度的队列写出来,这样不easy出错. 以下举例说明: 如果页帧为3,引用串为:7,0,1,2,0.3,0,4,2 页面走向:7.0.1,2.0,3.0,4,2. ---------------------------------------------

FIFO、LRU、OPT页面调度算法及例子

网上很多介绍3种页面置换算法的例子和过程是不正确的, 本文根据<操作系统概念>第七版对三种算法做介绍,并给出正确的例子以验证算法. 一.FIFO先进先出页面置换算法,创建一个FIFO队列来管理内存中的所有页.在计算缺页率的时候最好把每一次页面调度的队列写出来,这样不容易出错. 下面举例说明: 假设页帧为3,引用串为:7,0,1,2,0,3,0,4,2 页面走向:7,0,1,2,0,3,0,4,2, -----------------------------------------------

物理内存、页面文件、交换区和虚拟内存

物理内存,顾名思义,就是实实在在存在的那个东西,插在你电脑主板上的内存条所提供的空间. 页面文件,这个是硬盘上的一块空间,在Windows下表现为一个文件.这个页面文件存在的意义就是在物理内存被占用满以后,将物理内存中的东西移动到硬盘上的这个空间,腾出物理内存给需要的应用程序来使用. 交换区,这个是物理内存和页面文件空间的总和,"交换"的含义,则是指在硬盘文件.CPU和其它IO之间进行数据的传递和暂存(这句话对于了解计算机运行基本流程的人来说应该可以理解). 虚拟内存,这个概念恐怕是目

操作系统基础知识

操作系统的分类: 批处理操作系统.分时操作系统.实时操作系统.网络操作系统.分布式操作系统.个人计算机操作系统. 批处理操作系统: 优:资源共享,自动调度,提高了资源利用率和系统分吞吐量. 劣:无交互,周转时间较长. 多道批处理程序要处理的问题:同步互斥,内存大小,使用效率,内存保护 分时系统:联机多用户交互式操作系统,中断技术,时间片轮转 优:人机交互性好,共享主机 ,用户独立性 实时操作系统:联机系统,对外部请求能够在规定的时间内完成. 特点:有限等待 有限响应 用户控制 可靠性高 出错处理

JAVA NIO 内存映射(转载)

原文地址:http://blog.csdn.net/fcbayernmunchen/article/details/8635427 Java类库中的NIO包相对于IO 包来说有一个新功能是内存映射文件,日常编程中并不是经常用到,但是在处理大文件时是比较理想的提高效率的手段.本文我主要想结合操作系统中(OS)相关方面的知识介绍一下原理. 在传统的文件IO操作中,我们都是调用操作系统提供的底层标准IO系统调用函数 read().write() ,此时调用此函数的进程(在JAVA中即java进程)由当

让数据库飞起来 十大DB2优化技巧

DB2是IBM出口的一系列关系型数据库管理系统,分别在不同的操作系统平台上服务.下文中将为大家讲解DB2十大优化技巧. 为了帮助DB2 DBA 避免性能灾难并获得高性能,我为我们的客户.用户和 DB2 专家同行总结了一套故障诊断流程.以下详细说明在 Unix.Windows 和 OS/2 环境下使用 DB2 UDB 的电子商务OLTP 应用程序的10 条最重要的性能改善技巧,希望下文中涉及到的内容对大家能够有所帮助. 一. 监视开关 确保已经打开监视开关.如果它们没有打开,您将无法获取您需要的性

12-JAVA清理_终结处理和垃圾回收

导论: 将一个对象初始化后就"弃之不顾"的做法并非总是安全的.虽然java用垃圾回收器回收无用对象占用的内存资源.但也有特殊情况, 假定对象并非使用new获得了一块"特殊"的区域,由于垃圾回收器只知道释放那些经由new分配的内存,所以他不知道该怎样释 放这块"特殊"的内存. 1.finalize() 此方法出现的原因:回收除以new方法创建对象方式以外的方式分配的内存 为了应对上面的那种情况,java允许在类中定义一个名为finalize()的方