首页
教育
美食
健康
数码
家居
科技
汽車
旅遊
情感
寵物
娛樂
民俗
知識
圖文
健康
品牌
教育
遊戲
手抄報
簡筆畫
tft每日頭條
>
生活
>
linux虛拟内存與物理内存映射
linux虛拟内存與物理内存映射
生活
更新时间:2026-05-14 00:58:17
讓我們看下虛拟内存:
第一層理解
每個進程都有自己獨立的4G内存空間,各個進程的内存空間具有類似的結構
一個新進程建立的時候,将會建立起自己的内存空間,此進程的數據,代碼等從磁盤拷貝到自己的進程空間,哪些數據在哪裡,都由進程控制表中的task_struct記錄,task_struct中記錄中一條鍊表,記錄中内存空間的分配情況,哪些地址有數據,哪些地址無數據,哪些可讀,哪些可寫,都可以通過這個鍊表記錄
每個進程已經分配的内存空間,都與對應的磁盤空間映射
問題:
計算機明明沒有那麼多内存(n個進程的話就需要n*4G)内存
建立一個進程,就要把磁盤上的程序文件拷貝到進程對應的内存中去,對于一個程序對應的多個進程這種情況,浪費内存!
第二層理解
每個進程的4G内存空間隻是虛拟内存空間,每次訪問内存空間的某個地址,都需要把地址翻譯為實際物理内存地址
所有進程共享同一物理内存,每個進程隻把自己目前需要的虛拟内存空間映射并存儲到物理内存上。
進程要知道哪些内存地址上的數據在物理内存上,哪些不在,還有在物理内存上的哪裡,需要用頁表來記錄
頁表的每一個表項分兩部分,第一部分記錄此頁是否在物理内存上,第二部分記錄物理内存頁的地址(如果在的話)
當進程訪問某個虛拟地址,去看頁表,如果發現對應的數據不在物理内存中,則缺頁異常
缺頁異常的處理過程,就是把進程需要的數據從磁盤上拷貝到物理内存中,如果内存已經滿了,沒有空地方了,那就找一個頁覆蓋,當然如果被覆蓋的頁曾經被修改過,需要将此頁寫回磁盤
總結:
優點:
既然每個進程的内存空間都是一緻而且固定的,所以鍊接器在鍊接可執行文件時,可以設定内存地址,而不用去管這些數據最終實際的内存地址,這是有獨立内存空間的好處
當不同的進程使用同樣的代碼時,比如庫文件中的代碼,物理内存中可以隻存儲一份這樣的代碼,不同的進程隻需要把自己的虛拟内存映射過去就可以了,節省内存
在程序需要分配連續的内存空間的時候,隻需要在虛拟内存空間分配連續空間,而不需要實際物理内存的連續空間,可以利用碎片。
另外,事實上,在每個進程創建加載時,内核隻是為進程“創建”了虛拟内存的布局,具體就是初始化進程控制表中内存相關的鍊表,實際上并不立即就把虛拟内存對應位置的程序數據和代碼(比如.text .data段)拷貝到物理内存中,隻是建立好虛拟内存和磁盤文件之間的映射就好(叫做存儲器映射),等到運行到對應的程序時,才會通過缺頁異常,來拷貝數據。還有進程運行過程中,要動态分配内存,比如malloc時,也隻是分配了虛拟内存,即為這塊虛拟内存對應的頁表項做相應設置,當進程真正訪問到此數據時,才引發缺頁異常。
補充理解:
虛拟存儲器涉及三個概念: 虛拟存儲空間,磁盤空間,内存空間
可以認為虛拟空間都被映射到了磁盤空間中,(事實上也是按需要映射到磁盤空間上,通過mmap),并且由頁表記錄映射位置,當訪問到某個地址的時候,通過頁表中的有效位,可以得知此數據是否在内存中,如果不是,則通過缺頁異常,将磁盤對應的數據拷貝到内存中,如果沒有空閑内存,則選擇犧牲頁面,替換其他頁面。
mmap是用來建立從虛拟空間到磁盤空間的映射的,可以将一個虛拟空間地址映射到一個磁盤文件上,當不設置這個地址時,則由系統自動設置,函數返回對應的内存地址(虛拟地址),當訪問這個地址的時候,就需要把磁盤上的内容拷貝到内存了,然後就可以讀或者寫,最後通過manmap可以将内存上的數據換回到磁盤,也就是解除虛拟空間和内存空間的映射,這也是一種讀寫磁盤文件的方法,也是一種進程共享數據的方法 共享内存
接下來讨論下物理内存:
在内核态申請内存比在用戶态申請内存要更為直接,它沒有采用用戶态那種延遲分配内存技術。内核認為一旦有内核函數申請内存,那麼就必須立刻滿足該申請内存的請求,并且這個請求一定是正确合理的。相反,對于用戶态申請内存的請求,内核總是盡量延後分配物理内存,用戶進程總是先獲得一個虛拟内存區的使用權,最終通過缺頁異常獲得一塊真正的物理内存。
物理内存的内核映射
IA32架構中内核虛拟地址空間隻有1GB大小(從3GB到4GB),因此可以直接将1GB大小的物理内存(即常規内存)映射到内核地址空間,但超出1GB大小的物理内存(即高端内存)就不能映射到内核空間。為此,内核采取了下面的方法使得内核可以使用所有的物理内存。
高端内存不能全部映射到内核空間,也就是說這些物理内存沒有對應的線性地址。不過,内核為每個物理頁框都分配了對應的頁框描述符,所有的頁框描述符都保存在mem_map數組中,因此每個頁框描述符的線性地址都是固定存在的。内核此時可以使用alloc_pages()和alloc_page()來分配高端内存,因為這些函數返回頁框描述符的線性地址。
内核地址空間的後128MB專門用于映射高端内存,否則,沒有線性地址的高端内存不能被内核所訪問。這些高端内存的内核映射顯然是暫時映射的,否則也隻能映射128MB的高端内存。當内核需要訪問高端内存時就臨時在這個區域進行地址映射,使用完畢之後再用來進行其他高端内存的映射。
由于要進行高端内存的内核映射,因此直接能夠映射的物理内存大小隻有896MB,該值保存在high_memory中。内核地址空間的線性地址區間如下圖所示:
從圖中可以看出,内核采用了三種機制将高端内存映射到内核空間:永久内核映射,固定映射和vmalloc機制。
物理内存管理機制
基于物理内存在内核空間中的映射原理,物理内存的管理方式也有所不同。内核中物理内存的管理機制主要有夥伴算法,slab高速緩存和vmalloc機制。其中夥伴算法和slab高速緩存都在物理内存映射區分配物理内存,而vmalloc機制則在高端内存映射區分配物理内存。
夥伴算法
夥伴算法負責大塊連續物理内存的分配和釋放,以頁框為基本單位。該機制可以避免外部碎片。
per-CPU頁框高速緩存
内核經常請求和釋放單個頁框,該緩存包含預先分配的頁框,用于滿足本地CPU發出的單一頁框請求。
slab緩存
slab緩存負責小塊物理内存的分配,并且它也作為高速緩存,主要針對内核中經常分配并釋放的對象。
vmalloc機制
vmalloc機制使得内核通過連續的線性地址來訪問非連續的物理頁框,這樣可以最大限度的使用高端物理内存。
物理内存的分配
内核發出内存申請的請求時,根據内核函數調用接口将啟用不同的内存分配器。
分區頁框分配器
分區頁框分配器 (zoned page frame allocator) ,處理對連續頁框的内存分配請求。分區頁框管理器分為兩大部分:前端的管理區分配器和夥伴系統,如下圖:
管理區分配器負責搜索一個能滿足請求頁框塊大小的管理區。在每個管理區中,具體的頁框分配工作由夥伴系統負責。為了達到更好的系統性能,單個頁框的申請工作直接通過per-CPU頁框高速緩存完成。
該分配器通過幾個函數和宏來請求頁框,它們之間的封裝關系如下圖所示。
這些函數和宏将核心的分配函數__alloc_pages_nodemask()封裝,形成滿足不同分配需求的分配函數。其中,alloc_pages()系列函數返回物理内存首頁框描述符,__get_free_pages()系列函數返回内存的線性地址。
slab分配器
slab 分配器最初是為了解決物理内存的内部碎片而提出的,它将内核中常用的數據結構看做對象。slab分配器為每一種對象建立高速緩存。内核對該對象的分配和釋放均是在這塊高速緩存中操作。一種對象的slab分配器結構圖如下:
可以看到每種對象的高速緩存是由若幹個slab組成,每個slab是由若幹個頁框組成的。雖然slab分配器可以分配比單個頁框更小的内存塊,但它所需的所有内存都是通過夥伴算法分配的。
slab高速緩存分專用緩存和通用緩存。專用緩存是對特定的對象,比如為内存描述符創建高速緩存。通用緩存則是針對一般情況,适合分配任意大小的物理内存,其接口即為kmalloc()。
非連續内存區内存的分配
内核通過vmalloc()來申請非連續的物理内存,若申請成功,該函數返回連續内存區的起始地址,否則,返回NULL。vmalloc()和kmalloc()申請的内存有所不同,kmalloc()所申請内存的線性地址與物理地址都是連續的,而vmalloc()所申請的内存線性地址連續而物理地址則是離散的,兩個地址之間通過内核頁表進行映射。
vmalloc()的工作方式理解起來很簡單:
尋找一個新的連續線性地址空間;
依次分配一組非連續的頁框;
為線性地址空間和非連續頁框建立映射關系,即修改内核頁表;
vmalloc()的内存分配原理與用戶态的内存分配相似,都是通過連續的虛拟内存來訪問離散的物理内存,并且虛拟地址和物理地址之間是通過頁表進行連接的,通過這種方式可以有效的使用物理内存。但是應該注意的是,vmalloc()申請物理内存時是立即分配的,因為内核認為這種内存分配請求是正當而且緊急的;相反,用戶态有内存請求時,内核總是盡可能的延後,畢竟用戶态跟内核态不在一個特權級。
,
更多精彩资讯请关注
tft每日頭條
,我们将持续为您更新最新资讯!
查看全部
上一页
下一页
電飯煲常見的故障維修
常年坐辦公室怎麼運動...
相关生活资讯推荐
睫毛怎樣做更整齊
1、最上層和最下層的歪毛不接,否則會特别影響整體效果。2、嫁接睫毛放毛的時候,在膠水幹透之前用鑷子扶...
2023-07-03
溫差怎麼算
1、溫差的計算方法:最高溫度-最低溫度=溫差。2、最高溫度與最低溫度的差值為這一段時間内的溫差。如:...
2023-07-03
水産品長途運輸的方法
1、活對蝦運輸法:将池養對蝦放入冷卻池中,使池水溫度緩慢降至12~14℃,使之隻能勉強活動,待體色微...
2023-07-03
玫瑰花茶功效
1、行氣解郁、活血止痛。玫瑰花茶甘、微苦、微溫,歸肝、脾經,有行氣解郁,活血止痛的作用,可以治療肝胃...
2023-07-03
什麼是疫苗
1、疫苗是由各類病原微生物制作的,主要是用于預防接種的生物制品,主要是用來預防一些相應的疾病。2、嬰...
2023-07-03
热门生活资讯推荐
生活
可可粉熱量
1、可可粉的熱量為320大卡/100g。2、可可粉是從可可樹結出的豆莢(果實)裡取出的可可豆(種子)...
2023-07-03
生活
怎樣删除谷歌商店
1、打開手機,在手機的“設置”功能内找到“應用程序管理”功能。安卓系統為“應用管理”。2、找到“go...
2023-07-03
生活
怎麼屏蔽ios更新
1、将手機和電腦連接,打開PC端愛思助手,選擇【我的設備】-【更多功能】-【屏蔽iOS更新】,或者在...
2023-07-03
生活
孕婦喝酸奶好還是純牛奶好
1、孕婦喝純牛奶好。2、好處。補鈣:鈣是人體内含量最多的一種無機元素,有許多重要的生理功能,其主要參...
2023-07-03
生活
變質的牛奶喝了怎麼辦
1、情況較輕時,一般情況下食用少量的變質牛奶并不會導緻人體出現什麼嚴重的不适反應,這時不需要太過于擔...
2023-07-03
生活
火棘盆景好養嗎怎麼養
1、基質選擇,對于盆栽的火棘來講,選用适宜生長的基質很關鍵的。建議大家用深厚、松軟、排水良好的土壤栽...
2023-07-03
生活
松和柏有什麼區别
1、種類不同松,油松(Pinustabuliformis)、馬尾松(Pinusmassoniana)...
2023-07-03
生活
支付寶如何兌換流量
1、打開支付寶app軟件并點擊“首頁”菜單。2、點擊首頁的搜索框。3、進入搜索頁面。4、在搜索頁搜索...
2023-07-03
生活
減肥吃什麼瘦得快
1、蘋果但凡有減肥經驗的朋友們都知道,蘋果非常有助于減肥,而且在減肥的時候非常适合吃蘋果。因為蘋果不...
2023-07-03
生活
編辮子簡便方法
1、兩股辮是非常簡單的一款編發。用中長發編織成精緻的二股辮子,簡單大方,透露着滿滿的小女人氣息,這款...
2023-07-03
网友关注
生活
家庭主婦解壓方法
1、間歇調适。中年女性要知道如何利用工作的間歇來調适自己緊張的情緒。比如,她們會每隔一兩個小時去衛生...
2023-07-03
生活
手機卡怎麼辦呀
1、方法一:可以通過手機自帶的安全中心或者第三方垃圾軟件清理系統緩存。2、方法二:升級手機的系統,一...
2023-07-03
生活
感謝有你作文600字
一個人,要有一顆懂得感恩的心。感謝父母養育了我;感謝爺爺奶奶疼愛我……今天,我要感謝您——聞老師。我...
2023-07-03
生活
好聽獨特的網名
1、弦斷丶何人聽2、暖暖的掌心3、青燈伴古佛4、城南花已開5、趁時光還在6、仲夏閣玲子7、花閒煑揂亽...
2023-07-03
生活
朋友圈怎麼發喪事通知
親人過世大家都很悲痛,可以用一段古文或者詩句來表達哀悼之情。為了紀念陪伴自己這麼多年的親人,可以這樣...
2023-07-03
生活
火龍果的熱量
1、火龍果的熱量51大卡/100g。每100克火龍果含碳水化合物12.38克,脂肪0.38克,蛋白質...
2023-07-03
生活
金魚花的養殖方法和注意事項
1、光照金魚花喜光,除了夏季的光照太強需要适當遮擋外,平時養護時要多曬太陽,光照充足有利于植株長勢粗...
2023-07-03
生活
光棍節的由來和含義
1、光棍節是一種流傳于年輕人的娛樂性節日,以慶祝自己仍是單身一族為驕傲(光棍的意思便是單身)。11月...
2023-07-03
生活
尤克裡裡的材質有哪些
1、尼龍弦尼龍弦是目前市面上最常見的一種琴弦,顔色以乳白色為主,也有透明的尼龍弦。尼龍成分可以有很多...
2023-07-03
生活
枧水是什麼東西
1、枧水也被稱為堿水,它的主要成分是碳酸鉀和碳酸鈉。2、在調制廣式月餅餅皮面團時,常加入叫“枧水”的...
2023-07-03
生活
熊童子扡插技巧
1、扡插時間。最佳時間為春秋兩個季節,冬季也可以,但盡量不要在夏季進行,因為夏季為休眠期,扡插生根發...
2023-07-03
生活
快速幹衣服的方法
1、第一個方法就是把衣服裝在塑料袋中,然後把吹風機對着袋子裡面吹,直到把袋子吹得鼓起來為止,持續十多...
2023-07-03
生活
有什麼兼職适合上班族
1、網絡服務。網絡服務的概念非常寬泛,包括為企業提供網絡化客戶關系、自動化辦公、營銷等方面的管理服務...
2023-07-03
生活
蘋果怎麼可以保存很久
1、想要長時間保存蘋果,最好在放入冰箱之前不要洗,因為蘋果洗完之後表面上會留下很多水,這會導緻蘋果更...
2023-07-03
生活
138÷6的豎式怎麼列
列豎式方法:1、習慣寫法:被除數——除号(一橫一撇)——除數——商——積——餘數。2、作為權威的國家...
2023-07-03
生活
蘋果11
iPhone11設置充電量或者說是電量百分比的方法如下:1、首先解鎖手機,找到并點擊“設置”的頁面。...
2023-07-03
生活
怎麼樣申請微信号
1、下載微信,打開後點擊開啟頁面上的“注冊“按鈕。2、填寫“微信名稱、上傳頭像(可選)手機号、密碼”...
2023-07-03
生活
微信取消自動續費
1、首先打開手機微信。2、進入微信界面看到“我”。3、點擊“我”進入下一個界面。4、點擊錢包,進入錢...
2023-07-03
生活
螃蟹飼料配方
1、大眼幼體(蟹苗)飼料配方:動物性餌料由單胞藻、鹵蟲、輪蟲、劍水蚤、枝角類等組成的餌料系列。鹵蟲是...
2023-07-03
生活
幸運草怎麼養
1、土壤:幸運草對土壤的适應性很強。一般的園土就可以,在含有腐殖質的沙質土壤中生長更好一些。2、光照...
2023-07-03
生活
個人養老保險怎麼交
1、攜帶參保人本人的身份證,戶口本,一寸照,去當地社保局申請以個人名義進行辦理養老保險,如果是他人代...
2023-07-03
生活
白豆角怎麼做好吃
1、材料:白豆角250克、蒜1頭、鹽半勺、蔥1根、花椒粉半勺、胡椒粉半勺、醋半勺、醬油半勺。2、豆角...
2023-07-03
生活
熱水壺水開了不跳閘會怎麼樣
1、熱水壺内的水會一直燒下去,直到水被燒幹,發熱元件溫度急劇上升2、水壺跳閘有兩個外開關,一個是蒸氣...
2023-07-03
生活
傳說之下vivo手機虛拟鍵盤怎麼設置
1、首先的安卓手機除了安裝好遊戲Undertale之外,還需要下載一個按鍵設置軟件GameKeybo...
2023-07-03
生活
geforce登錄頁面無法加載
1、首先在桌面上找到啟動圖标,右鍵單擊并選擇“屬性”;2、然後在屬性頁面的頂部,單擊“兼容性”頁面并...
2023-07-03
生活
如何做鴨蛋窩
1、無底鴨蛋窩,材料PP改性,耐老化防凍-15℃,尺寸為430*410*280mm,适用于散養鴨,鴨...
2023-07-03
生活
蟾蜍的養殖
1、蟾蜍喜歡隐蔽于泥穴、潮濕石下、草叢内、水溝邊,皮膚易失水分,因此蟾蜍一般白天的時候隐蔽起來,夜晚...
2023-07-03
生活
怎麼與陌生人聊天
1、先要面帶微笑,眼睛要注視對方,可以使對方放松對我們的警惕。2、主動進行自我介紹,最好以幽默并帶有...
2023-07-03
生活
門神代表什麼生肖
1、門神不是生肖,一個叫秦瓊,一個叫尉遲恭。傳統門神中最多的就是隋唐名将秦瓊和尉遲恭。秦瓊,字叔寶,...
2023-07-03
生活
vivoy93s語音助手怎麼喚醒
1、首先在vivoy93s手機桌面點擊”設置“。2、進入設置界面以後,選擇”vivoice“選項。3...
2023-07-03
關于
條款和條件
隱私政策
Cookie 設置
服務
登陸
注冊
聯系我們
tft每日頭條
美食
生活
職場
母嬰
時尚
科技
汽車
友情鏈接
zpostcode
Recruit
weather
mreligion
Yellowpages
sport
constellation
shopping
name
game
directory
literature
Word
tour
furnish
Lottery
tftnews
lyrics
News
digital
car
dir
Edu
Finance
Copyright 2023-2026 -
www.tftnews.com
All Rights Reserved