計算機(jī)系統(tǒng)結(jié)構(gòu)課程實(shí)驗(yàn)報告實(shí)驗(yàn)一存貯層次模擬器_第1頁
計算機(jī)系統(tǒng)結(jié)構(gòu)課程實(shí)驗(yàn)報告實(shí)驗(yàn)一存貯層次模擬器_第2頁
計算機(jī)系統(tǒng)結(jié)構(gòu)課程實(shí)驗(yàn)報告實(shí)驗(yàn)一存貯層次模擬器_第3頁
計算機(jī)系統(tǒng)結(jié)構(gòu)課程實(shí)驗(yàn)報告實(shí)驗(yàn)一存貯層次模擬器_第4頁
計算機(jī)系統(tǒng)結(jié)構(gòu)課程實(shí)驗(yàn)報告實(shí)驗(yàn)一存貯層次模擬器_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、計算機(jī)系統(tǒng)結(jié)構(gòu)實(shí)驗(yàn)報告冊實(shí)驗(yàn)一:存貯層次模擬器【實(shí)驗(yàn)?zāi)康摹渴箤W(xué)生清楚認(rèn)識虛擬存貯層次結(jié)構(gòu),熟練掌握常用的幾種存儲地址映象與變換方法,以及FIFO、 LRU等替換算法的工作全過程。要求用程序?qū)崿F(xiàn)任意地址流在存儲層次上的命中情況,實(shí)驗(yàn)結(jié)束后提交源程序和實(shí)驗(yàn)說明 書?!緦?shí)驗(yàn)內(nèi)容】在模擬器上實(shí)現(xiàn)在任意地址流下求出在cache 主存一輔存三層存貯層次上的命中率。【實(shí)驗(yàn)儀器設(shè)備】計算機(jī)(裝有常用編程環(huán)境,如C、VC+等)【實(shí)驗(yàn)步驟】Cache一主存:映像方式可以選擇全相聯(lián)、直接映象、組相聯(lián)方式;替換算法一般使用LRU 算法。要求Cache大小、主存容量、塊大小以及組數(shù)等可以輸入修改。求出命中率;顯示替換的

2、全過程;任選一種高級語言來做。要有簡潔、易于操作的界面?!緦?shí)驗(yàn)儀器設(shè)備】計算機(jī)(裝有常用編程環(huán)境,如C、VC+等) 【源程序】include include include struct CacheStructint blocknum;int count;void All_LinkLRU(CacheStruct cs,int bottom,int stream,int k,int result2020) int j=0,m=0,max=0,location=0,hitnum=0; coutendl;/coutvv”主存訪問塊流”是否替換是否命中Cache 塊存放情況”vvendl;for(in

3、t i=0;ik;i+) if(jbottom)/Cache 塊不滿m=0;if(j=0)csj.blocknum=streami;csj.count=0;resultji=streami;/resultbottomi=0;cout塊失 效tt;coutvv未命中 tt;for(int t=0;tbottom;t+)if(cst.blocknum!=-1)coutvvcst.blocknumvv;elsecoutvv空;coutvvendl;*/j+;/ continue;elsewhile(mvj & csm.blocknum!=streami)csm.count+;m+;if(m=j)/已

4、存在的未命中csj.blocknum=streami;csj.count=0;resultji=streami;/resultbottomi=0;/ resultbottom+1i=0;不需要/*coutvvstreamivvtt”;coutvv塊失 效tt;coutvv未命中 tt;for(int t=0;tvbottom;t+)/resultbottom+1i=0;不需要 /*coutvvstreamivvtt”;if(cst.blocknum!=-1) coutcst.blocknum; elsecout空;coutendl;*/j+;/ continue;else/已存在的命中了csm

5、.count=0;m+;resultbottom+1i=0;/*coutstreamitt”;cout無替換tt;cout命中 tt;for(intt=0;tbottom;t+)if(cst.blocknum!=-1)coutcst.blocknum;elsecout空;coutendl;*/ if(m!=j) while(mj)csm.count+;m+; hitnum+;/ continue;else/Cache 塊滿了m=0;max=0;location=0;while(mmax)location=m;max=csm.count;m+;if(m=bottom)/未命中,所有塊計數(shù)器都已加

