1. 자원의 공유: 자식이 부모를 그대로 copy하기 때문에 메모리 낭비가 될 수 있음
-> 몇몇 OS에서는 일단 copy하지 않고 공유하고 있음
-> 내용이 달라질 때까지 기다림 (Copy-on-Write, COW)
2. fork() 시스템 콜: fork() 수행 시 반환값으로 id를 반환함, fork() 수행한 시점에서 시작함 (Program Counter까지 복사됐기 때문에)
가. id가 0일 경우, 자식
나. id가 0이 아닐 경우, 부모
3. exec() 시스템 콜
-> execlp(): 인자로 넘겨진 새로운 프로그램을 실행 (일반적으로 자식에게 새로운 프로그램을 덮어씌울 때 사용)
4. wait() 시스템 콜: 호출한 부모는 sleep 상태(block 상태)로 만들고, 자식이 종료할 때까지 기다림
5. exit() 시스템 콜: 프로그램을 종료시키는 시스템 콜
가. 자발적 종료: 마지막 statement 수행 후, 자동으로 컴파일러가 넣어서 호출됨(main 리턴되는 부분)
나. 비자발적 종료
1) 부모프로세스가 자식프로세스를 강제 종료시킴
가) 자식이 한계치를 넘는 자원 요청
나) 자식에게 할당한 업무가 더 이상 필요하지 않을 때
2) 키보드로 kill, break 등을 친 경우
3) 부모가 종료하는 경우 (부모가 종료하기 전에 자식을 종료해야함)
6. 프로세스간 협력
가. 독립적 프로세스(Independent process): 원칙적으로 하나의 프로세스가 다른 프로세스에 영향을 미치지 않음
나. 협력 프로세스(Cooperating process): 필요에 의해서 영향을 미칠 수 있음
다. 프로세스 간 협력 메커니즘(IPC: Interprocess Communication)
1) Message passing: 커널을 통해 메시지 전달 (원칙적으로 불가하기에 커널을 활용하는 것)
(가) Direct Communication: 명시적으로 통신하려는 프로세스의 이름을 표시
(나) Indirect Communication: mailbox(또는 port)를 통해 메시지를 간접 전달
2) Shared memory: 서로 다른 프로세스가 일부 주소 공간을 공유하는 메커니즘
*Thread: 스레드는 하나의 프로세스에 여러 개가 존재하는 것으로 프로세스 간 협력과는 다름.
---------------------------
7. CPU Scheduling
가. CPU-burst Time
1) I/O bound job은 중간에 I/O가 사용하므로, CPU가 짧게 자주 쓴다.
2) CPU bound job은 중간에 I/O가 사용하지 않으므로 CPU가 적게 길게 쓴다.
나. CPU Scheduling: Ready 상태의 프로세스 중에서 이번에 CPU를 줄 프로세스를 고른다. (진행 후 Dispatcher 진행)
다. Dispatcher: CPU의 제어권을 CPU Scheduler에 의해 선택된(결정된 후에) 프로세스에게 넘긴다. (Context Switch)
*용어
1) Nonpreemptive: 강제로 빼앗지 않고 CPU를 자진해서 반납하는 것(종료나 I/O 요청 등)
2) Preemptive: 강제로 빼앗음
'Studying > Operating System' 카테고리의 다른 글
05. CPU Scheduling (3/3) / 06. Process Synchronization (1/5) (0) | 2018.06.02 |
---|---|
05. CPU Scheduling (2/3) (0) | 2018.05.30 |
04. Process Management (1/2) (0) | 2018.05.20 |
03. Process (2/3), (3/3) (0) | 2018.05.20 |
03. Process (1/3) (0) | 2018.05.19 |