4.プロセス管理


プロセスの作成


コピー-書き込み(COW)-書き込み時コピー
親プロセス作成子プロセス

  • ツリー形成
  • プロセス
  • プロセスにはリソースが必要です
  • オペレーティングシステムから
  • を受信
  • 親と共有
  • 共有
  • リソース
  • 親と子供がすべてのリソースを共有するモデル
  • 部分共有型番
  • 非共有モデル-一般
  • 実行
  • 親子共存の模範
  • 親が子供の終了を待つ型番
  • アドレス空間
  • 子供が親の空間を複製する
  • サブアイテム新しいプログラム
  • をその空間でパブリッシュ
  • Unix例
  • fork()システム呼び出しによる新しいプロセスの生成
    コピー
  • 親(PIDとバイナリを除く)
  • アドレス空間割当
  • fork以降のexec()システム呼び出しメモリ
  • に新しいプログラムを格納

    プロセスの終了

  • プロセスは、最後のコマンドを実行した後、オペレーティングシステム(exit)に通知する.
  • サブアイテム親に出力データ(wait経由)
  • を送信する.
  • プロセスの様々なリソースは、オペレーティングシステム
  • に戻る.
  • 親プロセス終了サブプロセス(abort)
  • サブアイテムは、リソースの割り当ての制限を超え、島
  • 子供に割り当てられたタスクは不要
  • 親終了
  • オペレーティングシステムでは、親プロセスの終了時にサブプロセスを再実行できません.
  • 段階的に閉じる
  • fork()システムコール

  • A process is created by the fork() system call.
  • creates a new address space that is a duplicate of the caller.
  • int main(){
    	int pid;
    	pid = folk();
    	if(pid == 0)
    		printf("\n Hello, i am child!\n");
    	else if (pid > 0)
    		printf("\n Hello, i am parent!\n");
    }
    forkが表示されると、サブプロセスは次の時点から実行されます.
    →親プロセスのfork()次の時点をPCに格納
    親プロセスのfork戻り値は、サブプロセスとは異なる値を取得します.

    exec()システムコール

  • A process can execute a different program by the exec() system call.
  • replaces the memory image of the caller with a new program.
  • int main(){
    	int pid;
    	pid = folk();
    	if(pid == 0){
    		printf("\n Hello, i am child! Now i'll run date \n");
    		execlp("/bin/date", "/bin/date", (char *) 0); // execlp함수의 전달 형식
    	}
    	else if (pid > 0)
    		printf("\n Hello, i am parent!\n");
    }
    execシステム呼び出しで新しい起動を行うことができます.
    →execが完了すると戻れません.

    wait()システムコール

  • プロセスAはwait()システムプロトコルを呼び出す.
  • カーネルは、プロセスAをサブプロセス終了(ブロック状態)
  • までスリープする.
  • Childプロセス終了時、カーネル起動プロセスA(レディ状態)
  • int main(){
    	int childPid;
    	childpid = folk();
    	if(childpid == 0){
    		<code for child process>
    	}
    	else
    		wait(); //child가 종료될때까지 부모 프로세스는 잠들어있음
    	
    }

    exit()システムコール

  • プロセス終了
  • 自動シャットダウン
  • 最後の宣言が実行された後、exit()システムを介して
  • が呼び出される.
    コンパイラは、
  • プログラムに明記する必要がなく、メイン関数を戻り位置に配置します.
  • 非自発的終了
  • 親プロセス強制終了子プロセス
  • サブプロセスが制限を超えるリソース要求
  • 子供に割り当てられたタスクは不要
  • キーボードを使用してkill、breakなどを叩く;
  • 親が終了した場合
  • 親プロセスの終了前に子プロセス
  • を終了する.
    サマリ
    fork() create a child (copy)
    exec() overlay new image
    wait() sleep until child is done
    exit() frees all the resources, notify parent

    プロセス間コラボレーション

  • 独立プロセス
  • プロセスはそれぞれのアドレス空間を有し、原則として1つのプロセスは他のプロセスの実行に影響を与えない;
  • コラボレーションプロセス
  • プロセス連携メカニズムにより、あるプロセスが別のプロセスの実行に影響を与えることができる
  • .
  • プロセス間連携メカニズム(IPC:InterProcess Communication)
  • メッセージの送信方法
  • メッセージング:カーネルを介したメッセージ
  • 共有
  • アドレス空間
  • 共有メモリ:
  • 共有メカニズムを備え、異なるプロセス間でアドレス空間の一部を共有できる
  • thread:threadは実際にはプロセスであるため、プロセス間でのコラボレーションは困難であるが、同じプロセスを構成するスレッド間でアドレス空間を共有するため、
  • とコラボレーションすることができる.

    Message Passing

  • Message system
  • プロセス間で共有変数(共有変数)を使用せずに通信するシステム
  • .
  • Direct Communication
  • は、通信するプロセスの名前
  • を明確に示す.
  • Indirect Communication
  • メールボックス(またはポート)を介してメッセージ
  • を間接的に転送する.

    Shared Memory


    カーネルリクエストによって共有メモリ領域が作成されると、
    プロセス間で共有されるメモリ領域で操作可能