wait() 시스템 콜sleep until child is done.
- 프로세스 A가
wait()시스템콜을 호출하면,
: 커널은 child가 종료될 때까지 프로세스 A를 sleep 시킨다 (block 상태-> CPU 못 얻음)
: child process가 종료되면 커널은 프로세스 A를 깨운다. (ready 상태 -> ready queue로 돌아옴.)
exit() 시스템콜frees all the resources, notify parent.
자발적 종료
마지막 statement 수행 후 exit() 시스템콜을 통해 종료
exit()을 프로그램에 명시하지 않더라도, 컴파일러가 메인함수가 리턴되는 위치에 exit() 시스템콜을 진행.
비자발적 종료
부모 프로세스가 자식 프로세스를 강제종료하는 경우(kill() 시스템 콜)
자식 프로세스가 한계치를 넘어서는 자원 요청
자식에게 할당된 테스크가 더이상 필요하지 않음
키보드로 kill(), signal(ctrl+c) 등을 친 경우
부모가 종료하는 경우
부모 프로세스가 종료하기 전에 자식들이 먼저 종료됨.
독립적 프로세스 (Independent process)
프로세스는 각자의 주소 공간을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못함.
협력 프로세스(Cooperation process)
프로세스 협력 매커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음.
IPC: Interprocess Communication)message passing, 커널을 통해 메시지 전달Message system: 프로세스 사이에 공유변수를 일체 사용하지 않고 통신하는 시스템.process A -> process B 메시지 전달.
메세지를 운영체제가 매개하여 두 프로세스 간 데이터를 전달.
a) Direct communication
: 통신하려는 프로세스 이름을 명시적으로 표시
b) Indirect communication
: mailbox(또는 port)를 통해 메시지를 간접 전달
어찌되든 메시지 패싱 방식은 다 커널에 의존하여 데이터를 통신한다.
shared memory, 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 하는 shared memory 매커니즘이 있음프로세스가 공유 메모리를 쓸 때, 신뢰할 수 있는 프로세스인지 주의해야한다.
두 프로세스가 공유 자원을 사용할 때 동기화를 위해 Semaphore나 mutex 등의 동기화 매커니즘이 필요하다.
thread: 스레드는 사실상 하나의 프로세스이므로 프로세스 간 협력으로 보기는 어렵지만 동일한 process를 구성하는 thread들 간에는 주소 공간을 같이 사용하므로 협력이 가능하고 프로세스 간 협력보다 스레드 협력이 용이하다.
CPU를 가지고 명령어를 실행하면 -> CPU burst
I/O 명령을 수행하게 된다면 -> I/O burst
일반적으로 프로그램은 일생동안 CPU 연산 처리 <-> I/O 처리 과정을 번갈아가며 수행한다.
계산 프로그램같은 경우, CPU를 오래 쓰고 I/O를 마지막에 처리하는 경우도 있음.
I/O bound job
CPU를 잡고 계산하는 시간보다 I/O 에 많은 시간이 필요한 잡
many short CPU bursts
CPU bound job
계산 위주의 job
few very long CPU bursts
만약 두 job 이 모두 CPU를 쓰고자한다면, 어떻게 배분하는 것이 좋을까.
얼마만큼의 시간동안 줄것인가.
이처럼 여러 종류의 프로세스가 섞여 있기 때문에 CPU 스케줄링이 필요하다.
CPU와 I/O 장치 등 시스템 자원을 골고루 효율적으로 사용
CPU Scheduler (OS의 코드 일부분)dispatcher (OS 코드의 일부분)context switch 라고 한다.1, 4에서의 스케줄링은 nonpreemptive (= 강제로 빼앗지 않고 자진 반납)
다른 스케줄링은 모두 preemptive(= 강제로 빼앗음)
CPU utilitzation (이용률)
Keep the CPU as busy as possible
전체 시간에서 CPU가 일한 시간의 비율
-> CPU를 놀리지 않고 계속 일시키는 것이 좋음. (이용률 높은 것)
Throughput (처리량)
number of processes that complete their execution per time unit
Turnaround time (소요시간, 반환시간)
amount of time to execute a particular process
CPU 를 기다린 시간 + 사용하는 시간
Waiting time (대기 시간)
amount of time a process has been waiting in the ready queue.
대기큐에서 대기하며 보낸 시간
response time (응답 시간)
amount of time it takes from when a request was submitted until the first response is produced, not output (for time-sharing environment)
CPU를 쓰러 들어와서 처음으로 사용하게 되는데 걸리는 시간.