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