《2022年2022年计算机体系结构报告 2.pdf》由会员分享,可在线阅读,更多相关《2022年2022年计算机体系结构报告 2.pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、中南大学计算机体系结构实验报告学生姓名惠苗壮指导教师余腊生学院信息科学与工程学院专业班级计科 0904 班学号 0909091627 完成时间 2012年 04 月 23 日名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 8 页 -使用 LRU 方法更新 Cache 一、实验目的了解和掌握寄存器分配和内存分配的有关技术。了解页面置换算法中LRU 方法的基本原理以及在输入一个页面流之后页面置换情况。二、问题描述结合数据结构的相关知识,使用LRU 的策略,对一组访问序列进行内部的 Cache 更新LRU 置换算法是选择最近最久未使用的页面予以置换。该算法赋予每个页面一个访问字段,用来
2、记录一个页面自上次被访问以来经历的时间T,当须淘汰一个页面时,选择现有页面中T值最大的,即最近最久没有访问的页面。这是一个比较合理的置换算法。举例说明此问题,例如:有一个 CACHE采用组相连映象方式。每组有四块,为了实现LRU 置换算法,在快表中为每块设置一个2位计数器。我们假设访问序列为“1,1,2,4,3,5,2,1,6,7,1,3”。在访问 CACHE 的过程中,块的装入,置换及命中时,具体情况如下表所示:名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 8 页 -三.设计简要描述定义一个结构体用于存储四个cache块中相关信息,cache块中页面的值,cache块的状态是
3、否已经哟页面了。Count用于记录该页面最久没有被使用的次数。typedef struct cache int value;/块的值int state;/块的状态int count;/页面最久没被使用的次数 cache;首先在主函数中输入页面序列号并将之存于ins 数组中。然后调用init_inf(data)函数对于四个 cache块进行初始化。最后调用最重要的up_cache(data,ins)更新函数,在该函数中对页面序列进行cache块的更新。以及输出更新的情况。四.程序清单#include 名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 8 页 -#define m 4#
4、define n 12#define true 1#define false 0 typedef struct cache int value;/块的值int state;/块的状态int count;/页面最久没被使用的次数 cache;void init_inf(cache init)for(int i=0;im;i+)initi.count=0;initi.state=false;initi.value=0;void up_cache(cache data,int walk_sort)int i=0;while(in)int j=0;/满么?while(jm)if(dataj.state
5、=false)&(walk_sorti!=dataj.value)coutcache 有空闲块,不考虑是否要置换.endl;coutwalk_sorti被调入 cache.endl;dataj.value=walk_sorti+;dataj.state=true;dataj.count=0;int kk=0;for(int x=0;xm;x+)coutcache 块x:datax.valueendl;coutendl;/更新其它 cache 块没使用时间while(kkm)名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 8 页 -if(kk!=j&datakk.value!=(-
6、1)datakk.count+;kk+;break;if(dataj.value=walk_sorti)coutendl;coutwalk_sorti命中!endl;for(int x=0;xm;x+)coutcache 块x:datax.valueendl;coutendl;int kk=0;i+;dataj.count=0;/更新其它 cache 块没使用时间while(kkm)if(kk!=j&datakk.value!=(-1)datakk.count+;kk+;j+;if(j=m)coutcache 已经满了,考虑是否置换.endl;coutendl;int k=0;while(km
7、)if(datak.value=walk_sorti)coutendl;coutwalk_sorti命中!endl;for(int x=0;xm;x+)coutcache 块x:datax.valueendl;i+;datak.count=0;int kk=0;/更新其它 cache 块没使用时间while(kkm)名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 8 页 -if(kk!=k)datakk.count+;kk+;break;k+;if(k=m)/考虑置换那一块.int ii=0;int t=0;/要替换的 cache 块号.int max=dataii.count;
8、ii+;while(iimax)max=dataii.count;t=ii;ii+;/置换coutdatat.value被 walk_sorti在 cache 的t 号块置换.endl;datat.value=walk_sorti+;datat.count=0;for(int x=0;xm;x+)coutcache 块x:datax.valueendl;int kk=0;/更新其它 cache 块没使用时间while(kkm)if(kk!=t)datakk.count+;kk+;名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 8 页 -void main()int insn;cout 请输入页面号:endl;for(int i=0;iinsi;cache datam;init_inf(data);up_cache(data,ins);五.结果分析名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 8 页 -四个 cache 块的更新情况在与问题描述中所举的例子中的序列号一样的情况下页面的更新情况也一样的。程序是正确的。名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 8 页 -