Context Switching


컨텍스트 스위칭, 번역하면 문맥 교환이지만 잘못된 의미 전달의 가능성이 있기 때문에 컨텍스트 스위칭으로 말하자.

왜? context라는 별칭을 붙였을까, Context는 '함께 엮어 짜거나 꼬다'라는 라틴어 Contexere 에서 유래했다. (어떤 일의)맥락, 전후 사정, (글의) 맥락, 문맥. 즉, 하나의 경험에서 맥락을 이해하기 위해선 어떤 요소들이 뒤섞여 있는지 큰 그림을 보아야 한다. 이것이 사전적의 context의 의미이고 그렇다면 컴퓨터에서는 어떤 의미로 쓰인걸까?

text switching 이 아닌 context switching인 이유는 단순한 문자의 교체가 아닌 하나의 모든 상황의 교체를 표현하기 위해 붙인것이 아닐까? 뒤에서 살펴보겠지만 프로세스간 교체가 일어날 때, 말 그대로 프로세스만을 복사해서 교체해주는게 아니라 현재 프로세스의 상태와 관련된 모든 정보를 함께 전달하고 다른 프로세스의 상황과 정보를 받아오기 때문이다.

무엇인가?


멀티프로세서 환경에서 CPU가 어떤 프로세스를 실행하고 있는 상태일 때, 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)를 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 작업을 Context Switching이라고 한다.

왜?


컴퓨터가 매번 하나의 업무(Task) 만 처리할 수 있다면 매우 비효율적이기 때문에 특정 상황에서 프로세스들을 바꿔가면서 처리하기 위해서 컨텍스트 스위칭이 필요.

예를 들어, 만약 지금 실행중인 프로세스에 대해서 cpu가 처리해야할 일이 없는 상태일 때 (예를 들면, 인터넷을 키고 네이버 웹툰에서 어떤 만화를 보고 있는 중이라면, 인터넷에 사용자가 어떤 요청(클릭)을 하지 않는 이상 cpu는 인터넷에 대해 처리할 어떠한 업무도 없는 상태이다), 놀고 있는 cpu에다가 다른 명령을 내리면 매우 효율적으로 cpu를 굴릴 수 있게 된다.

하지만 만약에 사용자가 웹툰 2화를 볼려고 클릭을 했다면?, cpu 는 다시 인터넷에 대한 업무를 진행해야 한다.(네이버한테 데이터도 요청하고, 받아온 데이터를 화면에 출력도 해줘야되고 등등)

근데 프로세스에 대한 이전 정보가 어딘가에 저장이 되어있지 않다면 cpu는 인터넷에 대한 모든 과정을 다시 처리해야한다.

그래서 이전 정보들을 어딘가에 저장하고 다른 프로세스를 실행해야만 한다.

//위의 예시들은 정확한 비유가 아닐수도 있습니다...