매일을 설렘으로

[컴퓨터시스템] 프로세스 생성 (Process creation) 본문

CS

[컴퓨터시스템] 프로세스 생성 (Process creation)

하루설렘 2021. 12. 24. 17:09

2021.12.24 - [컴퓨터시스템] - [컴퓨터시스템] 프로세스 (반효경 수업)

 

[컴퓨터시스템] 프로세스 (반효경 수업)

Process is a program in excution 프로세스의 문맥(context)이란, 프로세스의 이력과 같은 것이다. 예를 들면, 내가 어떻게 살아왔는지에 대해서 이력을 명시해놓은 것이다. 문맥(context)가 필요한 이유는 CPU

beeehappy.tistory.com

이전 수업과 이어서 진행한다. 


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

  • fork( ) : create a chile (copy)
  • exec( ) : overlay new image
  • wait( ) : sleep until child is done
  • exit( ) : frees all the the resoures, notify parent

 

 

 

Copy-on-write (COW) : write가 발생할 경우 그 때, copy하겠다. 그 전까지는 부모 프로세스와 동일한 code/data/stack으로 가지고 있다. 

 

유닉스의 경우,

  • fork() : 시스템 콜이 새로운 프로세스를 생성
    • 부모를 그대로 복사 (fork 호출 다음줄 부터 복사됨. => 부모의 context를 복제한다. 즉, 현재 진행되는 PC값으로 복사되기 때문이다.)
    • 주소 공간 할당
    • fork함수는 return을 양수를 받는다. 
  • fork 다음에 이어지는 exec() 시스템 콜을 통해 새로운 프로그램을 메모리에 올림

부모프로세스와 자식프로세스
exec() 시스템 콜로 다른 프로그램을 실행 가능

 

  • exec함수는 실행도중 다른 프로그램 코드를 덮어쓰기를 하는 것이기 때문에 다음 줄은 실행이 되지않는다. 
#include <stdio.h>

int main(void) {
    printf("여기는 출력이 되어야 해요\n");
    execlp("echo", "echo", "3", (char *) 0);
    printf("나는 execlp함수로 덮어쓰기되어 출력이 안돼요\n");
}
  • wait함수는 자식프로세스가 종료할 때까지 부모 프로세스가 기다리는 모델
  • exit함수는 종료하는것 / 반대로 외부에서 부모프로세스나 키보드로 kill, break를 친 경우, 
  • 부모가 종료하는 경우 자식부터종료하면서 올라온다

 

프로세스 간 협력


  • 독립적 프로세스 (independent process)
    • 프로세스는 각자의 주소 공간을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못함
  • 협력 프로세스 (Cooperating process)
    • 프로세스 협력 메키니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 ㅜ 있음
  • 프로세스 간 협력 메커니즘(IPC: interprocess communication)
    • 메세지를 전달하는 방법 : message passing ; 커널을 통해서 메세지 전달
    • 주소 공간을 공유하는 방법 : shared memory ; 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 하는 shared memory 메커니즘이 있음
Massage Passing
프로세스 사이에 공유 변수를 일체 사용하지 않고 통신하는 시스템


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

 

 

CPU Scheduler & Dispatcher


- CPU Scheduler : Ready 상태의 프로세스 중에서 이번에 CPU를 줄 프로세스
- Dispatcher : CPU의 제어권을 CPU scheduler에 의해 선택된 프로세스에게 넘긴다. 이 과정을 context switch이라고 한다. 

CPU scheduling이 필요한 경우는 프로세스에게 다음과 같은 상태 변화가 있는 경우이다. 

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

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

3. Blocked -> Ready (예: I/O완료 후 인터럽트)

4. Terminate

 

1,4에서의 스케줄링은 nonpreemptive(= 강제로 빼앗지않고 자진 반납)

All other scheduling is preemptive (= 강제로 빼았음)