題 內存地址的大小和地址總線的大小有關嗎?


我的問題是關於實際/物理地址的大小與地址總線的大小之間的關係。

  1. 如果我理解正確,實際/物理地址大小是 在設計計算機體系結構時確定。
  2. 地址總線的大小必須與位數相同 在一個地址?如果不是,這是否意味著必須通過較小的地址總線多次傳輸物理地址?

注意

  • 我不是在談論字大小(即CPU的大小) 一次過程),這可能與兩者都不同 實際/物理地址大小和地址總線大小。
  • 我不是在談論使用段和偏移地址 代表物理地址。

4
2017-08-04 00:54


起源




答案:


物理地址總線的位寬可以更多 要么 比特定存儲器地址中的位寬小,因為有各種硬件黑客可以設計到系統中以允許奇怪的尋址模式。例如,在某些32位系統中,地址總線的寬度為52位。作為另一示例,一些CPU指令可以通過使用基地址和查找表的組合來解碼更長的地址。

在一天結束時,從CPU解釋內存地址是硬件的工作。 CPU只是計算它需要的內存地址,並將其發送到主板的內存控制器(記住,我們說的是硬件,而不是軟件,請看底部的最後一個註釋)。內存控制器的工作是解釋該地址,並將適當的數據放在內存總線上。

由於這都是在硬件級別上處理的,因此實際上可以 增加 使用a的一些低位存儲器系統的物理地址空間 物理地址擴展。同樣,如何處理這些擴展地址是系統/硬件實現方式的一部分。

最後,為了給我上面提到的硬件黑客提供更多的優點,一個很好的例子是 內存映射輸入/輸出 (簡稱MMIO)。這允許CPU訪問兩個外圍設備  RAM通過地址總線本身。通常這是通過高階內存地址完成的,以避免低階地址衝突。然而,這引起了眾所周知的 3 GB內存屏障 在32位Windows操作系統的所有消費者變體中。同樣,這只是為了向您展示硬件級別的可能性。


從高級程序員的角度來看,這與指針變量無關。它們始終具有相同的數據大小,因為這些地址擴展由操作系統和/或硬件本身為您處理。指針大小,地址和偏移量由編譯器設置/計算。


3
2017-08-04 01:00



謝謝! (1)在你的最後一段中,“指針變量”和“指針大小”之間有什麼區別?你提到他們是在不同層面處理的。 (2)我想知道你在哪裡學到這些東西?是否有像教科書,網站這樣的參考文獻? - Tim
(3)物理地址必須多次通過較小的地址總線傳輸嗎? - Tim
我從學校和自主學習中學到了很多東西(我從未讀過,但我聽說過 這是一個很棒的資源)。如果您需要快速但高級的技術詞典, 看一下這個。除此之外,如果您對任何事情感到好奇,Google會帶您到互聯網上那些您從未知道存在的奇怪地方;) - Breakthrough
(1) 指針變量表示任意數據類型的存儲器地址(表示為指針的類型)。無論基礎數據類型的大小如何,指針大小通常與任何系統上的大小(以字節為單位)相同,因為它只表示內存地址。 (2) 在微控制器上學習裝配,它會教你更多,然後你想知道一台電腦。我從微處理器和微型計算機課程(我們使用的是Motorola 68HC12)中學到了大部分知識。 - Breakthrough
@Tim很抱歉繼續向你發送評論,但是 這是參考手冊 對於我提到的微控制器。關於如何佈局處理器,如何處理事物等,它會經歷很多有用的信息。我會承認,在開始閱讀之前,了解微控制器或彙編語言有所幫助,儘管你可能通過它學習。 - Breakthrough


要理解的一點是,所有較大的現代計算機都是內存映射的。程序“地址空間”(基本上由指針的大小決定)可以大於或小於物理地址空間(由可能被尋址的RAM量決定)。中間位於一層或多層地址映射邏輯,從“邏輯”地址轉換為“物理”地址。這支持虛擬內存“分頁”(其中特定的內存頁面可以在沒有被最近引用時被“分頁”到磁盤驅動器)並且它還支持允許多個進程/任務各自具有它們自己的“地址空間”。

除了以上(特別是在引腳有限的微處理器上),從處理器到存儲器組的地址“總線”可以“多路復用”,使得地址在兩個獨立的周期中發送出去,首先是高半部分。例如,然後是低半部分。事實上,一些內存模塊是在考慮到這一點的情況下構建的,因為它們同樣會“復用”進入的地址。


1
2017-08-04 02:12



虛擬存儲器(和分頁)由操作系統在軟件中實現,並且與硬件如何實現邏輯/物理地址轉換無關。 - Breakthrough
在操作系統中實現,是的,但遠非獨立於地址轉換機制。至少,如果沒有某種地址轉換機制,您就無法擁有虛擬內存和分頁,並且該機制決定了頁面大小和內存模型的許多其他屬性。 - Daniel R Hicks