算到如今,編程也有十年了,愈加意識到,若是對於理論嗤之以鼻,那也不必學計算機了。面試
因此,最近開始重讀基礎,但願不算太晚。編程
看了書和網絡上的blog,發現計算機組成原理中,最基本的幾個概念講得略有些晦澀。網絡
好比:數據線、地址線,按字、按字節尋址。現作一些總結。測試
總線中的每根「線」,一次只能傳輸0/1,因此一根線能傳輸1位(bit)的數據,兩根線呢,能傳輸2位(bit)。設計
可是,須要注意的是1bit能表達0和1,因此1bit能表達2個數,因此,3bit能表達的數實際上是2^3個,也就是8。blog
數據線是傳輸數據的,一塊32位(32bit)的CPU,內含一個32bit的數據寄存器(MDR),一般而言,就該有32根數據線,這樣才能保證一次傳輸32bit數據。(固然,若是有個計算器來幫忙算奇偶性,那麼16根數據線傳輸32bit也沒有問題,或者用更大量的數據線,好比64位CPU跑32位程序,浪費一些數據線,也不是不存在的。這裏只說一般狀況)遊戲
數據存在存儲單元裏,存儲單元是一個物理結構,它有一個地址,就像你要去參加面試,總得知道公司的地址和一張地圖才能找過去。因此,又出現了地址寄存器來存放這些地址,地址寄存器鏈接有地址線,若是有8根地址線,那麼單次尋址,能表達的數據範圍是2^8,也就是說,8根地址線,單次能傳輸64種數據組合。it
所謂的尋址範圍,說的就是最大的尋址能力,上面的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個字。
固然,從計算機結構角度去理解的話,是這樣的:
一、1M的字符尋址,須要20根地址線(2^20 = 1M)
二、理論上20根線,能夠找到1M個地址,那麼若是是按字,應該是能夠具有2^20 * 4個地址,也就是4M。這是錯誤的。
三、實際上,不論尋址方式如何,你尋址最後要找到的是字符,因此若是用「按字尋址」,在找到字以後,還得找到字裏的具體字符,那麼就須要2根線,來表達字內的4個字符,這個叫作字內查找。
四、因此,按字尋址,你只能用到18根地址線。那麼尋址範圍就是2^18,也就是256K。