CS/OS (2022-1)

[OS] Process Management

샤아이인 2022. 11. 22.

본 글은 반효경 교수님의 운영체제 강의를 들으며 정리하는 글 입니다.

 

1. Process의 관리

1 - 1) 프로세스 생성

  • 운영체제가 최초의 프로세스를 생성하면, 이미 존재하는 프로세스가 다른 프로세스를 복제 생성한다.
  • 이때 기존 프로세스를 부모 프로세스라 하고, 새로 생긴 프로세스를 자식 프로세스라고 부른다.
  • 프로세스의 트리 (계층 구조)를 형성한다.
  • 프로세스는 자원을 필요로 한다.
    • 운영체제에게 받는다.
    • 부모와 공유한다.
  • 자원의 공유 (3가지 모델이 가능하다)
    • 부모와 자식이 모든 자원을 공유하는 모델
    • 일부를 공유하는 모델
    • 전혀 공유하지 않는 모델
  • 수행 (Execution)
    • 부모와 자식이 공존하며 수행하는 모델 (이때는 부모와 자식이 CPU를 획득하기 위해 경쟁하는 관계가 됨)
    • 자식이 종료(terminate)될 때까지 부모가 기다리는(wait) 모델

 

1 - 2) 주소 공간

  • 자식은 부모의 공간을 복사한다. (프로세스 ID를 제외한 운영체제 커널 내의 정보와 주소 공간의 정보)
  • 자식은 그 공간에 새로운 프로그램을 추가하여, 새로은 프로그램을 실행할 수 있다.
  • 유닉스의 예
    • fork() 시스템 콜이 새로운 프로세스를 생성한다. 부모를 그대로 복사하고 주소 공간을 할당한다.
    • fork() 다음에 이어지는 exec() 시스템 콜을 통해 새로운 프로그램으로 주소 공간을 덮어 씌운다.

 

1 - 3) 프로세스 종료 (Process Termination)

  • 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려준다. (exit())
    • 자식이 부모에게 out data를 보낸다. (부모는 wait()을 호출한 상태)
    • 프로세스의 각종 자원이 운영체제에 반납된다. (자원 정리 과정이 필요하다)
    • 만약 자식의 자원이 정상적으로 정리되지 않을 경우 좀비 Process가 될수도 있다.
  • 부모 프로세스가 자식의 수행을 종료한다. (abort())
    • 자식이 할당 자원의 한계치를 넘어선다.
    • 자식에게 할당된 task가 더 이상 필요하지 않는다.
    • 부모가 종료(exit)되는 경우.
      • 운영체제는 부모 프로세스가 종료하는 경우 자식을 선행적으로 종료시킨다.

 

▶ exit()

프로그램이 끝날 때 운영체제에게 자신이 끝났음을 알리는 자발적 종료에 해당하는 시스템 콜.

Main함수 {} 끝에 명시적으로 추가하지 않아도, 컴파일러가 추가해준다.

 

▶ abort() 

부모 프로세스가 자식 프로세스의 수행을 중단시키는, 비자발적 종료에 해당하는 시스템 콜.

 

2. 기본 시스템 콜

2 - 1) fork()

  • 운영체제는 자식 프로세스의 생성을 위해 fork()시스템 콜을 제공한다.
  • 프로세스가 해당 시스템 콜을 호출하면 CPU의 제어권이 커널로 넘어가고, 커널은 fork() 를 호출한 프로세스를 복제하여 자식 프로세스를 생성한다.
  • fork() 를 수행하면 부모 프로세스의 주소 공간을 비롯해 프로그램 카운터 등 레지스터 상태, PCB 및 커널 스택 등 모든 context를 그대로 복제해 자식 프로세스의 context를 형성한다.
  • child 프로세스는 parent프로세스의 코드를 처음부터 다시 수행하지 않고, parent 프로세스가 현재 수행한 시점부터 수행하게 된다.생각해보면 당연한데, child Process는 fork할때 부모의 PC값과 레지스터도 복사해간다. 따라서 부모가 마지막으로 읽은 인스트럭션 이후부터 자식은 읽게되는 것 이다!
  • 다만 자식 프로세스와 부모 프로세스의 식별자(PID)는 다르다.

 

