【贪心】【JSOI2010】缓存交换

本文讨论了计算机中CPU与高速缓存交互时如何优化缓存调度以减少缺失次数。通过举例说明了LRU算法并非总是最优,并提出使用贪心策略,利用next[i]数组记录主存块的下次访问位置,维护一个大根堆来决定何时换出缓存中的主存单元。给出的解决方案包括在命中时增加容器容量,有剩余容量时直接插入,需要交换时弹出堆顶并插入当前点。文章提供了一个使用优先队列实现的贪心算法,并提及该方法的正确性可能难以确保。
摘要由CSDN通过智能技术生成

   缓存交换

问题描述

在计算机中,CPU只能和高速缓存Cache直接交换数据。当所需的内存单元不在Cache中时,则需要从主存里把数据调入Cache。此时,如果Cache容量已满,则必须先从中删除一个

例如,当前Cache容量为3,且已经有编号为10和20的主存单元。

此时,CPU访问编号为10的主存单元,Cache命中。

接着,CPU访问编号为21的主存单元,那么只需将该主存单元移入Cache中,造成一次缺失(Cache Miss)。

接着,CPU访问编号为31的主存单元,则必须从Cache中换出一块,才能将编号为31的主存单元移入Cache,假设我们移出了编号为10的主存单元。

接着,CPU再次访问编号为10的主存单元,则又引起了一次缺失。我们看到,如果在上一次删除时,删除其他的单元,则可以避免本次访问的缺失。

在现代计算机中,往往采用LRU(最近最少使用)的算法来进行Cache调度——可是,从上一个例子就能看出,这并不是最优的算法。

对于一个固定容量的空Cache和连续的若干主存访问请求,聪聪想知道如何在每次Cache缺失时换出正确的主存单元,以达到最少的Cache缺失次数

 

输   入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值