色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

詳解Linux的物理內存

汽車玩家 ? 來源:Linux世界 ? 作者:Linux世界 ? 2020-01-18 17:45 ? 次閱讀

在內核態申請內存比在用戶態申請內存要更為直接,它沒有采用用戶態那種延遲分配內存技術。內核認為一旦有內核函數申請內存,那么就必須立刻滿足該申請內存的請求,并且這個請求一定是正確合理的。相反,對于用戶態申請內存的請求,內核總是盡量延后分配物理內存,用戶進程總是先獲得一個虛擬內存區的使用權,最終通過缺頁異常獲得一塊真正的物理內存。

1.物理內存的內核映射

IA32架構中內核虛擬地址空間只有1GB大小(從3GB到4GB),因此可以直接將1GB大小的物理內存(即常規內存)映射到內核地址空間,但超出1GB大小的物理內存(即高端內存)就不能映射到內核空間。為此,內核采取了下面的方法使得內核可以使用所有的物理內存。

1.高端內存不能全部映射到內核空間,也就是說這些物理內存沒有對應的線性地址。不過,內核為每個物理頁框都分配了對應的頁框描述符,所有的頁框描述符都保存在mem_map數組中,因此每個頁框描述符的線性地址都是固定存在的。內核此時可以使用alloc_pages()和alloc_page()來分配高端內存,因為這些函數返回頁框描述符的線性地址。

2.內核地址空間的后128MB專門用于映射高端內存,否則,沒有線性地址的高端內存不能被內核所訪問。這些高端內存的內核映射顯然是暫時映射的,否則也只能映射128MB的高端內存。當內核需要訪問高端內存時就臨時在這個區域進行地址映射,使用完畢之后再用來進行其他高端內存的映射。

由于要進行高端內存的內核映射,因此直接能夠映射的物理內存大小只有896MB,該值保存在high_memory中。內核地址空間的線性地址區間如下圖所示:

詳解Linux的物理內存

從圖中可以看出,內核采用了三種機制將高端內存映射到內核空間:永久內核映射,固定映射和vmalloc機制。

2.物理內存管理機制

基于物理內存在內核空間中的映射原理,物理內存的管理方式也有所不同。內核中物理內存的管理機制主要有伙伴算法,slab高速緩存和vmalloc機制。其中伙伴算法和slab高速緩存都在物理內存映射區分配物理內存,而vmalloc機制則在高端內存映射區分配物理內存。

伙伴算法

伙伴算法負責大塊連續物理內存的分配和釋放,以頁框為基本單位。該機制可以避免外部碎片。

per-CPU頁框高速緩存

內核經常請求和釋放單個頁框,該緩存包含預先分配的頁框,用于滿足本地CPU發出的單一頁框請求。

slab緩存

slab緩存負責小塊物理內存的分配,并且它也作為高速緩存,主要針對內核中經常分配并釋放的對象。

vmalloc機制

vmalloc機制使得內核通過連續的線性地址來訪問非連續的物理頁框,這樣可以最大限度的使用高端物理內存。

3.物理內存的分配

內核發出內存申請的請求時,根據內核函數調用接口將啟用不同的內存分配器。

3.1 分區頁框分配器

分區頁框分配器 (zoned page frame allocator) ,處理對連續頁框的內存分配請求。分區頁框管理器分為兩大部分:前端的管理區分配器和伙伴系統,如下圖:

詳解Linux的物理內存

管理區分配器負責搜索一個能滿足請求頁框塊大小的管理區。在每個管理區中,具體的頁框分配工作由伙伴系統負責。為了達到更好的系統性能,單個頁框的申請工作直接通過per-CPU頁框高速緩存完成。

該分配器通過幾個函數和宏來請求頁框,它們之間的封裝關系如下圖所示。

詳解Linux的物理內存

這些函數和宏將核心的分配函數__alloc_pages_nodemask()封裝,形成滿足不同分配需求的分配函數。其中,alloc_pages()系列函數返回物理內存首頁框描述符,__get_free_pages()系列函數返回內存的線性地址。

3.2 slab分配器

slab 分配器最初是為了解決物理內存的內部碎片而提出的,它將內核中常用的數據結構看做對象。slab分配器為每一種對象建立高速緩存。內核對該對象的分配和釋放均是在這塊高速緩存中操作。一種對象的slab分配器結構圖如下:

