一、实验目的

在前面的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. Java标签在循环中的使用

    定义 标签,类似--label1: 放在循环外部,用于内部多重循环语句的跳出 例子 public static void main(String[] args) { Scanner sc = new ...

  2. 开发了一个json格式化工具,使用js格式化json的代码分享

    今天给大家介绍一下如何通过js来格式化json. 假设json字符串是: {"name":"刘德华","age":25.2,"bi ...

  3. 海思Hi35xx 实现本地和远程升级程序的方法

    前言 嵌入式linux设备要进行软件升级有很种多方式方法,总的来说可以分为本地升级和远程升级. 本地升级包括升级工具升级,存储介质升级等,远程升级是指通过网络进行程序升级. 这里介绍一种同时至此本地和 ...

  4. [转帖]JVM性能调优工具2之jcmd详解(覆盖全网最全的jcmd命令与说明文档)

    上篇文章里<JVM常用性能调优工具详解1>我们已经探究了jps.jstat等监控工具,以及jinfo.jmap.jstack.jhat等故障排查工具,这里我单独拿出一篇文章,特别介绍jcm ...

  5. 【转帖】x86服务器中网络性能分析与调优(高并发、大流量网卡调优)

    最近在百度云做一些RTC大客户的项目,晚上边缘计算的一台宿主机由于CPU单核耗被打满,最后查到原因是网卡调优没有生效,今天查了一下网卡调优的资料,欢迎大家共同探讨. 一.网卡调优方法 1.Broadc ...

  6. sshpass 免密码进行文件复制的方法

    1. 部分centos8 没有安装 sshpass 需要先安装 sshpass yum install sshpass 2. 需要增加一个配置文件, 避免因为 stickhost 检查 造成命令失效 ...

  7. ElasticSearch集群灾难:别放弃,也许能再抢救一下 | 京东云技术团队

    ​ 1 前言 Elasticsearch作为一个分布式搜索引擎,自身是高可用的:但也架不住一些特殊情况的发生,如: 集群超过半数的master节点丢失,ES的节点无法形成一个集群,进而导致集群不可用: ...

  8. 重磅文章:VictoriaMetrics存储引擎分析.pdf

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 万字长文,详细介绍 VictoriaMetrics 存储引 ...

  9. 【解决了一个小问题】macbook m2 下交叉编译 musl-gcc 支持的 gozstd 库

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 我的 golang 项目中使用了 gozstd, 在 ma ...

  10. 靠谱:开源IM项目OpenIM压测程序介绍-自己动手测试性能和稳定性

    压测前准备 (一)服务端配置调整 config/config.yaml 以8核16G为例 (1)openImMessagePort: [ 10130, 10131, 10132, 10133, 101 ...