less than 1 minute read

프로세스 생성

부모 프로세스가 자식 프로세스를 생성한다.
프로세스는 자원을 필요로하고 운영체제로부터 받는다.

자식은 부모의 공간을 복사하고 그 공간에 새로운 프로그램을 올린다.

유닉스 에서 fork()시스템 콜이 새로운 프로세스를 생성(부모를 그대로 복사)하고 다음에 exec()시스템 콜이 새로운 프로그램을 메모리에 올린다.

프로세스 종료

프로세스가 마지막 명령을 수행 후 운영체제에게 이를 알려준다.(exit)

자식이 할당 자원의 한계치를 넘어서거나
할당된 일이 더 이상 필요하지 않거나
부모가 종료되는 경우에
부모 프로세스가 자식의 수행을 종료시킨다.(abort)

fork()

부모 프로세스를 복제 생성

exec()

새로운 프로그램으로 덮어 씌움
fork()를 하고 execlp()를 해서 복제본을 새로운 프로그램으로 덮어 씌운다.

wait()

자식이 종료될 때 까지 기다림

exit()

프로세스를 종료
모든 자원을 반납하고 부모에게 종료를 알림

프로세스 간 협력

프로세스 간 협력 메커니즘

메시지 전달 방법

  • message passing
    커널을 통해 메시지를 전달한다.

주소 공간을 공유하는 방법

  • shared memory
    서로 다른 프로세스 간에 일부 주소 공간을 공유하게 한다.
  • thread
    스레드는 사실상 하나의 프로세스이므로 프로세스 간 협력으로 보기는 어렵지만 동일한 프로세스를 구성하는 스레드들 간에는 주소 공간을 공유하므로 협력이 가능하다.

CPU 스케줄링

CPU 스케줄러

ready상태의 프로세스 중에서 이번에 CPU를 줄 프로세스를 고른다.

dispatcher

CPU의 제어권을 CPU디스페쳐에 의해 선택된 프로세스에게 넘기며 이 과정을 문맥 교환이라 한다.

preemptive

스케줄링에서 강제로 빼앗지 않고 자진 반납하는 것을 nonpreemptive라고 하고
강제로 빼앗는 것을 preemptive라고 한다.

Leave a comment