mlockall
私のカーネル3.0のmanページには次のように書かれています
mlockall() は、呼び出しプロセスのアドレス空間にマップされたすべてのページをロックします。これには、コード、データ、スタック セグメントのページ、共有ライブラリ、ユーザー空間のカーネル データ、共有メモリ、およびメモリ マップ ファイルが含まれます。呼び出しが正常に返されると、マップされたすべてのページが RAM に存在することが保証されます。ページは後でロックが解除されるまで RAM に保持されることが保証されます。
そして後で言う
ページ フォールトの遅延を防ぐために mlockall() を使用しているリアルタイム プロセスは、関数呼び出しによってページ フォールトが発生しないように、タイム クリティカルなセクションに入る前に十分な数のロックされたスタック ページを予約する必要があります。これは、十分に大きな自動変数 (配列) を割り当てる関数を呼び出して、これらのスタック ページにアクセスするために、この配列が占有するメモリに書き込むことによって実現できます。このようにして、十分な数のページがスタックにマップされ、RAM にロックできます。ダミー書き込みにより、クリティカル セクションでコピー オン ライト ページ フォールトが発生することさえありません。
このシステム コールは、到達する最大スタック サイズを推測できないため、スタックのページをロックできないことを理解しています。しかし、上に表示されている男性の最初の部分が、スタックに対しても行われていると言っているのはなぜですか? このマニュアル ページに誤りがありますか?それとも、初期スタック サイズに対してロックが行われているということですか?