第一篇:北郵大三計(jì)算機(jī)體系結(jié)構(gòu)實(shí)驗(yàn)三DLX處理器程序設(shè)計(jì)
實(shí)驗(yàn)三DLX處理器程序設(shè)計(jì)
1.實(shí)驗(yàn)?zāi)康?/p>
學(xué)習(xí)簡(jiǎn)單編譯優(yōu)化方法,觀察采用編譯優(yōu)化方法所帶來(lái)的性能的提高。
2.實(shí)驗(yàn)原理
采用靜態(tài)調(diào)度方法重排指令序列,減少相關(guān),優(yōu)化程序。
3、實(shí)驗(yàn)內(nèi)容和要求
自編一段匯編代碼,完成一維向量加法運(yùn)算,并輸出結(jié)果。觀察程序中出現(xiàn)的數(shù)據(jù)/控制/結(jié)構(gòu)相關(guān)。(注:使用一維數(shù)組表示一維向量。)
4.1向量加法代碼清單及注釋說(shuō)明
1、向量加法設(shè)計(jì)源代碼.data
VectorLength:.word 16
Vector1:.word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
Vector2:.word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 ;聲明向量長(zhǎng)度以及聲明向量1、2 Printf1:.asciiz
“Vector =” Printf2:.asciiz “ %f”.align 2
PrintPrompt:.word Printf1 PrintPar:
.word Printf2
Result:
.space ;存放打印數(shù)據(jù)的空間申請(qǐng).text
main:
addi r14,r0,PrintPrompt trap 5
lw r20,VectorLength
addi r2,r0,0
Loop:
ld f10,Vector1(r2)
ld f12,Vector2(r2)
;循環(huán)體中讀入向量 cvti2d f0,f10
cvti2d f2,f12
addd f4,f2,f0;加法運(yùn)算
Finish:;**** Finish,write result into stdout sd Result,f4
addi r14,r0,PrintPar
trap 5
;系統(tǒng)中斷,輸出結(jié)果 addi r2,r2,4
subi r20,r20,1
bnez r20,Loop
;**** End trap
0
2、運(yùn)行結(jié)果
5.1程序相關(guān)性分析結(jié)果
(1)觀察程序中出現(xiàn)的數(shù)據(jù)/控制/結(jié)構(gòu)相關(guān)。指出程序中出現(xiàn)上述現(xiàn)象的指令組合。
產(chǎn)生34.12%的數(shù)據(jù)相關(guān)。當(dāng)對(duì)當(dāng)前指令的操作數(shù)寄存器進(jìn)行操作的時(shí)候,前幾條指令的運(yùn)算結(jié)果還未寫(xiě)回結(jié)果寄存器,由此產(chǎn)生數(shù)據(jù)相關(guān)。
沒(méi)有產(chǎn)生結(jié)構(gòu)相關(guān)。
產(chǎn)生3.94%的控制相關(guān)。系統(tǒng)按照預(yù)測(cè)成功來(lái)執(zhí)行指令,執(zhí)行一條指令后馬上將其下一條指令trap讀進(jìn)來(lái)。
(2)考察增加浮點(diǎn)運(yùn)算部件對(duì)性能的影響。
1個(gè)浮點(diǎn)運(yùn)算部件
3個(gè)浮點(diǎn)運(yùn)算部件
同一段代碼執(zhí)行相同步,但是經(jīng)過(guò)對(duì)比發(fā)現(xiàn)浮點(diǎn)運(yùn)算部件的多少對(duì)于程序執(zhí)行效率并沒(méi)有什么影響,浮點(diǎn)運(yùn)算部件的多少對(duì)統(tǒng)計(jì)結(jié)果都不造成影響,可能是由于該程序不存在爭(zhēng)用浮點(diǎn)運(yùn)算部件資源的情況(3)考察增加forward 部件對(duì)性能的影響。
不使用forward部件使用forward部件
使用forward部件之后執(zhí)行相同的代碼用的時(shí)鐘周期比不使用forward部件少了 大約100個(gè)時(shí)鐘周期,由于沒(méi)有結(jié)構(gòu)相關(guān),所以使用forward部件主要使得RAW相關(guān)明顯減少了,占總的時(shí)鐘周期比例也減少了,對(duì)控制相關(guān)沒(méi)有什么影響??傊褂胒orward部件后,總的時(shí)鐘周期減少,數(shù)據(jù)相關(guān)減少,流水線的性能得到很大的改善。
(4)觀察轉(zhuǎn)移指令在轉(zhuǎn)移成功和轉(zhuǎn)移不成功時(shí)候的流水線開(kāi)銷(xiāo)。
在本次實(shí)驗(yàn)中轉(zhuǎn)移成功的幾率比較大,進(jìn)行16次轉(zhuǎn)移只有一次轉(zhuǎn)移不成功的,因?yàn)橄到y(tǒng)按照預(yù)測(cè)成功來(lái)執(zhí)行指令,當(dāng)判斷轉(zhuǎn)移不成功時(shí),系統(tǒng)對(duì)trap指令進(jìn)行的操作被全部作廢,轉(zhuǎn)而去執(zhí)行跳轉(zhuǎn)到的指令。
4.2雙精度浮點(diǎn)加法求和代碼清單及注釋說(shuō)明
1、雙精度浮點(diǎn)加法求和源代碼.data
;初始化兩個(gè)用于相加的一維向量(雙精度浮點(diǎn)數(shù)),向量長(zhǎng)度為20 a:.double 1.9, 2.1, 3.7, 4.6, 5.5, 6.4, 7.3, 8.2, 9.1, 10.1, 11.2,12.3,13.4,14.5,15.6,16.7,17.8,18.9,19.0,20.2 b:.double 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.8, 10.9, 11.8,12.7,13.6,14.5,15.4,16.3,17.2,18.1,19.9,20.8
PrintfFormat:.asciiz“The result is nn%ft%ft%ft%ft%ft%ft%ft%ft%ft%ft%ft%ft%ft%ft%ft%ft%ft%ft%ft%ftnn”
.align
PrintfPar:
.word
PrintfFormat r:
.space
200
;r為保存相加結(jié)果的向量空間
.text
.global main main:
addi r1,r0,0;r1計(jì)數(shù)相加的次數(shù) addui r4,r0,8;r4為常數(shù)8
loop:
;循環(huán)計(jì)算向量相加結(jié)果
subi r2,r1,20;r1=20時(shí),跳轉(zhuǎn)到finish beqz r2,finish
multu r3,r1,r4;r3為當(dāng)前分量相對(duì)于向量基址的偏移(每個(gè)分量占8B)ld f0,a(r3);取a中第r1個(gè)分量 ld f2,b(r3);取b中第r1個(gè)分量 addd f4,f0,f2;相加結(jié)果放在f4中
sd r(r3),f4;將相加結(jié)果放入結(jié)果向量r中 addi r1,r1,1;下一分量 j loop
finish:;輸出向量相加的結(jié)果 addi r14,r0,PrintfPar trap 5
2、運(yùn)行結(jié)果:
5.2程序相關(guān)性分析結(jié)果
(1)觀察程序中出現(xiàn)的數(shù)據(jù)/控制/結(jié)構(gòu)相關(guān)。指出程序中出現(xiàn)上述現(xiàn)象的指令 組合。
產(chǎn)生了53.78%的數(shù)據(jù)相關(guān)。當(dāng)對(duì)當(dāng)前指令的操作數(shù)寄存器進(jìn)行操作的時(shí)候,前幾條指令的運(yùn)算結(jié)果還未寫(xiě)回結(jié)果寄存器,由此產(chǎn)生數(shù)據(jù)相關(guān)。產(chǎn)生數(shù)據(jù)相關(guān)的指令主要有:
1)addi r1,r0,0 subi r2,r1,20
2)subi r2,r1,20
beqz r2,finish
3)multu r3,r1,r4 ld f0,a(r3)4)ld f2,b(r3)addd f4,f0,f2
無(wú)結(jié)構(gòu)相關(guān)
產(chǎn)生了4.29%的控制相關(guān)。系統(tǒng)按照預(yù)測(cè)成功來(lái)執(zhí)行指令,執(zhí)行一條指令后馬上將其下一條指令trap讀進(jìn)來(lái)。和4.1代碼類(lèi)似。(2)考察增加浮點(diǎn)運(yùn)算部件對(duì)性能的影響。
1個(gè)浮點(diǎn)運(yùn)算部件
3個(gè)浮點(diǎn)運(yùn)算部件
同一段代碼執(zhí)行相同步,但是經(jīng)過(guò)對(duì)比發(fā)現(xiàn)浮點(diǎn)運(yùn)算部件的多少對(duì)于程序執(zhí)行效率并沒(méi)有什么影響,浮點(diǎn)運(yùn)算部件的多少對(duì)統(tǒng)計(jì)結(jié)果都不造成影響,可能是由于該程序函數(shù)中沒(méi)有連續(xù)的浮點(diǎn)運(yùn)算指令。
(3)考察增加forward 部件對(duì)性能的影響。
沒(méi)有forward部件有forward部件
使用forward部件之后執(zhí)行相同的代碼用的時(shí)鐘周期比不使用forward部件少了 大約122個(gè)時(shí)鐘周期,使用forward部件使得RAW相關(guān)明顯減少了,流水線的性能得到很大的改善。
(4)觀察轉(zhuǎn)移指令在轉(zhuǎn)移成功和轉(zhuǎn)移不成功時(shí)候的流水線開(kāi)銷(xiāo)。
該轉(zhuǎn)移指令不成功的情況較多,21次預(yù)測(cè)中只有1次轉(zhuǎn)移成功,所以預(yù)測(cè)順序取對(duì)流水線的性能是有利的。
6、實(shí)驗(yàn)總結(jié)
本次實(shí)驗(yàn)主要是向量求和運(yùn)算,在本次實(shí)驗(yàn)我設(shè)計(jì)了兩個(gè)部分,首先是整數(shù)向量的加法,整數(shù)向量加法的實(shí)驗(yàn)進(jìn)行成功后才在之前實(shí)驗(yàn)的基礎(chǔ)上略作修改,進(jìn)行了的雙精度浮點(diǎn)加法求和的實(shí)驗(yàn)。本次實(shí)驗(yàn)沒(méi)有輸入,是直接對(duì)固定在代碼中的數(shù)據(jù)進(jìn)行運(yùn)算,運(yùn)算完畢后直接輸出結(jié)果。編程中遇到的一些問(wèn)題:在由整形改為雙精度浮點(diǎn)運(yùn)算的時(shí)候?qū)﹄p精度運(yùn)算指令不知道怎么來(lái)標(biāo)識(shí),后來(lái)查到所有涉及到double型數(shù)據(jù)的運(yùn)算指令,指令代碼都要加上d來(lái)說(shuō)明,否則編譯是不通過(guò)的。
通過(guò)本次自己編寫(xiě)匯編程序?qū)Ω↑c(diǎn)數(shù)的操作有了更深入的了解,也學(xué)會(huì)了WINDLX中浮點(diǎn)寄存器和浮點(diǎn)狀態(tài)寄存器的設(shè)置和使用。熟悉了雙精度浮點(diǎn)運(yùn)算的流水線操作過(guò)程,以及數(shù)據(jù)相關(guān),結(jié)構(gòu)相關(guān),控制相關(guān),forward部件對(duì)于雙精度浮點(diǎn)運(yùn)算流水線的影響。
第二篇:北郵操作系統(tǒng)第二次實(shí)驗(yàn)[模版]
北京郵電大學(xué)操作系統(tǒng)實(shí)驗(yàn)實(shí)驗(yàn)報(bào)告
班號(hào):2011211314姓名:oneseven學(xué)號(hào):
實(shí)驗(yàn)日期: 2013.12.16 實(shí)驗(yàn)名稱(chēng): 操作系統(tǒng)實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?/p>
通過(guò)模擬實(shí)現(xiàn)內(nèi)存分配的伙伴算法和請(qǐng)求頁(yè)式存儲(chǔ)管理的幾種基本頁(yè)面置換算法,了解存儲(chǔ)技術(shù)的特點(diǎn)。掌握虛擬存儲(chǔ)請(qǐng)求頁(yè)式存儲(chǔ)管理中幾種基本頁(yè)面置換算法的基本思想和實(shí)現(xiàn)過(guò)程,并比較它們的效率。
二、實(shí)驗(yàn)內(nèi)容
1.實(shí)現(xiàn)一個(gè)內(nèi)存管理的伙伴算法,實(shí)現(xiàn)內(nèi)存塊申請(qǐng)時(shí)的分配和釋放后的回收。
實(shí)驗(yàn)準(zhǔn)備
用隨機(jī)函數(shù)仿真進(jìn)程進(jìn)行內(nèi)存申請(qǐng),并且以較為隨機(jī)的次序進(jìn)行釋放。對(duì)其碎片進(jìn)行統(tǒng)計(jì),當(dāng)申請(qǐng)分配內(nèi)存失敗時(shí)區(qū)分實(shí)際空間不足和由于碎片而不能滿足。
2.設(shè)計(jì)一個(gè)虛擬存儲(chǔ)區(qū)和內(nèi)存工作區(qū),并使用下述算法計(jì)算訪問(wèn)命中率。
1)最佳置換算法(Optimal)
2)先進(jìn)先出法(Fisrt In First Out)
3)最近最久未使用(Least Recently Used)4)最不經(jīng)常使用法(Least Frequently Used)
其中,命中率=1-頁(yè)面失效次數(shù)/頁(yè)地址流長(zhǎng)度。試對(duì)上述算法的性能加以較各:頁(yè)面?zhèn)€數(shù)和命中率間的關(guān)系;同樣情況下的命中率比較。
實(shí)驗(yàn)準(zhǔn)備
本實(shí)驗(yàn)中主要的流程:首先用srand()和rand()函數(shù)定義和產(chǎn)生指令序列,然后將指令序列變換成相應(yīng)的頁(yè)地址流,并針對(duì)不同的算法計(jì)算出相應(yīng)的命中率。
實(shí)驗(yàn)可先從一個(gè)具體的例子出發(fā)。
(1)通過(guò)隨機(jī)數(shù)產(chǎn)生一個(gè)指令序列,共2048條指令。指令的地址按下述原則生成: A:50%的指令是順序執(zhí)行的
B:25%的指令是均勻分布在前地址部分 C:25%的指令是均勻分布在后地址部分 具體的實(shí)施方法是:
A:在[0,1023]的指令地址之間隨機(jī)選取一起點(diǎn)m B:順序執(zhí)行一條指令,即執(zhí)行地址為m+1的指令
C:在前地址[0,m+1]中隨機(jī)選取一條指令并執(zhí)行,該指令的地址為m’ D:順序執(zhí)行一條指令,其地址為m’+1 E:在后地址[m’+2,2047]中隨機(jī)選取一條指令并執(zhí)行 F:重復(fù)步驟A-E,直到2048次指令(2)將指令序列變換為頁(yè)地址流 設(shè):頁(yè)面大小為4K;
用戶內(nèi)存容量4頁(yè)到32頁(yè); 用戶虛存容量為32K。
在用戶虛存中,按每K存放64條指令排列虛存地址,即2048條指令在虛存中的存放方式為:
第 0 條-第 63 條指令為第0頁(yè)(對(duì)應(yīng)虛存地址為[0,63])第64條-第127條指令為第1頁(yè)(對(duì)應(yīng)虛存地址為[64,127])
………………………………
-1- 第1984條-第2047條指令為第31頁(yè)(對(duì)應(yīng)虛存地址為[1984,2047])按以上方式,用戶指令可組成32頁(yè)。
以此為基礎(chǔ),給出較為一般的情形:仿真內(nèi)存容量和虛存容量參數(shù)變化時(shí)的情形。
3.實(shí)現(xiàn)內(nèi)存的slab分配器:
其基本思想是:一次向內(nèi)核獲取整數(shù)頁(yè),slab根據(jù)數(shù)據(jù)結(jié)構(gòu)的大小進(jìn)行劃分為一個(gè)個(gè)小的數(shù)據(jù)結(jié)構(gòu),當(dāng)需要時(shí)直接從該鏈表上摘取一個(gè)返回應(yīng)用程序,當(dāng)應(yīng)用程序釋放時(shí),而非真正釋放,只需要該空間放回到鏈表中,當(dāng)分散的一頁(yè)多塊又聚集一頁(yè)時(shí),又會(huì)拼成一頁(yè),同時(shí)判斷slab空閑的頁(yè)數(shù),如果空閑頁(yè)超過(guò)一定的頁(yè)數(shù),就會(huì)向系統(tǒng)釋放一定的頁(yè)數(shù)。一個(gè)slab分配器只能管理一個(gè)指定大小的數(shù)據(jù)結(jié)構(gòu)分配。
三、項(xiàng)目要求及分析
3.1實(shí)現(xiàn)一個(gè)內(nèi)存管理的伙伴算法,實(shí)現(xiàn)內(nèi)存塊申請(qǐng)時(shí)的分配和釋放后的回收。假設(shè)系統(tǒng)的可利用內(nèi)存空間容量為2m個(gè)字(地址從0到2m-1),則在開(kāi)始運(yùn)行時(shí),整個(gè)內(nèi)存區(qū)是一個(gè)大小為2m的空閑塊,在運(yùn)行了一段時(shí)間之后,被分隔成若干占用塊和空閑塊。為了在分配時(shí)查找方便起見(jiàn),我們將所有大小相同的空閑塊建于一張子表中。每個(gè)子表是一個(gè)雙重鏈表,這樣的鏈表可能有m+1個(gè),將這m+1個(gè)表頭指針用向量結(jié)構(gòu)組織成一個(gè)表,這就是伙伴系統(tǒng)中的可利用空間表,如圖所示:
分配算法:
當(dāng)用戶提出大小為n的內(nèi)存請(qǐng)求時(shí),首先在可利用表上尋找結(jié)點(diǎn)大小與n相匹配的子表,若此子表非空,則將子表中任意一個(gè)結(jié)點(diǎn)分配之即可;若此子表為空,則需從結(jié)點(diǎn)更大的非空子表中去查找,直至找到一個(gè)空閑塊,則將其中一部分分配給用戶,而將剩余部分插入相應(yīng)的子表中。
若2k-1 < n ≤ 2k-1,又第k+1個(gè)子表不空,則只要?jiǎng)h除此鏈表中第一個(gè)結(jié)點(diǎn)并分配給用戶即可;若 2k-2 < n ≤ 2k-1-1,此時(shí)由于結(jié)點(diǎn)大小為2k-1 的子表為空,則需從結(jié)點(diǎn)大小為2k 的子表中取出一塊,將其中一半分配給用戶,剩余的一半作為一個(gè)新結(jié)點(diǎn)插入在結(jié)點(diǎn)大小為2k-1的子表中,若2k-i-1 < n ≤ 2k-i-1(i為小于是的整數(shù)),并且所有結(jié)點(diǎn)小于2k的子表均為空,則同樣需從結(jié)點(diǎn)大小為2k的子表中取出一塊,將其中2k-i的一小部分分配給用戶,剩余部分分割成若干個(gè)結(jié)點(diǎn)分別插入在結(jié)點(diǎn)大小為2k-1、2k-
2、…、2k-i的子表中?;厥账惴ǎ?/p>
在用戶釋放不再使用的占用塊時(shí),系統(tǒng)需將這新的空閑塊插入到可利用空間表中去。這里,同樣有一個(gè)地址相鄰的空閑塊歸并成大塊的問(wèn)題。但是在伙伴系統(tǒng)中僅考慮互為“伙伴”的兩個(gè)空閑塊的歸并。
何謂“伙伴”?如前所述,在分配時(shí)經(jīng)常需要將一個(gè)大的空閑塊分裂成兩個(gè)大小相等的存
-2- 儲(chǔ)區(qū),這兩個(gè)由同一大塊分裂出來(lái)的小塊就稱(chēng)之“互為伙伴”。例如:假設(shè)p為大小為pow(2,k)的空閑塊的初始地址,且p MOD pow(2,k+1)=0,則初始地址為p和p+pow(2,k)的兩個(gè)空閑塊互為伙伴。在伙伴系統(tǒng)中回收空閑塊時(shí),只當(dāng)其伙伴為空閑塊時(shí)才歸并成大塊。也就是說(shuō),若有兩個(gè)空閑塊,即使大小相同且地址相鄰,但不是由同一大塊分裂出來(lái)的,也不歸并在一起。
由此,在回收空閑塊時(shí),應(yīng)首先判別其伙伴是否為空閑塊,若否,則只要將釋放的空閑塊簡(jiǎn)單插入在相應(yīng)子表中即可;若是,則需在相應(yīng)子表中找到其伙伴并刪除之,然后再判別合并后的空閑塊的伙伴是否是空閑塊。依此重復(fù),直到歸并所得空閑塊的伙伴不是空閑塊時(shí),再插入到相應(yīng)的子表中去。
3.2.設(shè)計(jì)一個(gè)虛擬存儲(chǔ)區(qū)和內(nèi)存工作區(qū),并使用下述算法計(jì)算訪問(wèn)命中率。
頁(yè)式虛擬存儲(chǔ)器實(shí)現(xiàn)的一個(gè)難點(diǎn)是設(shè)計(jì)頁(yè)面調(diào)度(置換)算法,即將新頁(yè)面調(diào)入內(nèi)存時(shí),如果內(nèi)存中所有的物理頁(yè)都已經(jīng)分配出去,就要按某種策略來(lái)廢棄某個(gè)頁(yè)面,將其所占據(jù)的物理頁(yè)釋放出來(lái),供新頁(yè)面使用。頁(yè)面替換算法主要用于如下幾個(gè)地方:
(1)虛擬存儲(chǔ)器中,主存頁(yè)面(或程序段)的替換。
(2)Cache中的塊替換。
(3)虛擬存儲(chǔ)器的快慢表中,快表的替換。
(4)虛擬存儲(chǔ)器中,用戶基地址寄存器的替換。
在虛擬存儲(chǔ)器中常用的頁(yè)面替換算法有如下幾種:
(1)最優(yōu)替換算法,即OPT算法(OPTimal replacement algorithm)。上面介紹的幾種頁(yè)面替換算法主要是以主存儲(chǔ)器中頁(yè)面調(diào)度情況的歷史信息為依據(jù)的,它假設(shè)將來(lái)主存儲(chǔ)器中的頁(yè)面調(diào)度情況與過(guò)去一段時(shí)間內(nèi)主存儲(chǔ)器中的頁(yè)面調(diào)度情況是相同的。顯然,這種假設(shè)不總是正確的。最好的算法應(yīng)該是選擇將來(lái)最久不被訪問(wèn)的頁(yè)面作為被替換的頁(yè)面,這種替換算法的命中率一定是最高的,它就是最優(yōu)替換算法。
要實(shí)現(xiàn)OPT算法,唯一的辦法是讓程序先執(zhí)行一遍,記錄下實(shí)際的頁(yè)地址流情況。根據(jù)這個(gè)頁(yè)地址流才能找出當(dāng)前要被替換的頁(yè)面。顯然,這樣做是不現(xiàn)實(shí)的。因此,OPT算法只是一種理想化的算法,然而,它也是一種很有用的算法。實(shí)際上,經(jīng)常把這種算法用來(lái)作為評(píng)價(jià)其它頁(yè)面替換算法好壞的標(biāo)準(zhǔn)。在其它條件相同的情況下,哪一種頁(yè)面替換算法的命中率與OPT算法最接近,那么,它就是一種比較好的頁(yè)面替換算法。(2)先進(jìn)先出算法,即FIFO算法(First-In First-Out algorithm)。這種算法選擇最先調(diào)入主存儲(chǔ)器的頁(yè)面作為被替換的頁(yè)面。它的優(yōu)點(diǎn)是比較容易實(shí)現(xiàn),能夠利用主存儲(chǔ)器中頁(yè)面調(diào)度情況的歷史信息,但是,沒(méi)有反映程序的局部性。因?yàn)樽钕日{(diào)入主存的頁(yè)面,很可能也是經(jīng)常要使用的頁(yè)面。
(3)最久沒(méi)有使用算法,即LRU算法(Least Recently Used algorithm)。這種算法把近期最久沒(méi)有被訪問(wèn)過(guò)的頁(yè)面作為被替換的頁(yè)面。它把LFU算法中要記錄數(shù)量上的“多”與“少”簡(jiǎn)化成判斷“有”與“無(wú)”,因此,實(shí)現(xiàn)起來(lái)比較容易。
(4)近期最少使用算法,即LFU算法(Least Frequently Used algorithm)。這種算法選擇近期最少訪問(wèn)的頁(yè)面作為被替換的頁(yè)面。顯然,這是一種非常合理的算法,因?yàn)榈侥壳盀橹棺钌偈褂玫捻?yè)面,很可能也是將來(lái)最少訪問(wèn)的頁(yè)面。該算法既充分利用了主存中頁(yè)面調(diào)度情況的歷史信息,又正確反映了程序的局部性。但是,這種算法實(shí)現(xiàn)起來(lái)非常困難,它要為每個(gè)頁(yè)面設(shè)置一個(gè)很長(zhǎng)的計(jì)數(shù)器,并且要選擇一個(gè)固定的時(shí)鐘為每個(gè)計(jì)數(shù)器定時(shí)計(jì)數(shù)。在選擇被替換頁(yè)面時(shí),要從所有計(jì)數(shù)器中找出一個(gè)計(jì)數(shù)值最大的計(jì)數(shù)器。因此,通常采用如下一種相 -3- 對(duì)比較簡(jiǎn)單的方法。
3.3實(shí)現(xiàn)內(nèi)存的slab分配器
slab描述符和空閑對(duì)象管理部分成為 slab的管理部分,也可以稱(chēng)為slab頭
slab的頭可以放在slab自身,也可以放在 slab 之外。如果slab頭放在了slab 之外,那么用戶申請(qǐng)obj時(shí),需要首先訪問(wèn) slab頭,slab頭提供未使用free obj的指針
然后再訪問(wèn)這個(gè)free obj的地址。完成這項(xiàng)工作需要訪問(wèn)2個(gè)頁(yè)塊。會(huì)帶來(lái)效率上的損失。slab頭始終位于slab 也存在問(wèn)題,比如一個(gè)頁(yè)面只有4K,objsize = 2K,那么slab 頭在slab 上,就意味著,這個(gè)4K的頁(yè)面只能夠分配一個(gè)obj。造成了內(nèi)存的浪費(fèi)。
如果 頁(yè)數(shù)太少,存放的 obj個(gè)數(shù)少,那么 增加管理開(kāi)銷(xiāo),同時(shí) 內(nèi)存使用率低,如果頁(yè)數(shù)太多對(duì)伙伴內(nèi)存系統(tǒng)不好,所以需要一定的策略妥協(xié)。
這個(gè)妥協(xié)過(guò)程是有calculate_slab_order 這個(gè)函數(shù)來(lái)實(shí)現(xiàn)的。從 0階(即一頁(yè))到kmalloc的最高階 KMALLOC_MAX_ORDER,挨個(gè)嘗試,由cache_estimate這個(gè)函數(shù)計(jì)算 如果選用order 階,那么能分配 多少個(gè) obj(num),剩余空間是多少(remainder)。所謂剩余空間,就是除去slab頭(如果有的話),除去 obj*num,剩下的邊角料空間是多少。需要分成兩種情況去計(jì)算,分成兩種情況的原因,很快就能看到 A)slab頭不在slab上,即 flag & CFLGS_OFF_SLAB == 1的時(shí)候 這種情況比較簡(jiǎn)單,由于管理數(shù)據(jù)完全不在slab 上,size_tslab_size = PAGE_SIZE < 換句話,slab頭的大小取決于obj的個(gè)數(shù),obj的個(gè)數(shù)取決于 slab頭的大小,四、具體實(shí)現(xiàn) 4.1實(shí)現(xiàn)一個(gè)內(nèi)存管理的伙伴算法,實(shí)現(xiàn)內(nèi)存塊申請(qǐng)時(shí)的分配和釋放后的回收。 程序: #include #define MIN_MOMORY_SIZE 536870912 //隨機(jī)產(chǎn)生的最小內(nèi)存空間 #define WORKTIME 1500 //系統(tǒng)工作時(shí)間 #define MAX_REQ_SIZE 268435456 //申請(qǐng)空閑內(nèi)存分配的最大容量:256M #define MIN_DUE 30 //使用內(nèi)存塊的最短時(shí)間 #define MAX_DUE 90 //使用內(nèi)存塊的最長(zhǎng)時(shí)間 #define OCCUPY_INTERVAL 60 //每次分配的最大間隔 #define USED 1 //內(nèi)存塊被使用 #define UNUSED 0 //內(nèi)存塊未被使用 //內(nèi)存塊鏈表結(jié)點(diǎn)結(jié)構(gòu) typedefstructbuddy_node { int flag; //標(biāo)記空間是否被使用 -4- int base; //本塊兒內(nèi)存的基地址 int occupy; //實(shí)際使用空間大小 int fragment; //碎片大小 intduetime; //使用時(shí)間 structbuddy_node *nextPtr; //指向下一個(gè)結(jié)點(diǎn) } Buddy, *BuddyPtr; IndexTable table[INDEX_SIZE];//使用哈希表管理伙伴系統(tǒng) int ready = 0; //需要分配內(nèi)存的時(shí)刻 intavailSpace; //可分配空間大小 inttotalFragment = 0; //總碎片大小 //函數(shù):添加結(jié)點(diǎn)(形參為內(nèi)存塊結(jié)點(diǎn)的信息) void insert_node(inti, intinbase, int f, intocc, int frag, int d){ BuddyPtrnewnodePtr = NULL, prePtr = NULL, curPtr = NULL; newnodePtr =(BuddyPtr)malloc(sizeof(Buddy));//分配結(jié)點(diǎn) newnodePtr->base = inbase;newnodePtr->flag = f;newnodePtr->occupy = occ;newnodePtr->fragment = frag;newnodePtr->duetime = d;newnodePtr->nextPtr = NULL; if(table[i].headPtr == NULL) table[i].headPtr = newnodePtr; else { curPtr = table[i].headPtr;prePtr = NULL; //按地址順序插入內(nèi)存塊 while(curPtr&&curPtr->base } if(prePtr == NULL){ //插在最前 newnodePtr->nextPtr = curPtr; table[i].headPtr = newnodePtr; } else if(curPtr == NULL){ //插在最后 prePtr->nextPtr = newnodePtr; } else { //插在中間 prePtr->nextPtr = newnodePtr;newnodePtr->nextPtr = curPtr; -5- } } } //函數(shù):刪除結(jié)點(diǎn) intdelete_node(inti, BuddyPtrdelPtr){ BuddyPtrprePtr = NULL, curPtr = NULL;intbasehold = delPtr->base; curPtr = table[i].headPtr; while(curPtr!= delPtr){ //尋找要?jiǎng)h除的結(jié)點(diǎn)的位置 prePtr = curPtr;curPtr = curPtr->nextPtr; } if(prePtr == NULL) //要?jiǎng)h除的結(jié)點(diǎn)在最前 table[i].headPtr = curPtr->nextPtr; else //要?jiǎng)h除的結(jié)點(diǎn)不在鏈表的最前 prePtr->nextPtr = curPtr->nextPtr; free(curPtr); //釋放結(jié)點(diǎn) return basehold; //返回刪除的內(nèi)存塊結(jié)點(diǎn)的基地址 } //函數(shù):伙伴系統(tǒng)的分配算法 void buddy_allocate(inttime_slice){ inti, j, size, due;int state = 0; //分配狀態(tài):0為未分配,1為已分配 intinbase, basehold;BuddyPtrcurPtr = NULL; if(ready == time_slice){ //到達(dá)分配內(nèi)存的時(shí)刻 printf(“Time %d:”, time_slice); size = 1 + rand()% MAX_REQ_SIZE; //申請(qǐng)使用內(nèi)存的大小 due = MIN_DUE + rand()%(MAX_DUEsize;curPtr->duetime = due + ready; //修改可系統(tǒng)分配空間和碎片大小 availSpace-= table[i].nodesize;totalFragment += curPtr->fragment; state = 1;//標(biāo)記已分配 break; } //空閑塊的大小剛大于申請(qǐng)大小的2倍 else { basehold = delete_node(i, curPtr);//刪除較大的空閑塊并保留其基地址 inbase = basehold + table[i].nodesize; j = i; //分割空閑塊 do { j--;inbase-= table[j].nodesize; //設(shè)置要添加內(nèi)存塊結(jié)點(diǎn)的基地址 insert_node(j, inbase, UNUSED, 0, 0, 0);//添加較小的空閑塊 printf(“A block cut takes placen”); } while(table[j].nodesize / size > 1); //分配 insert_node(j, basehold, USED, size, table[j].nodesizesize; state = 1;//標(biāo)記已分配 } } //塊被占用,查看下一結(jié)點(diǎn) else curPtr = curPtr->nextPtr; } } } printf(“Allocated %d,Fragment %d,Due %dn”, size, totalFragment, ready+due); -7- } else if((availSpace< size)&&((availSpace + totalFragment)>= size))printf(“Allocation failed because of fragment!n”); else printf(“Allocation failed because of no enough unused space!n”); ready +=(1 + rand()% OCCUPY_INTERVAL);//下次需要分配內(nèi)存的時(shí)刻 } } //函數(shù):伙伴系統(tǒng)的回收算法 void buddy_retrieve(inttime_slice){ inti, basehold, dif;int f = 0;intModnext=0;BuddyPtrcurPtr = NULL, todelPtr = NULL; //依次查找,并回收需要回收的塊 for(i = 0;i< INDEX_SIZE;i ++){ if(table[i].headPtr){ curPtr = table[i].headPtr; while(curPtr){ if((curPtr->flag == USED)&&(curPtr->duetime == time_slice)){//需要回收 //修改可系統(tǒng)分配空間和碎片大小 availSpace += table[i].nodesize;totalFragment-= curPtr->fragment; //回收為空閑塊 curPtr->flag = UNUSED;curPtr->occupy = 0;curPtr->fragment = 0;curPtr->duetime = 0;printf(“Time %d:Retrieve %d,Fragment %dn”, time_slice, table[i].nodesize, totalFragment); } curPtr = curPtr->nextPtr; } } } //合并空閑塊 for(i = 0;i< INDEX_SIZE;i ++){ if(table[i].headPtr){ -8- curPtr = table[i].headPtr; while(curPtr&&curPtr->nextPtr){ //將地址連續(xù)且都為空閑的塊合并后加入下一級(jí)的鏈表中 if(curPtr->flag == UNUSED &&(curPtr->nextPtr)->flag == UNUSED){ dif =(curPtr->nextPtr)->base-curPtr->base; Modnext =((int)(curPtr->nextPtr->base))%(2*table[i].nodesize); if((dif == table[i].nodesize)&&(Modnext==0)){ //刪除兩個(gè)結(jié)點(diǎn) todelPtr = curPtr;curPtr = curPtr->nextPtr;basehold = delete_node(i, todelPtr);todelPtr = curPtr;curPtr = curPtr->nextPtr;delete_node(i, todelPtr);insert_node(i+1, basehold, UNUSED, 0, 0, 0);//添加合并后的結(jié)點(diǎn) printf(“Two blocks mergen”); } else curPtr = curPtr->nextPtr; } else curPtr = curPtr->nextPtr; } } } } //函數(shù):伙伴系統(tǒng)的處理過(guò)程 void buddy_system(void){ inttime_slice = 0; //在每個(gè)時(shí)間片內(nèi)使用分配算法和回收算法 for(;time_slice< WORKTIME;time_slice ++){ buddy_allocate(time_slice); //分配算法 buddy_retrieve(time_slice); //回收算法 } } int main(intargc, char *argv[]){ intmemory_size; -9- ini_index(); //初始化哈希索引表 srand(time(NULL)); //設(shè)置隨機(jī)數(shù)種子 //隨機(jī)產(chǎn)生需要管理的內(nèi)存大?。?12M ~ 1G memory_size = MIN_MOMORY_SIZE + rand()% MIN_MOMORY_SIZE;printf(“The size of memory is:%dn”, memory_size); int_system(memory_size); //初始化伙伴系統(tǒng) buddy_system(); //伙伴系統(tǒng)的處理過(guò)程 printf(“Time %d:System execution stops and the spaces are all freed.n”, WORKTIME); free_system(); //釋放所有結(jié)點(diǎn) system(“pause”); return 0;} 4.2.設(shè)計(jì)一個(gè)虛擬存儲(chǔ)區(qū)和內(nèi)存工作區(qū),并使用下述算法計(jì)算訪問(wèn)命中率。程序: #include //虛頁(yè)長(zhǎng) #define clear_period 50 //清零周期 typedefstruct { intpn; //頁(yè)號(hào) intpfn; // 面號(hào) int counter; // 一個(gè)周期內(nèi)訪問(wèn)該頁(yè)面的次數(shù) int time; // time為訪問(wèn)時(shí)間 }pl_type;pl_typepl[total_vp];//頁(yè)面結(jié)構(gòu)數(shù)組 structpfc_struct{ //頁(yè)面控制結(jié)構(gòu) intpn,pfn;structpfc_struct *next;};typedefstructpfc_structpfc_type; -10- pfc_typepfc[total_vp],*freepf_head,*busypf_head,*busypf_tail;intdiseffect,a[total_instruction];int page[total_instruction], offset[total_instruction];/* Name: void Lprintf(void) Achieve: 格式控制 */ void Lprintf(void){ inti,j;printf(“|”); for(i = 1;i<=6;i++) { for(j = 1;j<=9;j++)printf(“-”); if(i!=6)printf(“+”); } printf(“|n”); } /* Name: void initialize(inttotal_pf) Achieve:初始化相關(guān)數(shù)據(jù)結(jié)構(gòu) */ void initialize(inttotal_pf){ inti;diseffect=0; for(i=0;i { pl[i].pn=i;pl[i].pfn=INVALID; //置頁(yè)面控制結(jié)構(gòu)中的頁(yè)號(hào),頁(yè)面為空 pl[i].counter=0;pl[i].time=-1;//頁(yè)面控制結(jié)構(gòu)中的訪問(wèn)次數(shù)為0,時(shí)間為-1 } for(i=1;i { pfc[i-1 ].next=&pfc[i];pfc[i-1].pfn=i-1;//建立pfc[i-1]和pfc[i]之間的連接 } pfc[total_pf-1].next=NUL;pfc[total_pf-1].pfn=total_pf-1; freepf_head=&pfc[0]; //頁(yè)面隊(duì)列的頭指針為pfc[0] } /* -11- Name:void FIFO(inttotal_pf) Achieve:先進(jìn)先出法(Fisrt In First Out)*/ void FIFO(inttotal_pf){ inti,j;pfc_type *p;//中間變量 initialize(total_pf);//初始化相關(guān)頁(yè)面控制用數(shù)據(jù)結(jié)構(gòu) busypf_head=busypf_tail=NULL;//忙頁(yè)面隊(duì)列頭,隊(duì)列尾鏈接 for(i=0;i if(pl[page[i]].pfn==INVALID) //頁(yè)面失效 { diseffect+=1;//失效次數(shù) if(freepf_head==NULL)//無(wú)空閑頁(yè)面 { p=busypf_head->next; pl[busypf_head->pn].pfn=INVALID; freepf_head=busypf_head;//釋放忙頁(yè)面隊(duì)列的第一個(gè)頁(yè)面 freepf_head->next=NULL;//表明還是缺頁(yè)*/ busypf_head=p; } p=freepf_head->next; freepf_head->pn=page[i]; pl[page[i]].pfn=freepf_head->pfn; freepf_head->next=NULL;//使busy的尾為null if(busypf_tail==NULL) { busypf_tail=busypf_head=freepf_head; } else { busypf_tail->next=freepf_head; busypf_tail=freepf_head; } freepf_head=p; } } printf(“%6.3f”,1-(float)diseffect/320);} /* Name: void LRU(inttotal_pf) Achieve: 最近最久未使用(Least Recently Used)*/ -12- void LRU(inttotal_pf){ intmin,minj,i,j,present_time;//minj為最小值下標(biāo) initialize(total_pf);present_time=0;for(i=0;i if(pl[page[i]].pfn==INVALID)//頁(yè)面失效 { diseffect++; if(freepf_head==NULL)//無(wú)空閑頁(yè)面 { min=32767;//設(shè)置最大值 for(j=0;j { if(min>pl[j].time&&pl[j].pfn!=INVALID) { min=pl[j].time; minj=j; } } freepf_head=&pfc[pl[minj].pfn]; //空出一個(gè)單元 pl[minj].pfn=INVALID; pl[minj].time=0; freepf_head->next=NULL; } pl[page[i]].pfn=freepf_head->pfn;//有空閑頁(yè)面,改為有效 pl[page[i]].time=present_time; freepf_head=freepf_head->next;//減少一個(gè)free 頁(yè)面 } else { pl[page[i]].time=present_time;//命中則增加該單元的訪問(wèn)次數(shù) present_time++; } } printf(“%6.3f”,1-(float)diseffect/320);} /* Name:void OPT(inttotal_pf) Achieve:最佳置換算法(Optimal)*/ void OPT(inttotal_pf){ -13- inti,j, max,maxpage,d,dist[total_vp];pfc_type *t;initialize(total_pf);for(i=0;i if(pl[page[i]].pfn==INVALID) /*頁(yè)面失效*/ { diseffect++; if(freepf_head==NULL) /*無(wú)空閑頁(yè)面*/ { for(j=0;j { if(pl[j].pfn!=INVALID) dist[j]=32767; else dist[j]=0; } for(j=0;j { if((pl[j].pfn!=INVALID)&&(dist[j]==32767)) { dist[j]=j; } } max=0; for(j=0;j if(max { max=dist[j]; maxpage=j; } freepf_head=&pfc[pl[maxpage].pfn]; freepf_head->next=NULL; pl[maxpage].pfn=INVALID; } pl[page[i]].pfn=freepf_head->pfn; freepf_head=freepf_head->next; } } printf(“%6.3f”,1-(float)diseffect/320);} /* Name: vodi LFU(inttotal_pf) Achieve:最不經(jīng)常使用法(Least Frequently Used) -14- */ void LFU(inttotal_pf) { inti,j,min,minpage;pfc_type *t;initialize(total_pf);for(i=0;i if(pl[page[i]].pfn==INVALID)//頁(yè)面失效 { diseffect++; if(freepf_head==NULL)//無(wú)空閑頁(yè)面 { min=32767; //獲取counter的使用用頻率最小的內(nèi)存 for(j=0;j { if(min>pl[j].counter&&pl[j].pfn!=INVALID) { min=pl[j].counter; minpage=j; } } freepf_head=&pfc[pl[minpage].pfn]; pl[minpage].pfn=INVALID; pl[minpage].counter=0; freepf_head->next=NULL; } pl[page[i]].pfn=freepf_head->pfn;//有空閑頁(yè)面,改為有效 pl[page[i]].counter++; freepf_head=freepf_head->next;//減少一個(gè)free 頁(yè)面 } else { pl[page[i]].counter; pl[page[i]].counter=pl[page[i]].counter+1; } } printf(“%6.3f”,1-(float)diseffect/320);} int main(int){ intS,i; -15- srand((int)getpid()); for(i=0;i { S=(int)rand()%320; a[i]=S; //任選一指令訪問(wèn)點(diǎn) a[i+1]=a[i]+1;//順序執(zhí)行一條指令 a[i+2]=(int)rand()%a[i+1];//執(zhí)行前地址指令m' a[i+3]=a[i+2]+1;//順序執(zhí)行一條指令 a[i+4]=(int)rand()%(319-a[i+2]-1)+a[i+2]+2;//執(zhí)行后地址指令 } for(i=0;i { page[i]=a[i]/10; offset[i]=a[i]%10;} printf(“FrametOPTtFIFOtLRUtLFU n”);for(i=4;i<=32;i++)//用戶內(nèi)存工作區(qū)從4個(gè)頁(yè)面到32個(gè)頁(yè)面 { printf(“%dt”,i);OPT(i);printf(“t”); FIFO(i);printf(“t”); LRU(i); printf(“t”); LFU(i); printf(“n”);} system(“pause”);return 0;} 4.3 實(shí)現(xiàn)內(nèi)存的slab分配器 程序: #include -17- } 五、調(diào)試運(yùn)行結(jié)果 -18- 5.1 實(shí)現(xiàn)一個(gè)內(nèi)存管理的伙伴算法 5.2設(shè)計(jì)一個(gè)虛擬存儲(chǔ)區(qū)和內(nèi)存工作區(qū),并使用下述算法計(jì)算訪問(wèn)命中率。 -19- 5.3 實(shí)現(xiàn)內(nèi)存的slab分配器 六、所遇問(wèn)題及解決方法 1.在寫(xiě)第一個(gè)程序的時(shí)候,對(duì)樹(shù)的合并在之前的學(xué)習(xí)中,有比較多的學(xué)習(xí),數(shù)據(jù)結(jié)構(gòu)中此程序有詳細(xì)的介紹,因此在編寫(xiě)這個(gè)程序的時(shí)候,比較順利的完成了要求。但要求中需要產(chǎn)生一些隨機(jī)的數(shù)據(jù),重新對(duì)隨機(jī)仿真函數(shù)進(jìn)行回顧,最后較為順利的完成了程序。2.第二個(gè)程序,要求隨機(jī)產(chǎn)生一些數(shù)據(jù),對(duì)srand()和rand()函數(shù)定義和產(chǎn)生指令序列,在進(jìn)一步的學(xué)習(xí)中,完成了這些函數(shù),仿真內(nèi)存容量和虛存容量參數(shù)變化時(shí)的情形,對(duì)此不太熟悉,四個(gè)算法對(duì)要求較高,在完成算法的學(xué)習(xí)后,完成了程序。 3.第三個(gè)程序因不太理解其要求,上網(wǎng)搜尋了一些代碼,但對(duì)其最后的結(jié)果依然沒(méi)有得出,為此詢問(wèn)了同學(xué),但不知是否正確。 -20- 微波仿真實(shí)驗(yàn)報(bào)告 學(xué) 院:電子工程學(xué)院 班 級(jí) 學(xué) 號(hào): 姓 名: 班內(nèi)序號(hào): 微波仿真課作業(yè)1 1.了解ADS Schematic的使用和設(shè)置 2.在Schematic里,分別仿真理想電容20pF和理想電感5nH,仿真頻率為(1Hz-100GHz),觀察仿真結(jié)果,并分析原因。20pF理想電容 仿真圖 原因分析:史密斯原圖下半部分是容性,隨頻率增加,電容由開(kāi)路點(diǎn)變到短路點(diǎn),通高頻,阻低頻。5nH理想電感 仿真圖 原因分析:史密斯原圖上半部分是感性,隨頻率增加,電容由短路點(diǎn)變到開(kāi)路點(diǎn),阻高頻,通低頻。 3. Linecalc的使用 a)計(jì)算中心頻率1GHz時(shí),F(xiàn)R4基片的50Ω微帶線的寬度 寬度為:2.9112mm b)計(jì)算中心頻率1GHz時(shí),F(xiàn)R4基片的50Ω共面波導(dǎo)(CPW)的橫截面尺寸(中心信號(hào)線寬度與接地板之間的距離) 橫截面尺寸為:W=171.355mm,G=5mm,L=63.5mm 4.基于FR4基板,仿真一段特性阻抗為50Ω四分之一波長(zhǎng)開(kāi)路CPW線的性能參數(shù),中心工作頻率為1GHz。仿真頻段(500MHz-3GHz),觀察Smith圓圖變化,分析原因。 仿真圖 仿真圖分析: 1、1GHz時(shí),為四分之一波長(zhǎng),開(kāi)路阻抗變換后變?yōu)槎搪罚?GHz時(shí)為二分之一波長(zhǎng),所以仍為開(kāi)路; 2、由于損耗,因此反射系數(shù)變小,所以等反射系數(shù)圓的半徑也在變小。 5.基于FR4基板,仿真一段特性阻抗為50Ω四分之一波長(zhǎng)短路CPW線的性能參數(shù),中心工作頻率為1GHz。仿真頻段(500MHz-3GHz),觀察Smith圓圖變化,分別求出500MHz和2GHz的輸入阻抗,分析變化原因。 仿真圖 仿真圖分析: 1、1GHz時(shí),為四分之一波長(zhǎng),短路阻抗變換后變?yōu)殚_(kāi)路,2GHz時(shí)為二分之一波長(zhǎng),所以仍為短路; 2、由于損耗,因此反射系數(shù)變小,所以等反射系數(shù)圓的半徑也在變小。分別求出500MHz和2GHz的輸入阻抗: 500MHz:Z0*(0.003+j0.001)2GHz:Z0*(0.012-j0.005) 6.分別用理想傳輸線和在FR4基片上的微帶傳輸線,仿真一段特性阻抗為50Ω四分之一波長(zhǎng)開(kāi)路線的性能參數(shù),工作頻率為1GHz。仿真頻段(500MHz-3GHz),觀察Smith圓圖變化,分別求出500MHz和2GHz的輸入阻抗,分析變化原因。 仿真圖 分別求出500MHz和2GHz的輸入阻抗: 微帶線 500MHz:Z0*(0.003-j0.992)2GHz:Z0*(32.830-j1.603)理想傳輸線 500MHz:Z0*(1.000E-10-j1.000)2GHz:Z0*(2.000E10-j2.000E5) 分析:因?yàn)橄鄬?duì)于理想傳輸線,微帶線有損耗產(chǎn)生誤差,反射系數(shù)一直變小。 擴(kuò)展仿真頻率(500MHz-50GHz),分析曲線變化原因。 分析:對(duì)于理想傳輸線,反射系數(shù)不變,而對(duì)于微帶線,由于存在損耗,反射系數(shù)會(huì)一直變小,因此其反射系數(shù)圓的半徑在一直變小。 7.分別用理想傳輸線和在FR4基片上的微帶傳輸線,仿真一段特性阻抗為50Ω四分之一波長(zhǎng)短路線的性能參數(shù),工作頻率為1GHz。仿真頻段(500MHz-3GHz),觀察Smith圓圖變化,分別求出500MHz和2GHz的輸入阻抗,分析變化原因。 仿真圖 分別求出500MHz和2GHz的輸入阻抗: 微帶線 500MHz:Z0*(0.009+j1.003)2GHz:Z0*(0.031+j0.002)理想傳輸線 500MHz:Z0*(5.551E-17+j1.000)2GHz:Z0*(8.284E-18-j1.000E-5) 分析:因?yàn)橄鄬?duì)于理想傳輸線,微帶線有損耗產(chǎn)生誤差,反射系數(shù)一直變小。 擴(kuò)展仿真頻率(500MHz-50GHz),分析曲線變化原因。 分析:對(duì)于理想傳輸線,反射系數(shù)不變,而對(duì)于微帶線,由于存在損耗,反射系數(shù)會(huì)一直變小,因此其反射系數(shù)圓的半徑在一直變小。 8.分別用理想傳輸線和在FR4基片上的微帶傳輸線,仿真一段特性阻抗為50Ω二分之一波長(zhǎng)開(kāi)路線的性能參數(shù),工作頻率為1GHz。仿真頻段(500MHz-3GHz),觀察Smith圓圖變化,分別求出500MHz和2GHz的輸入阻抗,分析變化原因。 仿真圖 分別求出500MHz和2GHz的輸入阻抗: 微帶線 500MHz:Z0*(0.016+j0.006)2GHz:Z0*(16.430-j0.798)理想傳輸線 500MHz:Z0*(5.000E-11-j6.123E-17)2GHz:Z0*(2.000E10-j2.000E5) 分析:因?yàn)橄鄬?duì)于理想傳輸線,微帶線有損耗產(chǎn)生誤差,反射系數(shù)一直變小。擴(kuò)展仿真頻率(500MHz-50GHz),分析曲線變化原因。 分析:對(duì)于理想傳輸線,反射系數(shù)不變,而對(duì)于微帶線,由于存在損耗,反射系數(shù)會(huì)一直變小,因此其反射系數(shù)圓的半徑在一直變小。 9.分別用理想傳輸線和在FR4基片上的微帶傳輸線,仿真一段特性阻抗為50Ω二分之一波長(zhǎng)短路線的性能參數(shù),工作頻率為1GHz。仿真頻段(500MHz-3GHz),觀察Smith圓圖變化,分別求出500MHz和2GHz的輸入阻抗,分析變化原因。 仿真圖 分別求出500MHz和2GHz的輸入阻抗: 微帶線 500MHz:Z0*(55.044-j19.301)2GHz:Z0*(0.061+j0.004)理想傳輸線 500MHz:Z0*(-1.000+j1.633E16)2GHz:Z0*(8.284E-18-j1.000E-5) 分析:因?yàn)橄鄬?duì)于理想傳輸線,微帶線有損耗產(chǎn)生誤差,反射系數(shù)一直變小。 擴(kuò)展仿真頻率(500MHz-50GHz),分析曲線變化原因。 分析:對(duì)于理想傳輸線,反射系數(shù)不變,而對(duì)于微帶線,由于存在損耗,反射系數(shù)會(huì)一直變小,因此其反射系數(shù)圓的半徑在一直變小。微波測(cè)量實(shí)驗(yàn)中測(cè)得的幾個(gè)史密斯圓圖 四分之一開(kāi)路微帶線 四分之一短路微帶線 二分之一開(kāi)路微帶線 二分之一短路微帶線 微波仿真課作業(yè)2 1. 用一段理想四分之一波長(zhǎng)阻抗變換器匹配10歐姆到50歐姆,仿真S參數(shù),給出-20dB帶寬特性,工作頻率為1GHz。計(jì)算得,22.36歐姆 仿真S參數(shù) 計(jì)算分析:由圖計(jì)算-20dB帶寬為 1071-929=142MHz;且如仿真圖所示,在1GHz處回波損耗最低,實(shí)現(xiàn)阻抗匹配。2. 用一段FR4基片上四分之一波長(zhǎng)阻抗變換器匹配10歐姆到50歐姆,仿真S參數(shù),給出-20dB帶寬特性,工作頻率為1GHz,比較分析題1和題2的結(jié)果。 仿真S參數(shù) 由圖計(jì)算-20dB帶寬為1065-921=144MHz。 比較分析題1和題2的結(jié)果 分析,微帶線與理想傳輸線之間有一定的誤差: 1、如圖所示可以看出微帶線情況下,回波損耗最低點(diǎn)稍微偏離1GHz; 2、-20dB帶寬為144MHz大于理想傳輸線時(shí)的142MHz; 3、1GHz阻抗匹配時(shí),微帶線時(shí)的回波損耗大于理想傳輸線。 3. 設(shè)計(jì)一個(gè)3節(jié)二項(xiàng)式匹配變換器,用于匹配10歐姆到50歐姆的傳輸線,中心頻率是1GHz,該電路在FR4基片上用微帶線實(shí)現(xiàn),設(shè)計(jì)這個(gè)匹配變換器并計(jì)算 ?m?0.1的帶寬,給出回波損耗和插入損耗與頻率的關(guān)系曲線,比較分析題2和題3的結(jié)果。 根據(jù)所學(xué)的理論知識(shí),先依題意算出三節(jié)匹配微帶線的阻抗值,然后通過(guò)LineCalc計(jì)算出相應(yīng)微帶線的長(zhǎng)和寬,修改電路圖中MLIN的相關(guān)參數(shù)。 Z1=40.89Ω W=4.198480mm L=40.404500mm Z2=22.36Ω W=9.620970mm L=38.833700mm Z3=12.23Ω W=19.83080mm L=37.648400mm 插入損耗 ?m?0.1的帶寬,即為-20dB帶寬,由圖計(jì)算得1325-680=645MHz; 比較分析題2和題3的結(jié)果,3節(jié)二項(xiàng)式匹配變換器匹配誤差更大: 1、如圖所示可以看出3節(jié)二項(xiàng)式匹配變換器匹配時(shí)回波損耗最低點(diǎn)明顯偏離1GHz; 2、-20dB帶寬為645MHz大于微帶線情況; 3、但1GHz阻抗匹配時(shí),3節(jié)二項(xiàng)式匹配變換器時(shí)的回波損耗小于微帶線情況。 4. 題3中,若用3節(jié)切比雪夫匹配變換器實(shí)現(xiàn),比較同樣情況下的帶寬,回波損耗和插入損耗與頻率的關(guān)系曲線,比較分析題3和題4結(jié)果。 根據(jù)所學(xué)的知識(shí)可以計(jì)算出切比雪夫變換器匹配的三個(gè)微帶線的阻抗,然后通過(guò)LineCalc計(jì)算出相應(yīng)微帶線的長(zhǎng)和寬,修改電路圖中MLIN的相關(guān)參數(shù)。Z1=35.94Ω W=4.948710mm L=40.0910mm Z2=22.11Ω W=9.6519mm L=38.8278mm Z3=13.55Ω W=17.57710mm L=37.8241mm 仿真圖 插入損耗 ?m?0.1的帶寬,即為-20dB帶寬,由圖計(jì)算得1485-534=951MHz; 比較分析題3和題4的結(jié)果,即二項(xiàng)式匹配變換器與切比雪夫匹配變換器: 1、切比雪夫匹配變換器的帶寬顯著增加; 2、切比雪夫匹配變換器回波損耗具有等波紋特性; 3、兩者的插入損耗差別不明顯。 5. 對(duì)于一個(gè)負(fù)載阻抗ZL=60-j80歐姆,利用Smith Chart Utility功能,分別設(shè)計(jì)并聯(lián)短路單枝節(jié)和并聯(lián)開(kāi)路單枝節(jié)匹配,并將Smith Chart Utility給出的匹配結(jié)果在Schematic中仿真,給出1-3GHz的回波損耗與頻率的關(guān)系曲線,并給出?m?0.1的帶寬。并聯(lián)短路單枝節(jié) 計(jì)算并聯(lián)短路單枝節(jié)-20dB帶寬:1053-952=101MHz 并聯(lián)開(kāi)路單枝節(jié) 計(jì)算并聯(lián)開(kāi)路單枝節(jié)-20dB帶寬:1023-975=48MHz 6. 并聯(lián)雙枝節(jié)匹配電路,并聯(lián)雙枝節(jié)為開(kāi)路,枝節(jié)之間相距λ/8,中心工作頻率為2GHz,利用理想傳輸線,給出1-3GHz的回波損耗與頻率的關(guān)系曲線,并給出?m?0.1的帶寬。并聯(lián)雙枝節(jié), 枝節(jié)之間相距λ/8,中心工作頻率為2GHz 仿真 如圖在2GHz匹配 計(jì)算-20dB帶寬:2012-1988=24MHz 大三上課程學(xué)習(xí)心得 英語(yǔ)篇: 關(guān)于六級(jí): 四級(jí)可以不背單詞,但是六級(jí)不看單詞一定會(huì)死的很慘。單詞書(shū)我覺(jué)得新東方的那本不錯(cuò),風(fēng)靡全國(guó)。 六級(jí)真題還是真的值得買(mǎi)的,因?yàn)榱?jí)一次能過(guò)的人不少,但是僅考一次的人很少。真題也不宜做的太早,考前一個(gè)月開(kāi)始就足夠了。 關(guān)于選課: 大三上有4門(mén)英語(yǔ)可選??萍嘉拈喿x、情景、寫(xiě)作和口語(yǔ)。 科技文閱讀就是一個(gè)200人大教室,老師在講臺(tái)上放PPT。據(jù)說(shuō)內(nèi)容很麻煩,我聽(tīng)他們期末背單詞那叫一個(gè)痛苦。 情景英語(yǔ)是在教一的語(yǔ)音室上課,30人小教室,上課內(nèi)容都是結(jié)合教材的內(nèi)容討論事情。 口語(yǔ)和寫(xiě)作不是很清楚情況,希望別人來(lái)介紹一下。 得分的話,以前之所以情景得分最高,是因?yàn)榍榫鞍嗉辛怂募?jí)分?jǐn)?shù)高分段的同學(xué)。所以實(shí)力決定一切。從我們07級(jí)開(kāi)始就是大家任意選四門(mén)課了。 情景英語(yǔ)篇: 小班教學(xué)的好處就是老師和同學(xué)比較熟悉。上課都是老師出一個(gè)題目,同學(xué)們分組討論。建議口語(yǔ)不好的同學(xué)慎選,從小開(kāi)始就是學(xué)啞巴英語(yǔ)的同學(xué)勿選! 期末很簡(jiǎn)單,和平時(shí)一樣,討論幾個(gè)話題,但是機(jī)器會(huì)錄好音,老師會(huì)回去聽(tīng)。10分鐘結(jié)束。 這門(mén)課很訓(xùn)練聽(tīng)力和口語(yǔ)。 其余幾門(mén)期待其他同學(xué)現(xiàn)身說(shuō)法。 毛鄧三篇: 可以肯定的是,上一年出過(guò)的大題,今年鐵定不會(huì)出現(xiàn)在大題里。想得高分一個(gè)字:背。06級(jí)學(xué)長(zhǎng)編寫(xiě)的《毛鄧三葵花寶典》風(fēng)靡全校,實(shí)乃居家旅行必備資料啊。 另外,不要迷戀重點(diǎn),重點(diǎn)只是一個(gè)傳說(shuō)。我們07級(jí)考的論述題是論分配制度和論外交。外交在06級(jí)學(xué)長(zhǎng)編寫(xiě)的“葵花寶典”中涉及很少。 操作系統(tǒng)篇: 關(guān)于老師: 上課的幾位老師,我認(rèn)為最好的還是孟祥武老師,十分風(fēng)趣,課堂很活躍。不過(guò)不要光聽(tīng)他講笑話了,要學(xué)習(xí)老師的思路。葉文老師的語(yǔ)速較快,每節(jié)課信息量很大,我自己也很難跟上老師的腳步,建議要多復(fù)習(xí)。 關(guān)于教材及內(nèi)容: 操作系統(tǒng),選用的是英文教材。PPT也是英文,期末出題也是英文,不過(guò)大題都可以用中文答題。書(shū)名既然叫《操作系統(tǒng)概念》,本書(shū)最多的還是講授了一下操作系統(tǒng)中的各種概念。不過(guò)在這些零零碎碎的概念中間,還夾雜了幾個(gè)非常重要的算法或者應(yīng)用: 銀行家算法、信號(hào)量、實(shí)存的EAT、虛存的EAT、頁(yè)置換算法(FCFS,LRU等等)、進(jìn)程調(diào)度算法及效率(吞吐量、平均等待時(shí)間、平均周轉(zhuǎn)時(shí)間)。 以上羅列的都是很重點(diǎn)的東西,每年大題都會(huì)從這里出。 關(guān)于平時(shí): 由于選用的教材沒(méi)有中文版,平時(shí)大家就得辛苦的看很厚很厚的英文書(shū)。英文書(shū)的表達(dá)很地道,但是我更愿意在重點(diǎn)的概念旁邊加一下中文的注解,哪怕是這段文字的直譯,這樣非常有利于復(fù)習(xí)。 作業(yè)一定要自己做,雖然流傳著答案,但我更希望答案是用來(lái)做完后訂正的,而不是把自己當(dāng)做抄寫(xiě)員,把現(xiàn)成的答案抄給給老師看。 老師應(yīng)該都會(huì)布置實(shí)驗(yàn)。孟祥武老師布置的都是與各種算法相關(guān)的實(shí)驗(yàn),而葉文老師則是布置的是針對(duì)Linux操作系統(tǒng)進(jìn)行觀察、自己動(dòng)手的實(shí)驗(yàn)。一句話,要想學(xué)到東西,實(shí)驗(yàn)自己動(dòng)手。 關(guān)于考試特點(diǎn): 得大題者得天下,以上我說(shuō)的重點(diǎn)都掌握了,你就穩(wěn)拿60%以上的分?jǐn)?shù)。對(duì)于書(shū)中各個(gè)概念的考察,就集中在填空、選擇、簡(jiǎn)答題中間。對(duì)于書(shū)中概念的復(fù)習(xí),可以參照葉文老師給的大綱,見(jiàn)附件: 計(jì)算機(jī)網(wǎng)絡(luò)篇: 關(guān)于老師: 我們07級(jí)無(wú)緣聆聽(tīng)王曉茹老師的教誨啊,08級(jí)的孩子們估計(jì)能遇見(jiàn)王曉茹老師吧。在我聽(tīng)過(guò)課的兩位老師中,我覺(jué)得蔣硯軍老師講的真不錯(cuò)。 關(guān)于教材: 強(qiáng)烈推薦計(jì)算機(jī)網(wǎng)絡(luò)(第四版 潘愛(ài)民譯),一本黑皮的書(shū)。英文原版可以不買(mǎi)。 教材中心和學(xué)林書(shū)店都是主要賣(mài)英文版教材,我可以告訴大家,我英文版教材翻了20頁(yè)就再也沒(méi)有碰過(guò)了。這門(mén)課PPT是用英文寫(xiě)的,老師用中文教,期末出題都是中文的。操作系統(tǒng)之所以推薦看英文教材,一方面是沒(méi)有對(duì)應(yīng)版本的中文翻譯教材,另一方面是期末出題是英文。 畢竟看計(jì)網(wǎng)英文版教材很費(fèi)腦子,大三最好還是省點(diǎn)力氣吧。何況,復(fù)習(xí)的時(shí)候,計(jì)網(wǎng)中文版教材都是搶手貨。 關(guān)于平時(shí): 計(jì)網(wǎng)東西很多,你要想平時(shí)一點(diǎn)都不付出就想得高分,不啻于癡人說(shuō)夢(mèng)。像我上面提到的,讀中文教材效率很高。這門(mén)課概念之多,我認(rèn)為僅次于匯編與接口。最好每章都有總結(jié),復(fù)習(xí)的時(shí)候也就不會(huì)手忙腳亂了。 計(jì)網(wǎng)我們07級(jí)只有兩個(gè)實(shí)驗(yàn),一個(gè)是數(shù)據(jù)鏈路層的滑動(dòng)窗口協(xié)議,另一個(gè)是用Wireshark等協(xié)議分析軟件抓包。 第一個(gè)實(shí)驗(yàn)以小組來(lái)做,其實(shí)一個(gè)人足矣。書(shū)上的偽碼基本和C語(yǔ)言差不多,不過(guò)細(xì)微之處還得自己研究一下。 第二個(gè)實(shí)驗(yàn)更簡(jiǎn)單,強(qiáng)烈推薦獨(dú)自完成。Wireshark抓包實(shí)驗(yàn),有助于對(duì)網(wǎng)絡(luò)層和傳輸層協(xié)議進(jìn)行更加深刻的理解。 作業(yè)當(dāng)然也有參考答案,還是一句話,最好自己獨(dú)立完成。 關(guān)于考試: 我對(duì)于這門(mén)考試有些怨念,操作系統(tǒng)是得大題者得天下,而計(jì)網(wǎng)考試的大題僅占占卷面分?jǐn)?shù)的40%以下。也就是說(shuō),你要把各種概念都復(fù)習(xí)到才有可能得高分。 即使大題不重要,我也說(shuō)說(shuō)重點(diǎn)吧: 路由算法(鏈路狀態(tài)算法、距離矢量算法)、網(wǎng)橋逆向?qū)W習(xí)法和flooding算法、漏桶與令牌桶算法、TCP發(fā)送窗口算法、IP與TCP頭、IP數(shù)據(jù)報(bào)切分、滑動(dòng)窗口協(xié)議的效率、路由器路由表選擇。 另外,我們07級(jí)講到了應(yīng)用層,而以往各屆的試卷都沒(méi)涉及到應(yīng)用層,所以沒(méi)有復(fù)習(xí)到應(yīng)用層的人,對(duì)于這次的試卷怨念更深了。 論壇上流傳的那份計(jì)網(wǎng)重點(diǎn)還是有相當(dāng)大的參考價(jià)值,不過(guò)不完全匹配。 總之,復(fù)習(xí)的時(shí)候要對(duì)照PPT,把各種基本的概念都了解清楚,對(duì)于我提到的重點(diǎn)完全掌握,我覺(jué)得這門(mén)課取得高分不難。 通信原理篇: 北郵不愧是信息界的黃埔軍校,每個(gè)專(zhuān)業(yè)都會(huì)學(xué)這門(mén)課。不過(guò)咱們比信通院學(xué)的要簡(jiǎn)單不少。 教材選擇的還不錯(cuò),非常貼近咱們學(xué)的深度。 關(guān)于考試: 期中考試是開(kāi)卷,大家盡情發(fā)揮主觀能動(dòng)性吧。 期末的卷子流傳極少,我們今年看到居然是01級(jí)學(xué)長(zhǎng)做過(guò)的卷子。不過(guò)參考價(jià)值還很大。通原這門(mén)課也是大題萬(wàn)變不離其宗。期末主要考數(shù)字部分。 期末重點(diǎn): 卷積碼,循環(huán)碼和生成矩陣、監(jiān)督矩陣,各種數(shù)字調(diào)制的波形,部分響應(yīng)系統(tǒng)等等。 我這里有羅紅老師給的期末范圍: 關(guān)于平時(shí): 作業(yè)要比期末難,如果作業(yè)自己能完全做對(duì),書(shū)上該掌握的都掌握了,期末一定沒(méi)問(wèn)題。 編譯原理篇: 這門(mén)課很抽象,跟硬件、操作系統(tǒng)都有一定聯(lián)系。跟大二下學(xué)的形式語(yǔ)言與自動(dòng)機(jī)的內(nèi)容緊密聯(lián)系。內(nèi)容繁瑣,過(guò)程很有套路但是很復(fù)雜。期末是雷打不動(dòng)的六道大題。 關(guān)于平時(shí): 編譯這門(mén)課的重頭戲在語(yǔ)法分析上,我們講了近一個(gè)月的語(yǔ)法分析。而且語(yǔ)法分析作業(yè)也很多,那章的作業(yè)平均10頁(yè)作業(yè)紙。由于課程很抽象,建議大家還是自己弄明白再做作業(yè)吧。 我們07級(jí)布置了兩個(gè)實(shí)驗(yàn),三個(gè)程序,分別是語(yǔ)法分析器兩個(gè)、詞法分析器。強(qiáng)烈建議語(yǔ)法分析器自己編寫(xiě),通過(guò)編寫(xiě)這兩個(gè)程序,會(huì)對(duì)語(yǔ)法分析那一章有更加深刻的印象。 關(guān)于考試: 期中我們考了4道大題,其中最后一道就是語(yǔ)法分析。這是我們考過(guò)的卷子和答案: 期末考試是6道大題。我們今年語(yǔ)法分析這一章考了45分。后面的內(nèi)容考察了訪問(wèn)鏈與控制棧、程序塊劃分、語(yǔ)法制導(dǎo)定義、參數(shù)傳遞機(jī)制、類(lèi)型表達(dá)式。卷子請(qǐng)到精華區(qū)找找。 匯編語(yǔ)言與接口技術(shù)篇: 關(guān)于教材: 老師推薦的那本實(shí)在不怎么樣,建議再買(mǎi)兩本,05級(jí)用過(guò)的兩本——《IBM-32位機(jī)匯編語(yǔ)言》和《接口技術(shù)》(本書(shū)強(qiáng)烈推薦)。 老師是按自己課件內(nèi)容講的,和書(shū)的內(nèi)容不完全一致,接口部分建議是新書(shū)舊書(shū)聯(lián)合起來(lái)看。 關(guān)于平時(shí): 課件只是指引作用,詳細(xì)內(nèi)容還得看書(shū),尤其新舊兩本書(shū)聯(lián)合起來(lái)看。 作業(yè)布置很少,非常不利于督促大家學(xué)習(xí)。建議買(mǎi)一本微機(jī)原理與接口技術(shù)的練習(xí)冊(cè)做一做。 接口實(shí)驗(yàn)有5個(gè),最好準(zhǔn)備好了再去實(shí)驗(yàn)室。 另外,匯編的程序也要好好編。 關(guān)于考試: 如果計(jì)算機(jī)學(xué)院要評(píng)N大名捕,我第一個(gè)提名這門(mén)課。內(nèi)容多,書(shū)不好,作業(yè)少,聽(tīng)不會(huì),看不懂。 由于本人考的比較差,自認(rèn)沒(méi)有實(shí)力點(diǎn)評(píng)此課,期待大牛不吝賜教。 這門(mén)課勉強(qiáng)算全校統(tǒng)考,不過(guò)咱們?cè)罕绕渌弘y一些,卷子有70%一樣。 北郵《成本會(huì)計(jì)》階段作業(yè)三 一、多項(xiàng)選擇題(共5道小題,共50.0分) 1.在生產(chǎn)多種產(chǎn)品的車(chē)間,期末制造費(fèi)用的分配方法,常見(jiàn)的有(ABCD)法。A.生產(chǎn)工時(shí)比例法 B.生產(chǎn)工人工資比例法 C.機(jī)器工時(shí)比例法 D.計(jì)劃分配率 2.下列方法屬于輔助生產(chǎn)費(fèi)用分配方法的有(ABCD)。 A.交互分配法 B.直接分配法 C.計(jì)劃(成本)分配法 D.代數(shù)分配法 3.簡(jiǎn)化分批法的適用范圍和應(yīng)用條件是(ABC)。 A.同一月份投產(chǎn)的產(chǎn)品批數(shù)很多 B.月末完工產(chǎn)品的批數(shù)較少 C.各月間接費(fèi)用水平相差不多 D.各月生產(chǎn)費(fèi)用水平相差不多 二、單項(xiàng)選擇題(共5道小題,共50.0分) 1.采用交互分配法分配輔助生產(chǎn)費(fèi)用時(shí),第一次交互分配是在(A)之間進(jìn)行的。A.各受益輔助生產(chǎn)車(chē)間 B.輔助生產(chǎn)車(chē)間以外受益單位 C.各受益基本生產(chǎn)車(chē)間 D.各受益企業(yè)管理部門(mén) 2分配制造費(fèi)用的生產(chǎn)工時(shí)比例法的公式為(A)。 1.2.3.分批法的成本計(jì)算對(duì)象是(C)。 A.產(chǎn)品品種 B.產(chǎn)品類(lèi)別 C.產(chǎn)品批別 D.產(chǎn)品生產(chǎn)步驟第三篇:北郵微波仿真實(shí)驗(yàn)1
第四篇:北郵計(jì)算機(jī)大三上課程學(xué)習(xí)心得
第五篇:北郵《成本會(huì)計(jì)》階段作業(yè)三