一、实验目的

在前面的PA1中,我们实现了CPU和FPU,在PA2中我们实现了对指令的解码和对ELF的装载,以及进一步完善了CLI调试器。那么在整个PA3中,我们将要着力于内存的相关处理,如Cache,段式存储,页表划分等。

在PA3-1中,我们将完成CPU中的Cache,模仿实际上的数据快速读取(虽然在NEMU中启用Cache会更慢)。

二、实验步骤

首先我们来了解一下Cache。

  • 为什么要有Cache?每次取指令、存取操作数都要访存,频繁的访存大大影响了运算的速度。
  • Cache的基本原理是甚魔?程序运行时时间和空间上的局限性,刚刚被访问过的数据以及它附近的数据很有可能再次被访问。
  • 设计Cache时有啥要注意的问题?主存如何映射到Cache,Cache满了要怎么替换,Cache和主存的数据怎么保持一致。

通过课本和课上对Cache的认识,我们摸索透上面的几个问题后,就可以来看看NEMU中的实现要求:

  • cache block存储空间的大小为64B
  • cache存储空间的大小为64KB
  • 8-way set associative 八路组相联
  • 标志位只需要valid bit即可
  • 替换算法采用随机方式
  • write through 直写法
  • not write allocate 非写时分配

好,让我们一步一步来:

  • 首先是要开启NEMU中的Cache宏(方便做完PA3-1后关掉Cache)。代码位于include/config.h

  • 然后编辑 nemu/include/memory/mmu/cache.h,在里面要做的事情是定义Cache行的结构体。我在这里顺便把Cache数组也做出来了,不用再到c文件中去定义一趟。(在这里NEMU的目录划分没有那么讲究,因为本来Cache是不该放在mmu目录下的。)

    定义好后,我们可以在这个头文件继续声明一些Cache相关的函数,如初始化函数init_cache(),读写函数cache_read()cache_write()

  • 继续编辑nemu/src/memory/mmu/cache.c,完成对上面函数的定义。具体要求如:

    一个十分重要的点是要处理好跨Cache行的问题

  • 完成上面的步骤后,就可以在内存的相关操作中进行对Cache操作的调用。编辑 nemu/src/memory/memory.c,加上#include "memory/mmu/cache.h",在init_mem()函数中调用init_cache(),在paddr_read()paddr_write()中分别通过cache_read()cache_write()函数来实现对物理地址的读写。建议加上条件编译,方便一步开关Cache:

NEMU PA 3-1 实验报告的更多相关文章

  1. ucoreOS_lab3 实验报告

    所有的实验报告将会在 Github 同步更新,更多内容请移步至Github:https://github.com/AngelKitty/review_the_national_post-graduat ...

  2. ucoreOS_lab2 实验报告

    所有的实验报告将会在 Github 同步更新,更多内容请移步至Github:https://github.com/AngelKitty/review_the_national_post-graduat ...

  3. JAVA实验报告及第七周总结

    JAVA第六周作业 实验报告五 第一题 1.设计一个类层次,定义一个抽象类--形状,其中包括有求形状的面积的抽象方法. 继承该抽象类定义三角型.矩形.圆. 分别创建一个三角形.矩形.圆存对象,将各类图 ...

  4. 第五次java实验报告

    Java实验报告 班级 计科二班 学号 20188437 姓名 何磊 完成时间2019/10/10 评分等级 实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. 实 ...

  5. 第七周总结&第五次实验报告

    学习总结 这周我们加深了对抽象类与接口的学习,获得的知识点也比上周多了许多,抽象类与接口很相似,就比如别人还没有做完的是交给你来做,而他那些样式都做好了,你只需要完善即可 但也有不同点. 区别点 抽象 ...

  6. 第七周课程总结 & 实验报告(五)

    第七周课程总结 一.抽象类与接口的应用 1.实例化 2.实际应用 ---模板设计(抽象类) ---制定标准(接口) 3.设计模式 ---工厂设计 ---代理设计 ---适配器设计 二.抽象类与接口之间 ...

  7. 第七周&实验报告五

    实验四 类的继承 •实验目的 •理解抽象类与接口的使用: •了解包的作用,掌握包的设计方法. •实验要求 •掌握使用抽象类的方法. •掌握使用系统接口的技术和创建自定义接口的方法. •了解 Java ...

  8. 2019JAVA第五次实验报告

    Java实验报告 班级 计科二班 学号 20188442 姓名 吴怡君 完成时间2019/10/11 评分等级 实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. ...

  9. 实验报告5&第七周课程总结

    实验四 类的继承 实验目的 理解抽象类与接口的使用: 了解包的作用,掌握包的设计方法. 实验要求 掌握使用抽象类的方法. 掌握使用系统接口的技术和创建自定义接口的方法. 了解 Java 系统包的结构. ...

  10. 北京电子科技学院(BESTI)实验报告5

    北京电子科技学院(BESTI)实验报告5 课程: 信息安全系统设计基础 班级:1452.1453 姓名:(按贡献大小排名) 郑凯杰.周恩德 学号:(按贡献大小排名) 20145314.20145217 ...

随机推荐

  1. 基于html+javascript开发的base64解码工具

    base64在线解码工具可以帮助你将Base64编码的字符串解码为原始的文本或数据. 预览入口 以下是一个简单的base64在线解码工具的示例: html <!DOCTYPE html> ...

  2. spring启动流程 (5) Autowired原理

    构造方法参数Autowire BeanClass可以在构造方法上标注@Autowired注解,Spring在创建Bean实例时将自动为其注入依赖参数 Spring会优先使用标注@Autowired注解 ...

  3. Laravel - 模板中的url

    <!-- 1, url --> <a href="{{url('/')}}">跳转到主页</a>   <!-- 2,action  方法  ...

  4. 基本操作Linux

    基本操作Linux 关机,重启# 关机 shutdown -h now # 重启 shutdown -r now 查看系统,CPU信息# 查看系统内核信息 uname -a # 查看系统内核版本 ca ...

  5. [转帖]oracle ZHS16GBK的数据库导入到字符集为AL32UTF8的数据库(转载+自己经验总结)

    字符集子集向其超集转换是可行的,如此例 ZHS16GBK转换为AL32UTF8. 导出使用的字符集将会记录在导出文件中,当文件导入时,将会检查导出时使用的字符集设置,如果这个字符集不同于导入客户端的N ...

  6. [转帖]命令行非明文密码连接 TiDB

    https://tidb.net/blog/6794a34b#%E6%96%B9%E5%BC%8F%E4%B8%80%EF%BC%9A%E5%91%BD%E4%BB%A4%E8%A1%8C%E8%BE ...

  7. [转帖]【Redis】Redis中使用Lua脚本

    Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能. Lua具体语法参考:https://www.runoob. ...

  8. [转帖]性能分析之TCP全连接队列占满问题分析及优化过程(转载)

    https://www.cnblogs.com/wx170119/p/12068005.html 前言 在对一个挡板系统进行测试时,遇到一个由于TCP全连接队列被占满而影响系统性能的问题,这里记录下如 ...

  9. [1036]kvm虚拟机访问时提示no route to host分析

    环境 宿主机: IP: 10.110.136.43 版本:Kylin Linux Advanced Server release V10 (Sword) KVM vm: IP: 10.110.136. ...

  10. 总结: Redis 查看key大小的简单总结

    Redis 查看key大小的简单总结 第一步: 安装rdbtools 吐槽一下 python 非常不熟悉 第一步 安装epel以及python等工具 yum install epel-release ...