システムプロセスとユーザープロセス、カーネル制御パス、カーネルスレッドの違い

システムプロセスとユーザープロセス、カーネル制御パス、カーネルスレッドの違い

私の理解は

  • プロセスは常にユーザーモードで実行され、ユーザースペースのみを使用します。
  • カーネルは常にカーネルモードで実行され、カーネルスペースのみを使用します。

しかし、次の2冊の本を読んだ後、私の見解が間違っている可能性があると思います。間違っていたら訂正してもらえますか?

  1. MaurerのLinuxカーネルアーキテクチャでは、「システムプロセス」と「ユーザープロセス」という用語は定義なしで使用されます。仮想アドレス空間が導入され、カーネル空間とユーザ空間に分けられる場合:

    すべてユーザープロセスシステムには、0 から TASK_SIZE まで拡張される独自の仮想アドレス範囲があります。上記の領域(TASK_SIZEから2 32または2 64まで)はカーネル専用に予約されており、ユーザープロセスではアクセスできません。 TASK_SIZE は、指定された割合でアドレス空間を分割するアーキテクチャ固有の定数です。たとえば、IA-32 システムでは、アドレス空間が 3GiB に分割されるため、各プロセスの仮想アドレス空間は 3GiB です。仮想アドレス空間の合計サイズは4GiBなので、カーネルで1GiBを使用できます。実際の数字はアーキテクチャによって異なりますが、一般的な概念はそうではありません。したがって、さらなる議論では、これらのサンプル値を使用する。

    この区分は、使用可能なRAM容量に依存しません。アドレス空間の仮想化により、各ユーザープロセスは3GiBのメモリを持っていると思います。個人ユーザースペースシステムプロセス互いに完全に分離されています。現在実行中のプロセスに関係なく、仮想アドレス空間の上部のカーネル空間は常に同じです。

    ...カーネルは、個人を保護するために仮想アドレス空間を2つの部分に分けます。 システムプロセスお互いから。

    本で「ユーザープロセス」または「システムプロセス」で検索すると、より多くの例が表示されます。

    ユーザープロセスとシステムプロセスはどちらもカーネルプロセスではありませんか?

    彼らの定義は何ですか?所有者(一般ユーザーまたはroot?)、それを開始したユーザー、または他のものが異なりますか?

    この本では、上記のように、両方のタイプの「プロセス」を扱うために、単に「プロセス」の代わりに「システムプロセス」または「ユーザープロセス」を明示的に書くのはなぜですか? 「ユーザープロセス」について言う内容は「システムプロセス」にも適用され、「システムプロセス」について言う内容は「ユーザープロセス」にも当てはまると思います。

  2. BovetのLinuxカーネルの理解にはいくつかの概念があります。カーネル制御パス「そして」カーネルスレッド」。

    カーネル制御パスシステムコール、例外、または割り込みを処理するためにカーネルで実行される一連のコマンドを表します。

    ...従来のUnixシステムは、ディスクキャッシュのフラッシュ、未使用のページ交換、ネットワーク接続のメンテナンスなど、断続的に実行されるプロセスにいくつかの重要なタスクを委任しています。実際、これらの作業を厳密な線形方法で行うことは非効率的である。その機能と目的ユーザープロセスバックグラウンドで予約すると、より良い応答が得られます。何かのため システムプロセスカーネルモードでのみ実行され、最新のオペレーティングシステムは機能を次に委任します。カーネルスレッド、不要なユーザーモードのコンテキストによって妨げられません。 Linuxでは、カーネルスレッドは次の点で通常のプロセスとは異なります。

    •カーネルスレッドはカーネルモードでのみ実行され、通常のプロセスはカーネルモードとユーザーモードで交互に実行されます。

    •カーネルスレッドはカーネルモードでのみ実行されるため、PAGE_OFFSETより大きい線形アドレスのみを使用します。一方、通常のプロセスでは、ユーザーモードまたはカーネルモードで合計4GBの線形アドレスを使用します。

    検索するとより多くのコンテンツを見ることができますGoogle ブック

    Maurerの本とBovetの本に出てくる「システムプロセス」は同じ概念ですか?

    両方の本で言及されている「システムプロセス」は、ユーザースペース、カーネルスペース、またはその両方で実行できますか?

    「システムプロセス」はカーネル制御パスやカーネルスレッドとは異なりますか?

ベストアンサー1

Q:ユーザープロセスとカーネルプロセスはどちらもカーネルではありませんか?

正解があるかどうかはわかりませんが、一度試してみます。
「オペレーティングシステムの設計と実装」(A. Tanenbaum)第3版2.1章で引用すると、次のようになります。

2.1.プロセス紹介

すべての最新のコンピュータは同時に複数のタスクを実行できます。ユーザープログラムの実行中に、コンピュータはディスクからデータを読み取り、テキストを画面またはプリンタに出力することもできます。マルチプログラミングシステムでは、CPUはあるプログラムから別のプログラムに切り替え、各プログラムは数十または数百ミリ秒間実行されます。厳密に言うと、CPUは一度に1つのプログラムのみを実行しますが、1秒以内に複数のプログラムを同時に実行することができ、ユーザーに並列性という幻想を与えることができます。時々、人々は複数のプロセッサシステム(同じ物理メモリを共有する2つ以上のCPUを持つ)の実際のハードウェア並列性と対照的に疑似並列性について話します。複数の並列活動を追跡することは困難です。したがって、オペレーティングシステムの設計者は、長年にわたって並列処理をより簡単に処理できる概念モデル(シーケンシャルプロセス)を開発してきました。モデル、その用途、および結果の一部がこの章のトピックを構成します。

2.1.1.プロセスモデル

このモデルでは、コンピュータ上で実行可能なすべてのソフトウェア(オペレーティングシステムを含む)が複数の順次プロセスまたは単純なプロセスで構成されています。プロセスは、プログラムカウンタ、レジスタ、変数の現在値を含む単純な実行プログラムです。

(強調は私のもの)

まだ本を読む時間はありませんでしたが、この説明によると、「プロセス」はプロセッサで実行される作業単位であり、必要なすべてのリソース(画像、ステータス、レジスタ、カウンタ...)を持っています。 。

修正された質問に対する回答

カーネルは常にカーネルモードで実行され、カーネルスペースのみを使用します。

これはコアの種類によって異なります。モノリシックカーネルは単一のアドレス空間(カーネル空間)でコンテンツを実行しますが、マイクロカーネルはユーザー空間でカーネルプロセスを実行できます。

両方の本で言及されている「システムプロセス」は、ユーザースペース、カーネルスペース、またはその両方で実行できますか?

上記のように、システムプロセスはカーネルの種類に応じて2つのモードで実行できます。

ユーザープロセスとシステムプロセスはどちらもカーネルプロセスではありませんか?

はい、ユーザープロセスとシステムプロセスの両方がプロセスなので、名前が付けられました。 ;-) しかし、カンマの後ろの部分を理解していません。

「システムプロセス」はカーネル制御パスやカーネルスレッドとは異なりますか?

はい。プロセス(ユーザーまたはシステム=カーネル)が異なります。

カーネル制御パスは一連のコマンドを表し、カーネルスレッド(別名LWP - 軽量プロセス)は、スレッドライブラリで作成されたユーザースレッドとは異なり、カーネルから直接作成および予約されたスレッドです。

結論として

プロセス理論的な構成にすぎません。
コアたとえば、プロセス概念を実装するオペレーティングシステムの一部です。そのプロセスのスケジュールを計画します。
ワイヤー独立して予約できるプロセスの最小部分です。

おすすめ記事