포켓몬스터로 이해하는 Context switching!

정서희·2022년 7월 28일
2
post-thumbnail

Context switching이 뭔데요?

한줄 요약 : CPU가 한 개의 Task(process/Thread)의 상태를 저장하고 다음 진행할 Task의 상태값을 읽어 적용하는 과정입니다.

CPU는 기본적으로 한번에 한가지 일만 합니다. 하지만 우리의 프로그램들은 동시에 여러 일이 필요합니다. 하지만 중간 중간 선수 교체는 필요한 법이죠.

포켓몬스터를 하는데 포켓몬이 Process라고 생각하면 됩니다.
포켓몬이 하는 일은 Thread 입니다.

포켓몬스터로 이해해봅시다.
결투중 어떤 포켓몬을 사용할지는 트레이너가 정합니다.
CPU가 무슨 일을 할 지는 OS(운영체제)가 정합니다.


우리는 이제부터 포켓몬 트레이너(OS)입니다.


OS : CPU가 휴식하기에는 너무 일이 많단다! 일단 하나를 하고 있으렴


우리는 박사님의 조언에 따라 우선 파이리를 데려가기로 했습니다.

파이리의 선택은 정말 좋았습니다.
당장 필요했던 안전을 지켜주고, 요리가 필요할 때에는 불도 문제가 없었습니다.

식량 문제도 해결할 수 있었습니다.
하지만 저런,,,! 문제가 생겼습니다.

파이리가 불을 내고 말았습니다.

우리에게 필요한 것은 파이리가 아니라 꼬부기입니다...!!

나와라 꼬부기..!

꼬부기는 열심히 불을 꺼줬습니다.
우리는 꼬부기와 함께 여행을 지속했습니다.
역시 목 마를 때에는 꼬부기죠!

하지만 꼬부기랑만 다닐 수는 없습니다.

배는 너무 금방 꺼지고 배를 채우려면 파이리가 필요합니다.
우리는 배고파 죽을때 쯤 파이리를 다시 불렀고, 목말라 죽을때 쯤 꼬부기를 불렀습니다.


이쯤되면 생각이 납니다.

배고파 죽을것같을때, 목말라 죽을 것 같을 때 말고 그냥 정기적으로 꼬부기랑 파이리를 교체하자 !

그래서 우리는 스케줄을 짜기로 했습니다.

파이리와 꼬부기는 2시간 마다 교대로 소환되기로 하였습니다.
그리고 일도 정기적으로 하기로 했습니다.

파이리의 업무 목록

  1. 장작에 불 피우기 - 10분
  2. 식어가는 국 데우기 - 30분
  3. 꺼져가는 횟불에 불 붙이기 - 7분
    ...

꼬부기의 업무 목록

  1. 파이리가 태운 꽃에 물주기 - 4분
  2. 너무 끓여서 짠 국에 물타기 - 20초
  3. 애교부리기 - 1시간
    ...

파이리와 꼬부기는 업무가 많아서 모든 업무를 2시간만에 끝낼 수 없습니다. 다음에 소환될 때 이전에 하던 일을 바로 이어서 할 수 있도록 각 포켓몬은 본인이 뭘 하고 있었는지 수첩에 기록한 뒤 다음 포켓몬을 소환하기로 했습니다.

이처럼 Task(포켓몬, 포켓몬의 업무)를 교체하는 것을 Context Switching이라고 합니다.

우리는 2시간마다 스케줄에 맞게 포켓몬(Process)만 교체합니다. OS는 PCB(Process Control Block)정보를 바탕으로 Process를 교체합니다.

포켓몬의 업무는 포켓몬의 일 이므로 우리(OS)가 관리하지 않습니다. 포켓몬은 스스로 적은 수첩을 활용하여 업무 목록에 맞게 업무를 교체합니다. Process는 TCB(Task Control Block)이라는 내부 구조를 활용하여 Thread를 관리합니다.

포켓몬들도 소환되자마자 바로 일을 시작 할 수는 없습니다. 포켓볼에 들어가기 전에 뭘 하고 있었는지 기록했던 수첩도 읽고 스트레칭도 한번 하고 일을 시작할 수 있습니다.
CPU도 Context Switching을 수행하는 동안 Cache를 초기화하고 Memory Mapping을 초기화하는 등 바로 일을 할 수 없습니다.

포켓몬들을 1분마다 소환한다면?

분명 일을 제대로 못할 겁니다. 소환되고 수첩 읽고 스트레칭하고 일 좀 할까? 하면 다른 포켓몬으로 교체될 테니까요.
대신에 업무를 자주 바꾸는건 어떨까요? 수첩읽고 스트레칭하는 시간은 필요없을테니 조금 더 시간이 절약되겠죠?

컴퓨터도 잦은 Context Switching은 성능 저하를 야기합니다.

멀티 프로세스를 통해 PCB를 Context Switching하는 것 보다 멀티 Thread를 통해 TCB를 Context Switching하는 비용이 더 적습니다.

정리

  1. Context Switch는 Process 교체와 Thread 교체가 있다.
  2. Process의 스케쥴링은 OS에 의해 PCB(Process Control Block)로 관리되며 Thread는 Process에 의해 TCB(Task Control Block)로 관리된다.
  3. 잦은 Context Switch는 성능 저하를 야기하며 PCB의 교체보다 TCB의 교체가 비용이 더 적다.
  4. 댓글이나 하트로 관심을 주면 작성자가 기쁘다
profile
어제보단 오늘이 더 강한 웹/앱 개발자입니다

0개의 댓글