데이터 엔지니어

[OS Chapter 4] Process Management 본문

컴퓨터 과학(Computer science)/운영체제(Operating System)

[OS Chapter 4] Process Management

kingsmo 2020. 10. 20. 15:12

 

4번째 챕터입니다.

이번 챕터에서는 Process의 생성과 삭제를 코드로 설명해주십니다.

문제나 다른 정리본을 참고하실려면 아래 깃헙 레포를 참고해주세요.

 

4번째 강의 링크

 

깃헙 레포: github.com/smothly/OS-study-7week-challenge

 

smothly/OS-study-7week-challenge

7주동안 진행 되는 OS 스터디. Contribute to smothly/OS-study-7week-challenge development by creating an account on GitHub.

github.com


프로세스

프로세스 생성

  • 부모 프로세스를 복제하여 자식 프로세스를 만듭니다.
  • 복제라는 것은 프로세스의 문맥을 그대로 복사하는 것이다.
  • Copy-on-write(COW) write가 발생했을 때 copy하겠다.
    • PC만 공유하다가 부모와 자식의 내용이 달라지면 그때 새로운 자식 프로세스를 만든다.
  • 부모는 하나 자식은 여러개로 프로세스의 트리 구조(계층 구조)가 형성됨

프로세스는 자원을 필요로 함

  • 운영체제로부터 받는다
  • 부모와 공유는 경우에 따라, 원칙적으로는 공유하지 않음

자원의 공유

  • 부모와 자식이 모든 자원 공유
  • 일부 공유
  • 전혀 공유하지 않음

수행(Execution)

  • 부모 자식 공존하며 수행되는 모델
  • 프로세스가 실행이 될 때 자식이 종료 될 때까지 부모가 기다리는 모델

주소공간

  • 자식은 부모의 공간을 복사 (binary + OS data except PID)
  • 복제된 공간에 새로운 프로그램을 올림

유닉스의 예

  • fork() 시스템 콜 :새로운 프로세스 생성, 부모를 그대로 복사 + 주소공간 할당
  • exec() 시스템 콜: 새로운 프로세스를 메모리에 올림
  • 두개는 독립적인 명령임

 

프로세스 종료

  • exit() 시스템 콜
    • 코드에서 중괄호를 닫는 부분이 exit을 자동으로 된다.
    • 자식이 부모에게 output data를 보냄(wait 시스템 콜)
    • 프로세스의 각종 자원들이 운영체제게에게 반납됨
  • abort
    • 비 자발적인 종료
    • 자식이 할당 자원의 한계치를 넘어섬
    • 자식 태스크가 필요하지 않는 경우
    • 부모 프로세스가 종료하는 경우 자식이 더 이상 수행되지 않도록 한다. 밑에서부터 위로 단계적인 종료가 이루어진다.

Fork와 Exec 실제 코드 설명

fork() 시스템 콜

출처: https://m.blog.naver.com/PostView.nhn?blogId=joyangel93&logNo=220400967632&proxyReferer=https:%2F%2Fwww.google.com%2F

fork() 설명

  • 자식 프로세스는 코드 처음부터가 아니라 fork를 실행한 이후 지점부터 실행하게 된다. 부모프로세스의 문맥을 복사하기 때문이다.
  • 만약에 fork지점 부터가 아니라 처음부터하면 fork 자식프로세스가 무한대로 생성된다.

문제점

  1. 부모와 자식의 구분이 안생김
    • return value가 다름. pid가 0이냐 0보다 크냐의 차이가 생김. 이로써 부모와 자식 프로세스의 분리가능
    • fork이후 부분부터 시작하는 걸로도 구분할 수 있음.
  2. 모두 다 똑같은 제어흐름
    • 위로 부모와 자식을 구분은 가능하지만 제어흐름은 똑같다. 그래서 exec 시스템콜이 있다.

exec() 시스템 콜

출처: https://m.blog.naver.com/PostView.nhn?blogId=eldkrpdla121&logNo=220696699894&proxyReferer=https:%2F%2Fwww.google.com%2F

