進(jìn)程由不同長度的段組成:代碼段、動態(tài)庫的代碼、全局變量和動態(tài)產(chǎn)生數(shù)據(jù)的堆、棧等,在Linux中為每個進(jìn)程管理了一套虛擬地址空間:
在我們寫代碼malloc完以后,并沒有馬上占用那么大的物理內(nèi)存,而僅僅是維護(hù)上面的虛擬地址空間而已,只有在真正需要的時候才分配物理內(nèi)存,這就是COW(COPY-ON-WRITE:寫時復(fù)制)技術(shù),而物理分配的過程就是最復(fù)雜的缺頁異常處理環(huán)節(jié)了,下面來看!
在實際需要某個虛擬內(nèi)存區(qū)域的數(shù)據(jù)之前,和物理內(nèi)存之間的映射關(guān)系不會建立。如果進(jìn)程訪問的虛擬地址空間部分尚未與頁幀關(guān)聯(lián),處理器自動引發(fā)一個缺頁異常。在內(nèi)核處理缺頁異常時可以拿到的信息如下:
處理的流程如下:
發(fā)生缺頁異常的時候,可能因為不常使用而被swap到磁盤上了,swap相關(guān)的命令如下:
命令 | 作用 |
---|---|
swapon | 開啟swap |
swapoff | 關(guān)閉swap |
/proc/sys/vm/swappiness | 分值越大越積極使用swap,可以修改/etc/sysctl.conf中添加vm.swappiness=xx來修改 |
如果內(nèi)存是mmap映射到內(nèi)存中的,那么在讀、寫對應(yīng)內(nèi)存的時候也會產(chǎn)生缺頁異常。
![]() | ![]() .. 定價:¥45 優(yōu)惠價:¥42 更多書籍 |
![]() | ![]() .. 定價:¥225 優(yōu)惠價:¥213 更多書籍 |