Linuxカーネルは、どのプロセスがシステムコールを行ったかどうかを知ることができますか? [閉鎖]

Linuxカーネルは、どのプロセスがシステムコールを行ったかどうかを知ることができますか? [閉鎖]

プロセスがファイルを開くためにシステムコールを実行すると仮定します。 Linuxカーネルがこのシステムコールを実行すると、Linuxカーネルはシステムコールをfd実行したプロセスのテーブルに開いたファイルを追加する必要があります。fd

システムコールに渡されたパラメータにPIDが含まれていない場合、Linuxカーネルはどのプロセスがシステムコールを行ったかをどうやって知ることができますか?

ベストアンサー1

カーネルシステムコールは、呼び出しプロセスのコンテキストで他の権限レベルとは異なるサポートインフラストラクチャを使用して実行されます。 Linuxカーネルには、現在のプロセスを追跡するCPU固有の変数があります。current_task;現在のプロセスが何であるかを知る必要があるときはいつでもこれを使います。特定のCPUでは、現在のタスクはスケジューラが決定したときにのみ変更され、コンテキストスイッチはカーネルが何が起こっているかを追跡するのに必要なすべての情報を保存するように注意します。

LWNにはシステムコールに関するいくつかの役に立つ記事があります。システムコール分析第1部そしてパート2。システムコールの定義方法とその実行方法について説明します。ユーザー空間からカーネル空間への変換について詳しく説明していないので、実際に質問に答えるのに十分な詳細はありませんが、これは「ただ」落とし穴です。 CPU変換サポートで使用できるベーストラップです。

おすすめ記事