記憶體管理 序

2021-10-03 13:50:13 字數 1388 閱讀 4809

關於核心記憶體管理的學習,我想先大致理清一下各個概念之間的關係以及為什麼會出現這個概念.還有就是執行的流程圖(持續補充,想到什麼就來補上)

第一次接觸記憶體管理是從學c語言時malloc()函式開始的,當時老師講了虛擬記憶體,聽的也是一知半解,關於虛擬記憶體,我很好奇的是怎麼個虛擬法以及帶來的效果.但是要明白虛擬記憶體,應該先了解什麼是mmu,頁表,物理記憶體,物理頁面,建立對映關係,按需分配,缺頁中斷,寫時複製等機制與概念.

當了解mmu時,除了其工作原理之外,還會接觸到linux核心如何建立頁表對映,包括使用者空間頁表的建立和核心空間頁表的建立,以及核心是如何查詢頁表和修改頁表的.

當了解物理記憶體物理頁面時,會接觸到一些資料結構,比如struct pg_data_t,struct zone,struct page等.這三個描述了系統中物理記憶體的組織架構

當了解怎麼分配物理頁面時,會接觸到夥伴系統機制和頁面分配器(page allocator),頁面分配器非常複雜~

當了解malloc()怎麼分配出物理記憶體時,會接觸到缺頁中斷,也是非常複雜且要命機制.

把物理記憶體搞清之後,不自覺就會想和虛擬記憶體的對映關係.(沒完沒了-.-)虛擬記憶體和物理記憶體採用建立頁表的方法,來完成建立對映關係。程序的虛擬記憶體一般用struct vm_area_struct資料結構描述,為什麼和程序的位址空間建立對映的頁面有的叫匿名頁面,有的叫page cache頁面呢?(我搞清了 我再回來改0.0)

終於,虛擬記憶體和物理記憶體已經建立了對映關係(預設都弄清了 呵呵呵),但是這個是以為基礎的,可是有時核心需要小於乙個頁面大小的記憶體,那麼slab機制就誕生了~

以上就是基本了解的基本流程吧,但是會出問題,比如使用者持續分配和使用記憶體導致物理記憶體不足怎麼辦?這時頁面**機制反向對映機制就誕生了~

這是從分配角度,從解除對映的角度來看也會出問題,物理記憶體和虛擬記憶體的對映關係經常是建立後又被解除了,時間一長,系統的物理頁面變得凌亂不堪,碎片化嚴重,這時,核心如果還是按照需要配分大塊連續的記憶體就會變得很困難,哼,記憶體規整機制(memory compaction)就誕生了.

記憶體管理 記憶體管理概述

儲存器的發展方向是高速 大容量和小體積,即儲存器嘗試更高讀寫速度,更大儲存容量,更小物理體積。在計算機中,常見的儲存器有 暫存器,快取,記憶體,硬碟,一般硬碟之類的輔助儲存器又稱外存。在平均讀寫速度上,有 暫存器 快取 記憶體 外存 在單位容量 上,有 外存 記憶體 快取 暫存器 cpu處理器只能直...

《記憶體管理》 記憶體

1.c c 記憶體分布 我們先來看下面的一段 和相關問題 int globalvar 1 static int staticglobalvar 1 void test char char2 abcd char pchar3 abcd int ptr1 int malloc sizeof int 4 ...

關於mysql記憶體管理 MYSQL記憶體管理及優化

mysql記憶體管理及優化 記憶體是影響資料庫效能的主要資源,也是mysql效能優化的乙個重要方面 記憶體優化的原則 將盡量多的記憶體分配給mysql做快取,但是要給作業系統和其他程式的執行預留足夠的記憶體,否則產生swap頁交換,將嚴重影響系統效能 myisam的資料檔案讀取以來作業系統自身的io...