也许这一点与内核中的缓冲区分配有关。
假设我们想要编写一个音乐播放器,如果发生分页,这可能会导致播放质量不稳定的音乐。
视频播放器,我们想写一个实时软件,或任何东西。
我们希望将其中一个CPU分配给一个进程,或者使一个进程具有非常高的优先级,然后我们希望确保我们的缓冲区不会被分页到HDD。在C和Linux中是如何做到的呢?
发布于 2012-10-30 04:56:37
通过调用:
int mlock(const void *addr, size_t len);//included in header #include <sys/mman.h>使用区域的起始地址及其长度,系统将保证指定的内存将驻留在RAM中,直到您调用
int munlock(const void *addr, size_t len);您还可以调用函数mlockall(MCL_FUTURE);,这将使您的所有后续内存分配成为内存驻留,但这会带来分配超过物理可用内存的风险,并且结果取决于实现。
EDIT:有关更多详细信息,请查看以下链接:http://pubs.opengroup.org/onlinepubs/007908799/xsh/mlock.html
http://pubs.opengroup.org/onlinepubs/007908799/xsh/mlockall.html
EDIT2: Zan Lynx的评论
还要注意,使用它锁定超过64KB的内存(在大多数Linux系统上)将需要root权限。在我看来,最好的方法是有一个包装器,它以root用户身份启动,设置宽松的实时和内存锁定要求,切换用户in,然后运行实际的程序。
P.S通常当RT需求出现时,你不仅会将程序锁在内存中,而且还会将调度器设置为实时模式,为此你可以检查sched_setscheduler(..)
https://stackoverflow.com/questions/13129426
复制相似问题