운영체제

컨텍스트 스위칭

으엉어엉 2024. 11. 17. 15:00
728x90

컴퓨터의 멀티태스킹

운영체제의 멀티태스킹을 생각해 보자. CPU 코어는 하나만 있다고 가정하자. 스레드 A, 스레드 B가 있다. 운영체제는 먼저 스레드 A를 실행한다. 멀티태스킹을 해야 하기 때문에 스레드 A를 계속 실행할 수 없다. 스레드 A를 잠 시 멈추고, 스레드 B를 실행한다. 이후에 스레드 A로 그냥 돌아갈 수 없다. CPU에서 스레드를 실행하는데, 스레드 A의 코드가 어디까지 수행되었는지 위치를 찾아야 한다. 그리고 계산하던 변수들의 값을 CPU에 다시 불러들여야 한다.

따라서 스레드 A를 멈추는 시점에 CPU에서 사용하던 이런 값들을 메모리에 저장해두어야 한다. 그리고 이후에 스레드 A  를 다시 실행할 때 이 값들을 CPU에 다시 불러와야 한다.

 

이러한 과정을 콘텍스트 스위칭이라고 한다.

컨텍스트는 현재 작업하는 문맥을 뜻한다. 현재 작업하는 문맥이 변하기 때문에 콘텍스트 스위칭이다. 콘텍스트 스위칭 과정에서 이전에 실행 중인 값을 메모리에 잠깐 저장하고, 이후에 다시 실행하는 시점에 저장한 값을 CPU에 다시 불러와야 한다. 결과적으로 콘텍스트 스위칭 과정에는 약간의 비용이 발생한다.

 

멀티스레드는 대부분 효율적이지만, 콘텍스트 스위칭 과정이 필요하므로 항상 효율적인 것은 아니다 

예를 들어서 1 ~ 10000까지 더해야 한다고 가정해 보자.

이 문제는 둘로 나눌 수 있다.

  • 스레드1: 1 ~ 5000까지 더함
  • 스레드 2: 5001 ~ 10000까지 더함

마지막에 스레드 1의 결과와 스레드 2의 결과를 더함

 

CPU 코어가 2개 있다면 스레드1, 스레드 2로 나누어 멀티스레드로 병렬 처리하는 게 효율적이다. 모든 CPU를 사용하 프로 연산을 2배 빠르게 처리할 수 있다.

 

CPU 코어가 1개 있는데, 스레드를 2개로 만들어서 연산하면 중간중간 컨텍스트 스위칭 비용이 발생한다. 운영체제 스 케줄링 방식에 따라서 다르겠지만, 스레드 1을 1 ~ 1000 정도까지 연산한 상태에서 잠시 멈추고 스레드 2를 5001 ~ 6001까지 연산하는 식으로 반복할 수 있다. 이때 CPU는 스레드 1을 멈추고 다시 실행할 때 어디까지 연산했는지 알아 야 하고, 그 값을 CPU에 다시 불러와야 한다. 결과적으로 이렇게 반복할 때마다 콘텍스트 스위칭 비용(시간)이 든다. 결과적으로 연산 시간 + 콘텍스트 스위칭 시간이 든다. 이런 경우 단일 스레드로 1 ~ 10000까지 더하는 것이 콘텍스트 스위칭 비용 없이, 연산 시간만 사용하기 때문에 더 효율적이다.

 

728x90

'운영체제' 카테고리의 다른 글

Thread 생명 주기 개념편  (0) 2024.11.29
스레드 생성  (0) 2024.11.22
Thread - Scheduling,Thread  (0) 2024.11.17
Thread - process ,thread  (0) 2024.11.17
Thread - 멀티태스킹 + 멀티프로세싱  (0) 2024.11.17