亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問(wèn)板塊 發(fā)新帖
查看: 5398 | 回復(fù): 13
打印 上一主題 下一主題

x64存儲(chǔ)管理機(jī)制初窺 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-12-03 15:14 |只看該作者 |倒序?yàn)g覽

前幾天,上這問(wèn)x64存儲(chǔ)管理機(jī)制,經(jīng)prolj和mik指點(diǎn),去找intel手冊(cè)和AMD手冊(cè)看,看完之后把我的理解寫下,
如有什么理解偏差之處,還望各位不要笑話,畢竟本人英語(yǔ)也是cai啊,  

1.長(zhǎng)模式(long mode)
  在AMD64架構(gòu)的長(zhǎng)模式中包括兩個(gè)子模式:64bit模式和compatibility模式。
  ● 64bit模式:在此模式中虛擬地址空間使用平坦(flat)模式,段寄存器包括CS,DS,ES,SS全部清零(FS,GS除外,在線性地址計(jì)算時(shí),提供額外
  的base寄存器尋址某些OS的系統(tǒng)數(shù)據(jù)結(jié)構(gòu)),
  能為64bit的OS和應(yīng)用程序提供64位尋址支持。
  ●compatiblity模式:在此模式中使用與lagecy保護(hù)模式一樣的存儲(chǔ)管理模式,為的是平滑運(yùn)行32bit
  和16bit的應(yīng)用程序,無(wú)需重新編譯
  注意:在長(zhǎng)模式中不支持實(shí)模式和虛擬8086模式。
  圖

  由于在64bit模式下使用flat模式,所以無(wú)lagecy保護(hù)模式下的分段管理模式,所以虛擬地址直接對(duì)應(yīng)線性地址。所以x64的分頁(yè)
  管理模式才是64bit下的重頭戲
  
  2.x64分頁(yè)管理模式
  如下圖,是x86-64下的所有頁(yè)大小和物理地址大小的匯總
  圖
  在x64下,理論上可以通過(guò)使用PAE(物理地址擴(kuò)展)分頁(yè)結(jié)構(gòu)支持64bit的線性地址到52bit物理地址的映射的,但在對(duì)這一架構(gòu)的首次實(shí)現(xiàn)中,
  只實(shí)現(xiàn)了48位的線性地址到40位物理地址的映射。現(xiàn)在你可以通過(guò)CPUID指令查看自己的cpu所支持的最大物理地址(MAXPHYDDR).
  大家一定還記得在lagecy保護(hù)模式下通過(guò)PAE功能來(lái)訪問(wèn)超過(guò)32bit(36bit)的物理地址,但是在x64模式下的PAE與先前的PAE是不一樣的!
  從線性地址到物理地址的轉(zhuǎn)換中用到了四級(jí)頁(yè)數(shù)據(jù)結(jié)構(gòu),一個(gè)新的頁(yè)表數(shù)據(jù)結(jié)構(gòu)---PML4被引入用來(lái)指向頁(yè)目錄指針表。PML4表
  只能在x64模式下使用。而且頁(yè)目錄表指針從原來(lái)的4個(gè)項(xiàng)增加到了512個(gè),所以要從線性地址中分配9bit用來(lái)索引PDP表(原來(lái)是2bit)。
  PDE和PTE的大小保持不變。所以我們可以看到PML4+PDP+PDE+PTE+page offset=48bit,高16bit保留(其實(shí)是用以符號(hào)擴(kuò)展,下面將看到
  符號(hào)擴(kuò)展的用途)。
  CR3指向了PML4的基地址。
  需要注意的是在使用x64模式之前,必須使CR4.PAE=1(PAE用來(lái)擴(kuò)展PDE和PTE至64bit)。如果你在未使CR4.PAE=1之前,企圖開啟
  x64模式的話,會(huì)引發(fā)#GP異常。
  我們從上圖還可以看到頁(yè)大小的選擇完全取決于PDE.PS(但我并沒(méi)有在文檔中看到ps位,是直接在文檔中置1或0),無(wú)視CR4.PSE的存在。
  2.1x64分頁(yè)管理(4kb)
  上圖再說(shuō)
  圖
  ●sign extended--符號(hào)擴(kuò)展位
  ●PML4 entry--在線性地址39~47bit用于索引PML4 entry,指向PDP
  ●PDP entry--在線性地址的30~38bit用來(lái)索引PDP entry,指向PDE
  ●PDE entry--在線性地址的21~29bit用來(lái)索引PDEentry,指向PTE
  ●PTE entry--在線性地址的12~20bit用來(lái)索引PTE entry,指向page offset
  ●page offset--在線性地址的0~11bit提供在頁(yè)中的offset
  2.2x64分頁(yè)管理(2mb)
  圖
  我們可以看到與4kb的頁(yè)相比少了PTE,page offset從原來(lái)的12bit增加到了21bit
  
  下面我們來(lái)看看各頁(yè)表項(xiàng)的內(nèi)部結(jié)構(gòu)
  圖(4kb)
  上圖看到,用上述方法可以得到512×512×512×512=2^36個(gè)頁(yè)面,2^36*4kb=2^48個(gè)線性地址
  圖(2MB)
  上圖看到,用上述方法可以得到512×512×512=2^27個(gè)頁(yè)面,2^27*2mb=2^48個(gè)線性地址
  0bit:P位,即存在位,表示由項(xiàng)所指的頁(yè)面或頁(yè)表當(dāng)前是否加載到了物理存儲(chǔ)器中,如不存在,可以通過(guò)引發(fā)#PF異常從磁盤中
  加載到物理存儲(chǔ)器中
  1bit:R/W,即讀寫位,為頁(yè)表指定讀寫特權(quán),當(dāng)置位時(shí)可讀可寫;清零是只讀
  2bit:用戶/系統(tǒng)位,即為頁(yè)表指定系統(tǒng)還是普通用戶特權(quán)
  3bit:頁(yè)面通寫,指定高速緩存寫策略是回寫還是通寫
  4bit:高速緩存禁止位,當(dāng)置位時(shí)禁止相關(guān)的頁(yè)面和頁(yè)表進(jìn)行高速緩存,反之,可以
  5bit:訪問(wèn)位,當(dāng)置位時(shí)表示已經(jīng)被訪問(wèn),反之,沒(méi)有
  6bit(非PTE或PDE(2MB)):可用位
  6bit(PTE或PDE(2MB)):D位,dirty,即臟位,置位時(shí)表示頁(yè)面被寫過(guò)
  7~8bit(非PTE或PDE(2MB)):0
  avail:系統(tǒng)程序員可用
  G:全局標(biāo)志
  PAT:頁(yè)表屬性
  各種base address是用來(lái)得到下一級(jí)表的基地址的,
  最后的物理地址=page base address*2^12(2^21)+2^12(2^21),而page base address的大小取決于你的cpu的最大物理地址了。
  3.最后,我來(lái)看一看sign extended會(huì)形成什么效果。
  由于sign extended的作用會(huì)將線性地址分成相同大小的兩段,從0至00007FFF`FFFFFFFF,
  以及從 FFFF8000`00000000至FFFFFFFF`FFFFFFFF總計(jì)256TB的地址范圍,這非常符合操作系統(tǒng)的習(xí)慣。
  這種“古怪”的規(guī)則為日后擴(kuò)展到真正的64位尋址保留了一個(gè)重要的特性:很多的操作系統(tǒng)(包括但不限于Windows NT系列)
  將地址空間的高半部分(被稱作內(nèi)核空間)留給自己,將低半部分(用戶空間)留給應(yīng)用程序代碼、用戶態(tài)棧、堆和其他數(shù)
  據(jù)區(qū)。這種設(shè)計(jì)保證了每一個(gè)符合AMD64的實(shí)現(xiàn)都擁有兩個(gè)內(nèi)存片段:低半段從00000000`00000000開始,
  隨著更多的虛擬地址位變得可用而“向上生長(zhǎng)”;高半部分被“懸掛”在地址空間的頂部而“向下生長(zhǎng)”。同樣,
  將未被使用的地址位內(nèi)容固定下來(lái)防止被操作系統(tǒng)用作標(biāo)志位、特權(quán)級(jí)標(biāo)號(hào)等其他用途,是為了避免當(dāng)架構(gòu)擴(kuò)展至52,
   56, 60 和64位的時(shí)候出現(xiàn)問(wèn)題。
  圖
