山东大学项目实训树莓派提升计划二期(5)计算机系统原理实验五

前言

本文将介绍与高速缓存 Cache 有关的实验五。

这个实验来自于《深入理解计算机系统》第六章的内容。存储器是计算机中一个十分重要的结构,学生将在本实验中理解,当缓存命中与不命中时系统会产生的变化。

介绍

本实验需要学生在已有的框架下,实现 LRU 算法,以模拟当缓存命中、不命中时系统产生的变化,更深入地理解 Cache。

具体内容

学生需要实现下面的函数以实现 LRU 算法,并通过实验五的所有测试点。实验五的测试程序和测试用例集已经在文件中一并给出,学生只需简单地运行编译好的程序即可检查实验结果。

LRUCache(long unsigned int capacity);
int get(int key);
void set(int key, int value);

这三个方法都封装在类 LRUCache 中,其中:

  1. 第一个方法是构造方法,需要一个 long unsigned int 来初始化缓存大小
  2. get() 方法用于获得缓存节点中的内容,若缓存命中则返回缓存中的值,若不命中则返回 -1
  3. set 方法用于设置缓存节点中的内容。

文件内容

  • cache.cc:学生实现 LRU 算法的文件
  • cache.h:LRU 算法声明的头文件
  • cache_ans.cc:本实验答案
  • driver.cc:测试驱动文件
  • Makefile:简化编译过程的文件
  • README:实验指导书实验五部分节选

实验过程简介

学生首先阅读 cache.h 文件中的声明,了解 CacheNode 和 LRUCache 的基本结构。

struct CacheNode {
    int key;
    int value;
    CacheNode *prev, *next;
    CacheNode(int k, int v) : key(k), value(v), prev(nullptr), next(nullptr) {}
};

class LRUCache {
private:
    long unsigned int size;
    CacheNode *head, *tail;
    std::map<int, CacheNode*> mp;
public:
    // 必须实现的方法
    LRUCache(long unsigned int capacity);
    int get(int key);
    void set(int key, int value);
    
    // 提供的辅助方法
    void remove(CacheNode *node);
    void setHead(CacheNode *node);
};

根据上述的结构,学生需要实现自己的 LRUCache 类,以满足 LRU 算法。

实现完成后,可以通过 Makefile 进行编译,以检查实验结果是否正确。

实验编写简介

本实验的测试程序编写并不占大头,而主要在于我需要自己实现一个 LRU 算法。答案已经包含在最终文件中,这里就不展示了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值