轉:Intel CPU 地址空間總結

來源:互聯網
上載者:User

標籤:

一、地址空間映射 

       這裡要說的是Intel構架下的CPU地址空間布局,注意這裡沒有說是記憶體位址空間布局。

       我們說的記憶體通常是指DRAM,DRAM相對於CPU也可以算是外部裝置,CPU地址空間是CPU訪問外部裝置過程中的一個概念,CPU除了訪問DRAM外還會訪問許多其他的裝置。可以粗略的認為CPU地址空間包含DRAM地址空間,但兩者卻是不同的概念。而且DRAM地址空間是由記憶體控制器直接存取的,由CPU間接訪問的。

       過去很長一段時間Intel CPU是32位的,也就是可以訪問到4GB的地址空間,但是當時的DRAM通常也就是512MB到2GB之間,現在假設DRAM是1GB,那麼就是3GB的地址空間是空的。在電腦裡面,地址也是資源。這空的地址空間就用來訪問外部裝置IO所用,這部分被稱為MMIO(Memory Mapped I/O)。MMIO的空間是很大的,它包含了PCI的配置空間(256MB或者更大),內建整合顯存(256MB,或者更大),還有其他很多東西 。所以這部分的大小是不容忽視的。

       現在的Intel CPU一般都是64位的,也就是可以訪問到64GB。而DRAM也是越來越大,以至於DRAM加上MMIO的空間超出了4GB,而MMIO的空間是不能隨意變更的。所以現在的做法就是將DRAM的一部分重新對應到4GB以上的空間,下面就以DRAM有5GB為情況,做一個例子。請看

                                 

中左邊是地址空間,右邊是DRAM空間,其中紅色的字型表示寄存器,可以在spec中找到該寄存器的說明,這幾個寄存器決定了整個地址空間的大的格局。這裡就簡要說明一下。

      TOLUD,指向32位地址,也就是4GB以內。它是一個分界線,在0-TOLUD之間為DRAM,TOLUD-4GB之間為MMIO空間。該值由BIOS指定。為了方便說明,假設TOLUD被指定為2GB。

      TOM,目前還不明確,我猜想應該是指實際實體記憶體的大小,“the total amount of populated physical memory”,比如TOM為5GB。可在原生BDFR(0,0,0,A0)驗證。

      REMAPBASE和REMAPLIMIT,也是36位,分別表示基址和上限地址。用於重新對應DRAM中被MMIO遮住的一部分空間,有2GB。該圖中將DRAM中遮住的部分重新對應到TOM的上方,所以REMAPBASE為5GB,REMAPLIMIT為7GB-1。

      TOUUD,36位地址,大小為REMAPLIMIT+1的位置,比如TOUUD應該在7GB的位置,可以和TOLUD做對比理解,TOLUD是4GB以內DRAM與MMIO的分界線,TOUUD可以理解為4GB-64GB之間DRAM與MMIO的分界線。

      以上是假設DRAM超出4GB的情況,假如DRAM只有3GB,而TOLUD指定為2GB呢?也就是2GB-3GB的DRAM被遮住。這時也是通過REMAPBASE和REMAPLIMIT將之重新導向到4GB的上方。再假設DRAM只有2GB,TOLUD為2GB呢?這時就不存在重新對應。 REMAPLIMIT小於REMAPBASE時(通常REMAPLIMIT為0),表示不使用重新對應。

      關於4GB以上的空間是如何訪問的,請查看該網頁說明:

      http://en.wikipedia.org/wiki/Physical_Address_Extension

二、地址空間布局

     這裡著重說明4GB以下的地址空間的布局情況。下面是我用visio畫的布局圖,其實也就是將spec裡說明的布局情況全部綜合到一張圖上,這也是前段時間總結出來的核心部分。

                             

       同樣的圖中紅色字型部分為寄存器,這些寄存器與地址空間布局有著密切的關係。這些寄存器的詳細說明可以參考spec。比如說“Egress Port Registers”這個4KB的視窗,會根據EPBAR的設定被放置到MMIO的任意一個DMI Interface的位置,但讓該視窗不能與其他任何視窗重疊。 

       另外我也將我所瞭解的情況說明一下。

 1.先看TOLUD-4GB的位置,可以看到有幾處都是DMI Interface(Subtractive Decode)。DMI是南橋與北橋的介面,訪問DMI,也就是訪問南橋。

      另外要解釋的是Substactive decode,在電腦中地址解碼有三種形式,當主裝置通過指定地址訪問匯流排上的從裝置,一個是Positive decode,有從裝置解碼後發現是訪問自己的,於是它就會響應,否則就沒有從裝置響應;一個是Negative decode,從裝置收到該地址經解碼後發現不屬於自己的位址範圍,從裝置就轉寄出去;一個是Subtractive decode,在4個刻度內沒有從裝置響應,該地址就會發送到擴充的匯流排上面解碼。

            

                          引自:http://www.microsoft.com/whdc/system/bus/pci/default.mspx

