Operating System : 운영체제

본 토픽은 현재 준비중입니다. 공동공부에 참여하시면 완성 되었을 때 알려드립니다.

4) Process Creation and Termination

(1) Process Creation and Termination 

 

@ 지난 시간에는 한 프로세스에서 다른 프로세스로 넘어갈 때

    // 커널이 개입합니다.

        > 이 때 Dispatch가 수행되고

            .. Context Switching을 합니다.

            .. 이 때 Interrupt가 필요합니다.

 

@ Interrupt는 두가지입니다.

    // H/W Interrupt

        > 이를 사용하는 것은 Pre-emptive Scheduling입니다.

            .. Async 합니다.

    // S/W Interrupt

        > 이를 사용하는 것은 non Pre-emptive Scheduling입니다

            .. Sync 합니다. (voluntarily)

 

@ 가장 중요한 mechanism은

    // Interrupt와 Interrupt Service Routine을 이용해서

        > Context Switching이 일어나는 스토리입니다.

            .. 이 때 Stack을 이용하게 됩니다.

 

@ 이번에 배울 내용은 Process Creation and Termination 입니다.

    // 새로운 프로세스가 생성되면

        > OS가 Fake Stack을 만들어줍니다.

            .. 이 작업이 Creation입니다.

    // 앞서 설명한 내용은 매우 단순한 내용입니다.

    // 하지만 Linux와 같은 OS에서는 조금 더 복잡합니다.

 

@ Creation은 OS가 Data Structure를 Alloc하고 초기화 시키는 것이라고 생각할 수 있습니다.

    // File System은 대상이 되는 Executable file이 존재하고,

        > 이를 메모리 컨텍스트에 읽어드립니다.

            .. 이 작업이 프로그램 Load입니다.

        > PCB를 만들어 malloc합니다.

        > PCB를 Ready queue에 끼워 넣습니다.

    // 이는 모두 수작업이라고 생각할 수 있습니다.

        

@ UNIX는 0번 Process만 위와 같이 생성하고

    // 그 후 나머지 Process는 다른 방식으로 생성합니다.

        > Cloning(복제)를 이용합니다.

            .. fork() System Call을 이용합니다.

    // 여기에서 Parent Process와 Child Process가 나뉘게 됩니다.

        > fork를 하게 되면, Parent Process를 중단하고

        > 모든 Context를 snapshot하게 됩니다.

            .. Process ID를 제외한 모든 값은 같아집니다. (Child)

        > 이를 Ready Queue로 보냅니다.

    // 이 방법은 1970년대에 제안되었고 아직도, 사용되고 있습니다.

    

@ 위의 방법은 좋은 것일까요?

    // 아니라면 어떤 문제가 있는 것일까요?    

        > 매번 Copy를 만드는 것은 비효율적입니다.

            .. Functionaly correctness한가?

            .. non Functionaly correctness(빠른가? override가 없는가?)

            

@ Functionaly correctness한가를 확인해보겠습니다.

    // 맨 처음 Process를 제외하고 다른 Process를 실행할 수 없게됩니다.

        > 그렇기 때문에 exec() System call를 사용하게 됩니다.

            .. 가지고 있는 code등에 Override합니다.

            .. 비로소 다른 프로그램이 됩니다.

            .. 굉장히 비효율적입니다.

 

@ 도표를 보면서 살펴보겠습니다.

    Process Life Cycle in UNIX

    // Wait() System call의 Argument는 Child Process ID입니다.

        > 의미는 Child Process가 수행을 종료할 때까지 Parent Process를 기다리게 하라는 의미입니다.

    // Child는 수행이 끝나면

        > exit() System Call을 호출하게 됩니다.

            .. 리소스나 데이터 스트럭쳐를 OS가 가져가게 됩니다.

            .. Exit이 잘 되었는지 확인하는 코드를 남깁니다. (Exit Status Data Structure) - (Zombi State)

    // 마지막에 남은 코드를 Parent가 확인 후 나머지 수행을 진행합니다.

    

@ 위와 같은 프로세스간 관계가 생기게 됩니다.

댓글

댓글 본문
작성자
비밀번호
버전 관리
박천명
현재 버전
선택 버전
graphittie 자세히 보기