x86記憶體分段

x86架構中,存儲器分段(英語:Memory Segmentation)是在不改變16位段選擇符時,使用單個索引暫存器(保存了段內地址偏移值)所能夠定址的的存儲器範圍部分。也指在英特爾x86指令集體系結構下存儲器分段的實現方式。

基本介紹

  • 中文名:x86記憶體分段
  • 外文名:X86 Memory Segmentation
  • 定義x86指令體系下存儲器實現方式
  • 學科:計算機
  • 領域:計算機
  • 相關術語實模式
歷史,實模式,80286保護模式,80386保護模式,x86-64的64位模式,

歷史

1978年的Intel 8086開始引入了記憶體分段。這使得16位CPU可以訪問超過64 KB (65,536位元組)的記憶體,實際上8086 CPU到記憶體的地址匯流排是20位,即可訪問2=1MB記憶體。在16位模式,要讓應用程式使用多個存儲器分段(為了訪問比任一64K分段還要大的存儲器)是相當複雜。這個問題的根源在於沒有適當的適合做整個存儲器範圍的平面定址的地址算術指令。平面定址方式也可以乘法指令來完成,但這會導致較慢的程式運行速度。
1982年面世的80286處理器的實模式保護模式,以及80386及其後的處理器的虛擬86模式,一個分段的大小是64KiB(使用16位索引暫存器)。在Intelx86實模式下的分段架構的記憶體空間會有所重疊,這是一種不好的設計。 80286的保護模式下,16位的段暫存器中的13位(稱作段選擇符segment selector)是描述符表的條目(descriptor table entry)的索引;該條目包含了24位的段開始地址以及16位的段長度;段開始地址與段內偏移地址相加即為記憶體物理地址。16位段暫存器中的剩餘3位分別是全局/局部描述符表指示位、請求特權級(request privilege level)。
1985年面世的80386及其後續處理器的32位保護模式下,一個分段長度上限是2個粒度單位,粒度可以是1位元組或4K位元組,因此分段長度上限可以是4GB,這與索引暫存器是32位相配合。
隨著32位作業系統的推出,以及更舒適的32位平面存儲器模式,到1990年末期幾乎淘汰了使用分段定址。然而,使用32位平面存儲器模式產生的最多只能訪問4GB地址空間的限制並沒有遠離日常的使用。分段允許作業系統對每個進程虛擬定址空間的限制,最大可利用64GB的系統存儲器,但這種最終回歸到分段的尷尬,經常被引述為朝著64位處理器發展的動機。
2003年問世的x86-64架構下,強制實現了平面記憶體模型,但保留了使用段暫存器FS或GS的64位下的分段定址。

實模式

實模式與虛擬86模式下,一個段總是長64,536位元組(16位段內偏移地址)。在段暫存器內的16位段選擇符(segment selector)被解釋為20位線性地址空間的高16位,稱為段地址;其餘的低4位全為0。段地址與16位段內偏移地址相加產生線性地址,同時也是這種記憶體模式下的物理地址。 任何程式都可以訪問全部記憶體空間。沒有對記憶體的訪問許可權保護。

80286保護模式

Intel 80286處理器仍然使用16位段暫存器與16位的段內偏移地址,但保護模式下支持訪問2(16M)位元組的記憶體。16位段暫存器內不再是段地址,16位段暫存器的高13位被稱作段選擇符(segment selector),其值是到段描述符表的索引值。段描述符中包含了24位的段開始的基地址,20位的段長度。段開始地址與段內偏移地址相加即為記憶體物理地址。段的長度上限為2=1M位元組。

80386保護模式

Intel 80286處理器繼續使用286的分段保護模式,但段描述符中包含了32位的段開始的基地址。段內偏移地址也是32位。在分段轉址與物理地址之間又增加了一層分頁(paging)轉址。分段定址是不能關閉的。分頁可以使能或關閉(enabled or disabled),如果關閉就與286保護模式一樣。如果使用分頁機制,則由段開始的基地址與段內偏移地址相加得到的是線性地址(虛地址),線性地址還需要分頁轉址才得到記憶體物理地址。
386處理器增加了兩個段暫存器FS、GS,這兩個暫存器並無硬體綁定的用途。Windows作業系統在地址FS:0中保存了當前執行緒信息塊。Linux中GS指向了執行緒局部存儲
通過清除控制暫存器CR0中的最低位,可由386保護模式轉為實模式。
Linux作業系統在386保護模式下把段基址設為0,段長度設為4GiB,從而模擬了平面記憶體模型。

x86-64的64位模式

在x86-64體系結構64位的long mode,段暫存器CS, SS, DS, ES強制為0。段長度強制為2。形式上還有記憶體分段,但實際上所有記憶體都在唯一的一個分段中。段暫存器FS、GS可以有非0值,被作業系統用於其它用途。即硬體支持如“FS:[RAX]”這樣的暫存器間接定址

相關詞條

熱門詞條

聯絡我們