0

別のプロセス メモリに書き込むために Unix モジュールを使用したい (カーネル モードで行い、pthread インターフェイスを避けたい)。
影響を与えたいプロセスではなく、現在のプロセスメモリに影響を与える関数 (do_mmap(..)、do_unmmap(..)、sys_mprotect(..) など) を使用する必要があります。

そこで、必要なプロセスを現在のプロセスにするために、必要なプロセスへのコンテキスト切り替えを行う方法を見つける必要があると考えました。ちょっとした変更で schedule() の実装をコピーしようとしました: 行を置き換えました:

次 = pick_next_task(rq);

と:

次=私の次;

私の問題は、スケジュールには含めることができない非常に多くの構造体と関数が必要であるため、それらを再実装する必要があることです。そのようなことをするのはかなり悪いようです。何か提案はありますか?

既存のカーネルを変更することは避けたいので、ユーザーが自分のプログラムを使用するためにオペレーティング システムを再起動して変更することを強制する必要はありません (これがモジュールを使用する理由です)。

ちなみに、Linuxは「2.6.38-11-generic」版を使っています。

4

1 に答える 1

1
  1. get_user_pages()関数を使用して、ターゲット プロセス (より正確には、その mm_struct) のページを取得します。
  2. kmap()またはkmap_atomic()(コンテキストに応じて)を介して必要なページをマップします
  3. マッピングによって返されたアドレスでの書き込み/読み取り (ページ サイズ内)。
  4. kunmap()または経由でマッピングを破棄しますkunmap_atomic()
于 2011-10-11T23:33:57.760 に答える