首页
教育
美食
健康
数码
家居
科技
汽車
旅遊
情感
寵物
娛樂
民俗
知識
圖文
健康
品牌
教育
遊戲
手抄報
簡筆畫
tft每日頭條
>
生活
>
linux虛拟内存與物理内存映射
linux虛拟内存與物理内存映射
生活
更新时间:2025-08-24 00:23:51
讓我們看下虛拟内存:
第一層理解
每個進程都有自己獨立的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每日頭條
,我们将持续为您更新最新资讯!
查看全部
上一页
下一页
電飯煲常見的故障維修
常年坐辦公室怎麼運動...
相关生活资讯推荐
為什麼AppleID驗證總是錯誤
AppleID驗證總是錯誤,可能是您輸入不正确,您可以試着注銷ID,然後重新登錄,如果您不确定密碼,...
2023-07-05
如何清除蟑螂
1、不留下食物和水。蟑螂需要水才能生存。它們可以1個月不吃東西(視溫度和體型而定),但沒有水,就無法...
2023-07-05
發酵過的面團怎麼保存
1、把發酵好的面團裝入保鮮袋,擠壓出袋中的空氣後紮緊袋口,放入冰箱保鮮層,溫度調至0-3度,可保鮮3...
2023-07-05
微信升級7010怎麼升級
1、首先我們需要在我們的手機微信中找到我,然後在我中找到設置功能,點擊進入設置。2、在設置中我們可以...
2023-07-05
富貴竹莖皺還能活嗎
1、當富貴竹的莖發皺後,若根系是完好的狀态,那經過挽救還能活,但若根系已經死亡,那基本上是救不活了。...
2023-07-05
热门生活资讯推荐
生活
家具怎麼挑選
1、舒适性:一些家具會使用一些特殊的材料來追求質量或造型感。外表看起來精緻清新,但使用時卻顯得俗氣。...
2023-07-05
生活
微信沒有朋友圈是怎麼回事?
1、微信設置朋友圈的方法一:找到(我)點開(設置)。點開(設置),找到(隐私)。點開(隐私),打開開...
2023-07-05
生活
西哈努克城是哪個國家
1、西哈努克城所屬的國家:柬埔寨。2、西哈努克城,位于柬埔寨西南海岸線上的西哈努克港,是柬埔寨最大的...
2023-07-05
生活
男生實用打扮技巧
1、提前收藏比較好的穿衣搭配。如果自己對于穿衣搭配沒有經驗,可以提前收藏好一些比較不錯的穿衣搭配,然...
2023-07-05
生活
橄榄水的功效與作用
1、能夠清熱解毒、利咽化痰,對于熱病傷身所導緻的咽喉腫痛、眼睛紅腫、肺熱咳嗽、咳痰的人,适當喝橄榄水...
2023-07-05
生活
周三北京限号多少
1、周三限行5和0;2、周一至周五限行的車牌尾号具體分别為:3和8、4和9、5和0、1和6、2和7。...
2023-07-05
生活
打孔機上的标尺使用方法
1、打孔機上的标尺使用方法:把打孔機标尺拉出來至A4-E這個刻度與打孔機底座邊緣平齊,然後把紙短邊放...
2023-07-05
生活
螢火蟲的壽命
1、螢火蟲的壽命一般是3-7天,不過也有活的時間相對長些的,可達10-20天。2、對它來說生命是短暫...
2023-07-05
生活
o型血人的性格特點
1、o型血得人個性開朗,講義氣,與人交往能坦誠相待,某些事近乎頑固,心直口快,易得罪人的,對不愉快的...
2023-07-05
生活
大田土壤闆結怎麼辦
1、直接換土:若發現土壤太闆結,最好直接換土,在氣候溫暖的時候,将植物從土裡挖出來,然後換上腐質土,...
2023-07-05
网友关注
生活
sim卡上的聯系人怎麼找回?
1、在待機頁面下,點擊【聯系人】。2、點擊屏幕右上角【菜單】鍵,然後點擊【設定】。3、點擊【聯系人】...
2023-07-05
生活
好聽有個性的韓系男孩名字精選大全
1、樸和同韓華晖金鴻福安元魁2、樸宏盛金俊捷鄭經藝宋玉宸3、宋鶴軒安俊爽宋明朗樸騰骞4、鄭宜年韓安歌...
2023-07-05
生活
火腿腸怎麼開
1、火腿腸怎麼開:火腿腸的中間都有一條封口線,我們隻要将牙簽擦進封口處,往上劃,很輕松的,完完整整的...
2023-07-05
生活
開方怎麼算
1、比如說我們計算根号10,有計算機的夥伴們可以按一下,結果3.1622776601683........
2023-07-05
生活
怎麼合成照片
1、打開要進行處理的照片。2、首先雙擊軟件界面中間的大按鈕,打開要處理的照片。3、選擇摳圖工具:點擊...
2023-07-05
生活
蚯蚓釣魚的技巧
1、剪斷蚯蚓:蚯蚓多為黑、綠、紅三色,其間,黑蚯蚓個頭最大,一同也是大魚所喜愛的食物,在水庫釣大物,...
2023-07-05
生活
幹熱岩供暖危害是什麼
1、這是技一項新技術,目前缺乏相關的政策、法規、技術标準等支撐。2、由于這項技術目前在社會上應用較少...
2023-07-05
生活
住房公積金可以異地使用嗎
1、可以的,這種情況屬于異地公積金貸款。2、貸款城市公積金中心接受職工的異地貸款業務咨詢,并一次性告...
2023-07-05
生活
電腦主機開着但是顯示器顯示無信号怎麼...
1、檢查插座是否通電,檢查連接線接口(vga或者dvi接口)是否接好(重要),顯示器故障,換個顯示器...
2023-07-05
生活
中間繼電器的結構
1、中間繼電器原理和交流接觸器一樣,都是由固定鐵芯、動鐵芯、彈簧、動觸點、靜觸點、線圈、接線端子和外...
2023-07-05
生活
數字書寫技巧
1、從日字格的右上角附近起筆,畫斜線到左下角附近。2、起筆碰左線,然後向上向右碰線,略成半圓,斜線到...
2023-07-05
生活
蜜柚剝皮的方法
1、将買來的柚子去除掉外面的細網和塑料紙,然後放在水龍頭下清洗幹淨。用水果刀或者普通的刀具沿柚子的中...
2023-07-05
生活
增值納稅怎麼算
1、小規模納稅人:當期應納增值稅=當期不含稅銷售收入總額×3%(增值稅征收率)。2、一般納稅人:應納...
2023-07-05
生活
手機定位服務怎樣開啟
1、雙指下拉機器頂簾,開啟手機GPS定位功能(若不使用時,建議關閉)。2、打開設定-更多-定位服務/...
2023-07-05
生活
房屋風水口訣
1、廟前貧,廟後富,廟左廟右出鳏孤。2、大門對陽台,破敗不聚财。3、住宅凹凸不方正,此屋人丁有病症。...
2023-07-05
生活
給寶寶起的好聽名字
1、睿穎2、炜琳3、雨瑩4、炜婷5、麗英6、忠燕7、瑞芬8、馨婷9、連英10、秀媛11、雨花12、秀...
2023-07-05
生活
家裡沒人抽煙廁所怎麼來的煙味
1、偶爾有煙味如果你們家沒有人抽煙,而且你們家的衛生間窗戶是離馬路或者鄰居的窗戶比較近,這個煙味可能...
2023-07-05
生活
故步自封的解釋
1、比喻安于現狀,不求進步。2、故步自封,漢語成語,拼音是gùbùzìfēng。3、成語出處:《漢書...
2023-07-05
生活
翡翠怎麼存放
1、應避免與硬物碰撞或高空摔落,防止撞裂或摔破飾體;2、應避免存放在高溫下或明火燒灼,以免丢失溫潤的...
2023-07-05
生活
稅務申報如何網上申報
1、網上報稅怎麼報:要進行網上報稅的話,其具體流程一般是當事人到當地主管地稅機關提出申請,填寫表格,...
2023-07-05
生活
apple
1、打開手機“設置”,找到并進入“ID賬号”,點擊“密碼與安全性”,點擊“更改密碼”選項。輸入iPh...
2023-07-05
生活
銀行卡如何注銷
1、帶上相關證件,身份證和銀行卡,如果該銀行卡曾經辦過網銀,需要帶上密令卡和網盾。2、确定卡内是否有...
2023-07-05
生活
樂高積木拆卸技巧
1、不要硬壓積木。積木拼在一起後,有的小朋友喜歡用手壓,或者直接坐在上面,其實這對孩子來說是非常不好...
2023-07-05
生活
新手養鹦鹉魚注意事項
1、我們要根據自己魚缸的大小來決定鹦鹉魚的養殖數量,始終保持魚兒的密度适中,這個适中可不是密度越小越...
2023-07-05
生活
怎樣判斷平安樹該澆水了
1、判斷平安樹是否該澆水了,可以通過葉片和土壤來判斷。如果葉子發蔫、發幹,往下耷拉,用手摸一下比較軟...
2023-07-05
生活
怎樣挑選小龍蝦
1、看。正規渠道養殖的健康小龍蝦:形狀完整、個頭均勻、頭和身幾乎各占一半、顔色紅亮幹淨、腹毛,爪毛幹...
2023-07-05
生活
守歲的特點
1、吃年夜飯:一家人圍坐在一起吃年夜飯,桌上一般少不了兩樣東西:一是火鍋,二是魚,火鍋說明紅紅火火,...
2023-07-05
生活
清潔棉衣的方法
1、方法一、30度水溫漂洗,将棉衣放入冷水中浸泡30分鐘,讓棉服内外充分濕潤。将中性洗滌劑溶入30度...
2023-07-05
生活
描寫時光流逝的句子
1、時間仿似一條直線,沒有起點,亦無終點。2、時間可以創造奇迹。3、東流逝水,葉落紛紛,荏苒的時光就...
2023-07-05
生活
10月13日是什麼日子
1、每年的10月13日是世界保健日。2、每年都要選擇一個與公共衛生領域相關的主題,旨在提高全世界衆對...
2023-07-05
關于
條款和條件
隱私政策
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-2025 -
www.tftnews.com
All Rights Reserved