Caozuojitong - プロセス管理1

オペレーティングシステム - プロセス管理1

  1. 状態と遷移の基本的なプロセス
  • ベーシック状態:

    • レディ状態:外部の条件を満たしますが、理由はCPUリソースの不足の、実行するために一時的にできなくされています
    • 実行状態:状態は、CPUリソースの実行状態に入る準備をします
    • 状態ブロッキング:プロセスを実行することが一時的にできないので起こるのを待って、何かを、である、それは外部の実行条件を持っていません。
  • 変換プロセス:

    プロセスはまた、準備や障害物である定常状態に分け、(一時停止)一時停止された後に静止します。したがって、5つの状態の全体の​​プロセス。プリミティブは保留されていること、プリミティブ中断アクティブなプロセスは依然として同じプロセスによって変更することができ、まだアクティブなプロセスを有効にするにはアクティブなプロセスによって変換することができます。

  1. Linuxプロセスのステータス

    プロセスの状態を表すためのLinux task_struct構造を介してカーネルの状態構造の部材によって記載されています。

  • 状態TASK_RUNNING:状態が実行されている上記の状態を含むと準備ができて、それを区別するためにCPUリソースであるかどうかを、Linuxは区別するために、現在の変数があります。
  • TASK_INTERRUPTIBLE状態:割り込み待ち状態、Linuxの待機状態待機状態割り込みや無停電待機状態に。プロセスがウェイクアップ信号によりレディ状態に入ることができることを割り込み待ち状態手段。
  • TASK_UNINTERRUPTIBLE状況:無停電待ち状態。
  • TASK_STOPPEDステータス:特別な治療のいくつかの種類を待って、状態によって一般走行から変換。
  1. プロセス組成
  • プログラム:プロセスが機能を実行する必要があること
  • データ収集:データは、プロセスの必要性が対処することを示しています
  • PCB(プロセス制御ブロック):PCBは、データ構造及びプロセス自体の現在の状態の特性を記述するために使用されます。これは、情報、制御情報とリソース情報のプロセスの記述が含まれています。最初にその機能を完成させる過程で作成されるPCBは解放されません。プロセス識別子、プロセッサ状態、プロセススケジューリング情報およびプロセス制御情報:PCBは、一般に、4つの部分を有しています。
    • プロセス識別子は、一意のプロセスを識別する
      • 内部プロセス識別子:オペレーティングシステムの識別子は、各プロセスに割り当てられた固有の番号を表します。
      • 外部識別子:作成者により提供される、文字、数字。
    • プロセッサ・ステータス:プロセッサコンポーネントの各種レジスタの内容。プロセッサが中断されたとき、PCBは、再実行されたときに、ブレークポイントから処理を継続できるようにするために、このような情報レジスタを保持します。レジスタは:汎用レジスタ、命令カウンタ、プログラム・ステータス・ワードPSWとユーザスタックポインタ。
    • プロセスのスケジューリング情報:スケジューリングと変更関連情報のプロセスのプロセス。含むプロセス状態、プロセスの優先順位、プロセススケジューリング、原因または閉塞に関連するイベント情報(エグゼクティブによって入射の変換のプロセスに待機する状態を阻止している参照)。
    • 制御情報を処理します
      • プログラムと住所データ:住所プログラムのプロセスと必要なデータが配置されています。プログラムは、実行時にPCBから目的のデータのアドレスを取得することができます。
      • プロセスの同期と通信機構
      • インベントリ:CPUのリソースに加えて、プロセスのために必要なすべてのリソースのリストが含まれており、プロセスがリソースを取得しています。プロセス条件は、外部に応じて満たされているかどうかを判断するために、リストの準備状態に入ることができます。
      • リンク・ポインタ:このプロセスのPCB PCBキュー先頭アドレスプロセスで。
  1. PCBが編成されています
  • リニアモード:全体のシステム、同時スレッドおよび持続性配分空間のシステムの所定の最大数。スケジューリングプロセス中に、テーブル全体をスキャンする必要が、効率が比較的低くしながら、同時プロセスの最大数を定義します。
  • リンク方法:プロセスの別の状態に応じては、異なるキューに配置されます。単一CPUの場合には、一つだけキューが動作状態その他の状態は別のパーティションによると、複数のキューを持つことができます。準備完了状態キューの場合は、CPUスケジューラは常に実行キューにキューから最初のPCBを獲得します。新しいPCBは、挿入するスケジューリングアルゴリズムに従ってレディキューに追加されます別の理由に対応するブロッキングキューブロックの複数。ブロックされた状態に入りますキューをブロックしたときに何らかの理由でプロセスを実行します。Linuxは、PCBのこの組織モデルを応用したものです
  • インデックスの方法は:このようなインデックステーブルなど、いくつかのインデックステーブルの確立、準備は、インデックステーブルをブロックし、テーブルには、PCBのテーブルにPCBのアドレスを記録します。
  1. プロセス制御

    失効プロセスを作成し、状態間の変換プロセスを完了するために特定の機能を有するブロックを使用してそのプロセス制御システム。

  • 家族関係のプロセス:

    プロセスが使用できるシステムコール機能を親プロセスの作成者として知られている新しいプロセスを作成するために、子供の生みの親として知られています。子プロセスは、プロセスツリーを形成するためのプロセスを作成することができます。

    :多くの機能的なサブプロセスを含む、親プロセスから継承され、ファイルシステムの現在のディレクトリ内のファイルを開いて、ユーザ識別子、環境変数共有ストレージは、信号処理ルーチンのエントリ・テーブルなどの上に接続されています

    そこのシステムが停止し終了すると、システム起動時に作成されるプロセスもあり、重要な位置を持っています。UNIXは、0 ^#^#1システムおよびプロセスとして処理します。0 ^位^#1は、プロセスを作成するプロセスは、すべてのプロセスの祖先であり、システムのプロセスのスケジューリングおよびスワッパあります。

    INIT()関数によってLinuxシステムのようないくつかの初期化タスクを完了するために、識別子を第1のプロセスINITのシステムを作成するには、オープンシステムコンソールシステムを起動するルートファイルシステムデーモンをマウント、システムの初期化手順を実行します。初期化プロセスは、新しいプロセスを作成するためのスクリプトファイルとしてECT / inittabファイルを使用しています。

  • プロセスの作成と終了

    プログラムを実行するには、ユーザーがログインすることで作成されたイベント、ジョブスケジューリング、およびサービスをユーザーに提供する過程につながるプロセスを作成する必要があります。

    • プロセスステップを作成:

      • アプリケーションのブランクPCB新しいプロセスの一意の識別子を取得するプロセス、およびPCBコレクションに空白のPCBを適用します。
      • プロセスのためのリソースを割り当てますプログラムは、新しいプロセス、必要なデータとユーザスタックメモリ空間を含んでいます。この場合、システムは、新たなプロセスのために必要なメモリサイズを知っている必要があります
      • 初期化プロセス制御ブロック。
      • PCB挿入レディキューの新しいプロセス。
    • プロセスを終了:

      イベントは、プロセスが行われた終了するシステムを必要とする場合、オペレーティングシステムは、プロセスを終了、プロセスプリミティブ終了を呼び出します。

      • キューから取得された識別子のプロセスは、PCBプロセスのPCBは、そのステータスを読み取ります。
      • 実行されている場合は、すぐに停止した後、実行、再スケジューリングのプロセスを停止します。
      • 子プロセス全体での場合、プロセスは、子供を持っているかどうかを確認します。
      • リソースを解放するプロセスを終了し、親プロセスやシステムに戻りました。
      • PCBは、プロセスキューから削除されます。
  • ウェイクアッププロセスをブロックします。(シンプルは省略しました)

  • Linuxシステムコール

    • フォーク()システムコール:Linuxのフォークを使用して()システムコールは、新しいプロセスを作成します。コールフォーマットは通常、次のとおりです。int pid = fork();

      PID = 0:サブプロセスからの戻り、CPUは、子プロセスを実行し、成功するために子プロセスを作成します。

      PID> 0:、どの戻り親プロセスから、成功するために新たに作成された子プロセス識別子のためのPIDを子プロセスを作成します。

      PID = -1:子プロセスが失敗した作成

    • EXEC()システムコール:

      親プロセスの子プロセスのフォーク()システムコールと作成は、コードの同じ部分であるが、作業の完了は異なっています。Linuxのフォーク()は子プロセスを作成するためにした後、あなたは、exec()システムは、別のプログラムを実行する呼び出すことができます。

      呼び出し形式は次​​のとおりです。

      int execl(path,arg0[,arg1,..],0)

      char *path,*arg0,*arg1..

      機能の役割のExecの家族は、ファイル名、呼び出し元のプロセス内で実行される実行可能ファイルによって、適切な実行可能ファイルを見つけることです。正常に実行は、返すために失敗を返さない-1

    • 終了()システムコール:

      Linuxは、自己実現のプロセスを終了するために出口を使用します。プロセスでは、すぐに消えますが、PCBを除くほぼすべてのメモリを解放したゾンビ状態、にしない()の出口を呼び出します。

    • ()システムコールを待ちます。

      コールが終了シグナルを受信するまで中断処理します。

おすすめ

転載: www.cnblogs.com/lunar-ubuntu/p/12233512.html