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