6、1,resultbottomi=cslocation.blocknum;/*coutstreamitt”;cout 替換塊 cslocation.blocknumtt;cout未命中 tt;*/cslocation.blocknum=streami;cslocation.count=0;resultlocationi=streami;/*for(intt=0;tbottom;t+)if(cst.blocknum!=-1)coutcst.blocknum;elsecout空;coutendl;*/else 命中,cout塊地址流for(int t=O;tk;t+)if(ik-l)(for(int

7、 r=0;rbottom;r+)result r i+1 =resultr i;else(if(resultts!=-l)/ 中 cout命中 t”;elsecout未命中 t”;result bottom+1 i=0;/*coutstreamitt;cout無替換 cout命中 tt;*/ csm.count=0;m+;if(m!=bottom) while(m !=bottom) (csm.count+; m+;/*for(intt=0;tbottom;t+)if(cs t .blocknum!=-1)coutcst.blocknumelsecout空 coutvvendl;*/ hitn

8、um+;coutstreamt t; coutendlt;for(t=0; t(bottom+2) ;t+)(coutendlt;for(int s=0;svk;s+)(if(tbottom)(if(resultts=-l)coutvv”空t”;elsecoutresult t st;else if(t=bottom)(if(resultt s !=-l)塊替換 cout 替換塊 resulttst;else(if(resultt+1 s !=-1)/ 塊命中cout無替換 t;elsecout塊失效elseif(cst.blocknum!=-1)coutendl;if(hitnum!=0)c

9、out 采用全相聯(lián)地址映射方式訪問Cache 的命中率為:hitnum/kendl;elsecout ”采用全相聯(lián)地址映射方式訪 問Cache的命中率為:0endl;void Direct_link(CacheStruct cs,int bottom,int stream,int k,int result2020) / cout 主存訪問塊流是否替換是否命中Cache 塊存放情況”endl;int location=-1,hitnum=0,m=0;for(int i=0;ik;i+)location=streami%bottom;if(cslocation.blocknum!=-1)/ 若產(chǎn)

10、生沖突if(cslocation.blocknum=streami)/若 命中resultbottom+1i=0;/*coutstreamitt”;cout無替換tt; cout命中 tt;for(int t=0;tbottom;t+) if(cst.blocknum!=-1)coutcst.blocknum;cout空; coutendl;*/ hitnum+;/continue; elseresultbottomi=cslocation.blocknum;/* coutstreamitt;cout 替換塊 cslocation.blocknumtt;cout未命中 tt;*/cslocat

11、ion.blocknum=streami;resultlocationi=streami;/ cslocation.count=0;/*for(intt=0;tbottom;t+)if(cst.blocknum!=-1)coutcst.blocknum;elsecout空; coutendl;*/else/不產(chǎn)生沖突,僅是頁面失效cslocation.blocknum=streami;resultlocationi=streami;/* coutstreamitt; cout塊失 效tt;cout未命中 tt;for(int t=0;tbottom;t+) coutcst.blocknum;e

12、lsecout空;coutendl;*/if(ik-1)for(int r=0;rbottom;r+)resultri+1=resultri;cout塊地址流”;for(int t=0;tk;t+)coutstreamtt;coutendlt;for(t=0;t(bottom+2);t+)coutendlt;for(int s=0;sk;s+)if(tbottom)if(resultts=-1)cout空t;elsecoutresulttst;else if(t=bottom)if(resultts!=-1)塊替換cout 替換塊 resulttst;elseif(resultt+1s!=-1

13、)/t;elsecout塊失效 t;elseif(resultts!=-1)/命 中cout命中 t;elsecout未命中 t;coutendl;coutendl;if(hitnum!=0)cout 采用直接地址映射方式訪問Cache 的命中率為:hitnum/kendl;elsecout ”采用直接地址映射方式訪問 Cache的命中率為:0endl;void Group_link(CacheStruct cs,int bottom,int stream,int k,int Gblock,int result2020) / cout主存訪問塊流”是否替換是否命中Cache 塊存放情況”end

14、l;intCgroupnum=bottom/Gblock,Mgroupnum=0,locat ion=-1;intstart=-1,end=-1,max=0,m=-1,find=0,hitnum=0;for(int i=0;ik;i+)塊命中Mgroupnum=streami/Gblock;location=Mgroupnum%Cgroupnum;start=location*Gblock;end=start+Gblock-1;location=-1;find=0;m=-1;max=0;以下實(shí)現(xiàn)組內(nèi)全相聯(lián)for(int j=start;jmax)max=csj.count;m=j;if(csj

15、.blocknum=streami)break;if(j=end)/命 中resultbottom+1i=0;/*coutvvstreamivvtt”;cout無替換tt;coutvv命中 tt;*/csj.count=0;if(jvend)j+;while(jv=end)if(csj.blocknum!=-1)csj.count+;j+;/* for(int t=0;tbottom;t+)if(cst.blocknum!=-1) coutvvcst.blocknumvv;else coutvv空; coutvvendl;*/ hitnum+;else/未 命中if(location!=-1)

16、/Cache 有空 余塊 resultlocationi=streami; /*coutvvstreamivvtt”;coutvv塊失 效tt;coutvv未命中 tt;*/ cslocation.blocknum=streami; cslocation.count=0;/*for(int t=0;tvbottom;t+)if(cst.blocknum!=-1) coutvvcst.blocknumvv; elsecoutvv空;coutvvendl;*/else/替 換resultbottomi=csm.blocknum;/* coutvvstreamivvtt;coutvv替換塊vcsm.

17、blocknumvvtt;coutvv未命中 tt;*/ csm.blocknum=streami; csm.count=0;resultmi=streami;/* for(int t=0;tbottom;t+)if(cst.blocknum!=-1) coutvvcst.blocknumvv; elsecout空coutvvendl;*/if(ik-l)(for(int r=0;rbottom;r+) result ri+l =result r i;else(if(resultt s!=-1 )命中cout命中 t”;elsecout未命中 t”;coutvv”塊地址流for(int t=O

18、;tk;t+) coutstreamtt;coutendlt;for(t=0;t(bottom+2);t+)(coutendlt;for(int s=0;svk;s+)(if(tbottom)(if(resultts-1) coutvv空t;elsecoutresulttst;else if(t=bottom)(if(resultts !=-l)塊替換 cout替換塊resulttst;else(if(resultt+1 s!=-1)/塊命中cout無替換 t;elsecout塊失效 t;coutendl;coutendl;if(hitnum!=O)(cout采用組相聯(lián)地址映射方式訪問Cach

19、e 的命中率為:vvhitnumvv,/,vvkvvendl;else(cout ”采用組相聯(lián)地址映射方式訪 問Cache的命中率為:0endl;void main()(CacheStruct cs100;int result 20 20;int stream 100;intC volumn=0 ,M volumn=0 ,B lockvolumn=0 ,Mbloc knum=0,Cblocknum=0,groupnum=0,k=0,type=- l,t=-l;char ch=y;while(ch=yllch=Y)(system(cls);k=O;type=-l;t=-l;for(int i=0

20、;i100;i+)(cs i.blocknum=-1;csi.count=0;coutMvolumnCvolumnBlockvolumn;/*問題改進(jìn):1.界面輸入輸出方式容量之間的關(guān)系3.*/while(Mvolumn*1024)%Blockvolumn!=0| Cvolumn%Blockvolumn!=0)cout”主存空間大小與Cache空間大小應(yīng)是塊大小的整數(shù)倍!”;coutMvolumnCvolumnBlockvolumn;Mblocknum=(Mvolumn*1024)/Blockvolumn;Cblocknum=Cvolumn/Blockvolumn;coutt;while(t!

21、=-1)if(t=Mblocknum)/* coutt;while(t=Mblocknum|t=-1)if(t=-1)break;else新輸入:”;cint;if(t!=-1)streamk=t;k+;cint;*/coutt;elsestreamk=t;k+;cint;/完成result數(shù)組的初始化for(i=0;i20;i+)for(int j=0;jtype;switch(type)case1:All_LinkLRU(cs,Cblocknum,stream,k,result);b reak;case2:Direct_link(cs,Cblocknum,stream,k,result);brea k;coutgroupnum;while(Mblocknum%groupnum!=0 IICblocknum%(Mblocknum/groupnum)!=0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論