2

この分野では活発な作業がないように思われるため、ユーザーランド スレッド ライブラリの作成を検討しています。C++0x の約束と未来がこのモデルに力を与える可能性があると思います。残念ながら、このモデルを機能させるには、ブロッキング呼び出しでコンテキスト スイッチを確実に切り替えることが不可欠です。そのため、非同期バージョンに置き換えるために、すべてのシステムコールをインターセプトしたいと考えています。いくつかの注意事項があります:

  • ほぼすべての通常のシステムコールに非同期システムコールがあることは知っていますが、下位互換性の理由から、これは実行可能なソリューションではありません。
  • Linux 2.4 以前では sys_call_table を直接変更することができましたが、これはなくなりました。
  • 必要に応じてライブラリを静的にリンクしたいので、LD_PRELOAD トリックは実行できません。
  • 同様に、これはユーザーランド ライブラリであると想定されているため、カーネル モジュールはオプションではありません。
  • 最後に、同様の理由で ptrace() もオプションではありません。使用するためだけにライブラリに新しいプロセスをフォークさせることはできません。

これは可能ですか?

4

1 に答える 1

1

この分野では活発な作業がないように思われるため、ユーザーランド スレッド ライブラリの作成を検討しています。

主にハイパフォーマンス コンピューティングの目的で、ハイブリッド (カーネルお​​よびユーザーレベル) スレッドを実装するスレッド ライブラリMarcel (およびその出版物) とMPCを参照することをお勧めします。このブロッキング システム コール。

アプリケーションがブロッキング システム コールを行うときにカーネル スレッドのブロッキングを回避するために、Marcel はスケジューラ アクティベーションが利用可能な場合はそれを使用するか、動的シンボル レベルでそのようなブロッキング コールをインターセプトします。

于 2011-09-23T18:23:23.353 に答える