인생을 코딩하다.

[OS]context switching 본문

OS

[OS]context switching

Hyung1 2021. 2. 6. 06:01
728x90
반응형

왜 context Switching이 필요한가?

만약 컴퓨터가 매번 하나의 Task만 처리할 수 있다면, 해당 Task가 끝날때까지 다음 Task는 기다릴 수 밖에 없다. 그래서CPU가 Task를 바꿔 가며 실행하기 위해 Context Switching이 필요하게 되었다. context switching를 사용하면 멀티 프로세싱, 멀티 스레딩을 통해 빠른 속도로 응답할 수 있다. 

 

Context Switching은 "한 프로세스가 CPU를 차지하고 있을 때 우선순위가 높은 다른 프로세스가 현재 프로세스를 중지시키고 자신이 CPU를 차지할 수 있게 하는 선점형 프로세스" 방식이기 떄문에, 높은 우선순위를 가진 프로세스들이 빠른 처리를 요구하는 시스템에서 유용하다. 빠른 응답시간을 요구하는 시분할 시스템에 유용하다 .하지만 높은 우선순위 프로세스들이 들어오는 경우 오버헤드를 초래할 수 있다. 선점 알고리즘을 사용하는 경우에는 CPU의 사용을 중단하고 다른 프로세스에게 인터럽트에 의해 사용권을 넘겨주기 때문에 지금까지 수행한 모든 내용을 보관해 둔 후, 새로 시작하는 프로세스에 대한 내용을 새로 적재해 주어야한다. 이것을 context switching (문맥교환)이라고 부르고 사용하는 이유이다. 

context switching란?

CPU가 어떤 프로세스를 실행하고 있는 상태에서 인터럽트에 의해 다음 우선 순위를 가진 프로세스가 실행되어야 할 때 기존의 프로세스 정보들은 PCB에 저장하고 다음 프로세스의 정보를 PCB에서 가져와 교체하는 작업을 컨텍스트 스위칭이라 한다. 이러한 컨텍스트 스위칭을 통해 우리는 멀티 프로세싱, 멀티 스레딩 운영이 가능하다.

프로세스 P0와 P1이 존재할 때, P0가 CPU를 점유중(excuting)이었고 P1이 대기중(idle)이었는 상태이다가 얼마후에는 P1이 실행이 되고 P0가 대기가 되는 상태가 찾아온다.

 

이때 P0가 실행중에서 대기로 변하게 될 때는 지금까지 작업해오던 내용을 모두 어딘가에 저장해야하는데 그것이 PCB라는 곳이다.

즉, P0는 PCB에 저장해야하고 P1이 가지고 있던 데이터는 PCB에서 가져와야한다. 

 

이러한 과정 즉, P0와 P1이 서로 대기<->실행을 번갈아가며 하는 것을 컨텍스트 스위칭이라고 한다.

PCB(Process Control block) 구조

 

  • Process State : 프로세스 상태(Create, Ready, Running, waiting, terminated)
  • Process Counter : 다음 실행할 명령어의 주소값
  • CPU Registers: accumulator, index register, stack pointers, general purpose registers.

PCB에 프로세스 정보를 저장한다 하였는데 PCB는 프로세스의 정보를 저장하는 Block을 의미한다.

이때 PCB에 저장되는 정보는 프로세스 번호, 포인터, 프로세스 상태, 레지스터, 프로그램 카운터(코드 위치) 등등이 저장된다.

 

Context Switching의 오버헤드

문맥교환(Context Switching)의 과정의 오버헤드 및 쓰레드 중심의 문맥교환 문맥교환 과정에서 발생되는 오버헤드 1) 문맥 교환에 소요되는 시간은 기억 장치의 속도, 레지스터의 수 등 컴퓨터 구조에 따라 다르지만 보통 문맥 교환 시에 1 ~ 1000 마이크로 초(micro second)까지 시간적인 오버헤드가 존재한다.

그럼 어떻게 해결해야할까?

오버헤드 해결을 위한 접근

  • 문맥 교환은 운영체제에서 자주 발생하므로 가능한 효율적으로 구현해야 하며 이는 가능한 적은 자료들을 주기억 장소로 옮겨야 한다.
  • 최근의 많은 운영체제는 효율적인 문맥교환을 위해 특별한 프로세스 구성 기법인 쓰레드(Thread)를 이용하고 있다.

쓰레드에 의한 문맥교환(Context Switching)의 장점 프로세스 중심 시스템에서 프로그램이 단일 프로세스로 생성되어 실행되면 하나의 실행점(Execution)만이 존재함으로 단일 프로세스 내에서는 병행 처리가 불가능하고, 프로그램이 여러 개의 프로세스로 생성되면 각 프로세스 마다 동일한 많은 정보들이 중첩 유지되어 관리됨으로 비효율적이다. 따라서, 단일 프로세스를 다수의 스레드로 생성하여 병행성을 증진하고, 실행환경을 공유시켜 문맥 교환 등의 오버헤드를 줄여 운영 체제의 성능을 개선해야 한다.

Context Switching Cost

Context Switching이 발생하면 많은 비용이 들게 된다.

  • Cache 초기화
  • Memory Mapping 초기화
  • Kernel은 항상 실행되어야 한다. (메모리의 접근을 위해서..)

Context Switching 비용은 Process가 Thread보다 많이든다.

  • Thread는 Stack 영역을 제외한 모든 메모리를 공유하기 때문에
  • Context Switching 발생시 Stack 영역만 변경을 진행하면 된다.

출처 : 

https://www.crocus.co.kr/1364 [Crocus]

wikidocs.net/65528

728x90
반응형
Comments