스택(Stack)
힙(Heap)
공유된 메모리 세그먼트(Shared memory segment)
위에 언급된 모두 해당
wait
fork
exit
exec
Normal termination
Abnormal termination
Cascading termination
Circular termination
Multiprocessing, Multiprogramming
Multiprogramming, Uniprocessing
Uniprocessing, Multiprocessing
Uniprogramming, Multiprocessing
PCB(Process Control Block)
Process queue
PID(Process IDentifier)
위에 언급된 모두 해당 안됨
음수, 0
0, 음수
양수, 0
0, 양수
고아 프로세스(Orphan process)
좀비 프로세스(Zombie process)
부모 프로세스(Parent process)
대기 프로세스(Waiting process)
작업 큐(Job queue)
PCB queue
장치 큐(Device queue)
준비 큐(Ready queue)
대기 큐(Waiting queue)
우선순위 큐(Priority queue)
모든 큐에서 삭제된다.
작업 큐를 제외한 큐에서 삭제된다.
PCB의 메모리 할당이 해제된다.
자식 프로세스를 강제로 종료시킨다.
준비 큐에 옮겨질 프로세스를 선택한다.
대기 큐에 옮겨질 프로세스를 선택한다.
다음에 CPU를 할당받고 실행될 프로세스를 선택한다.
메모리에서 스왑되어 제거될 프로세스를 선택한다.
꽉 차있고, 적다
꽉 차있고, 많다
비어있고, 적다
비어있고, 많다
큐 길이의 차이
스케줄되는 프로세스 타입의 차이
스케줄러의 실행 주기
스케줄링에 소모되는 시간
block
wakeup
dispatch
timeout
blocked
ready
waiting
terminated
프로세서가 한 번에 한 개 이상의 프로세스를 실행한다
프로그램이 한 명 이상의 사람에 의해 개발된다
한 개 이상의 프로세스가 메모리에 존재한다
한 명의 유저가 동시에 여러 프로그램을 실행시킬 수 있다
Running state
Ready state
Waiting state
Terminated state
CPU 레지스터의 값
프로세스 상태(Process state)
메모리 관리 정보
문맥 교환(Context switch) 시간
GPR(General Purpose Register)
TLB(Translation Lookaside Buffer)
PC(Program Counter)
Page table
외부 장치(External device)
하드웨어 타이머(Hardware timer)
비선점형 스케줄러(Non-preemptive Scheduler)
전원 장애(Power failure)
응답 시간(Response time)
대기 시간(Wait time)
반환 시간(Turnaround time)
처리량(Throughput)
FCFS(First Come First Serve) 스케줄링
SJF(Shortest Job First) 스케줄링
우선순위(Priority) 스케줄링
라운드 로빈(RR 혹은 Round-Robin) 스케줄링
Interrupt
Scheduler
Dispatcher
Fetcher
가장 높은 우선순위를 가진 프로세스에 CPU를 할당한다.
가장 낮은 우선순위를 가진 프로세스에 CPU를 할당한다.
동일한 우선순위를 가진 프로세스들은 스케줄될 수 없다.
큐(Queue)에 빨리 들어온 프로세스가 높은 우선순위를 가진다.
다단계 큐(Multilevel queue) 스케줄링
프로세스는 최초에 할당된 우선순위 큐로부터 옮겨질 수 있다.
프로세스 수행 시간이 길수록 우선순위가 높아진다.
프로세스가 CPU bound라면 우선순위가 높아진다.
많은 기아(starvation)가 발생할 수 있다.
커널 레벨 스레드(Kernel-level thread)
사용자 레벨 스레드(User-level thread)
프로세스(Process)
프로세스가 running에서 ready 상태로 전이될 때
프로세스가 running에서 waiting 상태로 전이될 때
프로세스가 waiting에서 ready 상태로 전이될 때
프로세스를 running에서 ready 상태로 dispatching 하는 시간
프로세스를 running에서 ready 상태로 dispatching 하는 동안 CPU가 idle이었던 시간
Running 상태였던 프로세스를 멈추고 다른 프로세스를 running 상태로 만들 때까지 걸린 시간
Dispatch될 프로세스를 선택하는데 걸린 시간
비선점적(Non-preemptive)
선점적(Preemptive)
무작위(Random)
Time slice가 매우 크다면 FCFS로 변환될 수 있다.
Time slice가 매우 작다면 FCFS로 변환될 수 있다.
Time slice가 매우 작다면 성능을 향상시킬 수 있다.
Time slice가 매우 작다면 SJF로 변환될 수 있다.
CPU가 busy가 아니었던 시간이다.
CPU가 유휴 태스크(idle task)를 실행시킨 시간이다.
커널 공간(Kernel space)에서 코드를 실행한 시간은 유휴 시간에 포함되지 않는다.
유휴 태스크는 외부에서 관측되지 않는다.
CPU time 중 user time은 사용자에 의해 CPU가 busy였던 시간이다.
CPU time 중 system time은 kernel space에서 CPU가 busy였던 시간이다.
CPU time은 user time과 system time의 합이다.
멀티프로세서 시스템에서 CPU time은 각 코어의 CPU time을 합한 값이다.
매우 복잡한 방법으로 스케줄한다.
스케줄링에 많은 시간이 요구된다.
낮은 우선순위의 프로세스는 CPU를 할당받지 못하고 무한하게 대기할 수도 있다.
캐시가 만료되지 않도록 유지하는 것
페이지가 메모리에서 스왑되지 않도록 유지하는 것
최근 실행된 프로세스의 우선순위를 낮추는 것
오랫동안 수행되지 못하고 대기한 태스크(task)의 우선순위를 높이는 것
자식 프로세스에서는 페이지 테이블이 사용되지 않는다.
부모 프로세스의 페이지 테이블을 공유한다.
최초로 데이터를 읽을 때 무조건 페이지 부재(page fault)가 발생한다.
최초로 데이터를 쓸 때 페이지 복사가 발생한다.
포크 폭탄(fork bomb)
프로세스 폭탄(process bomb)
스레드 폭탄(thread bomb)
자원 폭탄(resource bomb)
© Seunggon Kim