process가 kernel mode일 때 procedure call, return을 관리하기 위해 사용됨.
그래서 process는 user stack과 kernel stack 2개 필요.
Process Creation
cloning(fork)
call once, return twice.
code, data, stack, pcb를 복사하고 pid만 바꾸어 child process clone.
fork() 시 child는 0, parent는 child의 pid를 return.
code는 공유하지만, pcb, stack, data는 별도로 존재.
Copy On Write(COW)
효율적인 프로세스 생성을 위해 fork 후 child process를 위한 데이터들을 바로 copy하는게 아니라 memory에 write할 때 copy를 함.
fork-exec
process의 변신, pid는 안바뀜, code만 바뀜.
call once, never return.
새 code와 data를 load.
Zombie and Reaping
process 종료 시 부모가 자식의 exit code를 reap해야 비로소 종료됨.
reap 하기 전까지의 child process 상태를 zombie라고 함.
zombie가 누적되면 memory leak 발생.
orphan
부모가 먼저 종료되면 orphaned child는 init process가 reap함.
Scheduling
Scheduling Criteria
System
Throughput: 단위 시간당 완료된 프로세스 수
Processor utilization: 프로세서가 busy한 시간의 비율
Fairness: process들이 공평하게 다뤄지는지
User
Turnaround time: complete time - arrived time
Response time: begin time - arrived time
Deadline: Real-time에서 중요.
VRR
RR은 여전히 Long process에 유리하니 short process에 advantage를 주자.
IO 때문에 다 쓰지 못한 time quantum을 마저 쓸 수 있게 Aux queue를 둬서 ready queue보다 우선순위를 높게 두자.
Multi-level Feedback Q
process가 queue 간에 이동할 수 있게 한다.
CPU burst 길이에 따라 process들을 나눔.
우선순위 높은 queue 부터 실행.
time slice 다 쓰면 lower priority queue로 demote.
waiting time 늘어나면 다시 promote.
기타 Q&A
인터럽트 처리 과정 설명
프로세스 실행 중 인터럽트 발생.
현재 프로세스의 실행 중단.
현재 수행 중이었던 프로세스의 상태를 해당 프로세스의 PCB에 저장.
발생한 인터럽트의 번호를 IDT에서 확인하여 해당하는 함수를 호출.
실행이 중단되었던 프로세스의 PCB를 불러와 CPU 레지스터에 초기화하여 프로세스를 다시 수행.
인터럽트를 처리하는 동안 인터럽트를 금지시키는 방법의 문제점과 해결 방법
우선순위가 더 높은 인터럽트를 처리하지 못한다. 인터럽트를 실행 중이라도 우선순위가 더 높은 인터럽트가 발생한다면 중첩하여 처리할 수 있도록 한다.
멀티 프로세서 스케줄링 중 Multi-Q 방식의 장점과 문제점, 해결 방법
IO-bound의 short CPU burst process를 우대하는 queue에 두어 system utilization이 좋다. 하지만 long CPU burst process가 starvation을 겪을 수도 있다는 문제가 있는데, 이를 해결하기 위해 waiting time이 긴 process를 promote하여 해결할 수 있다.