본문 바로가기

운영체제

프로세스 생성

Process Creation

부모 프로세스가 자식 프로세스 생성하여 트리(계층 구조) 형성

 

-> 자식은 부모의 주소 공간을 복사해서 그 공간에 새로운 프로그램을 올림

ex) 유닉스 : fork() - 시스템 콜이 새로운 프로세스를 생성, exec() 시스템 콜을 통해 새로운 프로그램을 메모리에 올림.

-> 프로세스가 마지막 명령을 수행한 후 운영체제에게 알려줌. exit

-> 부모프로세스가 자식의 수행을 종료시킴 abort 

 

-> 부모프로세스와 자식프로세스는 모든 자원을 공유하기도 하고, 일부만 공유하기도 하고, 전혀 공유하지 않을 수도 있다. 그러나 대다수의 경우 공유하지 않고, 서로 자원을 더 많이 차지하려고 한다.

 

 

wait( )  시스템 콜

부모프로세스가 wait() 시스템 콜을 호출하면 커널은 자식프로세스가 종료될 때 까지 부모프로세스를 sleep시킨다.(block상태)  자식프로세스가 종료되면 커널은 부모프로세스를 깨워 ready상태로 만든다.

 

부모프로세스와 자식프로세스가 병렬적으로 수행되는 경우도 있지만, wait() 시스템 콜 처럼 자식프로세스가 종료될 때까지 blocked되었다가 다시 실행되는 모델도 있다.

 

 

 

exit( ) 시스템 콜

프로세스의 종료

1. 자발적 종료

  - 스스로 exit() 시스템 콜을 통해 main함수가 리턴되는 위치에 컴파일러가 넣어줌. 

 

2. 비자발적 종료

  - 부모 프로세스가 자식프로세스를 강제 종료시킴.

    (자식에게 할당된 태스크가 더 이상 필요없을 때 / 자식프로세스가 한계치를 넘어서는 자원을 요청할 때)

  - 부모가 종료하는 경우

     부모프로세스가 종료하기 전에  자식들이 먼저 종료됨.

  - 키보드로 kill, break 등을 친 경우

 

 

프로세스와 관련된 시스템 콜

fork() 복사해서 자식 프로세스 생성

exec() 새로운 프로세스 생성

wait() 자식프로세스가 종료될 때까지 sleep상태

exit()  모든 자원을 반납하고, 부모프로세스에게 종료됨을 알림

 

 

 

프로세스 간 협력

원칙적으로 프로세스는 각자의 주소 공간을 가지고, 독립적으로 수행한다. 그러나 경우에 따라서는 협력메커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미치기도 한다. 이를 프로세스 간 협력 메커니즘(IPC:Interprocess Communication)이라고 한다. 

이러한 방법에는 두 가지가 있다.

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

2. 주소 공간을 공유하는 방법 : shared memory - 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 함.

 

thread: 사실상 하나의 프로세스이므로 프로세스 간 협력으로 보기는 어렵지만, 동일한 process를 구성하는 thread간에는 주소 공간을 공유하므로 협력이 가능하다.

 

 

CPU 스케줄링이 필요한 이유

cpu bound job(ex)연산작업과 같이 계산 위주의 job)과 I/Obound job(cpu를 잡고 계산하는 시간보다 I/O에 많은 시간이 필요한 job)이 있는데 I/O bound job이 ineractive한 작업이기 때문에 cpu bound job이 너무 오래 cpu를 차지하고 있으면 사용자에게 불편함을 줄 수 있다. 그렇기 때문에 자원을 효율적으로 사용하기 위한 스케줄링이 필요한 것이다. 

 

 

 

CPU Scheduler

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

 

 

Dispatcher

cpu의 제어권을 cpu scheduler에 의해 선택된 프로세스에게 넘긴다. 이 과정을 context switch(문맥 교환)이라고 한다. 

 

 

nonpreemptive(=자진 반납)에 해당하는 cpu 스케줄링이 필요한 경우

 

1. Running - > Blocked (예: I/O요청하는 시스템 콜)

2. Running - > Ready  (예: 할당시간만료로 timer Interrupt)

3. Blocked - > Ready  (예: I/O완료 후 인터럽트) : device controller가 cpu에게 인터럽트를 검.

4. Terminate

 

다른 스케줄링은 preemptive(강제로 빼앗음)한 경우이다. 

'운영체제' 카테고리의 다른 글

Deadlock  (0) 2021.06.29
Process Synchronization  (0) 2021.06.28
CPU Scheduling  (0) 2021.06.28
운영체제 프로세스  (0) 2021.05.14
운영체제 개요  (0) 2021.05.13