ホームページ  >  記事  >  運用・保守  >  Linuxのコンテキストとは何ですか

Linuxのコンテキストとは何ですか

青灯夜游
青灯夜游オリジナル
2022-11-10 20:09:221937ブラウズ

Linux では、コンテキストは CPU コンテキストとも呼ばれます。これは、CPU レジスタやプログラム カウンターなどのタスクを実行する前に CPU が依存する必要がある環境です。コンテキストの切り替えは、最初に以前の CPU コンテキストを変更することです。タスク (つまり、CPU レジスタとプログラム カウンタ) が保存され、新しいタスクのコンテキストがこれらのレジスタとプログラム カウンタにロードされ、最後にプログラム カウンタが指す新しい場所にジャンプして新しいタスクを実行します。

Linuxのコンテキストとは何ですか

#このチュートリアルの動作環境: linux7.3 システム、Dell G3 コンピューター。

1. コンテキストとは何ですか?

Linux は、同時に実行する CPU の数をはるかに上回るタスクをサポートするマルチタスク オペレーティング システムです。もちろん、これらのタスクは実際に実行されているわけではありません。システムは短時間で順番に CPU を割り当てるため、ユーザーは多数のタスクが同時に実行されているように錯覚します。

各タスクを実行する前に、CPU はタスクがどこにロードされ、どこで実行が開始されるかを認識する必要があります。つまり、システムは事前に CPU レジスタとプログラム カウンタ (プログラム カウンタ、PC) を設定する必要がありますが、非常に高速なメモリ

  • プログラム カウンタ: CPU によって実行されている命令の位置、または次に実行される命令の位置を保存するために使用されます

  • 要約すると、答えは見つかりました。

  • #コンテキストとは:

私たちが通常話しているコンテキストは、CPU コンテキストとも呼ばれ、CPU が依存する必要がある環境です。 CPU レジスタやプログラム カウンタなどのタスクを実行する前にオンにします。

コンテキストの切り替え:

これは、最初に CPU コンテキスト (つまり、CPU レジスタとプログラム カウンタ) を保存することです。 ) )、新しいタスクのコンテキストをこれらのレジスタとプログラム カウンタにロードし、最後にプログラム カウンタが指す新しい位置にジャンプして新しいタスクを実行します。

2. コンテキスト スイッチングの詳細な紹介

CPU スイッチング実行タスクは、さまざまな種類に応じて分割できます。 プロセスコンテキストスイッチング,スレッドコンテキストスイッチング

##,

割り込みコンテキストスイッチング #最初に、次の 2 つのコンテキスト スイッチに関連する知識ポイントを理解しましょうシステム コール、プロセス実行状態プロセスの実行状態:

Linux は、プロセスの実行空間を特権レベルに応じて カーネル空間 # と

ユーザー空間

# に分割します。これら 2 つの空間で実行されるプロセス状態は、それぞれ カーネル状態

および ユーザー状態 と呼ばれます。 カーネル スペース (リング 0): 最高の権限があり、すべてのリソース (ファイルの読み取り) に直接アクセスできます。 ,)

メモリの割り当て、IO 操作、子プロセスの作成などはすべてカーネル操作です。これは、IO 操作が頻繁に行われる場合、システム パラメーターが非常に高くなるということも示しています。
    • ユーザー空間 (リング 3): 制限されたリソースのみにアクセスでき、メモリなどのハードウェア デバイスに直接アクセスできず、システムを構築する必要があります。カーネルに入ることでのみ、これらの特権リソースにアクセスできます。

    一般的なユーザー空間プログラムには、シェル、データベース、Web サーバー、PHP プログラム、Java プログラムなどがあります。
    • top コマンドを使用して Linux システムの CPU を表示すると、ユーザーとシステムの 2 つの項目が表示されます。ユーザーモードとカーネルに対応します。ステート

      によって占有されるCPUリソースは上記の通りです。Webサービスは
    • ユーザーステート
  • で実行されています。ファイルの io に対する権限がありません。読み取りが必要な場合 ファイルをフェッチするとき、
システム コールが含まれます

# #システムコール:

ユーザー モードからカーネル モードへの移行は、システム コールを通じて完了する必要があります。たとえば、ファイルを表示する場合、開く、読み取り、書き込み、閉じるなどの複数のシステム コールを実行する必要があります。システム コールのプロセスは次のとおりです:

  • # 元のユーザー モード命令の場所を CPU レジスタに保存します;

  • カーネル コードを実行するには、CPU レジスタをカーネル モード命令の新しい位置に更新する必要があり、最後にカーネル タスクを実行するためにカーネル モードにジャンプします。

  • # システム コールが完了したら、CPU レジスタは最初に保存されたユーザー状態を復元し、ユーザー空間に切り替えてプロセスの実行を続行する必要があります。

  • ##つまり、システム コール このプロセスには、実際には 2 つの CPU コンテキスト スイッチが含まれます。

コンテキストの切り替えを処理しますか?

    #プロセスの実行が終了し、以前に使用していた CPU が解放され、次の待機タイム スライスがプロセスから取り出されます。準備完了キュー。プロセス;
  • #プロセスのタイムスライスが使い果たされると、そのプロセスはシステムによって一時停止され、CPU を待機している他のプロセスに切り替わります。 to run;
  • #プロセスは比較的大きなシステム リソース (メモリ不足など) を必要とするため、この時点でプロセスは一時停止され、システムは他のプロセスの実行をスケジュールする;
  • 優先度の高いプロセス (システム操作プロセス) がタイム スライスを必要とする場合、優先度の高いプロセスを確実に実行するために、 ;
  • ##現在のプロセスにスリープ関数がある場合、それも一時停止されます;
  • スレッドのコンテキスト切り替え?

オペレーティング システムにとって、スレッドは最小の実行単位であり、プロセスは最小のリソース管理単位です。率直に言うと、カーネル内のいわゆるタスク呼び出しは実際にはスレッドによってスケジュールされ、プロセスは仮想メモリやグローバル変数などのリソースをスレッドに提供するだけです。したがって、シーンとプロセスについては、次のように理解できます。

#プロセスにスレッドが 1 つしかない場合、プロセスは次のように考えることができます。スレッドに等しい。

  • #プロセスに複数のスレッドがある場合、これらのスレッドは親プロセスのリソースを共有します (つまり、仮想メモリやグローバルなどの同じリソースを共有します)変数)。これらのリソースは、コンテキストの切り替え中に変更する必要はありません。

  • #さらに、スレッドにはスタックやレジスタなどの独自のプライベート データもあり、コンテキストの切り替え中にこれらも保存する必要があります。

  • 要約すると、スレッド コンテキストの切り替えには 2 つの状況があります。リソースが共有されていないため、前後のスレッドは異なるプロセスに属しており、切り替えプロセスはプロセス コンテキストの切り替えと同じです;

前後の 2 つのスレッド仮想メモリは共有されているため、切り替え後は同じプロセスに属しており、切り替え時に仮想メモリなどのリソースは変更されず、スレッドのプライベート データ、レジスタ、およびその他の非共有データのみを切り替える必要があります。

  • #コンテキスト切り替えを中断しますか?

  • #割り込み処理は、通常のスケジューリングとプロセスの実行を中断します。他のプロセスを中断するときは、プロセスの現在の状態を保存する必要があります。中断が終了した後も、プロセスは元の状態から実行を再開できます。

  • 割り込みコンテキストの切り替えには、プロセスのユーザー モードは関係しません。したがって、割り込みプロセスがユーザーモードのプロセスに割り込んだ場合でも、そのプロセスの仮想メモリやグローバル変数などのユーザーモードのリソースを保存および復元する必要はありません。実際には、割り込みコンテキストには、CPU レジスタ、カーネル スタック、ハードウェア割り込みパラメータなど、カーネル モード割り込みサービス プログラムの実行に必要な状態のみが含まれます。

概要

Tsuna のテスト レポートによると、各コンテキストの切り替えには数十ナノ秒から数マイクロ秒の CPU 時間が必要です。 。

どのシナリオでコンテキスト スイッチングが発生するかに関係なく、次のことを知っておく必要があります。

  • CPU コンテキスト スイッチングは、次の 1 つです。 Linux システムの正常な動作を保証するコア機能であり、通常の状況では特別な注意を払う必要はありません。

  • #ただし、過度のコンテキストスイッチングは、レジスタ、カーネルスタック、仮想メモリなどのデータの保存と復元に CPU 時間を消費するため、実際のプロセスが短縮されます。実行時間により、システム全体のパフォーマンスが大幅に低下します。

関連する推奨事項: 「Linux ビデオ チュートリアル

以上がLinuxのコンテキストとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。