강의 주소 : 이화여대 반효경 교수님 운영체제 강의 (2014년)
Chapter 4. Process Management 1,2
복제 생성
(예 : fork()) : 프로그램 카운터와 문맥 모두 복제Copy-on-write(COW)
부모와 자원(code, data, stack)을 공유하다가 write가 발생할 때, 부모의 자원을 copy해 독립적으로 가지는 것(이전까지는 부모의 것을 공유)
exit
)abort
)int main() {
int pid;
printf("Hello, everyone\n");
pid = fork();
if(pid == 0) {
printf("Hello, I am child\n");
} else if(pid > 0) {
printf("Hello, I am parent\n");
}
}
프로그램 카운터도 복제
되었기 때문에 자식 프로세스는 pid = fork()의 이후 코드부터 실행한다.-> 부모 프로세스는 Hello, everyone -> Hello, I am parent 출력
-> 자식 프로세스는 Hello, I am parent 출력
int main() {
printf("1");
execlp("echo", "echo", "3", (char *) 0);
printf("2");
}
-> 1 출력
-> echo라는 프로그램으로 덮어씌어짐 : 3 출력
-> 종료
1. 자발적 종료
2. 비자발적 종료
1. 독립적 프로세스
프로세스는 각자의 주소 공간을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못함
2. 협력 프로세스
프로세스 협력 메커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음
프로세스 간 협력 메커니즘(IPC : Interprocess Communication)
메시지를 전달하는 방법(message passing) : 커널을 통해 메시지 전달
주소 공간을 공유하는 방법(shared memory) : 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 하는 shared memory 메커니즘이 있음
-> thread는 사실상 하나의 프로세스이므로 프로세스 간 협력으로 보기는 어렵지만 동일한 process를 구성하는 thread 간에는 주소 공간을 공유하므로 협력이 가능하다.
프로그램은 CPU와 I/O Bursts의 연속
이지만 종류에 따라 빈도와 길이가 다르다.
-> 여러 종류의 job(프로세스)이 섞여 있기 때문에 CPU 스케줄링이 필요하다.
I/O bound process
I/O에 많은 시간
이 필요한 jobCPU bound process
계산 위주
의 job운영체제에서 수행하는 기능(코드)
CPU Scheduler
CPU를 줄 프로세스를 고름
Dispatcher
context switch(문맥 교환)
라고 함CPU 스케줄링이 필요한 경우는 프로세스에게 다음과 같은 상태 변화가 있는 경우이다.
1. Running -> Blocked(예 : I/O 요청하는 시스템 콜)
2. Running -> Ready(예 : 할당시간 만료로 timer interrupt)
3. Blocked -> Ready(예 : I/O 완료 후 interrupt)
4. Terminate
-> 1, 4 : nonpreemptive(강제로 빼앗지 않고 자진 반납)
-> All other scheduling : preemptive(강제로 빼앗음)