RTOS 의 핵심 기술!!!!! 

Context Switching 납시셨습니다 ㅋㅋㅋ

하나의 CPU 로 다중 작업을 수행할수 있도록 해주는 아주 혁신적인 기능이지용 ㅋㅋㅋ 

일단 이놈의 Context Switching 을 이해시키기 위해 아주 간단하게 그림을 하나 그려보았습니다

 

각기 다른 일을 할 수 있는 뇌가 여러개 있다고 생각해 봅시다.

이 모든 일은 동시에 수행이 되어야 하며, 일을 수행할 몸은 한개 밖에 없다고 가정해 보지요

프로그래머는 각각의 뇌에 모두 같은 몸이 달려있다고 가정한 후 프로그래밍을 마쳤습니다.

이제 해야할 일은???

징그럽긴 하지만, 가운데에 머리에사진에 내 뇌를 가져다 끼우기만 하면 되네요.

1번일이 하고싶을때는 1번 뇌를, 2번일이 하고싶을 떄는 2번 뇌를, 3번일이 하고싶을때는?? 3번뇌를 ㅋㅋㅋ 

이렇게 뇌를 통채로 재빠르게 바꾸어주는 과정을 Context Switching 이라고 부릅니다

우리나라 말로 '문맥 전환'

각 테크스가 저 주변의 뇌에 해당되는 것이구요, 실제로 장작되는 뇌를 골라서 끼워넣어주는 작업은

커널의 스케쥴러라는 놈이 수행하게 됩니다.

저 뇌들중에 어떤 뇌를 끼워 넣어 줄 것인가에 대한 기본 원칙이 무엇이냐에 따라 커널의 종류가 선점형과 비 선점형 2가지로 나뉘게 됩니다. 이는 뒤에서 한번더 다뤄보도록 하죠 중요한거니까 ㅋ

그럼 좋은 커널이란 Context Switching 이 빠른 커널이다!!! 라고 정의할수 있나요??

꼭 그렇지많은 않습니당 ㅋ CPU 가 가지고있는 레지스터의 양에 따라서 부과되는 오버헤드의 양이 달라지기 때문이지요. 즉, Context Switching 이 커널 디펜던트 하기도 하지만 CPU 디펜던트 하기도 하므로, 이것 만으로 커널의 성능을 결정 짓기에는 무리가 있다라는 소리입니다.

각각의 테스크 들은 선언이 되어 컴파일 되는 순간 스텍에 자신의 공간을 갖습니다.

CPU 는 Context Switching 을 시작할때 현제 자신의 레지스터 정보를 Stack 에 푸쉬푸쉬푸쉬푸쉬 해서 쭈우 집어 넣어놓고, 수행할 테스크의 레지스터 정보를 팝팝팝팝팝팝 해서 채워놓고 아무일도 없었던것 처럼 해당 일을 수행합니다.

그러다가 또 C.S 를 해야할 떄가 오면 다시 현재의 레지스터 정보를 스텍에 저장, 필요한 정포 팝 해서 수행

이런 일을 굉장히 빠르고도 효율적으로 수행하면서 멀티 테스킹을 하게 되는 것이지요~

 
저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by J.Bear