DMI Interface(Subtractive Decode)的意思就是CPU發送一地址先到北橋上解碼,如果該地址沒有北橋上的裝置佔用,那麼就用該地址就會被傳送到南橋上解碼,,也就是訪問南橋上的裝置。可以假想為一開始4GB空間都是DMI Interface(Subtractive Decode),然後0-TOLUD被DRAM聲明佔用,TOLUD-4GB也紛紛被各種裝置佔用,於是就剩下了支離破碎的幾個DMI Interface。(目前看上去這樣理解是通順的,但我希望它也是正確的)。 

     2.再來說明一下High BIOS。BIOS韌體地址分三段,這裡的High BIOS,後面的System BIOS,還有後面的Extended System BIOS。spec中已經說明,電腦啟動後一開始執行的指令就在High BIOS中。然而High BIOS在4GB的位置,電腦reset後進入的是實模式。Intel構架下一開始段地址隱藏的高位部分全部為1,所以儘管第一條指令的邏輯地址是F000:FFF0,但訪問的物理地址是FFFF_FFF0,這個地址比4G少16位元組,因此,BIOS一般在此處只放置一條跳轉指令,遠跳轉或近跳轉,在EFI BIOS中,正是通過一條近跳轉讓BIOS不用進入實模式,直接建立描述符表,最終進入Flat Mode(屬於保護模式)。關鍵的地方在於地址空間中640KB-1MB(PAM0-PAM6)之間是可程式化的,可以指定為唯讀、唯寫、讀寫、禁用,這些都是針對DRAM的。開機之後這段空間是被禁用的,而DRAM是北橋的裝置,禁用DRAM,那麼這段地址空間就是發送到南橋去解碼(對照上面關於DMI Interface的說明來解釋),結果就解碼到了High BIOS對應的韌體上面。所以終究還是在High BIOS中執行指令。

     可以用RW驗證將PAM0(PCI 0/0/0 90H)的bit[5:4]設定為00,那麼就發現, 0F0000-0FFFFF之間的資料與FFFF_0000-FFFF_FFFF之間的資料竟然是一樣的。也證明在DRAM禁用的情況下,兩部分地址是被解碼到同一個地方的。

     假如PAM0被設為唯讀或者讀寫,則讀取的是DRAM上的資訊,資料內容是System Bios。為什麼System Bios明明在韌體中卻跑到DRAM中來呢?shadow的時候,只是北橋在負責地址decode,把這段地址指向了rom而不是把rom裡面的資料copy到了DRAM裡面。這是概念上的問題。實際上,BIOS在做的時候一般都是先把rom裡面的資料copy到低端記憶體,(0~640K)中的某一個或者兩個段裡面,然後再解壓縮出來的資料分別放到對應的segment裡面去。比如E000,F000等。然後再把整個map關掉。讓地址decode的時候對應的是實際的DRAM而不是ROM了。 

      3.接著說一下PCI配置空間。可以看到它的基址是由PCIEXBAR決定的,用RW軟體驗證PCI資料可以用Memory的方式看到。各個PCI的地址空間可以用這個式子計算:PCI Express Base Address + Bus Number x 1 MB +Device Number x 32 kB + Function Number x4 kB。打一個比方,我的電腦的PCIEXBAR中看到基址為F400_0000,當我要訪問bus(0)device(1F)function(3)時,通過計算可以得到地址為F40F_B000,於是從PCI 0/1F/3中看到的資料與從Memory的F40F_B000位置看到的資料是一樣的。注意查看的時候要將PCIEXBAR的bit0置1。

PCIEXBAR—PCI Express Register Range Base Address
B/D/F/Type: 0/0/0/PCI
Address Offset: 60-67h
Default Value: 00000000E0000000h
Access: RO, R/W/L, R/W/L/K
Size: 64 bits 

     4.要說明的大概就這些,其他的各種地址視窗的作用、地址空間的位置,都可以在spec中很輕易地找到。而且圖中也標註了各個區間有關的寄存器。

 

 

原文連結:

http://www.biosren.com/viewthread.php?tid=3200&extra=&ordertype=1&page=1

轉:Intel CPU 地址空間總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.