부모 프로세스가 메인 함수의 첫 번째 줄부터 한 줄씩 코드를 수행하다가 fork() 라인에 이르면 자신과 똑같은 프로세스를 하나 생성한다.

 

이런 경우 fork() 라인까지 수행했다는 기억조차도 똑같은 자식 프로세스가 생성된다.

따라서 복제된 Process는 자신이 원본인것 처럼 행동하게 된다.

 

다만 이 자식 프로세스가 복제된 프로세스라는 사실을 알 수 있는 단서가 있는데, fork() 의 결과 값으로 0을 반환한다.

이와 달리 부모의 경우 생성된 자식 Process의 id값인 양수의 PID를 반환한다.

 

내가 예전에 작성해둔 글이 있어 링크를 남겨본다.

https://blogshine.tistory.com/95

 

[시스템 프로그래밍] fork 함수

내가 공부한후 후에도 참고할겸 작성하는 글 입니다. 리눅스 시스템프로그래밍 2판을 참고하였습니다. 참고로 저는 WSL2 환경에서 공부중 입니다. 1. fork란 무엇인가? " data-ke-type="html"> HTML 삽입 미

blogshine.tistory.com

 

2 - 2) exec()

  • fork() 시스템 콜만으로는 같은 코드에 대해 조건을 분기하는 정도로 밖에 사용할 수 없다.
  • 자식 프로세스에게 부모 프로세스와는 독자적인 프로그램을 수행할 수 있는 방식이 바로 exec() 시스템 콜이다.
  • 이 시스템 콜은 프로세스의 주소 공간에 새로운 프로그램을 덮어 씌운 후, 새로운 프로그램의 첫 부분부터 다시 실행하도록 한다.
  • 따라서 새로운 프로그램을 수행하기 위해서는 fork() 시스템 콜로 복제 프로세스를 생성한 뒤, exec() 시스템 콜로 해당 프로세스의 주소 공간을 새롭게 수행하려는 프로세스의 주소 공간으로 덮어 씌우면 된다.

더 자세한 내용은 예전 글에 정리해두었다!

https://blogshine.tistory.com/94

 

[시스템 프로그래밍] exec 함수들

내가 공부한후 후에도 참고할겸 작성하는 글 입니다. 리눅스 시스템프로그래밍 2판을 참고하였습니다. 참고로 저는 WSL2 환경에서 공부중 입니다. 1 exec 함수란 무엇인가? " data-ke-type="html"> HTML 삽

blogshine.tistory.com

 

2 - 3) wait()

  • 자식 프로세스가 종료되기를 기다리며 부모 프로세스가 Blocked 상태에 머무르도록 할 때 사용한다.
  • 부모 프로세스가 fork() 후에 wait() 을 호출하면 자식 프로세스가 종료될 때까지 부모 프로세스를 Blocked상태에 머무르게 하고, 자식 프로세스가 종료되면 부모 프로세스를 Ready상태로 변경한다.

 

더 자세한 코드는 예전 글에 정리

https://blogshine.tistory.com/98

 

[시스템 프로그래밍] wait 함수

내가 공부한후 후에도 참고할겸 작성하는 글 입니다. 리눅스 시스템프로그래밍 2판을 참고하였습니다. 참고로 저는 WSL2 환경에서 공부중 입니다. 1. wait 이란 무엇인가? " data-ke-type="html"> HTML 삽입

blogshine.tistory.com

 

