自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

漫畫解說 “內(nèi)存映射”

存儲 存儲軟件
虛擬內(nèi)存地址就好比每個班的學(xué)號,而物理內(nèi)存地址就好比真實的學(xué)生。因為每個學(xué)號都對應(yīng)不同的學(xué)生,所以虛擬內(nèi)存地址也要映射到物理內(nèi)存地址。

[[396240]]

本文轉(zhuǎn)載自微信公眾號「Linux內(nèi)核那些事」,作者songsong001。轉(zhuǎn)載本文請聯(lián)系Linux內(nèi)核那些事公眾號。

 

虛擬內(nèi)存空間與物理內(nèi)存空間

虛擬內(nèi)存地址就好比每個班的學(xué)號,而物理內(nèi)存地址就好比真實的學(xué)生。因為每個學(xué)號都對應(yīng)不同的學(xué)生,所以虛擬內(nèi)存地址也要映射到物理內(nèi)存地址。

虛擬內(nèi)存與物理內(nèi)存的映射關(guān)系是通過 頁表 來關(guān)聯(lián)的,如下圖:

但 頁表 并不是按字節(jié)來進(jìn)行映射的,而是按照 內(nèi)存頁 為單位進(jìn)行映射,一般一個 內(nèi)存頁 的大小為 4KB(為什么要加一般呢,這是因為除了4KB,還有其他大小的內(nèi)存頁,如2MB,4MB,1GB等),頁表 的每一個 頁表項 都保存著物理內(nèi)存頁的地址。

所以,4GB 的虛擬內(nèi)存空間需要 1MB 大小的頁表來關(guān)聯(lián)(因為 4GB / 4KB = 1MB)。也就是說,0 ~ 4095 的虛擬內(nèi)存地址都是使用 頁表 的第一個 頁表項 來映射的,而 4096 ~ 8191 的虛擬內(nèi)存地址使用 頁表 的第二個 頁表項 來映射的,以此類推...

那么,通過什么樣的算法能把 0 ~ 4095 的虛擬內(nèi)存地址轉(zhuǎn)換為頁表的第一個頁表項呢?其實很簡單,只需要把虛擬內(nèi)存地址的高端 20 位作為頁表的索引,而把低端 12 位作為內(nèi)存頁中的偏移量即可,如下圖:

在上圖中,還看到了一個 cr3 的東西,這是 CPU 中的一個寄存器,用于保存 頁表 的物理內(nèi)存地址,通過這個寄存器就能找到進(jìn)程的 頁表 了。

現(xiàn)在對內(nèi)存映射的原理有了比較清晰的了解了,但現(xiàn)在有個問題,每個進(jìn)程都要 1MB 大小的頁表,那不是很浪費(fèi)內(nèi)存嗎?的確是,因為進(jìn)程很多虛擬內(nèi)存地址并不會用到,為了節(jié)省頁表使用的內(nèi)存,x86 CPU 把頁表分為 2 級,如下圖:

如上圖所示,把原來的 頁表 劃分為 頁目錄 和 頁表,它們的大小均為 4KB。而虛擬內(nèi)存地址的高 10 位作為頁目錄的索引,而中間 10 位作為頁表的索引,低 12 位還是作為物理內(nèi)存頁的偏移量。

把原來的 頁表 劃分為兩級后,進(jìn)程有些不使用的虛擬內(nèi)存地址就不需要進(jìn)行映射,從而節(jié)省了內(nèi)存的使用。

 

責(zé)任編輯:武曉燕 來源: Linux內(nèi)核那些事
相關(guān)推薦

2013-10-12 13:01:51

Linux運(yùn)維內(nèi)存管理

2009-07-24 10:00:38

.NET 4.0內(nèi)存映

2011-04-25 17:15:39

MongodbMMAP

2012-06-20 14:16:36

Java內(nèi)存映射

2023-03-01 10:37:51

2020-09-17 08:28:08

內(nèi)存映射反向

2010-05-10 14:15:54

DNS負(fù)載均衡

2010-08-26 13:38:45

DHCP冗余

2009-08-13 14:21:04

.NET內(nèi)存映射文件

2021-11-11 05:00:02

JavaMmap內(nèi)存

2021-12-03 16:20:26

鴻蒙HarmonyOS應(yīng)用

2009-01-09 22:29:38

服務(wù)器虛擬化磁盤陣列

2010-07-06 10:00:08

UML部署圖

2010-09-02 14:42:04

DHCP Relay

2018-10-10 14:14:51

Linux內(nèi)存映射

2023-06-28 08:27:49

CLR斷點(diǎn)C#

2010-02-04 15:01:07

Android架構(gòu)

2010-10-15 10:33:37

2009-09-23 15:37:52

Hibernate 原

2021-04-29 18:11:03

虛擬IPKeeplived
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號