프로세스 관리(Process Management)
프로세스와 관련된 시스템 콜
wait() 시스템 콜
exit() 시스템 콜 - 프로세스의 종료
자발적 종료
마지막 statement 수행 후 exit() 시스템 콜을 통해 프로그램에 명시적으로 적어주지 않아도 main 함수가 리턴되는 위치에 컴파일러가 넣어줌.
비자발적 종료
-
부모 프로세스가 자식 프로세스를 강제 종료시킴
자식 프로세스가 한계치를 넘어서는 자원 요청
자식에게 할당된 태스크가 더 필요하지 않음
-
키보드로 kill, break 등을 친 경우
-
부모가 종료하는 경우
부모 프로세스가 종료하기 전에 자식들이 먼저 종료됨.
프로세스 간 협력
원래 프로세스 간은 경쟁 관계가 더 맞음. 협력하지 않음.
독립적 프로세스(Independent process)
프로세스는 각자의 주소 공간을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못함
협력 프로세스(Cooperating process)
프로세스 협력 메커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음
프로세스 간 협력 메커니즘(IPC:Interprocess Communicatio)
-
메세지를 전달하는 방법
message passing: 커널을 통해 메세지 전달
direct/indirect 방법 둘 다 있음.
-
주소 공간을 공유하는 방법
shared memory: 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 하는 shared memory 메커니즘이 있음
CPU Scheduling
프로세스의 일생
프로세스의 특성 분류
I/O-bound process
CPU를 잡고 계산하는 시간보다 I/O에 많은 시간이 필요한 job
(many short CPU bursts)
CPU-bound process
계산 위주의 job
(few very long CPU bursts)
CPU Scheduler
Ready 상태의 프로세스 중에서 이번에 CPU를 줄 프로세스를 고름
Dispatcher
CPU의 제어권을 CPU Scheduler에 의해 선택된 프로세스에게 넘김
이 과정을 context switch(문맥 교환)이라 함.
CPU 스케줄링이 필요한 경우
- Running -> Blocked (I/O 요청하는 시스템 콜)
- Running -> Ready (할당시간 만료로 timer interrupt)
- Blocked -> Ready (I/O 완료 후 인터럽트)
- Terminate
1,4 스케줄링은 nonpreemptive(=강제로 빼앗지 않고 자진 반납), 비선점형
다른 스케줄링은 preemptive(=강제로 빼앗음), 선점형
스케줄링 성능 척도(Scheduling Criteria)
스케줄링 알고리즘(Scheduling Algorithms)
FCFS (First-Come First-Service)
프로세스의 도착 순서가 중요.
비선점형 스케줄링.
SJF(Shortest-Job-First)
각 프로세스의 다음 번 CPU burst time을 가지고 스케줄링에 활용. CPU burst time이 가장 짧은 프로세스를 제일 먼저 스케줄.
- Nonpreemptive
일단 CPU를 잡으면 이번 CPU burst가 완료될 때까지 CPU를 선점 당하지 않음
- Preemptive
현재 수행중인 프로세스의 남은 burst time보다 더 짧은 CPU burst time을 가지는 새로운 프로세스가 도착하면 CPU를 빼앗김.
이 방법을 Shortest-Remaining-Time-First(SRTF)라고 부름.
- SJF is optimal
주어진 프로세스들에 대해 minimum average waiting time을 보장.
치명적 약점
- starvation 발생
- CPU burst를 잘 모름
다음 CPU burst time의 예측
추정(estimate)만 가능. 과거의 CPU burst time을 이용해서 추정. (exponential averaging)
Priority Scheduling
Round Robin(RR)
선점형 스케줄링. 현대적인 computer system은 이에 기반.
- 각 프로세스는 동일한 크기의 할당 시간(time quantum)을 가짐.
일반적으로 10-100 milliseconds
- 할당 시간이 지나면 프로세스는 선점(preempted)당하고 ready queue의 제일 뒤에 가서 다시 줄을 섬.
- n개의 프로세스가 ready queue에 있고 할당 시간이 q time unit인 경우 각 프로세스는 최대 q time unit 단위로 CPU 시간의 1/n을 얻음.
=> 어떤 프로세스도 (n-1)q time unit 이상 기다리지 않음.
- Performance
q large => FCFS
q small => context switch 오버헤드 커짐.
장점
응답시간이 짧음(response time)
대기시간이 길수록 CPU 사용 시간도 길어짐 (비례함)
Multilevel Queue
- Ready queue를 여러 개로 분할
foreground(interactive) / background(batch-no human interaction)
- 각 큐는 독립적인 스케줄링 알고리즘을 가짐
foreground-RR / background-FCFS
- 큐에 대한 스케줄링이 필요
Fixed priority scheduling (모든 포그라운드 실행 후, 백그라운드 실행, starvation 발생 가능)
Time slice (각 큐에 CPU time을 적절한 비율로 할당)
Multilevel Feedback Queue
- 프로세스가 다른 큐로 이동 가능
- 에이징(aging)을 이와 같은 방식으로 구현 가능
- Multilevel-feedback-queue scheduler를 정의하는 파라미터들
- Queue의 수
- 각 큐의 scheduling algorithm
- process를 상위 큐로 보내는 기준
- process를 하위 큐로 내쫓는 기준
- 프로세스가 CPU 서비스를 받으려 할 때 들어갈 큐를 결정하는 기준
Multiple-Processor Scheduling