2 - 4) exit()

  • 프로세스를 자발적으로 종료할 때 사용한다.
  • 마지막 statement 수행 후 exit() 시스템 콜을 수행한다.
  • 프로그램에 명시적으로 적어주지 않아도 main 함수가 리턴되는 위치에 컴파일러가 넣어준다.

 

2 - 5) abort()

  • 프로세스를 비자발적으로 종료할 때 사용한다. (외부에 의한 종료를 당하게 된다)
  • 부모 프로세스가 자식 프로세스를 강제로 종료한다.
    • 자식 프로세스가 한계를 넘어서는 자원 요청한 경우 부모가 종료시킨다.
    • 자식에게 할당된 task가 더 이상 필요하지 않음
  • 키보드로 kill, break 등을 입력한 경우
  • 부모가 종료되는 경우
    • 부모 프로세스가 종료하기 전에 자식들이 먼저 종료되어 Reaping되어야 한다.

 

3. Process간 협력

3 - 1) 독립적 프로세스 (Independent process)

  • 프로세스는 각자의 주소 공간을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못한다.

 

3 - 2) 협력 프로세스 (Cooperating process)

  • 프로세스 협력 메커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있다.

 

3 - 3) 프로세스 간 협력 메커니즘 (IPC: Interprocess Communication)

  • IPC는 프로세스들 간의 통신과 동기화를 이루기 위한 메커니즘을 의미한다.
  • 메시지 전달 방식 (커널을 통해 메시지 전달)과 공유 메모리 방식 (일부 주소 공간을 공유)이 있다.

 

3 - 4) 메시지 전달 방식 (Message Passing)

  • 프로세스 간에 공유 데이터를 일체 사용하지 않고 메시지를 주고 받으면서 통신하는 방식이다.
  • 메시지 통신을 하는 시스템은 커널에 의해 send와 receive 연산을 제공받는다.
  • 커널을 통해서 가능한 방식이다. Process간 직접적으로 소통하는것이 아니다!

 

3 - 4 - 1) 직접 통신 (Direct Communication)

  • 통신하려는 프로세스의 이름을 명시적으로 표시한다.
  • 각 쌍의 프로세스에게는 오직 하나의 링크만 존재한다.

 

3 - 4 - 2) 간접 통신 (Indirect Communication)

  • Receiver는 메시지를 메일 박스 또는 포트로부터 전달받는다.
  • 각 메일 박스에는 고유의 ID가 있으며 메일 박스를 공유하는 프로세스만 통신할 수 있다.
  • 하나의 링크가 여러 프로세스에게 할당될 수 있다.
  • Sender는 그냥 Mailbox에 메시지를 보관해두면, Receiver들이 가져간다.

 

3 - 5) 공유 메모리 방식 (Shared Memory)

 

  • 공유 메모리 방식은 프로세스들이 주소 공간의 일부를 공유한다. 위 그림에서 (b)에 해당되는 방식이다.
  • 서로의 데이터에 일관성 문제가 유발될 수 있다.
  • 프로세스 간 동기화 문제를 스스로 책임져야 한다.

 

4. 출처 

https://steady-coding.tistory.com/527

 

[반효경 운영체제] Process Management 1 & 2

operating-system-study에서 스터디를 진행하고 있습니다. 프로세스 생성 운영체제가 최초의 프로세스를 생성하면, 이미 존재하는 프로세스가 다른 프로세스를 복제 생성한다. 이때 기존 프로세스를

steady-coding.tistory.com

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

 

반효경 [운영체제] 9. Process Management 2

설명이 없습니다.

core.ewha.ac.kr

 

'CS > OS (2022-1)' 카테고리의 다른 글

[OS] CPU Scheduling - 2 & Process Synchronization 도입  (0) 2022.11.24
[OS] CPU Scheduling - 1  (0) 2022.11.23
[OS] Process - 2  (0) 2022.11.21
[OS] Process - 1  (0) 2022.11.21
[OS] System Structure & Program Execution 2  (0) 2022.11.20

댓글