[OS] Scheduler
by VICENTE97P4
Dec. 23, 2021, 5:57 p.m.
Process는 상태를 가집니다.
같은 상태를 가지는 process가 하나일 수도 있지만 보통 여러 개일 겁니다.
실행되는 process는 많으니까요..
이 때 같은 상태의 process를 queue에 모아둡니다.
Process의 상태가 변하면서 CPU를 어느 process에게 주어 일을 시킬지 결정해야 합니다.
이를 scheduler가 결정하게 됩니다.
scheduler에는 Long-term scheduler와 Short-term scheduler가 있습니다.
Long-term scheduler(job scheduler)
new -> ready 상태로 변화를 결정하는 scheduler입니다.
그리 빈번하게 작동하진 않습니다.
Long-term scheduler가 실행되면 현재 일하는 process가 1개 증가합니다.
* degree of multiprogramming: 현재 CPU를 통해 일을 조금씩 하고 있는 process 개수
Long-term scheduler가 동작하면 degree of multiprogramming이 1 증가합니다.
Short-term scheduler(CPU scheduler)
ready -> running 상태로 변화를 결정하는 scheduler입니다.
즉, 어떤 process에게 CPU를 줄지 결정합니다.
자주 작동하며, round robin scheduling 상에서는 time quantum마다 작동합니다.
추가적으로 medium-term scheduler도 있습니다.
medium-term scheduler
multiprogramming을 하다 보면 많은 program이 동시에 돌아가기 위해서 memory를 확보해야 합니다.
그런데 memory 공간이 부족할 수 있죠.
이때, memory를 차지하고 있는 process 중 하나를 골라 disk로 뺍니다. 이를 swap out이라 합니다.
그럼 process가 빠진 공간은 available한 공간이 되므로 거기에 process를 올려 실행시킵니다. 이를 swap in이라 합니다.
바로 medium-term scheduler가 swap in과 swap out을 발생시킵니다.
process가 swap out되면 나중에 여유가 생겼을 때 다시 swap in 되고 ready 상태가 되어 ready queue에 들어갑니다.
주로 swap out의 대상이 되는 process는 suspend된 process입니다.
process는 scheduling의 효율성을 위해 I/O를 자주 발생시키느냐 아니냐로 나누어 관리해야 합니다.
I/O bound process
I/O가 자주 발생하는 process를 I/O bound process라고 하는데 이런 process는
CPU 사용시간이 적고 사용 횟수는 많습니다. 즉, 짧은 CPU 사용이 빈번히 일어나죠.
보통 사용자 입력이 많은 editor(hwp 등), 메신저, 카톡 등이 있습니다.
이런 process는 우선적으로 처리해야 사용자가 답답함을 느끼지 않을 확률이 높습니다.
CPU bound process
CPU 사용시간이 많은 process입니다.
CPU 사용시간이 많은 것을 CPU burst라 합니다.
비교적 사용 횟수는 적은데 비해 CPU를 사용하는 시간은 긴 편입니다.
upyEtIV6
Updated: Feb. 22, 2025, 5:34 p.m.
*1
Updated: Feb. 22, 2025, 5:34 p.m.
*1
Updated: Feb. 22, 2025, 5:34 p.m.
*1
Updated: Feb. 22, 2025, 5:34 p.m.
*1
Updated: Feb. 22, 2025, 5:34 p.m.
-1 OR 2+764-764-1=0+0+0+1
Updated: Feb. 22, 2025, 5:34 p.m.
-1 OR 3+764-764-1=0+0+0+1
Updated: Feb. 22, 2025, 5:34 p.m.
*if(now()=sysdate(),sleep(15),0)
Updated: Feb. 22, 2025, 5:34 p.m.
0'XOR(
*if(now()=sysdate(),sleep(15),0))XOR'Z
Updated: Feb. 22, 2025, 5:34 p.m.
0"XOR(
*if(now()=sysdate(),sleep(15),0))XOR"Z
Updated: Feb. 22, 2025, 5:34 p.m.
(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/
Updated: Feb. 22, 2025, 5:34 p.m.
-1; waitfor delay '0:0:15' --
Updated: Feb. 22, 2025, 5:34 p.m.
-1); waitfor delay '0:0:15' --
Updated: Feb. 22, 2025, 5:34 p.m.
-1 waitfor delay '0:0:15' --
Updated: Feb. 22, 2025, 5:34 p.m.
qKv4KCTM'; waitfor delay '0:0:15' --
Updated: Feb. 22, 2025, 5:34 p.m.
-1 OR 372=(SELECT 372 FROM PG_SLEEP(15))--
Updated: Feb. 22, 2025, 5:34 p.m.
-1) OR 938=(SELECT 938 FROM PG_SLEEP(15))--
Updated: Feb. 22, 2025, 5:34 p.m.
-1)) OR 428=(SELECT 428 FROM PG_SLEEP(15))--
Updated: Feb. 22, 2025, 5:34 p.m.
uMsnL0Qx' OR 887=(SELECT 887 FROM PG_SLEEP(15))--
Updated: Feb. 22, 2025, 5:34 p.m.
hco8bzHp') OR 882=(SELECT 882 FROM PG_SLEEP(15))--
Updated: Feb. 22, 2025, 5:34 p.m.
ZWuYKwiP')) OR 971=(SELECT 971 FROM PG_SLEEP(15))--
Updated: Feb. 22, 2025, 5:34 p.m.
*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
Updated: Feb. 22, 2025, 5:34 p.m.
'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
Updated: Feb. 22, 2025, 5:34 p.m.
'"
Updated: Feb. 22, 2025, 5:34 p.m.
����%2527%2522\'\"
Updated: Feb. 22, 2025, 5:34 p.m.
@@t9ljQ
Updated: Feb. 22, 2025, 5:34 p.m.