這個系列會從 userspace 看到的記憶體現象一路追到 Linux kernel 的設計:虛擬記憶體、page table、page fault、COW、buddy/slab allocator、page cache、swap、memory reclaim、cgroup 與 OOM。目標是建立一套能用在 production debugging 的 Linux memory mental model。
Linux 記憶體管理是我一直想系統整理的主題。平常我們很常看到一些看似簡單、但其實牽到很深的問題:為什麼 free 顯示記憶體快滿了,系統卻還跑得好好的?為什...
如果只從程式的角度看,記憶體好像很單純。宣告變數、配置 buffer、呼叫 malloc(),拿到一個位址,接著讀寫它。可是這個位址通常不是實體 RAM 上真正...
昨天提到,每個 process 都有自己的虛擬位址空間。不過 kernel 不會把整個位址空間當成一大塊平面來管理。它會把有意義的區間拆成多個 VMA,也就是...