[OS] context switching
by VICENTE97P4
Dec. 23, 2021, 5:40 p.m.
Process에서 가장 중요한 주제 중 하나가 context switching입니다.
정리해보겠습니다.
Context switch
한 프로세스에서 다른 프로세스로 전환하는 것을 context switch라 합니다.
user application에서 system call을 호출했다고 가정해봅시다.
system call은 kernel code기 때문에 context switch를 해줘야 합니다.
1. 현재 실행 중인 프로세스의 상태정보를 PCB에 저장합니다.(여기서는 PCB0에 해당됨)
2. 실행하려는 프로세스의 정보를 해당 PCB(여기서는 PCB1)에서 불러와서 register에 탑재합니다.
3. 해당 프로세스를 실행합니다.(여기서는 P1)
4. 프로세스 실행 중 interrupt나 system call이 생기면 현재 프로세스의 상태를 PCB에 저장하고,
다음 실행 대상을 정합니다.
5. 정해진 대상의 PCB에서 정보를 불러와서 실행합니다.
context switch를 할 때 현재 PC값과 레지스터 정보를 stack에 저장합니다.
현재 PC값은 스택 맨 위에 저장합니다. 그럼 새 프로세스가 시작되면 stack pointer가 있는 위치에 돌아갈 PC값이 위치하게 되죠.
아무튼 이렇게 정보를 저장하고 다시 불러와서 레지스터에 설정해야 하기 때문에 context switching은overhead가 있습니다.
이는 multiprogramming을 지원하는 OS가 감내해야 하는 오버헤드죠.
하지만 이로인해 파생되는 부가적인 overhead도 존재합니다.
바로 cache miss overhead인데요.
cache에는 현재 실행 중인 process의 data가 들어있습니다.
그런데 context switch가 발생하면 이 모든 정보들이 쓸모없어질 확률이 높습니다.
그래서 cache를 비워버리죠.
그럼 context switch 직후에는 cache가 비어있으니까 계속 cache miss가 생깁니다.
따라서 memory로 가서 cache로 데이터를 올리고 CPU로 가져오는 횟수
즉, 메모리 접근 횟수가 증가하게 되어 overhead가 커집니다.
따라서 context switch가 동반하는 overhead 또한 부담되죠.
tlIiDl3e
Updated: Feb. 22, 2025, 5:33 p.m.
*1
Updated: Feb. 22, 2025, 5:33 p.m.
*1
Updated: Feb. 22, 2025, 5:33 p.m.
*1
Updated: Feb. 22, 2025, 5:34 p.m.
*1
Updated: Feb. 22, 2025, 5:34 p.m.
-1 OR 2+419-419-1=0+0+0+1
Updated: Feb. 22, 2025, 5:34 p.m.
-1 OR 3+419-419-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.
L5mURgfH'; waitfor delay '0:0:15' --
Updated: Feb. 22, 2025, 5:34 p.m.
-1 OR 125=(SELECT 125 FROM PG_SLEEP(15))--
Updated: Feb. 22, 2025, 5:34 p.m.
-1) OR 233=(SELECT 233 FROM PG_SLEEP(15))--
Updated: Feb. 22, 2025, 5:34 p.m.
-1)) OR 86=(SELECT 86 FROM PG_SLEEP(15))--
Updated: Feb. 22, 2025, 5:34 p.m.
71jnBmNn' OR 552=(SELECT 552 FROM PG_SLEEP(15))--
Updated: Feb. 22, 2025, 5:34 p.m.
ciTOzHKv') OR 481=(SELECT 481 FROM PG_SLEEP(15))--
Updated: Feb. 22, 2025, 5:34 p.m.
db3ty3as')) OR 61=(SELECT 61 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.
@@gHkgE
Updated: Feb. 22, 2025, 5:34 p.m.