Context Switching이란?
우선 Thread에서의 Context Switching과 Process의 Context Switching은 같은 말입니다.
단지, 이 둘의 차이점은 내부에 있습니다.
그럼 의미가 동일한 Context Switching에 대해 간략한 설명을 하겠습니다.
Process를 예를 들면.....
"나는 현재 멜론을 들으면서, 롤을 하고 있으며, 친구들에게 카카오톡 문자가 PC로 오고 있다."
라고 한다면 총 3번의 Context Switching이 일어난 것입니다.
멜론 노래를 재생 -> 게임 롤(LOL)에서의 컨트롤 -> 카카오톡 문자 -> 멜론 노래 재생 -> 게임 롤(LOL)컨트롤 -> 카카오톡 문자......
이러한 과정들이 0.0몇초만에 반복되게 됩니다.
너무 빠르게 Switching이 되다보니 저희 사람은 중간에 끊긴지도 모릅니다.
Thread를 예로 들자면......
"나는 코드를 짜고 있으며 총 3개의 쓰레드를 만들었으며 하나는 계산을, 하나는 문서를 읽어들이는, 하나는 UI화면을 띄우도록 코드를 짬"
라고 한다면 총 3번의 Context Switching이 일어난 것입니다.
계산 -> 문서 read -> UI화면 실행 -> 계산 -> 문서 read -> UI화면 실행.....
Thread에서의 Context Switching은 Process보다 훨신 빠르게 일어나기 때문에 사용자 입장에서 채감이 안되죠.(적은양 기준)
이렇게 번갈아 가면서 어떠한 작업(Task)을 처리하는 과정을 Context Switching이라고 합니다.
그럼 여기서 말하는 Context는 조금은 짐작해 볼 수 있습니다.
사전적인 의미는 문맥이고, 컴퓨터 처리의 시선으로 본다면 바로 작업의 단위 입니다.
Process로 설명을 하자면....
사진처럼 멜론을 CPU가 레지스터에 데이터를 저장 후 처리를 하고, LOL에서 interrupt가 발생하면!!!
레지스터에 작업중이던 데이터들을 OS의 PCB에 넣고 LOL을 처리합니다.
그다음 카톡이오면 위 과정을 반복......
여기서 PCB(Process Control Block)는 OS에서 제공하는 일종의 데이터베이스로 프로세스의 작업 상태를 저장할 수 있는 공간을 말합니다.
CPU가 사전에 작업했던 정보를 알아야 그 다음 작업을 계속해서 이어나갈 수 있기 때문입니다.
하지만 CPU는 전에 했던 작업을 블러오고 레지스터에 저장하는 과정에서 아무것도 할 수 없게 됩니다.
때문에 Context Switching이 빈번하게 일어나게 되면 OverHead가 증가하게 되며 성능 저하로 이어질 수 있습니다.
Thread에 대해 설명하자면....
Thread Control Block에서 Thread를 관리하게 되고 이것들을 관리하는 주체는 운영체제에 따라 다릅니다.
어떤 운영체제는 OS가 관리하는 반면 어떤 운영체제는 라이브러리에 의해 관리가 됩니다.
때문에 Thread는 Process내부에 존재하는 논리적인 단위로 외부에서 interrupt가 발생된다면 PCB에 해당 Thread정보들도 같이 저장됩니다.
그리고 Process가 실행중일 땐 Process내부에서 Thread Control Block을 통해 쓰래드 간의 Context Switching이 발생되고요.
이 Thread들의 Context Switching을 해주는 주체는 OS될 수도 있고 내부적으로 구현된 라이브러리가 될 수도 있습니다.
혹시 잘못된 정보가 있다면 피드백 부탁드리겠습니다.
'프로그래밍 > 컴퓨터 과학(CS)' 카테고리의 다른 글
C++ 클래스와 구조체의 데이터 정렬(Data alignment) 왜 데이터 크기가 다르지? (1) | 2020.06.24 |
---|---|
C++ false sharing이란?(거짓 공유) (9) | 2020.06.22 |
C++ 에서의 OOP의 개념에 대한 설명(Abstraction, Encapsulation, Inheritance, Polymorphism) (0) | 2020.06.21 |
CPU와 메모리 사이의 동작 (2) | 2019.12.10 |
메모리 구조에 대해서(stack, heap, buffer overflow) (7) | 2019.01.19 |
댓글