Linuxカーネル - pid(task_struct)で現在のプロセスを見つける

Linuxカーネル - pid(task_struct)で現在のプロセスを見つける

私はこれを読んだ郵便はがき

しかし、私の問題はプロセスではなく現在のプロセスにあります(pidを使用して検索します)。コード以外の文書が見つからないため(例:これ) 提供される機能、期待される入力、出力の使用方法について説明します。

編集する:私は、task_struct * taskを宣言すると、タスクポインタがすでに現在のプロセスを指していることを意味しますか?

ベストアンサー1

Linuxカーネルはマルチスレッドであり、多くのプロセスが同時に実行されます。現在のプロセスのPIDを受け取ると、もはや「現在の」プロセスではない可能性があります。

非プリエンプティブカーネルは完了するまでプロセスを実行できますが、通常はそうではありません。各プロセスの良好なレベルを設定できます。良いレベル-20(悪い)は、システム全体が完了するまでインテリジェントな方法でプロセスに参加します。

プロセスがディスク読み取りを実行する必要があり、システムがメモリを直接読み取ることができる場合、カーネルは他のプロセスが何百万のCPUサイクルを使用できるようにすることができます。

しかし、デスクトップシステムでは、-20という良いレベルに設定されたユーザープロセスはあまりありません。範囲は-10から10までです。有効にすると、top最も重要なプロセスが表示され、各プロセスは良いレベルで表示されます。

Linuxはマルチスレッドカーネルを使用してUNIXのように動作します。各スレッドは同じプロセスに属することも、異なるプロセスに属することもできます。通常、デスクトップシステムはユーザーの対話に応答する必要があるため、プリエンプティブコアと高速タイマーを使用します。

コアが非プリエンプティブでない限り、サーバーは何度も重大なパフォーマンス低下を経験します。スレッド、プリエンプション、ロックの概念は非常に複雑です。しかし、これはいくつかの概要を提供します。

プリエンプションとスレッド

おすすめ記事