內存編址和關於按字尋址和按字節尋址的理解


我們先從一道簡單的問題說起!

     設有一個1MB容量的存儲器,字長32位,問:按字節編址,字編址的尋址范圍以及各自的尋址范圍大小? 

     如果按字節編址,則 

                     1MB = 2^20B 

                     1字節=1B=8bit 

                     2^20B/1B = 2^20 

     地址范圍為0~(2^20)-1,也就是說需要二十根地址線才能完成對1MB空間的編碼,所以地址寄存器為20位,尋址范圍大小為2^20=1M

     如果按字編址,則

                      1MB=2^20B

                      1字=32bit=4B

                     2^20B/4B = 2^18   

      地址范圍為0~2^18-1,也就是說我們至少要用18根地址線才能完成對1MB空間的編碼。因此按字編址的尋址范圍是2^18

以上題目注意幾點:

 

1.區分尋址空間與尋址范圍兩個不同的概念,尋址范圍僅僅是一個數字范圍,不帶有單位

而尋址范圍的大小很明顯是一個數,指尋址區間的大小

  而尋址空間指能夠尋址最大容量,單位一般用MB、B來表示;本題中尋址范圍為0~(2^20)-1,尋址空間為1MB。

 

2.按字節尋址,指的是存儲空間的最小編址單位是字節,按字編址,是指存儲空間的最小編址單位是字,以上題為例,總的存儲器容量是一定的,按字編址和按字節編址所需要的編碼數量是不同的,按字編址由於編址單位比較大(1字=32bit=4B),從而編碼較少,而按字節編址由於編碼單位較小(1字節=1B=8bit),從而編碼較多。

 

3.區別M和MB。

                        M為數量單位。1024=1K,1024K=1M

                        MB指容量大小。1024B=1KB,1024KB=1MB.

 

轉自 http://blog.csdn.net/lishuhuakai/article/details/8934540

 

 

2. 內存編址

 

前面我們知道了DRAM顆粒以及內存模塊是如何擴展字長和容量的。一個內存可能是8位,也可能是64位,容量可能是1M,也可能是1G。那么內存是如何編地的呢?和地址總線,計算機字長之間又有什么關系呢?

 

 

2.1 字長

 

計算機在同一時間內處理的一組二進制數稱為一個計算機的“字”,而這組二進制數的位數就是“字長”。。通常稱處理字長為8位數據的CPU叫8位CPU,32位CPU就是在同一時間內處理字長為32位的二進制數據。 所以這里的字並不是我們理解的雙字節(Word)而是和硬件相關的一個概念。一般來說計算機的數據線的位數和字長是相同的。這樣從內存獲取數據后,只需要一次就能把數據全部傳送給CPU。

 

 

2.2 地址總線

 

前面我們已經介紹過地址總線的功能。地址總線的數量決定了他最大的尋址范圍。就目前來說一般地址總線先字長相同。比如32位計算機擁有32為數據線和32為地線,最大尋址范圍是4G(0x00000000 ~ 0xFFFFFFFF)。當然也有例外,Intel的8086是16為字長的CPU,采用了16位數據線和20位數據線。

 

 

2.3 內存編址

 

從前面我們知道一個內存的大小和它芯片擴展方式有關。比如我們內存模塊是采用 16M*8bit的內存顆粒,那么我們使用4個顆粒進行位擴展,成為16M*32bit,使用4個顆粒進行字容量擴展變為64M*32bit。那么我們內存模塊使用了16個內存顆粒,實際大小是256MB。

 

我們需要對這個256M的內存進行編址以便CPU能夠使用它,通常我們多種編址方式:

  1. 按字編址:    對於這個256M內存來說,它的尋址范圍是64M,而每個內存地址可以存儲32bit數據。
  2. 按半字編址:對於這個256M內存來說,它的尋址范圍是128M,而每個內存地址可以存儲16bit數據。
  3. 按字節編址:對於這個256M內存來說,它的尋址范圍是256M,而每個內存地址可以存儲8bit數據。

 

對於我們現在的計算機來說,主要都是采用按字節編址的方式。所以我們可以把內存簡單的看成一個線性數組,數組每個元素的大小為8bit,我們稱為一個存儲單元。這一點很重要,因為后面討論的所有問題內存都是以按字節編址的方式。 這也是為什么對於32位計算機來說,能使用的最多容量的內存為4GB。如果我們按字編地址,能使用的最大內存容量就是16GB了。

 

於是很容易想到一個問題,為什么我們要采用字節編址的方式呢?關於這個問題,我在網上基本沒有找到答案,甚至都找不到問這個問題的。所以這里沒法給出答案,為什么為什么呢? 麻煩知道的朋友告訴我哈。

 

另一方面的問題是,內存編址方式和DRAM芯片是否有關呢? 我認為還是有一定關系。比如我DRAM的芯片是8M*8bit,那么芯片最小的存儲單位就是8bit,那么我們內存編址就不能按照半個字節來編址。否則內存取出8bit,根本不知道你要那4bit傳給CPU。也有一種說法是現在的DRAM芯片cell都是8bit,所以采用按字節編址。另一方面應該也和數據總線位寬有關。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM