CS
[컴퓨터시스템] 프로세스 생성 (Process creation)
하루설렘
2021. 12. 24. 17:09
2021.12.24 - [컴퓨터시스템] - [컴퓨터시스템] 프로세스 (반효경 수업)
이전 수업과 이어서 진행한다.
프로세스와 관련한 시스템 콜
- 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함수는 실행도중 다른 프로그램 코드를 덮어쓰기를 하는 것이기 때문에 다음 줄은 실행이 되지않는다.
#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 (= 강제로 빼았음)