[スイッチ]コンテキストの切り替え

コンテキスト
まず第一に、我々はそれがコンテキストが何であるかをクリアにする必要があります。

各タスクの実行前に、CPUからのタスクがどこにロードするかを知る必要があり、ランニングを開始する場所から、CPUのレジスタとプログラム・カウンタ(PC)を含まれ:

CPUのCPUレジスタは小さい容量が、高速メモリに内蔵され、
指令位置カウンタ記憶されたプログラムがCPUによって実行される、または位置の命令を実行します。
任意のCPUを実行する前に、これらの2つのタスクがCPUコンテキストと呼ばれる、環境に依存する必要があります。


コンテキストスイッチは、
だから、文脈がそれを切り替える何ですか?ここでは時にコンテキストスイッチを実行するために必要な手順は次のとおりです。

CPU前コンテキスト(すなわち、CPUレジスタ及びプログラムカウンタ内部の内容)が保存;
、レジスタ、プログラムカウンタに新しいタスクのコンテキストをロードし、
最後に新しいタスクを実行するために、プログラムカウンタに示される新たな位置にジャンプ。
コンテキストに保存されては再スケジュール負荷へのタスクの待ちを再度実行して来る、システムのカーネルに保存されます。

プロセスのコンテキストスイッチ、スレッドコンテキストの切り替え、割り込みコンテキストスイッチング:三つのカテゴリーを切り替えるCPUコンテキスト。


システムコール
特権レベルでのLinuxに従って、カーネル空間とユーザ空間の中にスペースを実行するプロセス:

カーネルスペース:最高権威、あなたはすべてのリソースにアクセスすることができ、
ユーザ空間:のみ限られたリソースにアクセスすることができ、直接アクセスメモリおよび他のハードウェアデバイスはできませんが、システムを呼び出さなければなりません。
プロセスは、(と呼ばれる:プロセスのユーザーモード)を実行することができます:カーネル空間でユーザ空間で、あなたはまた、(プロセス、カーネルモードと呼ばれる)を実行することができます。ユーザーモードからカーネルモードへのシステムコールを必要とします。

システムCPU呼び出したプロセスのコンテキストスイッチが発生することもあります。CPUレジスタは、ユーザーモードの状態に保存され、その後、カーネルモードのコンテンツをロードしています。システムコールの後、元の状態を復元するためにCPUのレジスタは、ユーザによって保存され、プロセスが実行し続けます。したがって、システムコールは、2つのCPUコンテキストスイッチが発生します。

システムは、プロセスは、ユーザモードなどの仮想メモリリソースのプロセスを必要としない、それが日常切り替わりません呼び出す、ということに注意してください。そして、一般的に異なる間のプロセスのコンテキストスイッチと呼ばれます。

あるプロセスから別のものに切り替えるプロセスコンテキストスイッチ手段は、
呼び出しプロセス・システムは、同じプロセスで実行されています。

プロセスコンテキストスイッチング
プロセスは、カーネル、カーネルモードプロセスの唯一の管理およびスケジューリングを切り替えることにより生成されます。したがって、プロセスのコンテキストは、また、状態カーネル空間カーネルスタック、レジスタ、等を含むだけでなく、ユーザ空間の仮想メモリ資源、スタック、グローバル変数を含みます したがって、プロセスのコンテキストは、スイッチングシステムコールより1つのステップ:等現在のプロセスの状態を保存する前に、カーネルとCPUレジスタ、第一の仮想メモリプロセスは、スタックを保存し、次のローディングカーネル・モード・プロセスの後、プロセスは、リフレッシュされる必要があります仮想メモリとユーザースタック。コンテキスト保存し、CPU上で実行中のカーネルを完了するために必要なのコンテキストを復元します。

TLB(変換索引バッファ)によるLinuxは、物理メモリ、仮想メモリマッピングを管理します。仮想メモリを更新すると、TLBにもなりますので、遅いメモリアクセス速度をリフレッシュする必要があります。特にマルチプロセッサシステムにおいて、キャッシュは複数のプロセッサによって共有される、キャッシュがないだけ更新され、現在のプロセッサのコースに影響を及ぼし、プロセッサは、キャッシュを共有する他のプロセスに影響を与えます。

Linuxは、優先順位が最も高く、待っている必要なプロセスを選択し、ほとんどのCPUは、各CPUのためのレディキューは、アクティブなプロセス(実行しているとCPUのプロセスを待っている)、優先度に応じて、ソートにCPU時間を待っているが、維持されます実行するためのCPU最長のプロセス。

スイッチングのプロセスのスイッチ文脈する必要がある、プロセススイッチングのシナリオは以下のとおりです。

処理時間スライスが排出される。
(このようなメモリの不足など)が不十分なシステムリソース、
プロセススリープ機能睡眠によって自分自身をハングアップするために、
より高い優先順位のプロセスが実行されているがある場合、優先度の高いプロセスを実行するために、現在のプロセスが中断されます;
発生ハードウェア割り込み、プロセスはCPU上で停止され、その後、割り込みサービス処理をカーネル実行します。

スレッドコンテキストの切り替え
スレッドは、スケジューリングの基本単位であり、このプロセスは、リソースの所有者の基本単位です。

タスクのスケジューリングカーネルは、スレッドは、プロセスは、スレッドは単に仮想メモリリソース、グローバル変数などを提供するために、スケジュールに実際にあります。スレッドコンテキストの切り替えは、同じ仮想メモリを共有した場合、グローバル変数や他のリソースを変更する必要はありません。そして、このようなスタックやレジスタなど、プライベートデータのスレッドがコンテキストスイッチを保存する必要があります。

2例を切り替えるスレッド:

;前と後の2つのスレッドは異なるプロセスに属し
前と後の2つのスレッドが(より速く、より少ないリソースを消費する)同じプロセスに属しています。

スイッチング割り込みコンテキスト
ハードウェアイベント、スケジューリングと通常の実行プロセス割り込みに迅速に対応するためには、処理を中断し、その後、割り込みハンドラ、イベント応答機器を呼び出します。他のプロセスによって中断するときは、まず、このような中断の後など、プロセスの現在の状態を生き残るために必要な、プロセスはまだ戻って回復することができます。

別のプロセスのコンテキストでは、割り込みコンテキスト切り替え処理は、ユーザ・モードを必要としません。だから、でも、ユーザによって中断プロセスを中断することは、プロセスの状態にあるユーザーモード仮想メモリリソースのプロセスを保存し、復元する必要があり、グローバル変数などはありません。割り込みコンテキスト、サービス・ルーチンの実行に必要な状態、すなわち、CPUレジスタ、カーネルスタック、パラメータ割込みハードウェア割込みのみカーネルモードを含みます。

同じCPUで、割り込み処理はとても割り込みコンテキストスイッチングとプロセスコンテキストスイッチが同時に発生していない、プロセスよりも優先順位が高いです。また、割り込み以来、あなたは可能な限り迅速に完了できるように、そのほとんどの割り込みハンドラDapperのの、スケジューリングと実行の通常のプロセスを中断します。

参考記事:https://blog.csdn.net/qq_41359051/article/details/89673188#_0

おすすめ

転載: www.cnblogs.com/atai/p/12355086.html