3

也许这件事与内核中的缓冲区分配有关。
假设我们要编写一个音乐播放器,如果发生分页,这可能会导致播放低质量的音乐时断断续续。
Video Player,我们想写一个实时软件,什么的。
我们希望将其中一个 CPU 分配给一个进程,或者我们将一个进程设置为非常高的优先级,然后我们希望确保我们的缓冲区不会被分页到 HDD。它是如何在 C 和 Linux 中完成的?

4

1 回答 1

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,然后运行实际程序。


PS通常,当出现 RT 需求时,不仅您将程序锁定在 RAM 中,而且您还将调度程序设置为实时模式,因为您可以检查sched_setscheduler(..)

于 2012-10-29T20:56:36.743 回答