重看計算機基礎1:數據線、地址線,按字、按字節尋址。


算到現在,編程也有十年了,越發意識到,如果對於理論嗤之以鼻,那也沒必要學計算機了。

所以,最近開始重讀基礎,希望不算太晚。

 

看了書和網絡上的blog,發現計算機組成原理中,最基本的幾個概念講得略有些晦澀。

比如:數據線、地址線,按字、按字節尋址。現做一些總結。

 

總線中的每根“線”,一次只能傳輸0/1,所以一根線能傳輸1位(bit)的數據,兩根線呢,能傳輸2位(bit)。

但是,需要注意的是1bit能表達0和1,所以1bit能表達2個數,所以,3bit能表達的數其實是2^3個,也就是8。

 

數據線是傳輸數據的,一塊32位(32bit)的CPU,內含一個32bit的數據寄存器(MDR),通常而言,就該有32根數據線,這樣才能保證一次傳輸32bit數據。(當然,如果有個計算器來幫忙算奇偶性,那么16根數據線傳輸32bit也沒有問題,或者用更大量的數據線,比如64位CPU跑32位程序,浪費一些數據線,也不是不存在的。這里只說通常情況)

 

數據存在存儲單元里,存儲單元是一個物理結構,它有一個地址,就像你要去參加面試,總得知道公司的地址和一張地圖才能找過去。所以,又出現了地址寄存器來存放這些地址,地址寄存器連接有地址線,如果有8根地址線,那么單次尋址,能表達的數據范圍是2^8,也就是說,8根地址線,單次能傳輸64種數據組合。

所謂的尋址范圍,說的就是最大的尋址能力,上面的8根線,以字節為尋址單位時,能找到64個字節,換言之,存儲器如果超出64byte,那么,剩下的就找不着了。

另一方面,如果存儲器容量是1MB(8Mbit),按字節尋址時,由於每個字節(8bit)一個地址,也就是說它需要8Mbit/8bit=1M個地址,1M=2^20,那么可知,只需要20根地址線,多了也浪費。

 

在一些尋址范圍的測試題里,一般有兩種考察方式:

一個是給出存儲器容量(比如1MB)和計算機的字長(比如32bit),然后詢問尋址范圍,這里其實隱含了條件“地址線管夠”。

一個是給出地址線數量(比如20根)和計算機的字長,然后詢問尋址范圍,這里隱含了條件“存儲器容量管夠”。

因為前提包含:沒人會設計出浪費存儲器\總線的結構,不需要考慮奇葩的設計

 

當然,出題方式是可以有變化的,比如不給出字長,給出數據線數量,基於“不需要考慮奇葩的設計”,那么數據線數量可以反推出字長,比如32跟數據線,那就一定是32位(因為你一次只能讀32bit的數據,存儲器自然也應該設計存儲單元寬度32)。

 

又有,按字尋址,而非按字符尋址,字(word)也就是存儲單元的單次存儲數據,字長也就是存儲單元的寬度,那么,32bit字長,就是4字節,64bit字長,就是8字節,那么字尋址范圍是需要字符尋址除以響應的數量。

32位字長情況下,1M的字符尋址范圍,就只有256K的字尋址范圍。

可以看到,這原本就是個文字游戲,只是考察你的熟練度而已,換個說法就更清晰了:

32位字長情況下,1M個字符,就是256K個字。

 

當然,從計算機結構角度去理解的話,是這樣的:

1、1M的字符尋址,需要20根地址線(2^20 = 1M)

2、理論上20根線,可以找到1M個地址,那么如果是按字,應該是可以具備2^20 * 4個地址,也就是4M。這是錯誤的

 3、實際上,不論尋址方式如何,你尋址最后要找到的是字符,所以如果用“按字尋址”,在找到字之后,還得找到字里的具體字符,那么就需要2根線,來表達字內的4個字符,這個叫做字內查找。

4、所以,按字尋址,你只能用到18根地址線。那么尋址范圍就是2^18,也就是256K。

 


免責聲明!

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



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