프로세스 관리

2024. 1. 15. 15:16CS/운영체제

프로세스 관리

  • 운영체제가 프로세스를 전부 생성하는 것이 아니라!
  • 시스템이 부팅된 후 최초의 프로세스만 직접 생성하고 그 다음부터는 이미 존재하는 프로세스가 다른 프로세스를 복제-생성하게 된다. 이때 프로세스를 생성한 프로세스를 부모프로세스, 부모프로세스에 의해 생성된 프로세스는 자식 프로세스라고 한다.
  • 결과적으로 프로세스는 트리를 형성한다.
  • 현실세계와 다르게 자식프로세스가 먼저 죽고, 부모프로세스는 그 이후에 죽는 구조이다.

프로세스 생성과 종료

  • 부모프로세스는 fork() 시스템콜을 통해 자식프로세스를 생성한다.
    • fork() 시스템 콜 : fork() 시스템 콜을 통해 생성된 자식 프로세스는 부모프로세스를 복제하기때문에 부모와 동일한 형태를 가진다.
      • (단, PID값은 서로 다름!)
  • 이후, 자식프로세스가 exec() 시스템콜을 호출하면, 생성한 프로세스의 메모리 공간을 새로운 프로그램으로 대체할 수 있다.
  • 부모프로세스와 자식프로세스는 Concurrently(동시에) 실행된다.
  • 부모프로세스는 wait()를 호출하여 자식이 exit()될때까지 기다린다.
  • 자식프로세스는 exit()를 호출할때, 반환된 자식프로세스의 Status는 wait() 시스템콜의 파라미터로 전달된다.

프로세스 종료

  • 자발적 종료
    • 프로세스는 exit()를 통해 운영체제에게 알려준다.
    • 자식 프로세스는 부모에게 output data를 전송한다.
    • 또한 프로세스는 종료와 함께 각종 자원을 운영체제에게 반납한다.
  • 강제적 종료
    • 자식이 할당 자원의 한계치를 넘어서거나, 자식에게 할당된 테스크가 더 이상 필요하지 않는 경우에는
    • 부모프로세스가 자식프로세스를 abort()를 통해 강제종료를 진행하게 된다.

추가 알아야할 시스템콜