特黄特色三级在线观看免费,看黄色片子免费,色综合久,欧美在线视频看看,高潮胡言乱语对白刺激国产,伊人网成人,中文字幕亚洲一碰就硬老熟妇

學習啦 > 學習電腦 > 網(wǎng)絡知識 > 網(wǎng)絡基礎(chǔ)知識 > 虛擬地址空間映射到物理地址空間

虛擬地址空間映射到物理地址空間

時間: 春健736 分享

虛擬地址空間映射到物理地址空間

  學習啦小編整理了虛擬地址空間映射到物理地址空間的相關(guān)資料。供大家參考!

  虛擬地址空間映射到物理地址空間參考如下

  當處理器讀或?qū)懭雰?nèi)存位置時,它會使用虛擬地址。作為讀或?qū)懖僮鞯囊徊糠?,處理器將虛擬地址轉(zhuǎn)換為物理地址。通過虛擬地址訪問內(nèi)存有以下優(yōu)勢:

  程序可以使用一系列相鄰的虛擬地址來訪問物理內(nèi)存中不相鄰的大內(nèi)存緩沖區(qū)。

  程序可以使用一系列虛擬地址來訪問大于可用物理內(nèi)存的內(nèi)存緩沖區(qū)。當物理內(nèi)存的供應量變小時,內(nèi)存管理器會將物理內(nèi)存頁(通常大小為 4 KB)保存到磁盤文件。數(shù)據(jù)或代碼頁會根據(jù)需要在物理內(nèi)存與磁盤之間移動。

  不同進程使用的虛擬地址彼此隔離。一個進程中的代碼無法更改正在由另一進程或操作系統(tǒng)使用的物理內(nèi)存。

  進程可用的虛擬地址范圍稱為該進程的“虛擬地址空間”。每個用戶模式進程都有其各自的專用虛擬地址空間。 對于 32 位進程,虛擬地址空間通常為 2 GB,范圍從 0x00000000 至 0x7FFFFFFF。對于 64 位進程,虛擬地址空間為 8 TB,范圍從 0x000'00000000 至 0x7FF'FFFFFFFF。一系列虛擬地址有時稱為一系列“虛擬內(nèi)存”。

  此圖說明了虛擬地址空間的一些重要功能。

  該圖顯示了兩個 64 位進程的虛擬地址空間:Notepad.exe 和 MyApp.exe。每個進程都有其各自的虛擬地址空間,范圍從 0x000'0000000 至 0x7FF'FFFFFFFF。每個陰影框都表示虛擬內(nèi)存或物理內(nèi)存的一個頁面(大小為 4 KB)。注意,Notepad 進程使用從 0x7F7'93950000 開始的虛擬地址的三個相鄰頁面。但虛擬地址的這三個相鄰頁面會映射到物理內(nèi)存中的非相鄰頁面。而且還注意,兩個進程都使用從 0x7F7'93950000 開始的虛擬內(nèi)存頁面,但這些虛擬頁面都映射到物理內(nèi)存的不同頁面。

  用戶空間和系統(tǒng)空間

  諸如 Notepad.exe 和 MyApp.exe 的進程在用戶模式下運行。核心操作系統(tǒng)組件和多個驅(qū)動程序在更有特權(quán)的內(nèi)核模式下運行。有關(guān)處理器模式的詳細信息,請參閱用戶模式和內(nèi)核模式。每個用戶模式進程都有其各自的專用虛擬地址空間,但在內(nèi)核模式下運行的所有代碼都共享稱為“系統(tǒng)空間”的單個虛擬地址空間。當前用戶模式進程的虛擬地址空間稱為“用戶空間”。

  在 32 位 Windows 中,可用的虛擬地址空間共計為 2^32 字節(jié)(4 GB)。通常較下的 2 GB 用于用戶空間,較上的 2 GB 用于系統(tǒng)空間。

  在 32 位 Windows 中,你可以指定(在啟動時)超過 2 GB 用于用戶空間。結(jié)果是系統(tǒng)空間可用的虛擬地址更少??梢詫⒂脩艨臻g的大小增至 3 GB,在這種情形下系統(tǒng)空間僅有 1 GB。若要增大用戶空間的大小,請使用 BCDEdit /set increaseuserva。

  在 64 位 Windows 中,虛擬地址空間的理論大小為 2^64 字節(jié)(16 百億億字節(jié)),但實際上僅使用 16 百億億字節(jié)范圍的一小部分。范圍從 0x000'00000000 至 0x7FF'FFFFFFFF 的 8 TB 用于用戶空間,范圍從 0xFFFF0800'00000000 至 0xFFFFFFFF'FFFFFFFF 的 248 TB 的部分用于系統(tǒng)空間。

  用戶模式下運行的代碼可以訪問用戶空間,但不能訪問系統(tǒng)空間。此限制可防止用戶模式代碼讀或更改受保護的操作系統(tǒng)數(shù)據(jù)結(jié)構(gòu)。內(nèi)核模式下運行的代碼既可以訪問用戶空間,也可以訪問系統(tǒng)空間。即,在內(nèi)核模式下運行的代碼可以訪問系統(tǒng)空間和當前用戶模式進程的虛擬地址空間。

  在內(nèi)核模式下運行的驅(qū)動程序必須在直接從用戶空間地址中讀取或?qū)懭脒@些地址時非常小心。此方案說明了原因。

  用戶模式程序發(fā)起從設(shè)備讀取某些數(shù)據(jù)的請求。程序提供緩沖區(qū)的起始地址以接收數(shù)據(jù)。

  在內(nèi)核模式下運行的設(shè)備驅(qū)動程序例程啟動讀取操作并將控制權(quán)返回到其調(diào)用程序。

  然后,設(shè)備中斷了當前運行的任何線程以顯示讀取操作完成。 中斷由在此任意線程上運行的內(nèi)核模式驅(qū)動程序例程進行處理,該例程屬于任意進程。

  此時,驅(qū)動程序不得將數(shù)據(jù)寫入用戶模式程序在步驟 1 中提供的開始地址。此地址位于發(fā)起請求的進程的虛擬地址空間,該進程可能很大程度上不同于當前進程。

  虛擬地址(Virtual Address Space)

  Win32通過一個兩層的表結(jié)構(gòu)來實現(xiàn)地址映射,因為每個進程都擁有私有的4G的虛擬內(nèi)存空間,相應的,每個進程都有自己的層次表結(jié)構(gòu)來實現(xiàn)其地址映射。

  第一層稱為頁目錄,實際就是一個內(nèi)存頁,Win32的內(nèi)存頁有4KB大小,這個內(nèi)存頁以4個字節(jié)分為1024項,每一項稱為“頁目錄項”(PDE);

  第二層稱為頁表,這一層共有1024個頁表,頁表結(jié)構(gòu)與頁目錄相似,每個頁表也都是一個內(nèi)存頁,這個內(nèi)存頁以4KB的大小被分為1024項,頁表的每一項被稱為頁表項(PTE),易知共有1024×1024個頁表項。每一個頁表項對應一個物理內(nèi)存中的某一個“內(nèi)存頁”,即共有1024×1024個物理內(nèi)存頁,每個物理內(nèi)存頁為4KB,這樣就可以索引到4G大小的虛擬物理內(nèi)存。

  如下圖所示(注下圖中的頁目錄項的大小應該是4個字節(jié),而不是4kB):

  Win32提供了4GB大小的虛擬地址空間。因此每個虛擬地址都是一個32位的整數(shù)值,也就是我們平時所說的指針,即指針的大小為4B。它由三部分組成,如下圖:

  這三個部分的第一部分,即前10位為頁目錄下標,用來尋址頁目錄項,頁目錄項剛好1024個。找到頁目錄項后,找對頁目錄項對應的的頁表。第二部分則是用來在頁表內(nèi)尋址,用來找到頁表項,共有1024個頁表項,通過頁表項找到物理內(nèi)存頁。第三部分用來在物理內(nèi)存頁中找到對應的字節(jié),一個頁的大小是4KB,12位剛好可以滿足尋址要求。

  具體的例子:

  假設(shè)一個線程正在訪問一個指針(Win32的指針指的就是虛擬地址)指向的數(shù)據(jù),此指針指為0x2A8E317F,下圖表示了這一個過程:

  0x2A8E317F的二進制寫法為0010101010_0011100011_000101111111,為了方便我們把它分為三個部分。

  首先按照0010101010尋址,找到頁目錄項。因為一個頁目錄項為4KB,那么先將0010101010左移兩位,001010101000(0x2A8),用此下標找到頁目錄項,然后根據(jù)此頁目錄項定位到下一層的某個頁表。

  然后按照0011100011尋址,在上一步找到頁表中尋找頁表項。尋址方法與上述方法類似。找到頁表項后,就可以找到對應的物理內(nèi)存頁。

  最后按照000101111111尋址,尋找頁內(nèi)偏移。

  上面的假設(shè)的是此數(shù)據(jù)已在物理內(nèi)存中,其實判斷訪問的數(shù)據(jù)是否在內(nèi)存中也是在地址映射過程中完成的。Win32系統(tǒng)總是假設(shè)數(shù)據(jù)已在物理內(nèi)存中,并進行地址映射。頁表項中有一位標志位,用來標識包含此數(shù)據(jù)的頁是否在物理內(nèi)存中,如果在的話,就直接做地址映射,否則,拋出缺頁中斷,此時頁表項也可標識包含此數(shù)據(jù)的頁是否在調(diào)頁文件中(外存),如果不在則訪問違例,程序?qū)顺?,如果在,頁表項會查出此?shù)據(jù)頁在哪個調(diào)頁文件中,然后將此數(shù)據(jù)頁調(diào)入物理內(nèi)存,再繼續(xù)進行地址映射。為了實現(xiàn)每個進程擁有私有4G的虛擬地址空間,也就是說每個進程都擁有自己的頁目錄和頁表結(jié)構(gòu),對不同進程而言,即使是相同的指針(虛擬地址)被不同的進程映射到的物理地址也是不同的,這也意味著在進程之間傳遞指針是沒有意義的。

  看過“虛擬地址空間映射到物理地址空間 ”的人還看了:

1.物理地址與虛擬地址映射

2.linux虛擬地址怎么映射物理地址

3.物理地址和虛擬地址

4.物理地址與虛擬地址怎么轉(zhuǎn)換

5.Linux關(guān)于虛擬內(nèi)存

604386