3

おそらく、これはカーネルのバッファ割り当てに関連しています。
音楽プレーヤーを書きたいとします。ページングが発生すると、低品質の音楽再生が不安定になる可能性があります。
ビデオ プレーヤー、リアルタイム ソフトウェアなどを作成したいと考えています。
CPU の 1 つをプロセスに割り当てるか、プロセスの優先度を非常に高くしてから、バッファが 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);

次のすべてのメモリ割り当てを RAM 常駐にする関数mlockall(MCL_FUTURE);を呼び出すこともできますが、これにより、物理的に利用可能なものよりも多くを割り当てるリスクが生じ、結果は実装に依存します。

編集: 詳細については、次のリンクを確認してください : http://pubs.opengroup.org/onlinepubs/007908799/xsh/mlock.html

EDIT2: Zan Lynx のコメント
また、これを使用して (ほとんどの Linux システムで) 64KB 以上をロックするには、root 権限が必要であることに注意してください。私の意見では、ルートとして起動し、リアルタイムとメモリ ロックの要件を緩和し、ユーザー ID を切り替えてから実際のプログラムを実行するラッパーを用意するのが最善の方法です。


PS通常、RT要件が発生した場合、プログラムをRAMにロックするだけでなく、スケジューラーをリアルタイムモードに設定して、確認できるようにしますsched_setscheduler(..)

于 2012-10-29T20:56:36.743 に答える