[운영체제] 4. Process Management

somi·2023년 6월 12일

[CS] 운영체제

목록 보기
5/15

프로세스의 생성(Process Creation)

  • 부모 프로세스가 자식 프로세스 생성- 운영체제에게 요청을 보낸다.
  • 프로세스의 트리(계층 구조) 형성
  • 프로세스는 자원을 필요로 함
    1. 운영체제로부터 자원을 할당받는다.
    2. 부모와 공유한다.
  • 자원의 공유
    • 부모와 자식이 모든 자원을 공유하는 모델
    • 일부를 공유하는 모델
    • 전혀 공유하지 않는 모델
  • 수행(Execution)
    • 부모와 자식은 공존하며 수행되는 모델
    • 자식이 종료(terminate)될때까지 부모가 기다리는(wait) 모델
  • 주소 공간(address space)
    • 자식은 부모의 공간을 복사함 (binary and OS data)
    • 자식은 그 공간에 새로운 프로그램을 올린다.
  • 유닉스의 예
    • fork() 시스템 콜이 새로운 프로세스를 생성
      • 부모를 그대로 복사하고 (OS data except PID + binary)
      • 주소 공간 할당한다.
    • fork() 다음에 이어지는 exec() 시스템 콜을 통해 새로운 프로그램을 메모리에 올림

프로세스의 종료(Process Termination)

  • 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려주는 과정 (exit)
    • 자식이 부모에게 output data를 보내고 종료 (via wait):
      부모 프로세스는 wait 시스템 콜을 통해 자식 프로세스의 종료를 기다리며, 자식 프로세스가 종료되면 부모 프로세스도 종료된다.
    • 프로세스의 각종 자원들이 운영체제에게 반납됨
  • 부모 프로세스가 자식의 수행을 종료시킴(abort) - 강제 종료
    • 자식이 할당 자원의 한계치를 넘어섬
    • 자식에게 할당된 태스크가 더 이상 필요하지 않음
    • 부모가 종료(exit)하는 경우
      • 운영체제는 부모 프로세스가 종료하는 경우 자식이 더 이상 수행되도록 두지 않는다.
      • 단계적인 종료!

시스템 콜

fork ( ) 시스템 콜

  • a process is created by the fork () system call
    • 부모 프로세스는 fork 결과값 양수, 자식은 0 을 갖는다. 구분이 가능하다. 실패시 -1
    • creates a new address space that is a duplicate of the caller
    • 자식 프로세스는 fork() 이후 호출된 부분부터 실행. 메인 함수의 시작 부분이 아니라 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

현재 프로세스의 메모리는 새로운 프로그램의 내용으로 덮어씌워진다. 현재 프로세스는 새로운 프로그램으로 전환되며, 이전 프로그램의 기능은 사라진다.

wait () 시스템 콜

  • 프로세스 A가 wait() 시스템 콜을 호출하면
    • 커널은 child가 종료될 때까지 프로세스 A를 sleep시킨다. (block 상태)
    • Child process 가 종료되면 커널은 프로세스 A를 깨운다 (ready 상태)
  • 자식이 종료될때까지 부모가 기다리는 모델

exit() 시스템 콜

  • 프로세스의 종료
    • 자발적 종료될 때
      • 마지막 statement 수행 후 exit() 시스템 콜을 통해
      • 프로그램에 명시적으로 적어주지 않아도 main 함수가 리턴되는 위치에 컴파일러가 넣어줌

abort( ) 시스템 콜

  • 프로세스의 종료
    • 비자발적 종료(Involuntary Termination)
      • 부모 프로세스가 자식 프로세스를 강제 종료시킴
        • 자식 프로세스가 한계치를 넘어서는 자원 요청
        • 자식에게 할당된 태스크가 더 이상 필요하지 않음
      • 키보드로 kill, break 등을 친 경우
      • 부모가 종료하는 경우
        • 부모 프로세스가 종료하기 전에 자식들이 먼저 종료됨

정리

fork() create a child (copy) : 자식 프로세스를 생성하고 부모 프로세스의 복사본을 만든다.
exec() overlay new image : 새로운 이미지로 현재 프로세스의 메모리 이미지를 덮어씌운다.
wait() sleep until child is done : 자식 프로세스가 종료될 때까지 대기한다.
exit() frees all the resources, notify parent: 모든 자원을 반납하고, 부모 프로세스에게 종료를 알린다.


프로세스 간 협력

  • 독립적 프로세스 independent process
    • 프로세스는 각자의 주소 공간을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못함
  • 협력 프로세스 Cooperating process
    • 프로세스 협력 매커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음
  • 프로세스 간 협력 매커니즘 (IPC, Interprocess Communication)
    • 메시지를 전달하는 방법 2가지: message passing, shared memory

1. message passing: 커널을 통해 메시지 전달

Message system: 프로세스 사이에 공유 변수(shared variable)를 일체 사용하지 않고 통신하는 시스템

  • Direct communication: 통신하려는 프로세스의 이름을 명시적으로 표시
  • Indirect communication: mailbox(또는 port)을 통해 메시지를 간접 전달

2. 주소 공간을 공유하는 방법

  • shared memory : 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 하는 shared memory 매커니즘이 있음
    - 두 프로세스는 신뢰할 수 있는 관계

참고) thread는 사실상 하나의 프로세스이므로 프로세스 간 협력으로 보기에는 어렵지만 동일한 procss를 구성하는 thread들 간에는 주소 공간을 공유하므로 당연히 협력이 가능


kenel 관여 x 처음에 주소공간 공유할 때는 커널 필요하지만 그 이후에는 관여하지 않는다. - shared memory

kernel 관여 - message passing


참고)

Copy-on-write(COW) 기법
write가 발생했을 때 Copy: 내용이 바뀔 때 새로운 것을 만든다. 그전까지는 부모의 것을 그대로
fork() 시스템 콜을 사용하여 자식 프로세스를 생성할 때, 부모 프로세스의 메모리를 공유하면서 쓰기(write)가 발생한 경우에만 해당 메모리 페이지를 복사하는 기법

메모리 페이지가 읽기(read)만 발생하는 경우에는 부모와 자식이 같은 페이지를 공유. 쓰기(write)가 발생한 경우에는 해당 페이지를 복사하여 자식 프로세스에게 새로운 페이지를 할당.

자식 프로세스에서 메모리를 수정해야 할 때만 해당 페이지를 복사하므로 메모리 복사 작업을 최소화할 수 있음


profile
📝 It's been waiting for you

0개의 댓글