2010-07-11 77 views
2

昨天,當我在考慮Why can’t OS use entire 64-bits for addressing?時,我發現了另一個有趣的事情。以英特爾酷睿2雙核處理器爲例。需要更多關於處理器地址行的說明

Intel Core 2 Duo Processor E8000 and E7000 Series - Datasheet的「4.2 Alphabetical Signals Reference」我知道它有36條地址線& 64條數據線。數據表將地址線稱爲A [35:3],數據線稱爲D [63:0]。

這意味着什麼?這是我從上面的理解(很少有沒有回答的問題):

  1. 因爲有36條地址線。總尋址內存爲2^36 = 64GB,每個物理內存位置(字節)以36位數尋址。
  2. 因爲,沒有提到A [2:0]。這意味着在將虛擬地址轉換爲物理地址之後(在地址表的幫助下),MMU(尋呼單元更具體)只將33個最高有效位放在地址線A [35:3]上。 RAM發送全部8個可能的字節(3個LSB,A [2:0])即對於這8個字節範圍內的任何請求。 RAM發送相同的8字節數據。對?我想這是爲了提高效率。
  3. 接下來會發生什麼?我的意思是MMU需要1個字節的數據,但RAM發送8個字節。它將如何處理它?
  4. 自啓用英特爾PAE後,此地址總線寬度是36位嗎?
  5. 我在新的處理器數據表(Intel® Core™ i7 Processor Extreme Edition)中找不到地址總線和數據總線寬度。 :(幫幫我!
+0

想一想 - 數據總線是64位(8字節)寬。這不是一個真正的編程問題,所以你可能想把它帶到superuser.com。 – 2010-07-11 20:26:50

+0

@Paul R:思考不是問題。問題是我的思想有多準確。這就是爲什麼而不是直接問我的問題。我寫了我認爲的 – claws 2010-07-11 21:53:42

回答

2

該芯片的字節使能(BE)引腳指定的8字節塊的位實際上是相關的。

要訪問地址爲0x1你把所有零上A [ 35:3]並設置BE [1](我可能有針腳編號和極性BE有點不對,但這個想法仍然是正確的)

要訪問字節0x3:0x0你把所有的零置於A [ 35:3]並設置BE [3:0]。

這應該回答問題1,2和3.

關於問題4,事實上PAE可以讓你使用36位地址。在以後的處理器中,使用64位模式分頁可以實現相同的功能。

不能與5幫助...

0

約5: 核心i7的架構使用3(片)存儲器控制器(對於每個通道一個控制器)與64位的每個信道的寬度。

但是當然你不能在那裏使用3 * 64位,因爲SSE單元與L1緩存(當然是兩個64位Chache線)的128位線相連。

這三個通道僅用於同時快速預取不同的地址。

但是在GPR的u上只能使用64位(因爲它是64位結構)。

地址空間也應該是36位,因爲如果你永遠不能連接這麼多的內存,你會需要其他位。

+0

沒有意義的任何冒犯,看起來你對內存尋址有不完全的理解。 GPR中的地址只是地址的一部分。爲此,您必須添加段基線以獲取線性地址,並且需要通過頁錶轉換爲物理地址。頁表的構建方式使您可以創建最多64位寬的地址,足以覆蓋PAE所需的36位數據。 – 2010-07-18 06:54:06

+0

當你說你無法訪問3 * 64位時,你也錯了。當你有多個線程或內核時,這使他們能夠並行訪問內存,而不是按順序訪問內存,從而提高性能。 – 2010-07-18 06:58:01

+0

我寫了同樣的...這裏「三個通道只能用於同時快速預取不同的地址」,我只是說,你到底在哪裏進行SSE操作,或者是什麼使用3 * 64位?沒有任何地方,只有128位操作可用(SSE的東西) – Quonux 2010-07-18 13:04:37