物理地址是怎么确定的?以8086为例
物理地址
我們知道,CPU 訪問內存單元時,要給出內存單元的地址。所有的內存單元構成的存儲空間是一個一維的線性空間,每一個內存單元在這個空間中都有唯一的地址,我們將這個唯一的地址稱為物理地址。
8086是16位結構的CPU,這也就是說,在8086內部,能夠一次性處理、傳輸、暫時存儲的信息的最大長度是16位。內存單元的地址在送上地址總線之前,必須在CPU中處理、傳輸、暫時存放。
而上一篇我們講到,地址總線的寬度決定CPU的尋址能力。8086有20根地址總線,可以傳送20位地址,所以其尋址能力為2^20B,即1M。
很自然地,這里產生了矛盾:如果只是簡單地將地址從內部發出,那么8086只能發出16位的地址,表現的尋址能力也就只有2^16byte,即64KB。這這與1M的尋址能力不符!
那么如何解決該矛盾呢?
在正式討論之前,我們換一個話題。如下圖所示,假如大熊要去圖書館,詢問胖虎圖書館的具體位置(物理地址),于是胖虎告訴他:
(1)你可以從從學校走2826米能到圖書館;
(2)也可以從學校走2000米到體育館,再走826米就是圖書館。
顯然,兩種方式大熊都能找到圖書館的位置。
那么現在加一些限制條件,比如大熊和胖虎之間用如下的方格紙進行通信,那么按照第一種方式直接寫入2826表示圖書館的位置就能準確定位。
如果現在再加一個限定條件:假如方格個數只有三個,如何才能定位圖書館的位置呢?
只能采用第二種方式咯:先找到體育館,再通過偏移的826米找到圖書館。
概括表述為:先用200米表示起始位置,我給它起個名字叫段地址,將200米乘以10的位置我們叫它基地址,基地址再加上偏移位置826米,正好是2826米,也就是圖書館的位置!
好了,我們再回到8086CPU確定物理地址的方式上來,根據上面的例子我們就能解決CPU內部與數據總線的矛盾。8086CPU采用一種在內部用兩個16位地址合成的方法來形成一個20位的物理地址。
(1) CPU中的相關部件提供兩個16位的地址,一個稱為段地址,另一個稱為偏移地址;
(2)段地址和偏移地址通過內部總線送入一個稱為地址加法器的部件;
(3)地址加法器將兩個16位地址合成為一個20位的物理地址;
(4)地址加法器通過內部總線將20位物理地址送入輸入輸出控制電路;
(5)輸入輸出控制電路將20位物理地址送上地址總線;
(6)20位物理地址被地址總線傳送到存儲器。
動圖演示如下:
地址加法器采用物理地址=段地址x16+偏移地址的方式合成物理地址,其思想和上述例子中找圖書館的位置時如出一轍的,只不過從10進制變成了計算機的16進制。
當個體受限時,借助外力以及互相配合則顯得尤為重要!
君子性非異也,善假于物也?!髯?/p>
兩點注意:
(1)段地址×16必然是16的倍數,所以一個段的起始地址也一定是16的倍數;
(2)偏移地址為16位,16位地址的尋址能力為64KB,所以一個段的長度最大為64KB。
總結
- CPU將若干地址連續的內存單元看作一個段,用段地址x16定位段的起始地址(基礎地址),用偏移地址定位段中的內存單元;
- 物理地址=段地址x16+偏移地址
總結
以上是生活随笔為你收集整理的物理地址是怎么确定的?以8086为例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯QQ空间穿越时光轴3D特效
- 下一篇: uniapp扫描二维码问题