官术网_书友最值得收藏!

2.3.2 內存管理

虛擬內存使你的系統看起來好像它有比物理內存更多的內存。事實上,每個進程都有很多(虛擬)內存。它是這樣工作的:物理內存和虛擬內存都被劃分為固定長度的塊,我們稱為頁面。

圖2-3顯示了兩個進程的虛擬地址空間,每個進程都有自己的頁表。這些頁表將進程的虛擬頁映射到主內存(又名R A M)中的物理頁面。

圖2-3:虛擬內存管理概覽

多個虛擬頁可以通過各自的進程級頁表指向同一個物理頁。在某種意義上,這就是內存管理的核心:有效地為每個進程提供其頁面實際存在于RAM中的假象,同時優化地使用現有空間。

每次CPU訪問進程的虛擬頁面時,原則上CPU必須將進程使用的虛擬地址轉換為相應的物理地址。為了加快這一過程(可能是多層的,因此很慢),現代CPU架構支持一種稱為轉換后援緩沖器(TLB)的片上查找(https://oreil.ly/y3xy0)。TLB實際上是一個小緩存,在發生錯誤時,它會導致CPU通過進程頁表計算頁面的物理地址并更新TLB。

傳統上,Linux的默認頁面大小為4KB,但從內核v2.6.3開始,它支持大頁面(https://oreil.ly/7rqLO),以更好地支持現代架構和工作負載。例如,64位Linux允許每個進程使用最多128TB的虛擬地址空間(虛擬是理論上可尋址的內存地址數量),總共大約64TB的物理內存(物理是你機器中的RAM數量)。

好的,這是很多理論信息。讓我們從更實際的角度來看一下。一個非常有用的工具是/proc/meminfo接口,它可以計算出內存相關的信息,比如有多少內存可用:

?列出物理內存(RAM)的詳細信息,這里是4GB。

?列出虛擬內存的詳細信息,這比34TB多一點。

?列出大頁面信息,顯然這里的頁面大小是2MB。

接下來,我們繼續討論下一個內核功能:網絡。

主站蜘蛛池模板: 临西县| 历史| 保德县| 怀化市| 托克逊县| 内黄县| 佛山市| 玉树县| 阳原县| 达拉特旗| 寿宁县| 双鸭山市| 南安市| 平潭县| 肇源县| 台北县| 新龙县| 金川县| 德化县| 阿坝| 赫章县| 和林格尔县| 木里| 遂平县| 雷波县| 樟树市| 邻水| 临安市| 陆良县| 崇阳县| 沂源县| 灵台县| 寻乌县| 凤翔县| 定襄县| 苍梧县| 玛纳斯县| 泰和县| 华阴市| 宣恩县| 丘北县|