? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?一、概要
1、數(shù)據(jù)的表示:數(shù)制及其轉(zhuǎn)換、原碼、反碼、補(bǔ)碼、移碼、浮點(diǎn)數(shù)、溢出、算術(shù)運(yùn)算、邏輯運(yùn)算、校驗(yàn)碼。
2、計(jì)算機(jī)系統(tǒng)的組成、體系結(jié)構(gòu)分類及特性:CPU、存儲(chǔ)器的組成、性能和基本工作原理、常用I/O設(shè)備、通信設(shè)備的性能及基本工作原理、I/O接口的功能、類型和特性、CISC/RISC、流水線操作、多處理機(jī)、并行處理。
3、存儲(chǔ)系統(tǒng):虛擬存儲(chǔ)器基本工作原理、多級存儲(chǔ)體系、RAID類型和特性。
4、可靠性與系統(tǒng)性能評測:診斷與容錯(cuò)、系統(tǒng)可靠性分析評價(jià)、校驗(yàn)方法、計(jì)算機(jī)系統(tǒng)性能評測方法。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 二、數(shù)據(jù)表示
? ? ? ? 數(shù)據(jù)的表示部分包含了數(shù)據(jù)轉(zhuǎn)換、原碼、反碼、補(bǔ)碼、移碼以及浮點(diǎn)運(yùn)算知識(shí)。其中難點(diǎn)是浮點(diǎn)計(jì)算。
1、數(shù)制轉(zhuǎn)換
(1)R進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)
? ? ? R進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù)通常使用按權(quán)展開法。具體操作方式為:將R進(jìn)制數(shù)的每一位數(shù)值用Rk形式表示,即冪的底數(shù)是R,指數(shù)為k,k與該位和小數(shù)點(diǎn)之間的距離有關(guān)。當(dāng)該位位于小數(shù)點(diǎn)左邊,k值是該位和小數(shù)點(diǎn)之間數(shù)碼的個(gè)數(shù),而當(dāng)該位位于小數(shù)點(diǎn)右邊,k值是負(fù)值,其絕對值是該位和小時(shí)點(diǎn)之間數(shù)碼的個(gè)數(shù)加1.
? ? ?例如二進(jìn)制數(shù)l0100.01的值可計(jì)算如下:
按照上面的表示法,即可計(jì)算出R進(jìn)制數(shù)十進(jìn)制的值。
(2)十進(jìn)制數(shù)轉(zhuǎn)換為R進(jìn)制數(shù)
最常用的是“除以R取余法”,如將十進(jìn)制94轉(zhuǎn)換為二進(jìn)制數(shù):
將所得的余數(shù)從低位到高位排列(1011110)2 就是94的二進(jìn)制數(shù)。
(3)二進(jìn)制數(shù)與八進(jìn)制數(shù)、十六進(jìn)制數(shù)之間的轉(zhuǎn)換
二進(jìn)制轉(zhuǎn)八進(jìn)制:將每3個(gè)二進(jìn)制數(shù)轉(zhuǎn)換為八進(jìn)制數(shù);
二進(jìn)制轉(zhuǎn)十六進(jìn)制:將每4個(gè)二進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù);
八進(jìn)制轉(zhuǎn)二進(jìn)制:將每個(gè)八進(jìn)制數(shù)轉(zhuǎn)換為3位二進(jìn)制數(shù);
十六進(jìn)制轉(zhuǎn)二進(jìn)制;將每個(gè)十六進(jìn)制數(shù)轉(zhuǎn)換為4位二進(jìn)制。
? ? ? ? 上面的轉(zhuǎn)換都是以小數(shù)點(diǎn)作為計(jì)數(shù)碼個(gè)數(shù)的起點(diǎn)。八進(jìn)制數(shù)和十六進(jìn)制數(shù)轉(zhuǎn)換,可先轉(zhuǎn)換為二進(jìn)制數(shù),然后再轉(zhuǎn)換為目標(biāo)進(jìn)制。
2、原碼、反碼、補(bǔ)碼、移碼
在計(jì)算機(jī)中,數(shù)據(jù)編碼方式可以有多種,最為常見的有原碼、反碼、補(bǔ)碼、移碼。一個(gè)正數(shù)的原碼、反碼、補(bǔ)碼是相同的,負(fù)數(shù)則不同。
(1)原碼
將最高位用做符號(hào)位(0表示正數(shù),1表示負(fù)數(shù)),其余各位代表數(shù)值本身的絕對值的表示形式。這種方式是最容易理解的。
例如,+1 的原碼是0000 0001,–1 的原碼是1000 0001.
但是直接使用原碼在計(jì)算時(shí)卻會(huì)有麻煩,比如(1)10 + (-1)10 = 0,如果直接使用原碼則:
這樣計(jì)算的結(jié)果是-2,也就是說,使用原碼直接參與計(jì)算可能會(huì)出現(xiàn)錯(cuò)誤的結(jié)果。所以,原碼的符號(hào)位不能直接參與計(jì)算,必須和其他位分開,這樣會(huì)增加硬件的開銷和復(fù)雜性。
(2)反碼
正數(shù)的反碼與原碼相同。負(fù)數(shù)的反碼符號(hào)位為1,其余各位為該數(shù)絕對值的原碼按位取反。這個(gè)取反的過程使得這種編碼稱為“反碼”。
例如,–1的反碼:1111 1110 。
?同樣對上面的加法,使用反碼的結(jié)果是:
這樣的結(jié)果是負(fù)0,而在人們普遍的觀念中,0是不分正負(fù)的。反碼的符號(hào)位可以直接參與計(jì)算,而且減法也可以轉(zhuǎn)換為加法計(jì)算。
(3)補(bǔ)碼
正數(shù)的補(bǔ)碼與原碼相同。負(fù)數(shù)的補(bǔ)碼是該數(shù)的反碼加1,這個(gè)數(shù)加1救贖“補(bǔ)”。
例如,–1的補(bǔ)碼:1111 1110+1 = 1111 1111。
再次做加法是這樣的:
直接使用補(bǔ)碼進(jìn)行計(jì)算的結(jié)果是正確的。
對一個(gè)補(bǔ)碼表示的數(shù),要計(jì)算其原碼,只要對它再次求補(bǔ),可得該數(shù)的原碼。
由于補(bǔ)碼能使符號(hào)位與有效值部分一起參加運(yùn)算,從而簡化運(yùn)算規(guī)則,同時(shí)它也使減法運(yùn)算轉(zhuǎn)換為加法運(yùn)算,進(jìn)一步簡化計(jì)算機(jī)中運(yùn)算器的電路,這使得在大部分計(jì)算機(jī)系統(tǒng)中,數(shù)據(jù)都使用補(bǔ)碼表示。
(3)移碼
移碼是對補(bǔ)碼的符號(hào)位取反得到的一種編碼。移碼只用于表示浮點(diǎn)數(shù)的階碼,所以只用于整數(shù)。例如,-1的移碼為:0111 1111.
3、浮點(diǎn)數(shù)計(jì)算
在數(shù)學(xué)中,要表示一個(gè)很大的數(shù)時(shí),我們常常使用一種稱為科學(xué)計(jì)數(shù)法的方式:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?N = M * Re
其中M稱為尾數(shù),e是指數(shù),R為基數(shù)。
浮點(diǎn)數(shù)就是使用這種方法來表示大范圍的數(shù),其中指數(shù)一般是2,8,16。而且對于特定機(jī)器而言,指數(shù)是固定不變的,所以在浮點(diǎn)數(shù)中指數(shù)并不出現(xiàn)。從這個(gè)表達(dá)式可以看出:浮點(diǎn)數(shù)表示的精度取決于尾數(shù)的寬度,范圍取決于基數(shù)的大小和指數(shù)的寬度。
浮點(diǎn)數(shù)的運(yùn)算主要有三個(gè)步驟:對階、尾數(shù)計(jì)數(shù)、結(jié)果格式化。
(1)對階
首先計(jì)算兩個(gè)數(shù)的指數(shù)差,把指數(shù)小的向指數(shù)大的對齊,并將尾數(shù)右移指數(shù)差的位數(shù),這樣兩個(gè)浮點(diǎn)數(shù)就完成了對階的操作。可以看出,對階的過程可能使得指數(shù)小的浮點(diǎn)數(shù)失去一些有效位。如果兩個(gè)浮點(diǎn)階數(shù)相差很大,大于指數(shù)小的浮點(diǎn)數(shù)的位數(shù)寬度,那么對階后那個(gè)浮點(diǎn)數(shù)的位數(shù)就變成了0,即當(dāng)做機(jī)器零處理了。
(2)尾數(shù)計(jì)算
對階完成后,兩個(gè)浮點(diǎn)數(shù)尾數(shù)就如同定點(diǎn)數(shù),計(jì)算過程同定點(diǎn)數(shù)計(jì)算。
(3)結(jié)構(gòu)格式化
尾數(shù)計(jì)算后,可能會(huì)產(chǎn)生溢出,此時(shí)將尾數(shù)右移,同時(shí)指數(shù)加1,如果指數(shù)加1后發(fā)生了溢出,則表示兩個(gè)浮點(diǎn)數(shù)的運(yùn)算發(fā)生了溢出。
如果尾數(shù)計(jì)算沒有溢出,則尾數(shù)不斷左移,同時(shí)指數(shù)減1,直道尾數(shù)為格式化數(shù)。如果這個(gè)過程中,指數(shù)小于機(jī)器能表達(dá)的最小數(shù),則將結(jié)果置“機(jī)器零”,這種情況稱為下溢。
? ? ? ? ? ? ? ? ? ? 三、計(jì)算機(jī)系統(tǒng)的組成與體系結(jié)構(gòu)
? ? ? ? 在計(jì)算機(jī)系統(tǒng)的組成與體系結(jié)構(gòu)中,計(jì)算機(jī)體系結(jié)構(gòu)分類、指令系統(tǒng)基數(shù)、CISC與RISC、流水線操作等內(nèi)容是最為重要的。
1、計(jì)算機(jī)體系結(jié)構(gòu)分類
計(jì)算機(jī)體系結(jié)構(gòu)分類有多種方式,其中最為常見的是:FLynn分類法與馮氏分類法。
Flynn 分類法是根據(jù)指令流、數(shù)據(jù)流和多倍性三個(gè)方面來進(jìn)行分類的:
2、計(jì)算機(jī)的硬件組成
計(jì)算機(jī)硬件系統(tǒng)由運(yùn)算器、控制器、存儲(chǔ)器、輸入設(shè)備和輸出設(shè)備五大部件組成。其中運(yùn)算器和控制器組成中央處理器(CPU)。運(yùn)算器負(fù)責(zé)完成算術(shù)、邏輯運(yùn)算功能,通常由ALU(算術(shù)/邏輯單元)、寄存器、多路轉(zhuǎn)換器、數(shù)據(jù)總線組成;控制器則負(fù)責(zé)依次訪問程序指令,進(jìn)行指令譯碼,并協(xié)調(diào)其他設(shè)備,通常由計(jì)數(shù)器(PC)、指令寄存器、指令譯碼器、狀態(tài)/條件寄存器、時(shí)序發(fā)生器、微操作信號(hào)發(fā)生器組成。
3、指令系統(tǒng)基礎(chǔ)
在計(jì)算機(jī)中,CPU都會(huì)定義出自己特定的指令系統(tǒng),不過都遵循著統(tǒng)一的標(biāo)準(zhǔn)格式。指令的基本格式是由操作碼和地址碼兩個(gè)部分組成的。操作碼指出該指令要完成什么操作,地址碼是提供原始的數(shù)據(jù)。指令系統(tǒng)中定義操作碼的方式可以分為規(guī)整型(定長編碼)和非規(guī)整型(變長編碼)兩種,如表:
而在指令系統(tǒng)中用來確定如何提供操作或提供操作數(shù)地址的方式稱為尋址方式和編址方式。操作數(shù)可以存放在CPU中的寄存器(用寄存器名操作)、主存儲(chǔ)器(指出存儲(chǔ)單元地址)、堆棧(先進(jìn)后出的存儲(chǔ)機(jī)制,用棧頂指針SP來標(biāo)出其當(dāng)前位置)、外存器或外圍設(shè)備中。不過在運(yùn)算時(shí),數(shù)據(jù)均在主存儲(chǔ)器中,操作數(shù)可以采用以下幾種尋址方式:
(1)隱含尋址方式
在指令中不明顯地給出而是隱含著操作數(shù)的地址。例如,單地址的指令格式,沒有在地址字段中指明第二操作數(shù)地址,而是規(guī)定累加寄存器AC作為第二操作數(shù)地址,AC對單地址指令格式來說是隱含地址。
(2)立即尋址方式
指令的地址字段指出的不是操作數(shù)的地址,而是操作數(shù)本身。這種方式的特點(diǎn)事指令執(zhí)行時(shí)間很短,不需要訪問內(nèi)存取數(shù)。“操作數(shù)包含在指令中尋址方式”就是立即尋址。
如,單地址的移位指令格式為
這里D不是地址,而是一個(gè)操作數(shù)。F為標(biāo)志位,當(dāng)F = 1 時(shí),操作數(shù)進(jìn)行右移;當(dāng)F = 0時(shí),操作數(shù)進(jìn)行左移。
(3)直接尋址
特點(diǎn)是:在指令格式的地址字段中直接指出操作數(shù)在內(nèi)存的地址D。
采用直接尋址方式時(shí),指令中的形式地址D就是操作數(shù)的有效地址E,即E = D。因此通常把形式地址D又稱為直接地址。此時(shí),由尋址模式給予指示。如果用S表示操作數(shù),那么直接尋址的邏輯表達(dá)式為S = (E) = (D).
(4)間接尋址方式
間接尋址的情況下,指令地址字段中的形式地址D不是操作數(shù)的真正地址,而是操作數(shù)地址的指示器,D單元的內(nèi)容才是操作數(shù)的有效地址。
如果把直接尋址和間接尋址結(jié)合起來,指令有如下形式:
尋址特征位 I = 0,表示直接尋址,這時(shí)有效地址 E = D; I = 1,表示間接尋址,這時(shí)有效地址
E = (D).
間接尋址方式是早期計(jì)算機(jī)中經(jīng)常采用的方式,但由于兩次訪問內(nèi)存,影響指令執(zhí)行速度,現(xiàn)在已不大使用。
(5) 寄存器尋址方式和寄存器間接尋址方式
? ? ? ?當(dāng)操作數(shù)不放在內(nèi)存中,而是放在CPU的通用寄存器中時(shí),可采用寄存器尋址方式。此時(shí)指令中給出的操作數(shù)地址不是內(nèi)存的地址單元號(hào),而是通用寄存器的編號(hào)。這也就是所說的"操作數(shù)在寄存器中的尋址方式".
? ? ? ? ?寄存器間接尋址方式與寄存器尋址方式的區(qū)別在于:指令格式中的寄存器內(nèi)容不是操作數(shù),而是操作數(shù)的地址,該地址指明的操作數(shù)在內(nèi)存中。這也就是所說的"操作數(shù)的地址在寄存器中的尋址方式".
(6) 相對尋址方式?
? ? ? ? 相對尋址是把程序計(jì)數(shù)器PC的內(nèi)容加上指令格式中的形式地址D而形成操作數(shù)的有效地址。程序計(jì)數(shù)器的內(nèi)容就是當(dāng)前指令的地址。"相對"尋址,就是相對于當(dāng)前的指令地址而言的。? 采用相對尋址方式的好處是程序員無須用指令的絕對地址編程,所編程序可以放在內(nèi)存任何地方。此時(shí)形式地址D通常稱為偏移量,其值可正可負(fù),相對于當(dāng)前指令地址進(jìn)行浮動(dòng)。
(7) 基址尋址方式
? ? ? ? ?基址尋址方式是將CPU中基址寄存器的內(nèi)容加上指令格式中的形式地址而形成操作數(shù)的有效地址。它的優(yōu)點(diǎn)是可以擴(kuò)大尋址能力。與形式地址相比,基址寄存器的位數(shù)可以設(shè)置得很長,從而可以在較大的存儲(chǔ)空間中尋址。
(8) 變址尋址方式
? ? ? ?變址尋址方式與基址尋址方式計(jì)算有效地址的方法很相似,它把CPU中某個(gè)變址寄存器的內(nèi)容與偏移量D相加來形成操作數(shù)有效地址。但使用變址尋址方式的目的不在于擴(kuò)大尋址空間,而在于實(shí)現(xiàn)程序塊的規(guī)律性變化。
4. CISC與RISC
為了提高操作系統(tǒng)的效率,人們最初選擇了向指令系統(tǒng)中添加更多、更復(fù)雜的指令,而隨著不斷地升級和向后兼容的需要,指令集也越來越大。這種類型的計(jì)算機(jī),我們稱之為復(fù)雜指令計(jì)算機(jī)CISC.而后來研究發(fā)現(xiàn),計(jì)算機(jī)指令系統(tǒng)如果使用少量結(jié)構(gòu)簡單的指令會(huì)提高計(jì)算機(jī)的性能,這就是精簡指令集計(jì)算機(jī)RISC.計(jì)算機(jī)執(zhí)行程序所需的時(shí)間P由三方面因素決定:編譯后產(chǎn)生的機(jī)器指令數(shù)I、執(zhí)行每條指令所需的平均周期數(shù)CPI,以及每個(gè)機(jī)器周期的時(shí)間T.它們的關(guān)系是P=I x CPI x T.RISC正是通過簡化指令的途徑使計(jì)算機(jī)結(jié)構(gòu)更合理,減少指令執(zhí)行周期數(shù),提高運(yùn)算速度。雖然RISC編譯后產(chǎn)生的機(jī)器指令數(shù)(I)增多了,但指令所需的周期數(shù)(CPI)和每個(gè)周期的時(shí)間(T)都可以減少。它與CISC可謂各有特色,如表1-5所示。
? ? ? ? 典型的RISC處理器包括:DEC的Alpha 21164、IBM的Power PC620、HP的PA-8000、SGIMIPS分部的TS、Sun的Ultra SPARC.目前RISC處理器技術(shù)的發(fā)展方向是采用并行處理技術(shù)(包括超級流水線、超級標(biāo)量、超長指令字)大幅度提高運(yùn)算速度。
5. 流水線
? ? ? ? 流水線是指在程序執(zhí)行時(shí)多條指令重疊進(jìn)行操作的一種準(zhǔn)并行處理實(shí)現(xiàn)技術(shù)。各種部件同時(shí)處理是針對不同指令而言的,它們可同時(shí)為多條指令的不同部分進(jìn)行工作,以提高各部件的利用率和指令的平均執(zhí)行速度。
? ? ? ? 指令流水線是將指令執(zhí)行分成幾個(gè)子過程,每一個(gè)子過程對應(yīng)一個(gè)工位,我們稱為流水級或流水節(jié)拍,這個(gè)工位在計(jì)算機(jī)里就是可以重疊工作的功能部件,稱為流水部件。
如圖1-2所示,IF,ID,EX,WD分別是流水線的流水部件。
? ? ? ?流水線要求所有的流水級部件必須在相同的時(shí)間內(nèi)完成各自的子過程。在流水線中,指令流動(dòng)一步便是一個(gè)機(jī)器周期,機(jī)器周期的長度必須由最慢的流水級部件處理子過程所需的時(shí)間來決定。
? ? ?那么我們?yōu)槭裁匆岢隽魉€這個(gè)概念,以及流水線是如何提高系統(tǒng)吞吐量的呢?下面我們來看幾個(gè)圖,概念自然就清楚了。
圖1-3是一個(gè)非流水線結(jié)構(gòu)系統(tǒng)執(zhí)行指令時(shí)空圖。
顯然,采用流水線可以大大提升系統(tǒng)資源的利用率,以及整個(gè)系統(tǒng)的吞吐量。
(1)計(jì)算流水線執(zhí)行時(shí)間
? ? ? ?假定有某種類型的任務(wù),共可分成N個(gè)子任務(wù),執(zhí)行每個(gè)子任務(wù)需要時(shí)間t,則完成該任務(wù)所需的時(shí)間即為Nt.若以傳統(tǒng)的方式,則完成k個(gè)任務(wù)所需的時(shí)間是kNt;而使用流水線技術(shù)執(zhí)行,花費(fèi)的時(shí)間是Nt+(k-1)t.也就是說,除了第一個(gè)任務(wù)需要完整的時(shí)間外,其他都通過并行,節(jié)省下了大量的時(shí)間,只需一個(gè)子任務(wù)的單位時(shí)間就夠了。
? ? ?另外要注意的是,如果每個(gè)子任務(wù)所需的時(shí)間不同,則其速度取決于其執(zhí)行順序中最慢的那個(gè)(也就是流水線周期值等于最慢的那個(gè)指令周期),要根據(jù)實(shí)際情況進(jìn)行調(diào)整。
? ? ? 例如:若指令流水線把一條指令分為取指、分析和執(zhí)行三部分,且三部分的時(shí)間分別是取指2ns,分析2ns,執(zhí)行1ns.那么,最長的是2ns,因此100條指令全部執(zhí)行完畢需要的時(shí)間就是:(2ns+2ns+1ns) +(100-1)x 2ns=203ns.
? ? ? 另外,還應(yīng)該掌握幾個(gè)關(guān)鍵的術(shù)語:流水線的吞吐率(等于任務(wù)數(shù)/完成時(shí)間),加速比(不采用流水線的執(zhí)行時(shí)間/采用流水線的執(zhí)行時(shí)間)
(2)影響流水性的主要因素
? ? ? ? 如圖1-4所示,流水線的關(guān)鍵在于"重疊執(zhí)行",因此如果這個(gè)條件不能夠滿足,流水線就會(huì)被破壞。這種破壞主要來自兩種情況:
轉(zhuǎn)移指令:因?yàn)榍懊娴霓D(zhuǎn)移指令還沒有完成,流水線無法確定下一條指令的地址,因此也就無法向流水線中添加這條指令。從這里的分析可以看出,無條件跳轉(zhuǎn)指令是不會(huì)影響流水線的。
共享資源訪問的沖突:也就是后一條指令需要使用的數(shù)據(jù),與前一條指令發(fā)生的沖突,或者相鄰的指令使用了相同的寄存器,這也會(huì)使得流水線失敗。
響應(yīng)中斷:當(dāng)有中斷請求時(shí),流水線也會(huì)停止。對于這種情況有兩種響應(yīng)方式,一種是立即停止--精確斷點(diǎn)法,能夠立即響應(yīng)中斷;另一種是流水線中的指令繼續(xù)執(zhí)行,不再新增指令到流水線--不精確斷點(diǎn)法。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?四、存儲(chǔ)系統(tǒng)
? ?在整個(gè)計(jì)算機(jī)系統(tǒng)中,存儲(chǔ)系統(tǒng)的地位非常重要。
1.Cache ?
由于在CPU與存儲(chǔ)系統(tǒng)間存在著數(shù)據(jù)傳送帶寬的限制,因此在其中設(shè)置了Cache(高速緩沖存儲(chǔ)器,通常速度比內(nèi)存快),以提高整體效率。但由于其成本更高,因此Cache的容量要比內(nèi)存小得多。
(1) Cache原理、命中率、失效率
? ? ? 使用Cache改善系統(tǒng)性能的主要依據(jù)是程序的局部性原理。通俗地說,就是一段時(shí)間內(nèi),執(zhí)行的語句常集中于某個(gè)局部。而Cache正式將訪問集中的內(nèi)容放在速度更快的Cache上,以提高性能。引入Cache后,CPU在需要數(shù)據(jù)時(shí),先找Cache,如果沒有再找內(nèi)存。
? ? ?如果Cache的訪問命中率為h(通常1-h就是Cache的失效率),而Cache的訪問周期時(shí)間是t1,主存儲(chǔ)器的訪問周期時(shí)間是t2,則整個(gè)系統(tǒng)的平均訪存時(shí)間就應(yīng)該是:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? t3=h*t1+(1-h)* t2
? ? ? ? ?從公式可以看出,系統(tǒng)的平均訪存時(shí)間與命中率有著很密切的關(guān)系。靈活地應(yīng)用這個(gè)公式,可以計(jì)算出所有情況下的平均訪存時(shí)間。
例如:設(shè)某流水線計(jì)算機(jī)主存的讀/寫時(shí)間為100ns,有一個(gè)指令和數(shù)據(jù)合一的Cache,已知該Cache的讀/寫時(shí)間為10ns,取指令的命中率為98%,取數(shù)的命中率為95%.在執(zhí)行某類程序時(shí),約有1/5指令需要存/取一個(gè)操作數(shù)。假設(shè)指令流水線在任何時(shí)候都不阻塞,則設(shè)置Cache后,每條指令的平均訪存時(shí)間約為多少?其實(shí)這是應(yīng)用該公式的簡單數(shù)學(xué)題:
? ? ? ? ? ? ? ? ? (2%*100ns + 98%*10ns)+ 1/5 x(5%*100ns + 95%*10ns)=14.7ns
(2)Cache存儲(chǔ)器的映射機(jī)制
? ? ? CPU發(fā)生訪存請求時(shí),會(huì)先讓Cache判斷是否包括,如果命中(即包括請求的內(nèi)容)就直接使用。這個(gè)判斷的過程就是Cache地址映射,這個(gè)速度應(yīng)該盡可能快,常見的映射方法有直接映射、全相聯(lián)映射和組相聯(lián)映射三種,其原理如圖1-5所示。
?直接映射:是一種多對一的映射關(guān)系,但一個(gè)主存塊只能夠復(fù)制到Cache的一個(gè)特定位置上去。Cache的行號(hào)i和主存的塊號(hào)j有函數(shù)關(guān)系:i=j%m(其中m為Cache總行數(shù))。例如:某Cache容量為16KB(可用14位表示),每行的大小為16B(可用4位表示),則說明其可分為1024行(可用10位表示)。則主存地址的最低四位為Cache的行內(nèi)地址,中間10位為Cache行號(hào)。如果內(nèi)存地址為1234E8F8H的話,那么最后四位就是1000(對應(yīng)16進(jìn)制數(shù)的最后一位),而中間10位,則應(yīng)從E8F(111010001111)中獲取,得到1010001111。
相聯(lián)映射:將主存中一個(gè)塊的地址與塊的內(nèi)容一起存于Cache的行中。速度更快,但控制復(fù)雜。
組相聯(lián)映射:是前兩種方式的折中方案。它將Cache中的塊再分成組。然后通過直接映射方式?jīng)Q定組號(hào),再通過相聯(lián)映射的方式?jīng)Q定Cache中的塊號(hào)。
要注意的是,在Cache映射中,主存和Cache存儲(chǔ)器將均分成容量相同的塊。
例如:容量為64塊的Cache采用組相聯(lián)方式映像,字塊大小為128個(gè)字,每4塊為一組。若主存容量為4096塊,且以字編址,那么主存地址應(yīng)該為多少位?主存區(qū)號(hào)為多少位?這樣的題目,首先根據(jù)主存與Cache塊的容量需一致,因此內(nèi)存也是128個(gè)字,因此共有12*4096個(gè)字,即219(27+212)個(gè)字,因此主存地址需要19位;而內(nèi)存所需要分為4096/64塊,即26,因此主存區(qū)號(hào)需要6位。
(3)Cache淘汰算法
當(dāng)Cache數(shù)據(jù)已滿,并且出現(xiàn)未命中情況時(shí),就是淘汰一些老的數(shù)據(jù),更新一些新的數(shù)據(jù)。而選擇淘汰什么數(shù)據(jù)的方法就是淘汰算法,常見的方法有三種:隨機(jī)淘汰、先進(jìn)先出(FIFO)淘汰(淘汰最早調(diào)入Cache的數(shù)據(jù))、最近最少使用(LRU)淘汰法。其中平均命中率最高的是LRU算法。
(4)Cache存儲(chǔ)器的寫操作
在使用Cache時(shí),需要保證其數(shù)據(jù)與主存一致,因此在寫Cache時(shí)就需要考慮與主存間的同步問題,通常使用以下三種方法:寫直達(dá)(寫Cache時(shí),同時(shí)寫主存)、寫回(寫Cache時(shí)不馬上寫主存,而是等其淘汰時(shí)回寫)、標(biāo)記法。
2. 主存(內(nèi)存)
(1)主存儲(chǔ)器的種類
RAM:隨機(jī)存儲(chǔ)器,可讀寫,斷電后數(shù)據(jù)無法保存,只能暫存數(shù)據(jù)。
SRAM:靜態(tài)隨機(jī)存儲(chǔ)器,在不斷電時(shí)信息能夠一直保持。??
DRAM:動(dòng)態(tài)隨機(jī)存儲(chǔ)器,需要定時(shí)刷新以維持信息不丟失。??
ROM:只讀存儲(chǔ)器,出廠前用掩膜技術(shù)寫入,常用于存放BIOS和微程序控制。??
PROM:可編程ROM,只能夠一次寫入,需用特殊電子設(shè)備進(jìn)行寫入。
? EPROM:可擦除的PROM,用紫外線照射15~20分鐘可擦去所有信息,可寫入多次。?
?E2PROM:電可擦除ERPOM,可以寫入,但速度慢。 ?
閃速存儲(chǔ)器:現(xiàn)在U盤使用的種類,可以快速寫入。??
? ? ? ? ? ?記憶時(shí),抓住幾個(gè)關(guān)鍵英文字母。A,即Access,說明讀寫都行;O,即Only,說明只讀;P,即Programmable,說明可通過特殊電子設(shè)備寫入;E,即Erasable,說明可擦寫;E平方說明是兩個(gè)E,第二個(gè)E是電子。
(2)主存儲(chǔ)器的組成
? ? ? ? ? 實(shí)際的存儲(chǔ)器總是由一片或多片存儲(chǔ)器配以控制電路構(gòu)成的(如圖1-6所示)。其容量為WxB,W是存儲(chǔ)單元(word,即字)的數(shù)量,B表示每個(gè)word由多少bit(位)組成。如果某一芯片規(guī)格為w?b,則組成W?B的存儲(chǔ)器需要用(W/w)x(B/b)個(gè)芯片。
(3)主存儲(chǔ)器的地址編碼
? ? ? ? 主存儲(chǔ)器(內(nèi)存)采用的是隨機(jī)存取方式,需對每個(gè)數(shù)據(jù)塊進(jìn)行編碼,而在主存儲(chǔ)器中數(shù)據(jù)塊是以 ? ? ? word來標(biāo)識(shí)的,即每個(gè)字一個(gè)地址,通常采用的是16進(jìn)制表示。例如,按字節(jié)編址,地址從A4000H到CBFFFH,則表示有(CBFFF-A4000)+1個(gè)字節(jié),28000H個(gè),也就是163840個(gè)字節(jié),等于160KB.
? ? ? ? ? 要注意的是,編址的基礎(chǔ)可以是字節(jié),也可以是字(字是由1個(gè)或多個(gè)字節(jié)組成的),要算地址位數(shù),首先應(yīng)計(jì)算要編址的字或字節(jié)數(shù),然后求2的對數(shù)即可得到。
? ? ? ? ? ? ? ? ? ? ? ?五、可靠性與系統(tǒng)性能評測
1. 可靠性計(jì)算
? ? ? 可靠性計(jì)算主要涉及三種系統(tǒng),即串聯(lián)系統(tǒng)、并聯(lián)系統(tǒng)和冗余系統(tǒng),其中串聯(lián)系統(tǒng)和并聯(lián)系統(tǒng)的可靠性計(jì)算都非常簡單,只要了解其概念,公式很容易記住。冗余系統(tǒng)要復(fù)雜一些。
(1)串聯(lián)系統(tǒng)
假設(shè)一個(gè)系統(tǒng)由n個(gè)子系統(tǒng)組成,當(dāng)且僅當(dāng)所有的子系統(tǒng)都能正常工作時(shí),系統(tǒng)才能正常工作,這種系統(tǒng)稱為串聯(lián)系統(tǒng),如圖1-7所示。
設(shè)系統(tǒng)各個(gè)子系統(tǒng)的可靠性分別用表示,則系統(tǒng)的可靠性:
如果系統(tǒng)的各個(gè)子系統(tǒng)的失效率分別用來表示,則系統(tǒng)的失效率:
(2)并聯(lián)系統(tǒng)
? ? ? ?假如一個(gè)系統(tǒng)由n個(gè)子系統(tǒng)組成,只要有一個(gè)子系統(tǒng)能夠正常工作,系統(tǒng)就能正常工作,如圖1-8所示。
設(shè)系統(tǒng)各個(gè)子系統(tǒng)的可靠性分別用 R1,R2...Rn表示,則系統(tǒng)的可靠性
R = 1 - (1 - R1) x (1 - R2) x ... x (1 - Rn)
假如所有子系統(tǒng)的失效率均為l,則系統(tǒng)的失效率為μ:
? ? ? 在并聯(lián)系統(tǒng)中只有一個(gè)子系統(tǒng)是真正需要的,其余n-1個(gè)子系統(tǒng)都被稱為冗余子系統(tǒng)。該系統(tǒng)隨著冗余子系統(tǒng)數(shù)量的增加,其平均無故障時(shí)間也會(huì)增加。
(3)模冗余系統(tǒng)
m模冗余系統(tǒng)由m個(gè)(m=2n+1為奇數(shù))相同的子系統(tǒng)和一個(gè)表決器組成,經(jīng)過表決器表決后,m個(gè)子系統(tǒng)中占多數(shù)相同結(jié)果的輸出可作為系統(tǒng)的輸出,如圖1-9所示。
在m個(gè)子系統(tǒng)中,只有n+1個(gè)或n+1個(gè)以上的子系統(tǒng)能正常工作,系統(tǒng)就能正常工作并輸出正確結(jié)果。假設(shè)表決器是完全可靠的,每個(gè)子系統(tǒng)的可靠性為R0,則m模冗余系統(tǒng)的可靠性為:
2.系統(tǒng)性能評價(jià)
? ? ? 無論是生產(chǎn)廠商還是用戶,都需要某種方法來衡量計(jì)算機(jī)系統(tǒng)的性能,但由于系統(tǒng)很復(fù)雜、體系結(jié) 構(gòu)和實(shí)現(xiàn)的策略多樣,因此很難采用統(tǒng)一的標(biāo)準(zhǔn)去評測所有的計(jì)算機(jī)。
(1)常用方法
時(shí)鐘頻率:即主頻(常聽到的CPU主頻1.8GHz等),通常主頻越高,速度越快。但這種比較只能夠在相同體系結(jié)構(gòu)的機(jī)器上比較,對于異構(gòu)系統(tǒng)而言,難以保證其有效性。
指令執(zhí)行速度:在早期,我們經(jīng)常使用每秒執(zhí)行的加法指令(由于當(dāng)時(shí)各種指令的速度大致相同或等比例)總數(shù)來作為衡量其性能的重要指標(biāo),其單位為KIPS(每秒千條指令)、MIPS(每秒百萬條指令)。
等效指令法:隨著計(jì)算機(jī)指令系統(tǒng)的發(fā)展,使用單種指令的MIPS值的局限性日益暴露,后來就出現(xiàn)了改進(jìn)的吉普森混合指令速度法。它通過統(tǒng)計(jì)各類指令在程序中所占的比例,進(jìn)行折算。
數(shù)據(jù)處理速率(PDR)法:它采用固定的比例法來計(jì)算數(shù)據(jù)處理的速度,而且還僅對CPU和主存的速度進(jìn)行度量,因此有很大的局限性。
核心程序法:把應(yīng)用程序中用得最頻繁的那部分核心程序作為評價(jià)計(jì)算機(jī)性能的標(biāo)準(zhǔn)程序,在不同機(jī)器上運(yùn)行,測其執(zhí)行時(shí)間,作為各類機(jī)器性能評價(jià)的依據(jù)。
(2)基準(zhǔn)測試程序??
基準(zhǔn)程序法是目前一致承認(rèn)的測試性能較好的方法,有多種不同的基準(zhǔn)程序,用于不同的測試項(xiàng)目。?
?整數(shù)測試程序:Dhrystone是一個(gè)用來測試編譯器和CPU處理整數(shù)指令和控制功能有效性的基準(zhǔn)測試程序。??
浮點(diǎn)測試程序:在計(jì)算機(jī)科學(xué)和工程應(yīng)用領(lǐng)域,浮點(diǎn)計(jì)算工作量占很大比例,因此有許多此類基準(zhǔn)測試程序。??
理論峰值浮點(diǎn)速度:MELOPS,與處理器時(shí)鐘周期、并行流水線功能部件數(shù)相關(guān),是直接計(jì)算出來的理論值。
Linpack基準(zhǔn)測試程序:主要測試向量性能和高速緩存性能。
Whetstone基準(zhǔn)測試程序:綜合性測試程序,除測試浮點(diǎn)操作外,還測試整數(shù)計(jì)算和功能調(diào)用等性能。
SPEC基準(zhǔn)程序:是由幾十家世界知名計(jì)算機(jī)大廠商支持的非盈利的合作組織,開發(fā)共同認(rèn)可的標(biāo)準(zhǔn)基準(zhǔn)程序。
TPC基準(zhǔn)程序:是事務(wù)處理委員會(huì)編寫的,共包括TPC-A,TPC-B,TPC-C,TPC-D和TPC-E五種,每一種都有一定的適用范圍。
3.校驗(yàn)碼
? ? ? ?為了實(shí)現(xiàn)數(shù)據(jù)的自動(dòng)檢錯(cuò)與糾錯(cuò),引入了校驗(yàn)碼。而最簡單的就是奇偶校驗(yàn)碼,它分為奇校驗(yàn)和偶校驗(yàn)兩種,均是添加1位校驗(yàn)位,根據(jù)信息碼中1的個(gè)數(shù)來決定校驗(yàn)位的取值,使得填入校驗(yàn)位后,使得1的個(gè)數(shù)為奇數(shù)(奇校驗(yàn))或偶數(shù)(偶校驗(yàn))。這方面知識(shí)更深入的考察點(diǎn)主要包括以下幾個(gè)方面:
(1)海明碼距
? ? ? 海明的冗余數(shù)據(jù)位檢測和糾正代碼差錯(cuò)的理論和方法指出:可以在數(shù)據(jù)代碼上添加若干冗余位組成碼字。而將一個(gè)碼字變成另一個(gè)碼字時(shí)必須改變的最小位數(shù)就是碼字之間海明距離,簡稱碼距。從這里將得出:沒有加冗余校驗(yàn)碼的任何編碼,它們的碼距就是1,即只要改一位,就可以變成另一個(gè)碼字了;而奇偶校驗(yàn)碼則添加了1位校驗(yàn)碼,使得要變成另一個(gè)碼字最少要修改兩位,這就使其碼距變成2了;根據(jù)定義得知,碼距是不同碼字的海明距離的最小值。判斷碼距時(shí),可以列出一些碼進(jìn)行判斷,找出最小的位數(shù)即可。
? ? ?另外,還需要記住以下幾個(gè)關(guān)鍵的關(guān)系:
? ? 可查出多少位錯(cuò)誤:根據(jù)海明的研究發(fā)現(xiàn),可以發(fā)現(xiàn)"≤碼距-1"位的錯(cuò)誤。??
? ? 可以糾正多少位錯(cuò)誤:根據(jù)海明的研究發(fā)現(xiàn),可以糾正"<碼距/2"位的錯(cuò)誤,因此如果要能夠糾正n位錯(cuò)誤,則所需最小的碼距應(yīng)該是"2n+1".
(2)海明校驗(yàn)碼
要計(jì)算海明校驗(yàn)碼,首先要知道海明校驗(yàn)碼是放置在2的冪次位上的,即"1、2、4、8、16、32......",而對于信息位為m的原始數(shù)據(jù),需加入k位的校驗(yàn)碼,它滿足m+k+1<2k.計(jì)算時(shí)總令人感到頭痛。而有一種簡單的方法,則是從第1位開始寫,遇到校驗(yàn)位留下空格。例如:原始信息為101101100,并采用偶校驗(yàn)則:
然后根據(jù)以下公式填充校驗(yàn)位"1、2、4、8":
Bit 1=B3 B5 B7 B9 B11 B13 = 1 0 1 0 1 0 =1
Bit 2=B3 B6 B7 B10 B11 = 1 1 1 1 1 =1
Bit 4=B5 B6 B7 B12 B13 = 0 1 1 0 0 =0
Bit 8=B9 B10 B11 B12 B13 = 0 1 1 0 0=0
(注:?指的是異或運(yùn)算;Bn代表位數(shù))
然后將結(jié)果填入,得到:
而如果給出一個(gè)加入了校驗(yàn)碼的信息,并說明有一位錯(cuò)誤,要找出,則可以采用基本相同的方
法,假如給出的是:
可根據(jù)以下公式計(jì)算:
Bit 1=B1 B3 B5 B7 B9 B11 B13 = 1 1 0 1 0 0 0 =1
Bit 2=B2 B3 B6 B7 B10 B11 = 1 1 1 1 1 0 =1
Bit 4=B4 B5 B6 B7 B12 B13 = 0 0 1 1 0 0 =0
Bit 8=B8 B9 B10 B11 B12 B13 =0 0 1 0 0 0=1
? ? ? 然后從高位往下寫,得到1101,即十進(jìn)制的11,因此出錯(cuò)的位數(shù)為第11位。而剩下的問題就是這個(gè)公 式如何來的?首先計(jì)算校驗(yàn)碼時(shí),1、2、4、8位都是空的,因此在公式的左邊;當(dāng)進(jìn)行校驗(yàn)時(shí),1、2、4、8位都已經(jīng)有值,因此要參與計(jì)算。而這些值是根據(jù)右表得到的,也就是生成B1、B2、B4、B8四個(gè)公式,而公式中要參與計(jì)算的位,是在表格中出現(xiàn)"1"的那個(gè)位。要說明的是,右邊的表格,就是對數(shù)據(jù)位的二進(jìn)制描述。
? ? ? 由于海明碼距在計(jì)算和糾錯(cuò)過程中,計(jì)算都過于復(fù)雜,無法很容易地使用硬件實(shí)現(xiàn),因此在實(shí)際的應(yīng)用中并不是應(yīng)用得很廣泛。
(3)CRC校驗(yàn)碼
由于CRC的實(shí)現(xiàn)原理十分易于用硬件實(shí)現(xiàn),因此被廣泛地應(yīng)用于計(jì)算機(jī)網(wǎng)絡(luò)上的差錯(cuò)控制。而CRC的考察點(diǎn)主要有兩個(gè):計(jì)算CRC校驗(yàn)碼;驗(yàn)算一個(gè)加了CRC校驗(yàn)的碼是否有錯(cuò)誤。
計(jì)算CRC校驗(yàn)碼
? ? 要計(jì)算CRC校驗(yàn)碼,需根據(jù)CRC生成多項(xiàng)式進(jìn)行。例如:原始報(bào)文為"11001010101",其生成多項(xiàng)式為:"x4+x3+x+1".在計(jì)算時(shí),是在原始報(bào)文的后面若干個(gè)0(等于校驗(yàn)碼的位數(shù),而生成多項(xiàng)式的最高冪次就是校驗(yàn)位的位數(shù),即使用該生成多項(xiàng)式產(chǎn)生的校驗(yàn)碼為4位)作為被除數(shù),除以生成多項(xiàng)式所對應(yīng)的二進(jìn)制數(shù)(根據(jù)其冪次的值決定,得到11011,因?yàn)樯啥囗?xiàng)式中除了沒有x2之外,其他位都有)。然后使用模2除,得到的商就是校驗(yàn)碼。
然后將0011添加到原始報(bào)文的后面就是結(jié)果:110010101010011。
檢查信息碼是否有CRC錯(cuò)誤
要想檢查信息碼是否出現(xiàn)了CRC錯(cuò)誤的計(jì)算很簡單,只需用待檢查的信息碼做被除數(shù),除以生成多項(xiàng)式,如果能夠整除就說明沒有錯(cuò)誤,否則就是出錯(cuò)了。另外要注意的是,當(dāng)CRC檢查出現(xiàn)錯(cuò)誤時(shí),它是不會(huì)進(jìn)行糾錯(cuò)的,通常是讓信息的發(fā)送方重發(fā)一遍。