最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

Linux內核分析-linux內存管理子系統(tǒng)(安排起來~)

2022-05-10 15:43 作者:補給站Linux內核  | 我要投稿

在分析今天的內容之前,我們先來看一張內存管理圖,其實這張圖可以分為兩個部分,一部分是地址映射,另一部分就是內存分配。

所以今天我們會分析到以下內容:

  1. Linux地址映射

  2. Linux內存分配

一、Linux地址映射

  • 下面的分析我們依據上圖進行分析,首先我們來看其最右邊的地址分布圖(當然這是虛擬空間)。其地址分布總的可以分為兩個部分我們下面慢慢分析(基于32位處理器)。


1. 用戶空間(0~3G)

a) ?空間簡介

  • 其從0x00000000到0xBFFFFFFF共3GB的線性地址空間,每個進程都有一個獨立的3GB用戶空間,當然這是虛擬的空間。

b) ?如何轉換為物理空間

  • 這一部分虛擬空間到物理空間的轉換方法是我們以前在http://www.cnblogs.com/wrjvszq/p/4246634.html一文中分析過的MMU地址轉換。

【文章福利】小編推薦自己的Linux內核技術交流群:【891587639】整理了一些個人覺得比較好的學習書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。?!前100名進群領取,額外贈送一份價值699的內核資料包(含視頻教程、電子書、實戰(zhàn)項目及代碼)? ??

2. 內核空間(3~4G)

  • 其從0xC0000000到0xFFFFFFFF共1GB大小,內核空間又可以根據映射方式的不同分為下面四塊,我們一一分析

a) ?內核邏輯地址空間

空間簡介

  • 其從0xC0000000到high_memory(圖中896MB的地方)最大為896MB(也就是說這塊空間有可能不滿,但最大為896MB),當然是虛擬空間。

注:在此注意一下896MB我們一會在分析。

如何轉換為物理空間

  • 這一部分虛擬地址與物理內存中對應的地址只差一個固定偏移量(3G),如果內存物理地址空間從0x00000000地址編址,那么這個固定偏移量就是PAGE_OFFSET(如上圖)。

b) ?Vmalloc空間

空間簡介

  • 其地址沒有嚴格的界限,這段空間既可以訪問到我們的高端內存,也可以訪問到低端內存。(高端和低端一會解釋)

如何轉換為物理空間

  • 不是通過簡單的線性關系映射,在此不研究。

c) ?永久內核映射

空間簡介

  • 其固定用來訪問高端內存。

如何轉換為物理空間

  • 不是通過簡單的線性關系映射,在此不研究。

d) ?固定映射

空間簡介

  • 其在系統(tǒng)初始化期間永久映射I/O地址空間,或者特殊的寄存器。

3. 遺留知識

  • 在剛才我們前面的分析中我們留下了一些問題下面進行解釋。

a) ?低端內存

  • 內核邏輯地址空間所映射的物理內存就是低端內存(實際物理內存的大小,但是小于896MB)

b) ?高端內存

  • 低端內存地址之上的物理內存是高端內存(物理內存896MB之上)。

c) ?896MB來由

  • Linux將內存分為內核空間和用戶空間,其中內核空間中的0xC0000000~high_memory部分用來映射物理內存,但是我們還需要映射I/O空間和固定的寄存器,所以留出了high_memory~0xFFFFFFFF之間的地址來映射I/O空間和固定的寄存器,而在X86平臺根據經驗設定了這個high_memory為896MB。

二、Linux內存分配

  • 通過上面的介紹我們對linux對內存的管理,以及地址的映射有了一個了解,下面我們來分析linux是如何進行內存分配的。


  • 通過上圖我們可以分析出內存的分配過程

  1. 由malloc、fork等系統(tǒng)調用和kmalloc、vmalloc申請得到虛擬內存。

  2. 在我們使用該內存的時候,產生請頁異常(kmalloc除外)

  3. 從空閑的頁框分配物理內存,和虛擬地址建立映射。

注:kmalloc申請空間是不用經過請頁異常的,返回的虛擬地址已經對應了物理內存。Kmalloc可以分配到連續(xù)的物理內存,vmalloc分配的是非連續(xù)的物理內存。


Linux內核分析-linux內存管理子系統(tǒng)(安排起來~)的評論 (共 條)

分享到微博請遵守國家法律
仁布县| 延吉市| 拉孜县| 法库县| 吉木乃县| 明水县| 凤台县| 潞城市| 凤庆县| 舞钢市| 崇仁县| 湟中县| 苍梧县| 肥西县| 太谷县| 观塘区| 黄平县| 安康市| 开平市| 三门县| 纳雍县| 寿宁县| 南京市| 陇西县| 南康市| 鄂托克旗| 台北市| 抚州市| 贵南县| 林州市| 边坝县| 玉环县| 明光市| 迭部县| 南通市| 连州市| 托克逊县| 许昌市| 镇原县| 巴彦淖尔市| 浦城县|