exec() 설명

  • execlp가 exec 시스템 콜이다.
  • 새출발하는거다. 다시 돌아올 수 없다.
  • /bin/date라는 프로그램 이다.
    • date라는 프로그램을 덮어씌우고 date프로그램에서 끝난다.
  • echo도 프로그램으로 사용 가능
    • 예시 execlp("echo", "echo", "hello", "3", (char *) 0) argument전달 형식이다.
    • (char *) 0은 argument null pointer이다.
  • exec 이후에 코드는 실행이 안되는 것이다.

 

wait() 설명

  • 프로세스를 잠들게 하는 거다.
  • 자식 프로세스가 종료될 때까지 기달리면서 프로세스 A를 sleep(block)시키는 것이다
  • 자식 프로세스가 종료되면 커널은 프로세스 A를 깨운다.(ready 상태)
  • 결국, wait라는 시스템 콜은 자식이 종료될 때 까지 대기

exit() 설명

  • 프로세스를 종료할 때 명시
  • 굳이 exit을 명시하지 않아도 마지막 동작을 수행 후 exit() 시스템 콜을 넣어줌
  • 자발적 종료
    • 마지막 statement 수행 후 exit() 시스템 콜 (명시적으로 적어주지 않아도 됨)
  • 비자발적 종료(외부에서 종료)
    • 부모가 자식을 강제종료(자식 프로세스의 한계치를 넘어서는 자원 요청, 자식에게 할당된 태스크가 더 이상 필요하지않음)
    • 키보드로 kill break 선언 ex) ctrl + c
    • 부모가 종료하기 전에 자식이 먼저 종료

프로세스 간 협력

  • 독립적 프로세스(Independent process) - 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못함
  • 협력 프로세스(Coopertating process) - 영향을 미침
  • 프로세스 간 협력 메커니즘(IPC: Interprocess Communication)
    • Message Passing: 메시지를 전달하는 방법
      • 커널을 통해 전송, 공유 변수를 사용하지 않고 통신하는 시스템
      • Direct Communication: 통신하려는 프로세스의 이름을 명시적으로 표시
      • Indirect Communication: mailbox나 port를 통해 메시지를 간접 전달
    • Shared Memory: 주소 공간을 공유하는 방법
      • Process A와 B가 일부영역을 공유한다.
      • 초기설정에 커널의 도움을 받지만, 이후에는 프로세스간의 공유이다.

IPC 출처:https://jhnyang.tistory.com/24

 

주의!

thread는 process간 협력으로 보기는 어렵지만 동일한 process를 구성하는 thread들간에는

주소 공간을 공유하므로 협력이 가능


CPU 스케줄링

CPU burst와 I/O burst를 하는 단계가 번갈아가면서 사용

  • CPU를 오랫동안 쓰는 job을 CPU bound job (점유) 계산 위주의 job
  • I/O를 자주하는 job은 I/O bound job (빈도) I/O에 많은 시간이 필요한 job

 

여러 job이 섞여 있기 때문에 CPU 스케줄링(얼만큼 시간을 주고 뺏을 것이냐)이 필요하다.


CPU Scheduler & Dispatcher

CPU Scheduler

  • Ready상태 프로세스 중에서 CPU를 줄 프로세스를 고르는 역할

Dispatcher

  • CPU의 제어권을 CPU Scheduler로 부터 선택된 프로세스에 넘긴다.
  • 이 과정을 Context Switch라고 한다.

주의! 둘다 하드웨어가 아니라 운영체제 안에 있는 거다

 

스케줄링이 필요한 경우

  1. Running -> Blocked (I/O요청하는 시스템 콜)
  2. Running -> Ready (timer interrupt)
  3. Blocked -> Ready (I/O완료 후 인터럽트)
  4. Terminate

1, 4는 nonpreemptive 강제로 빼앗지 않고 자진 반납

2, 3은 preemptive 강제로 빼앗음

Comments