一、实验目的

在前面的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. 斐波拉契序列的 Go 实现

    本篇文章主要介绍斐波拉契序列的 Go 语言实现. 斐波拉契序列: 前面相邻两项之后构成后一项. 1. 循环迭代 package main import "fmt" const ma ...

  2. Linux系统CPU异常占用(minerd 、tplink等挖矿进程)

    转载请注明出处: 云服务器ECS(Linux) CPU使用率超过70%,严重时可达到100%,服务器响应越来越慢.  服务器中存在恶意minerd.tplink进程 该进程是服务器被入侵后,被恶意安装 ...

  3. 基于python的视频点播网站(python+django+vue开发的视频点播网站-视频管理系统)

    演示地址 前台地址: http://video.gitapp.cn 后台地址:http://video.gitapp.cn/admin 后台管理帐号: 用户名:admin123 密码:admin123 ...

  4. 使用pip安装pycharm插件时,要使用管理员权限打开cmd安装

    1.问题 安装到一半报错 报错1 报错2 2.解决 解决1 原文:https://blog.csdn.net/weixin_44899752/article/details/128372969 下面是 ...

  5. 第二届福州大学至诚学院网络安全大赛G0DCTF Misc WP

    MISC baby_misc 1.题目信息 key文件夹: 还有一张图片 2.解题方法 观察key文件夹里的每个文件信息,发现并无什么有用的,甚至有的为空... 看到文件名称的数字而且还给了图片,可以 ...

  6. [转帖]haproxy

    HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性.负载均衡,以及基于TCP和HTTP的应用程序代理. HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保 ...

  7. [转帖]clickHouse单机模式安装部署(RPM安装)

    关于版本和系统的选择 操作系统:Centos-7 ClickHouse: rpm 在安装,20.x 安装前的准备 CentOS7 打开文件数限 在 /etc/security/limits.conf ...

  8. Linux 处理CPU和内存参数的方式总结

    Linux 处理CPU和内存参数的方式总结 关闭NUMA,关闭透明大页 比较简单的方法: vim /etc/default/grub 在 GRUB_CMDLINE_LINUX 里面添加配置: tran ...

  9. [转帖]Linux CPU频率控制

    1.       概述 Linux 内部共有五种对频率的管理策略 userspace , conservative , ondemand , powersave  和  performance. l  ...

  10. SMFL 教程&个人笔记(2)

    本文大部分来自官方教程的Google翻译 但是加了一点点个人的理解和其他相关知识 转载请注明 原文链接 :https://www.cnblogs.com/Multya/p/16317401.html ...