2017-09-01 43 views
1

我有興趣瞭解在OSX(https://developer.apple.com/library/content/documentation/Performance/Conceptual/ManagingMemory/Articles/CachingandPurgeableMemory.htmlOSX中的可清除內存是如何實現的?

的可吹掃內存的低級實現

如何內核指示到應用層,它是內存不足,有的吹出的記憶應該是映射的?這是同步的還是異步的(即內核是否只是回收內存,應用程序只在嘗試訪問該頁面時才知道這一點,或者內核請求應用程序釋放一定量的內存?)

我來自Linux後臺並完全新的OSX/BSD。

回答

0

不只是內核回收內存和應用程序只到達知道這個 當它試圖訪問該頁面

是的,這是基本的。而不是將內存分頁到交換文件,可清除的內存頁面將被丟棄。請注意,在訪問可清除內存之前,應用程序需要將相關頁面標記爲非易失性。用於此的低級API是Mach VM API:

要分配一個可清除內存塊,請將VM_FLAGS_PURGABLE標誌傳遞給vm_allocate()。然後使用控制VM_PURGABLE_SET_STATEvm_purgable_control()函數 - 這會自動設置新的可清除狀態,例如, VM_PURGABLE_NONVOLATILE並返回以前的狀態(例如,如果內核清除了內存,則返回VM_PURGABLE_EMPTY)。