參考資料:
  1.http://zh.wikipedia.org/zh-cn/X86-64
  2.intel手冊(cè)
  3AMD手冊(cè)
  


[ 本帖最后由 child_z 于 2009-12-3 22:12 編輯 ]

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2009-12-03 15:17 |只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2009-12-03 15:18 |只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2009-12-03 15:27 |只看該作者
原帖由 謝哥哥 于 2009-12-3 15:17 發(fā)表
我們都是好孩子。

怎么快?本來(lái)想自己頂?shù)模荒銚屜攘?/td>

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2009-12-03 17:00 |只看該作者
彩圖用什么畫的?挺鮮艷的?醋诸}是XP下面的。我只會(huì)用pgf/tikz,據(jù)說(shuō)這個(gè)Asymptote可以達(dá)到專業(yè)效果,也很易學(xué),類C語(yǔ)法。
mik對(duì)x64那可不是一般的熟悉啊,這是不用說(shuō)的秘密。
===============================================
x64的處理器,加電的時(shí)候還是real mode的,然后跳轉(zhuǎn)成compatiblity/IA32 mode,最后再跳到long mode
lz可以對(duì)這方面了解一下,寫點(diǎn)兒東西,網(wǎng)上前兩年這方面的東西還少。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2009-12-03 21:33 |只看該作者

回復(fù) #5 prolj 的帖子

1.彩圖并非本人所畫,來(lái)源于http://zh.wikipedia.org/zh-cn/X86-64
2.mik簡(jiǎn)直把pc平臺(tái)下的底層原理翻了個(gè)遍,好像還有涉及powerpc架構(gòu)的,厲害~
3.網(wǎng)上關(guān)于x64的一些實(shí)現(xiàn)原理確實(shí)很少(應(yīng)該說(shuō)是在國(guó)內(nèi)很少),我其實(shí)被逼看手冊(cè)的。
4.您說(shuō)的pgf/tikz我沒(méi)用過(guò),嘻嘻,不過(guò)好像是很強(qiáng)大的繪圖工具,學(xué)習(xí)一下,將來(lái)好辦事

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2009-12-03 21:52 |只看該作者
你的字搞得太小了吧

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2009-12-03 21:57 |只看該作者

回復(fù) #7 mik 的帖子

好像是小了點(diǎn)啊,呵呵

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2009-12-03 22:09 |只看該作者
上面的彩圖中,所描述的 noncanonical address 是不對(duì)的。

地址中只要符合,高 16 是 0 或 1 ,它就屬于 canonical address

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2009-12-03 22:16 |只看該作者

回復(fù) #9 mik 的帖子

符號(hào)擴(kuò)展不是通過(guò)第47位來(lái)的嘛?比如0000FFFF_FFFFFFFF肯定是不行的啊

[ 本帖最后由 child_z 于 2009-12-3 22:23 編輯 ]
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP