linux 記憶體管理 (一)這些問題,你都能解釋清楚嗎?

Wakke Wang發表於2020-12-31

一切的學習都是為了解決問題,而不是為了學習而學習。為了學習而學習,這種行為實在是太傻了,因為最終也學不好。

所以我們要弄清楚記憶體管理究竟能解決什麼樣的問題。

首先站在 Linux 的角度,有以下幾個問題:

1、MMU 是什麼?被設計出來是解決什麼問題的?

2、CPU是如何訪問到記憶體的?

         https://mp.weixin.qq.com/s/SdsT6Is0VG84WlzcAkNCJA?

3、程式的 4G 虛擬地址空間是如何產生的?設計虛擬地址空間的目的?4G空間是如何劃分的?

4、為什麼要有DMA、NORMAL、HIGHMEM Zone?每個zone的大小是由誰決定的?

5、系統的記憶體是如何被核心和應用瓜分掉的?

6、底層的記憶體管理演算法buddy是怎麼工作的?它和核心裡面的slab分配器是什麼關係?

7、頻繁的記憶體申請和釋放是否會導致記憶體的碎片化?它的後果是什麼?

8、Linux記憶體耗盡後,系統會發生怎樣的情況?

9、應用程式的記憶體是什麼時候拿到的?malloc()成功後,是否真的拿到了記憶體?應用程式的malloc()與free()與核心的關係究竟是什麼?

10、什麼是lazy分配機制?應用的記憶體為什麼會延後以最懶惰的方式拿到?

11、我寫的應用究竟耗費了多少記憶體?程式的vss/rss/pss/uss分別是什麼概念?虛擬的,真實的,共享的,獨佔的,究竟哪個是哪個?

12、記憶體為什麼要做檔案系統的快取?如何做?快取何時放棄?

13、Free命令裡面顯示的buffers和cached分別是什麼?二者有何區別?

14、交換分割槽、虛擬記憶體究竟是什麼鬼?它們針對的是什麼性質的記憶體?什麼是匿名頁?

15、程式耗費的記憶體、檔案系統的快取何時回收?回收的演算法是不是類似LRU?

16、怎樣追蹤和判決發生了記憶體洩漏?記憶體洩漏後如何查詢洩漏源?

17、記憶體大小這樣影響系統的效能?CPU、記憶體、I/O三角如何互動?它們如何綜合決定系統的一些關鍵效能?

 

相關文章