编程接口指南

高速缓存控制

SunOS 中的虚拟内存系统是一个高速缓存系统,处理器内存可在其中缓冲文件系统对象中的数据。系统提供了一些接口,用于控制或询问高速缓存的状态。

使用 mincore

mincore(2) 接口可确定内存页是否驻留在指定范围内的映射所涵盖的地址空间中。由于页面状态可能会在 mincore 检查页面之后和 mincore 返回数据之前发生更改,因此返回的信息可能会过时。只能保证将锁定的页面保留在内存中。

使用 mlockmunlock

mlock(3C) 会导致将指定地址范围内的页面锁定在物理内存中。在此进程或其他进程中引用锁定的页面不会导致需要 I/O 操作的页面错误。由于此 I/O 操作会干扰虚拟内存的正常操作,并且会降低其他进程的速度,因此仅有超级用户才能使用 mlock。内存中可锁定页数的限制取决于系统配置。如果超过此限制,则调用 mlock 将失败。

munlock 可用于释放对物理页的锁定。如果对单个映射的地址范围进行多次 mlock 调用,则一次 munlock 调用即可释放锁定。不过,如果 mlock 锁定了对相同页面的不同映射,则在释放对所有映射的锁定之前,不会解除对这些页面的锁定。

删除映射也会释放锁定,方法有两种:使用 mmap(2) 操作替换或者通过 munmap(2) 删除。

MAP_PRIVATE 映射关联的写复制事件会将对源页面的锁定传递到目标页面。这样,对包括 MAP_PRIVATE 映射的地址范围的锁定便会以透明方式与写复制重定向操作一起保留。有关此重定向操作的介绍,请参见创建和使用映射

使用 mlockallmunlockall

mlockall(3C)munlockall(3C)mlockmunlock 类似,但是 mlockallmunlockall 针对整个地址空间执行操作。mlockall 用于设置对地址空间中所有页面的锁定,munlockall 用于删除对该地址空间中所有页面的锁定,无论是通过 mlock 还是 mlockall 建立操作均如此。

使用 msync

msync(3C) 会导致指定地址范围内的所有已修改的页面都刷新到这些地址所映射的对象。此命令与 fsync(3C) 类似,后者对文件执行操作。