栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【计算机组成原理】8行Cache直接映射

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【计算机组成原理】8行Cache直接映射

        题目:“根据直接映射的cache工作原理,针对一个8行的cache工作过程进行仿真,每行(块)为一个字,1字4字节,需要读取的内存地址在trace (1).txt文件中列出。请编写程序,实现8行的cache工作过程进行仿真,可显示每个内存地址,及是否命中;命中率。(提交程序源码和命中率截图)” 第一部分:解决从txt文件按行提取文本
#include 
#include 
#include 
using namespace std;

int main()
{
    ifstream in("/Users/tietouguoerwademacbook/Desktop/trace (1).txt");//文本位置,注意空格
    string filename;
    string line;
    string Cache[8][4];    //定义一个二维字符串用于虚拟8个Cache里的4个字节
    int hit=0,miss=0;    //定义命中数和未命中数
    
    if (in) // 有该文件
    {
        while (getline(in, line)) // line中不包括每行的换行符
        {
            cout < 

运行可以检验程序是否正常提取txt文件内容。

注意!该txt文档是用程序生成的,不能手动修改其内部数据,空格也不能加。

注意!!!!该txt文档在

第二部分:判断命中

        思路:将16进制按字节编制的地址变换为10进制地址,计算其所在的块号,所对应的Cache行号和Cache的行内字节号。

        计算公式:

                        块号=地址 / Cache一个块所含字节数

                        行号=块号 % Cache总行数

                        行内号=地址 % Cache一个块所含字节数

//根据10进制地址得到16进制地址
void convertintoH(string &Target,unsigned long int sum){
    int i=9,temp;
    while (i>=2) {
        temp=sum%16;
        if(temp>=10){
            Target[i]=temp-10+'A';
        }
        else Target[i]=temp+'0';
        sum/=16;
        i--;
    }
}

//判断命中
bool TargetHit(string Cache[8][4],string Target){
    unsigned long int sum=0;     //设置sum记录10进制数
    //转为16进制
    for (int i=2; i='0'&&temp<='9')  sum+=temp-'0';
        else sum+=temp-'A'+10;
    }
    
    //找到主存块号:
    long int kuainum=sum/4;
    //找到块内号
    int kuaineinum=sum%4;
    //找到Cache行号
    int linenumber=kuainum%8;
    
    //如果命中则返回真
    if(Cache[linenumber][kuaineinum]==Target) return true;
    
    //如果未命中,将该块挪进Cache
    //将该块内的其他一起挪进Cache
    else {
        string temp=Target;
        sum-=kuaineinum;    //从块内第一个地址开始
        for (int i=0; i<4; i++) {
            convertintoH(temp, sum+i);      //将其转换为16进制地址
            Cache[linenumber][i]=temp;      //存入该块内
           // cout< 

运行程序验证未命中替换是否准确:

 发现未命中和命中机制正确运行,所以程序可用!

最后Mac Xcode运行环境下结果如下,但是明显发现最后一行数据读取有问题,经查是Mac Os对txt文件编码有异。所以转Windows系统下运行

Windows环境下结果如下:

 正确!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923061.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号