詳解Linux的物理內存

可以看到每種對象的高速緩存是由若干個slab組成,每個slab是由若干個頁框組成的。雖然slab分配器可以分配比單個頁框更小的內存塊,但它所需的所有內存都是通過伙伴算法分配的。

slab高速緩存分專用緩存和通用緩存。專用緩存是對特定的對象,比如為內存描述符創建高速緩存。通用緩存則是針對一般情況,適合分配任意大小的物理內存,其接口即為kmalloc()。

3.3 非連續內存區內存的分配

內核通過vmalloc()來申請非連續的物理內存,若申請成功,該函數返回連續內存區的起始地址,否則,返回NULL。vmalloc()和kmalloc()申請的內存有所不同,kmalloc()所申請內存的線性地址與物理地址都是連續的,而vmalloc()所申請的內存線性地址連續而物理地址則是離散的,兩個地址之間通過內核頁表進行映射。

vmalloc()的工作方式理解起來很簡單:

1.尋找一個新的連續線性地址空間;

2.依次分配一組非連續的頁框;

3.為線性地址空間和非連續頁框建立映射關系,即修改內核頁表;

vmalloc()的內存分配原理與用戶態的內存分配相似,都是通過連續的虛擬內存來訪問離散的物理內存,并且虛擬地址和物理地址之間是通過頁表進行連接的,通過這種方式可以有效的使用物理內存。但是應該注意的是,vmalloc()申請物理內存時是立即分配的,因為內核認為這種內存分配請求是正當而且緊急的;相反,用戶態有內存請求時,內核總是盡可能的延后,畢竟用戶態跟內核態不在一個特權級。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11373

    瀏覽量

    211299
  • 內存
    +關注

    關注

    8

    文章

    3081

    瀏覽量

    74595
