也许这一件事与内核中的缓冲区分配有关。
假设我们想要写一个音乐播放器,如果发生分页,这可能会导致低质量音乐播放不稳定。
视频播放器,我们想写一个实时软件,或任何东西。
我们希望将一个CPU分配给一个进程,或者我们将进程设置为非常高的优先级,然后我们要确保我们的缓冲区不会被分页到HDD。它是如何在C和Linux中完成的?
答案 0 :(得分:7)
致电:
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);
,这将使您的所有后续内存分配成为RAM居民,但这会带来分配超过实际可用内容的风险,结果取决于实现。
修改强>
有关更多详细信息,请查看以下链接:
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身份启动的包装器,设置宽松的实时和内存锁定要求,切换用户ID,然后运行实际的程序。
P.S 通常,当出现转换请求时,不仅要将程序锁定在RAM中,还要将调度程序设置为实时模式,为此可以检查sched_setscheduler(..)