[CS] Context Switch

이정석·2023년 8월 1일
0

CS

목록 보기
7/7
post-thumbnail

Context Switch

Context Switch는 CPU가 현재 실행중인 쓰레드에서 다른 쓰레드로 변경하는 과정을 의미한다. 현재 실행중인 쓰레드의 상태정보를 Context라 하고 다른 쓰레드로의 전환을 위해 Context를 변경한다는 의미이다.

Context에는 Program Counter레지스터 값과 같은 CPU정보를 포함하며 그림으로 나타내면 아래 사진과 같다.

Context Switch를 수행하는데 걸리는 시간은 여러 요인에 영향을 받는다.

  • Context의 양: Switch하고자 하는 양이 많을수록 걸리는 시간이 증가한다.
  • 메모리 속도: Context 정보가 저장되어 있는 메모리에서 정보를 가져오는데 걸리는 시간은 메모리의 속도가 빠를수록 적다.
  • CPU 속도: 실제 Switch를 수행하는 것은 CPU이고 변경하고자 하는 쓰레드의 정보를 찾는것은 CPU의 속도에 영향을 받는다.

Context는 PCB(Process Control Block)라는 자료구조에 저장된다.

1. 언제 발생할까?

Context Switch가 발생하는 상황은 여러 상황이 있는데 보통 Time Slice의 만료인터럽트 발생으로 인해 발생한다. 인터럽트가 발생하면 원래 진행중이던 작업을 중단하고 인터럽트 처리를 위해 Context Switch를 한다.

또한, 우선순위가 변경되거나 I/O관련 이벤트가 발생했을 때와 같이 특정한 이벤트가 발생했을 때에도 Context Switch가 발생한다.

Time Slice멀티쓰레드의 여러 쓰레드를 동시에 실행할 때에 할당된 시간이다.

2. 프로세스 vs 쓰레드

프로세스 간의 Context Switch쓰레드 간의 Context Switch중 어떤 것이 더 오래걸릴까? 즉, 어떤 것이 더 많은 비용을 필요로 할까?

프로세스간의 Context Switch가 더 많은 비용을 필요로 한다. 이유는 Context Switch하는 양과 관련있는데

  • 프로세스의 경우 프로세스의 공유데이터 부분도 Switch해야 한다.
  • 쓰레드의 경우 공유데이터 부분은 유지한 채 스택과 레지스터 정보만 Switch한다.

위와 같은 이유로 쓰레드의 Context Switch가 더 적은 비용을 요구한다고 할 수 있다.

profile
게임 개발자가 되고 싶은 한 소?년

0개의 댓글