본문 바로가기
책갈피

Context Switching

서영호 |2020.07.13 09:58
조회 92 |추천 0

 

 

 

CPU가(정확히 말해서 CPU의 CORE가) 하나 뿐인 시스템에서도 둘 이상의 프로세스가 동시에 실행되지 않는가?. 이는 실행 중인 둘 이상의 프로세스들이 CPU의 할당시간을 매우 작은 크기로 쪼개어 서로 나누기때문에 가능한 일이다.

 

그런데 CPU의 할당시간을 나누기 위해서는 "Context Switching"이라는 과정을 거쳐야 된다. 그럼 무엇을 Context Switching이라고 하는가?.

 

프로그램의 실행을 위해서는 해당 프로세스의 정보가 메인 메모리에 올라와야 한다. 때문에 현재 실행중인 A 프로세스의 뒤을 이어서 B 프로세스를 실행시키려면, A 프로세스 관련 데이타를 메인 메모리에서 내리고 B 프로세스관련 데이타를 메인 메모리로 이동시켜야 된다. 바로 이것이 Context Switching이다.

 

그런데 이때 A 프로세스 관련 데이타는 하드 디스크로 이동하기 때문에 콘텍스트 스위칭에는 오랜 시간이 걸리고, 빨리 진행하더라도 한계가 있다.

 

결국 멀티 프로세스(Multi Process)의 특징을 유지하면서 단점을 어느 정도 극복하기 위해서 "쓰레드(Thread)"라는 것이 등장하였는데, 이는 멀티 프로세스의 여러가지 단점을 최소화하기 위해서 설계된 일종의 '경량화된(가벼워진) 프로세스'이다.

 

프로세스의 메모리 구조는 전역변수가 할당되는 '데이타 영역', malloc 함수 등에 의해 동적 할당이 이뤄지는 힙(Heap), 그리고 함수의 실행에 사용되는 스택(stack)으로 이뤄진다. 그런데 프로세스들은 이들을 완전히 별도로 유지한다. 때문에 프로세스 사이에는 다음의 메모리 구조를 가진다.

 

 

 프로세스 A       프로세스 B        프로세스 C    

 

 데이타 영역      데이타 영역       데이타 영역

     힙   영역         힙    영역          힙    영역

   스택  영역        스택  영역         스택  영역

 

              (프로세스 간 메모리 독립)

 

그런데 둘 이상의 실행흐름을 갖는 것이 목적이라면, 위 그림처럼 완전히 메모리 구조를 분리시킬 것이 아니라, 스택 영역만을 분리시킴으로써 다음의 장점을 얻을 수 있다.

 

1) 컨텍스트 스위칭시 데이타 영역과 힙은 올리고

    내릴 필요가 없다.

 

2) 데이타 영역과 힙을 이용해서 데이타를 교환할

    수 있다.

 

그래서 등장한 것이 쓰레드이며, 모든 쓰레드는 별도의 실행흐름을 유지하기 위해서 스택 영역만 독립적으로 유지하기 때문에 다음의 메모리 구조를 가진다.

 

 

  

  Thread A           Thread B          Thread C

 

  Thread A           Thread B          Thread C

  스택 영역           스택 영역          스택 영역

 

               T  H  R  E  A  D      공     유

                        데이타 영역

 

               T  H  R  E  A  D      공     유

                             힙   영역

 

           ( 쓰  레  드  의  메  모  리   구  조)

 

 

 

즉, 프로세스가 하나의 운영체제 안에서 둘 이상의 실행흐름을 형성하기 위한 도구라면, 쓰레드는 프로세스내에서 둘 이상의 실행흐름을 형성하기 위한 도구로 이해할 수 있다.

 

 

 

    

추천수0
반대수0

공감많은 뉴스 시사

더보기

뉴스 플러스