OSX中的可清除内存是如何实现的?

时间:2017-09-01 20:33:05

标签: macos memory kernel

我有兴趣了解OSX中可清除内存的低级实现(https://developer.apple.com/library/content/documentation/Performance/Conceptual/ManagingMemory/Articles/CachingandPurgeableMemory.html

内核如何向应用程序层指示内存不足并且某些可清除内存应该取消映射?这是同步还是异步(即内核只是回收内存和应用程序只有在尝试访问该页面时才会知道这一点,或内核是否请求应用程序释放一些内存?)

我来自Linux背景,对OSX / BSD来说是全新的。

1 个答案:

答案 0 :(得分:0)

  

内核只是回收内存而应用程序只知道这一点   当它试图访问该页面时

是的,基本上就是这样。不是将内存分页到交换文件,而是删除可清除的内存页面。请注意,在访问可清除内存之前,应用程序需要将相关页面标记为非易失性。用于此的低级API是Mach VM API:

要分配可清除内存块,请将VM_FLAGS_PURGABLE标记传递给vm_allocate()。然后将vm_purgable_control()函数与VM_PURGABLE_SET_STATE控件一起使用 - 这将自动设置新的可清除状态,例如VM_PURGABLE_NONVOLATILE并返回先前的状态(例如,如果内核清除了内存,则返回VM_PURGABLE_EMPTY