iT邦幫忙

鐵人檔案

2026 iThome 鐵人賽
回列表
自我挑戰組

從 Page Fault 到 OOM:Linux 記憶體管理 30 天拆解 系列

這個系列會從 userspace 看到的記憶體現象一路追到 Linux kernel 的設計:虛擬記憶體、page table、page fault、COW、buddy/slab allocator、page cache、swap、memory reclaim、cgroup 與 OOM。目標是建立一套能用在 production debugging 的 Linux memory mental model。

參賽天數 10 天 | 共 11 篇文章 | 3 人訂閱 訂閱系列文 RSS系列文
DAY 1

為什麼 Linux 記憶體管理值得拆 30 天

Linux 記憶體管理是我一直想系統整理的主題。平常我們很常看到一些看似簡單、但其實牽到很深的問題:為什麼 free 顯示記憶體快滿了,系統卻還跑得好好的?為什...

2026-08-03 ‧ 由 c8763yee 分享
DAY 2

虛擬記憶體:每個 process 看到的假象

如果只從程式的角度看,記憶體好像很單純。宣告變數、配置 buffer、呼叫 malloc(),拿到一個位址,接著讀寫它。可是這個位址通常不是實體 RAM 上真正...

2026-08-04 ‧ 由 c8763yee 分享
DAY 3

VMA、mmap 與 process address space

昨天提到,每個 process 都有自己的虛擬位址空間。不過 kernel 不會把整個位址空間當成一大塊平面來管理。它會把有意義的區間拆成多個 VMA,也就是...

2026-08-05 ‧ 由 c8763yee 分享
DAY 4

Page table:位址轉換到底怎麼做

VMA 告訴 kernel 某段虛擬位址應該怎麼處理,但 CPU 每次讀寫記憶體時,需要的是更具體的答案:這個虛擬位址到底對應到哪個實體頁面?這就是 page...

2026-08-06 ‧ 由 c8763yee 分享
DAY 5

TLB:為什麼快取位址轉換很重要

page table 解決了虛擬位址到實體位址的對應問題,但它也帶來一個效能問題。每次 CPU 存取記憶體,如果都要走多層 page table,成本會非常高。...

2026-08-07 ‧ 由 c8763yee 分享
DAY 6

Page fault:不是每次都是錯誤

很多人第一次聽到 page fault,會直覺把它當成錯誤。畢竟名字裡有 fault,看起來像程式壞掉了。但在 Linux 記憶體管理裡,page fault...

2026-08-08 ‧ 由 c8763yee 分享
DAY 7

Anonymous memory 與 file-backed memory

Linux 管理記憶體時,常會區分 anonymous memory 和 file-backed memory。這個差異會影響 page fault 怎麼處理、...

2026-08-09 ‧ 由 c8763yee 分享
DAY 8

Demand paging:用到才真的分配

Demand paging 是 Linux 記憶體管理裡很核心的策略。它的想法很直接:不要在 process 要求位址空間時就立刻付出所有成本,而是等它真的讀寫...

2026-08-10 ‧ 由 c8763yee 分享
DAY 9

Copy-on-write:fork() 為什麼可以很快

在 Unix-like 系統裡,fork() 會建立一個幾乎和 parent process 相同的 child process。直覺上,kernel 好像必須...

2026-08-11 ‧ 由 c8763yee 分享
DAY 10

Buddy allocator:kernel 怎麼管理 physical pages

前幾篇談到 page fault、demand paging 和 copy-on-write,都會在需要時向 kernel 取得新的 physical page...

2026-08-12 ‧ 由 c8763yee 分享