什么是wired memory

Mac或BSD有一个所谓的wired memory,也不是什么神秘东西,只是说分派的这类内存,在有效期内是不可以被交换到Disk上去的,以保证对速度等要求较高的处理,可以使用IOMalloc(IOFree)以及kmem_alloc_wired(kmem_free)来分派Wired memory。

在Mach的VM中,有一种称为wired memory的概念。它指那些:non-pageable,虚拟内存系统不会进行交换或者移动的内存。针对wired memory的调用有:kmem_alloc,kmem_malloc。

参与I/O传输的内存必须wired down,以防止硬件正在访问的数据的物理位置发生变化。在I/O kit中,当用来描述内存的内存描述符为I/O准备内存(这发生在prepare方法被调用时)时,内存是wired的。

与之对应的概念是pageable的memory,那些页面是可以被VM系统进行交换和移动的。针对它们的调用有:kmem_alloc_pageable,kmem_alloc_wait。

kmem_free释放wired memory以及通过kmem_alloc_pageable分配的pageable memory。kmem_free_wakeup释放kmem_alloc_wait申请的内存并wakeup那些正在通过kmem_alloc_wait申请内存的process。


你可能感兴趣的:(Mac开发,disk)