Process Management

8544 ワード

プロセスの作成


  • コピー-書き込み(COW)テクノロジー:子プロセスが親プロセスのみを共有し、変更が発生した場合は、コピーの作成ではなくその部分のみをコピーします.

  • 親プロセスサブプロセスの作成(コピーの作成)

  • プロセスツリーの作成(階層)

  • プロセス実行に必要なリソース
  • オペレーティングシステム受信
  • 親とリソースを共有

  • リソース共有
  • すべてのリソースを共有するモデル
  • 部分共有型番
  • 非共有型番(一般)

  • 修行する
  • 親と子供が共存するモード
  • 親が子供の終了を待つ型番

  • アドレス空間
  • 子コピー親空間(コピーが作成されたため、親プロセスコンテキストがコピーされます)
  • サブアイテムは、その空間に新しいプログラム
  • をロードする.

  • Unixの例
  • fork()システムコール新規プロセスの作成(レプリケーションの作成)
  • exec()システム呼び出しにより、
  • を新しいプログラムメモリにロードする.

    プロセスの終了

  • プロセスは、最後のコマンドを実行した後、オペレーティングシステムに通知する(exit.自動終了プロセスシステムプロトコル)
  • サブプロセスは、出力データ(waitシステム呼び出し)
  • を親プロセスに送信する.
  • プロセス中の様々なリソースは、オペレーティングシステム
  • に戻る.
  • 親プロセス終了サブプロセスの実行(abort.システムプロトコルの強制終了)
  • 子割当のリソース制限を超える場合は
  • である.
  • サブアイテムに割り当てられたタスクが不要になった場合、
  • 親終了
  • オペレーティングシステムは、親プロセスの終了時にサブプロセス
  • を終了する.
  • 終了フェーズ完了(孫プロセス終了->子プロセス->親プロセス終了)
  • fork()システムコール


  • プロセスはfork()システムプロトコルによって作成されます.
    int main(){
        int pid;
        printf("\n 부모 프로세스만 출력할 수 있는 부분");
        pid= fork(); //fork 시점 이후부터 자식 프로세스가 실행됨(부모 프로세스의 PC를 자식이 알고 있기					  때문에(문맥을 복사했기 때문))
        			 //fork()의 리턴으로 pid가 오는데, 부모 프로세스의 pid는 양수이고, 자식 프로세스					는 0(구분가능)
        if(pid==0)
            printf("\n Hello, I'm Child Process");
        else if(pid>0)
            printf("\n Hello I'm Parent Process");
        ...
    }
  • exec()システムコール


  • プロセスはexec()システムプロトコルで他のプログラムを実行できます.
    int main(){
        int pid;
        pid= fork();
        if(pid==0){
            printf("Hello I'm Child");
            execlp("/bin/date", "/bin/date",(char*)0);//이 함수가 exec() 시스템 콜을 함
            										  //자식 프로세스는 date라는 프로그램을 덮													 어씌우게 됨(새로운 프로그램 실행).														 자식 프로세스는 해당 프로그램이 종료되면 												 수행을 다함. 다시 이곳으로 돌아올 수는 없음
        }
        else if(pid>0) printf("Hello I'm parent");
        ...
    }
  • wait()システムコール


  • 親プロセスをサブプロセスが終了するまでスリープ状態にします.

  • 子プロセスの終了時に親プロセスを起動(準備完了ステータス)
    int main(){
        int childPID;
        
        childPID= fork();
        
        if(childPID==0){
            ...
        }else{
            wait()
        }
        ...
    }

  • ex)Linuxのコマンドプロンプトで特定のプログラムの名前を入力すると、コマンドプロンプトという親プロセスが特定のプログラムの子プロセスを作成し、プログラムの終了を待ってからコマンドライン(サブプロセスの終了前にコマンドラインxを入力)を入力できます.
  • exit()システムコール

  • プロセス終了時に使用するシステムコール
  • 自動シャットダウン
  • 最後のコマンドを実行すると、exit()システムコール
  • が明確に入力される.
  • または、コンパイラは、関数の戻り位置
  • に配置する.
    非自発的終了
  • 親プロセス強制終了子プロセス
  • サブプロセスは、割り当てられたリソース制限
  • を超えている.
  • 子供にタスクを割り当てる必要がない場合、
  • キーボードを使用してkill、breakなどのコマンドを入力と
  • になります.
  • 親終了
  • サブプロセスが先に終了すると、親プロセスが終了する(ツリーの下から順に上へ)
  • .

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


  • 独立プロセス
  • プロセスはそれぞれのアドレス空間を有し、原則として1つのプロセスは他のプロセスの実行に影響を与えない.

  • コラボレーションプロセス
  • プロセス連携メカニズムにより、あるプロセスが別のプロセスの実行に影響を与えることができる
  • .

  • プロセス間コラボレーションメカニズム
  • メッセージの転送方法
  • メッセージング:カーネルを介したメッセージの転送
  • DirectCommunication:通信するプロセスの名前を明示的に表示する
  • Indirect Communication:カーネル内のメールボックスを介してメッセージを間接的に転送する
  • アドレス空間共有方法(カーネル共有を通知する領域を先にシステムで呼び出す必要がある)
  • 共有メモリ:異なるプロセス間でアドレス空間の一部を共有する
  • リファレンス


    https://core.ewha.ac.kr/publicview/C0101020140307151724641842?vmode=f