高速緩衝儲存器習題
因為高速緩衝儲存器個人覺得比較重要,所以單獨寫一篇文章來做各種習題
例1
假設主存容量為512KB,Cache容量為4KB,每個字塊為16個字,每個字32位。
(1)Cache地址有多少位?可容納多少塊?
(2)主存地址有多少位?可容納多少塊?
(3)在直接對映的方式下,主存的第幾塊對映到Cache中的第5塊(設起始字塊為第1塊)?
(4)畫出直接對映方式下主存地址欄位中各段的位數。
解:
(1)根據Cache的容量為4KB(4KB=$2^{12}$),所以Cache的地址有12位。因為1字=32bit=4B,每塊有16字,所以每塊就有16*4=64B,故Cache中有4KB/64B=64塊
(2)根據主存容量為512KB(512KB=$2^{19}$),所以主存地址有19位,因為每塊有64B,故主存中有512KB/64B=8192塊
(3)在直接對映方式下,主存各段地址分配方式如下圖所示。其中字塊內地址為$log_264=6$位,快取塊地址共$log_264=6$位,主存字塊標記為主存地址長度與Cache地址長度之差,即19-12=7位

例2
假設主存容量為512K×16位,Cache容量為4096×16位,塊長為4個16位的字,訪存地址為字。
(1)在直接對映下,設計主存的地址格式。
(2)在全相聯對映下,設計主存的地址格式。
(3)在二路組相聯對映方式下,設計主存的地址格式。
(4)若主存容量為512K*32位,塊長不變,在四路組相聯對映下,設計主存的地址格式。
解:
首先看題目,完全沒有提到KB,或者MB,全是字,因此可以判斷該題是按字編址,並且題目已經說了一個字是16位(512K×16位,4096×16位,就暗含一個字是16位)
(1)塊長為4字,因此塊地址為$log_24 = 2$位。Cache有4096個字,所以Cache有4096/4=1024塊,則Cache塊地址為$log_21024=10$位。主存容量為512K個字,所以主存塊地址為$log_22^{19}=19$位,主存字塊標記為主存地址長度與Cache地址長度之差,即19-12=7位。故主存地址格式如下圖所示

(2)在全相聯對映下,主存地址僅由字塊內地址和主存字塊標記構成,而字塊內地址在(1)中求得為2位,所以這裡的字塊內地址為19-2=17位。此時的主存地址格式為:

(3)在二路組相聯對映中,每組有兩個字塊,所以一共有$2^{10}/2=2^9$組,故組地址有9位。由於每個字塊到這裡都是沒有變化的,所以字塊內地址仍為2位。所以主存字塊標記為19-9-2=8位,故得到主存地址格式為:

(4)主存容量為512K*32位,即雙字寬儲存器,即每次可以訪問兩個字(因為每個字16位),這裡的訪存地址單元仍為字沒有變,所以字塊內地址仍為2位,而主存容量可以轉為512K*32位=1024K*16位,這樣就可以得到共有1024K個字,所以主存地址有20位。同時,這裡改為四路相聯組對映,即每個Cache組內有4個Cache塊,所以共有$2^{10}/4=2^8$組,所以組地址為8位,這樣得到主存字塊標記有20-8-2=10位,得到如下主存字塊地址格式:

例3
設有一個1MB容量的儲存器,字長32位。問:按位元組編址和按字編址的定址範圍
解:
如果按位元組編址,因為儲存器容量為$1MB=2^{20}B$,一位元組=1B,$2^{20}B/1B=2^{20}$,所以定址範圍為$[0,(2^{20})-1]$
如果按字編址,因為儲存容量為$1MB=2^{20}B$,字長32位就表示1字=32bit=4B,$2^{20}B/4B=2^{18}$,所以定址範圍為$[0,(2^{18})-1]$
上面這個題目需要注意以下幾點:
- 定址範圍僅僅是一個數字範圍,不帶有單位
- 按位元組定址,指的是儲存空間的最小編址單位是位元組;按字編址,是指儲存空間的最小編址單位是字,以上題為例,總的儲存器容量是一定的,按字編址和按位元組編址所需要的編碼數量是不同的,按字編址由於編址單位比較大(1字=32bit=4B),從而編碼較少,而按位元組編址由於編碼單位較小(1位元組=1B=8bit),從而編碼較多
- 區分M和MB。 M為數量單位 ,1024=1K,1024K=1M; MB指容量大小 ,1024B=1KB,1024KB=1MB
例4
某計算機字長為32位,其儲存容量為16MB,若按雙字編址,它的定址範圍是多少?
解:
從題目中可得,1字=32bit=4B,按照雙字編址,也就是說一塊中有兩字,所以一塊有64bit=8B,因為$16MB=2^{24}B$,$2^{24}B/8B=2^{24}B/2^{3}B=2^{21}B$,所以定址範圍為$[0,(2^{21})-1]$
例5
某機字長為32位,儲存容量為64MB,若按位元組編址.它的定址範圍是多少?
解:
題目明確說,按位元組編址,1位元組=8bit=1B,儲存容量為$64MB=2^{26}B$,$2^{26}B/1B=2^{26}$,所以定址範圍為$[0,(2^{26})-1]$
常見問題解答
我在學習這部分內容的時候根本沒搞懂按字和按位元組編址,可能有很多人跟我一樣,故在此寫下他們的區別,以便以後做題不出錯
可以理解為,按位元組編址就是8bit=1B,按字編址就需要看題目中字長是多少位。
儲存器中有很多2進位制0,1碼,為了定位需要編碼,按位元組定址是每8bit一個單位,一個地址指向8位的2進位制碼,按字定址,字長不同,定址單位不同,一個地址指向一個字的2進位制碼,半字的話指向半字的2進位制碼。