作業の第九週で2019-2020-1 20199323「Linuxカーネルの原理と分析」

基本

プロセスのスケジューリング時間

3が存在する時間をスケジュールするプロセス:

  • 1、、直接呼び出しスケジュール()、ユーザモードへの復帰(クロック割り込み、I / O割り込み、システム・コールおよび例外を含む)、割り込み処理、または場合)(need_reschedスケジュールによる呼タグ。
  • 図2に示すように、スレッドは()を直接呼び出しスケジュール可能なスイッチング処理を行うカーネルはまた、受動もスケジュールすることができ、プロセススケジューリングクラスの特別なカーネル・スレッドがアクティブにできるように言うことである割り込み処理でスケジュールすることができます。
  • 図3に示すように、ユーザ・モード・プロセスは、それが唯一の割込み処理に予定されているカーネル・モード、に分類後の時点によってスケジュールすることができ、アクティブスケジュールを達成することができません。

    プロセススイッチ:

    実装プロセスを制御するために、カーネルはCPU上で実行中のプロセスを停止する能力を持っているし、以前に中断し、プロセスの実行を再開しなければなりません。この動作は、スイッチングプロセス(プロセス・スイッチ)、タスク切り替え(タスクスイッチ)またはコンテキスト切り替え(コンテキスト・スイッチ)が知られています。
    CPU上で実行されるプロセスを中断し、中断が同じプロセスコンテキストにある前と後のシーンが異なって保存割り込みが、カーネルモードの実行は、ユーザモードから移行しました。

実験セクション

新しいメニューをダウンロードし、コンパイル:

GDBデバッガを使用して、ブレークポイントを設定:

スケジュールのブレークポイントを追跡:

ブレークへPick_next_taskトラック:

休憩にContext_switchトラック:

機能へのトラックの内側Switch_to:

実験概要:

我々はswitch_to()コンテキストスイッチの鍵、前記pick_next_task()関数は、プロセス・スケジューリング・アルゴリズムをカプセル化マクロ呼び出し、コンテキストスイッチングに実験スケジュール()関数を実行するために新しいプロセスを選択するために使用されて発見され、context_switch呼び出し()。カーネル・スレッドは、(直接スケジュールを呼び出すことができる)は、スイッチングの過程の、need_resched呼び出しスケジュールに従って、直接呼び出しスケジュール()、またはユーザモードへの復帰()(クロック割り込み、I / O割り込み、システム・コールおよび例外を含む)、割り込み処理をマーキングまた、クラスのような特殊なカーネルスレッドがイニシアチブプロセスのスケジューリングを取ることができ、スケジューリングは受動的可能と言うことですつまり、割り込み処理スケジュールで行うことができ、ユーザーモードプロセスは、アクティブなスケジュールを達成することはできません、それだけでカーネルモードの一つでキャッチすることができます割り込み処理中に予定されているタイミングポイントを、スケジュール。

おすすめ

転載: www.cnblogs.com/w741741/p/11876792.html