收藏 人收藏

    評論

    相關推薦

    Linux服務器卡頓救星之一招釋放Cache內存

    在程序運行結束后不會自動釋放。這可能會導致程序頻繁讀寫文件后可用物理內存變得很少,必要時(比如內存確實不夠用),需要主動釋放緩存內存。 注意:一般情況下,是不推薦主動釋放緩存
    的頭像 發表于 01-16 10:04 ?652次閱讀

    虛擬內存和云計算的關系

    在現代計算機科學中,虛擬內存和云計算是兩個關鍵的技術概念。虛擬內存是一種內存管理技術,它允許計算機使用比物理內存更多的
    的頭像 發表于 12-04 09:50 ?234次閱讀

    虛擬內存溢出該怎么處理 虛擬內存在服務器中的應用

    在現代計算機系統中,虛擬內存是一種重要的資源管理技術,它允許系統使用硬盤空間來擴展物理內存的容量。然而,當系統運行的程序和進程超出了物理內存
    的頭像 發表于 12-04 09:49 ?423次閱讀

    Linux下如何管理虛擬內存 使用虛擬內存時的常見問題

    Linux系統中,虛擬內存管理是操作系統內核的一個重要功能,負責管理物理內存和磁盤上的交換空間。以下是對Linux下如何管理虛擬
    的頭像 發表于 12-04 09:19 ?768次閱讀

    虛擬內存對計算機性能的影響

    ,它允許計算機使用硬盤空間來模擬物理內存。當物理內存(RAM)不足以容納當前所有活動的程序和數據時,操作系統會將部分數據從RAM移動到硬盤上的一個特殊區域,稱為交換空間(swap sp
    的頭像 發表于 12-04 09:17 ?2202次閱讀

    什么是虛擬內存分頁 Windows系統虛擬內存優化方法

    虛擬內存分頁概述 在Windows操作系統中,虛擬內存是通過分頁機制實現的。分頁允許系統將內存中的數據移動到硬盤上,以便為當前運行的程序騰出空間。這個過程對于保持系統的流暢運行至關重要,尤其是在
    的頭像 發表于 12-04 09:16 ?799次閱讀

    虛擬內存不足如何解決 虛擬內存物理內存的區別

    虛擬內存不足的解決方案 虛擬內存不足是計算機用戶經常遇到的問題,尤其是在運行大型軟件或多任務處理時。以下是一些解決虛擬內存不足問題的方法: 增加物理
    的頭像 發表于 12-04 09:14 ?853次閱讀

    虛擬內存的作用和原理 如何調整虛擬內存設置

    虛擬內存,也稱為虛擬內存管理或頁面文件,是計算機操作系統中的一種內存管理技術。它允許系統使用硬盤空間作為額外的RAM(隨機存取存儲器),以彌補物理
    的頭像 發表于 12-04 09:13 ?1186次閱讀

    DDR5內存的工作原理詳解 DDR5和DDR4的主要區別

    DDR5內存的工作原理詳解 1. DDR5內存簡介 DDR5(Double Data Rate 5)是第五代雙倍數據速率同步動態隨機存取存儲器(SDRAM)。它是DDR4的后續產品,提供更高
    的頭像 發表于 11-22 15:38 ?3074次閱讀

    Linux用戶管理詳解

    用戶分為普通用戶和超級用戶,超級用戶在Windows系統中為Administrator在Linux系統中為root。登陸Linux系統需要提供用戶名與密碼,登陸后通過一定的方法管理該系統。
    的頭像 發表于 11-01 09:48 ?275次閱讀

    Linux內存泄露案例分析和內存管理分享

    作者:京東科技 李遵舉 一、問題 近期我們運維同事接到線上LB(負載均衡)服務內存報警,運維同事反饋說LB集群有部分機器的內存使用率超過80%,有的甚至超過90%,而且內存使用率還再不停的增長。接到
    的頭像 發表于 10-24 16:14 ?831次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>內存</b>泄露案例分析和<b class='flag-5'>內存</b>管理分享

    邏輯內存物理內存的區別

    邏輯內存物理內存是計算機系統中兩個重要的概念,它們在計算機的運行和數據處理中起著至關重要的作用。 1. 物理內存(Physical Mem
    的頭像 發表于 09-27 15:38 ?1145次閱讀

    內存管理的硬件結構

    常見的內存分配函數有malloc,mmap等,但大家有沒有想過,這些函數在內核中是怎么實現的?換句話說,Linux內核的內存管理是怎么實現的?
    的頭像 發表于 09-04 14:28 ?449次閱讀
    <b class='flag-5'>內存</b>管理的硬件結構

    buffers內存與cached內存的區別

    free 命令是Linux系統上查看內存使用狀況最常用的工具,然而很少有人能說清楚 “buffers” 與 “cached” 之間的區別。
    的頭像 發表于 07-29 14:17 ?630次閱讀
    buffers<b class='flag-5'>內存</b>與cached<b class='flag-5'>內存</b>的區別

    linux下查詢進程占用的內存方法有哪些?

    linux下查詢進程占用的內存方法
    發表于 04-08 06:03
    主站蜘蛛池模板: 成人免费在线观看 | 果冻传媒在线观看进入窗口 | 日本十八禁无遮无挡漫画 | 亚洲精品伊人久久久久 | 艳鉧动漫片1~6全集在线 | 精品国产三级a | 97国产视频| 国产色精品久久人妻无码看片软件 | 成年人视频在线观看免费 | 国产不卡无码高清视频 | 亚洲 欧美 国产 伦 综合 | 一级毛片皇帝 宫女 | 影音先锋电影资源av | 国产 亚洲 中文字幕 在线 | 久久99国产亚洲高清观着 | 高清一区二区亚洲欧美日韩 | 欧洲最大无人区免费高清完整版 | 披黑人猛躁10次高潮 | 果冻传媒2021精品在线观看 | 福利视频一二三在线观看 | 色婷婷国产精品视频一区二区三区 | 精品国产乱码久久久久久人妻 | 99视频偷窥在线精品国自产拍 | 亚洲福利精品电影在线观看 | 精品区2区3区4区产品乱码9 | 99久久精品毛片免费播放 | 97无码欧美熟妇人妻蜜桃天美 | java农村野外妇女hd | 久久人人玩人妻潮喷内射人人 | 精品久久久久久久国产潘金莲 | 亚洲三级在线视频 | 国产一区二区三区国产精品 | 国产精品一区二区免费 | 99在线播放 | 交换年轻夫妇HD中文字幕 | 西施打开双腿下面好紧 | 欧美freesex黑人又粗又 | 神马老子影院午夜伦 | 国产成人久久婷婷精品流白浆 | WWW国产无套内射久久 | 2022国产91精品久久久久久 |