'멀티테스킹'에 해당되는 글 2건

  1. 2012.01.03 Context Switching (문맥 전환) (2)
  2. 2012.01.03 Task 와 Multitasking
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

댓글을 달아 주세요

  1. 나다 2013.03.15 18:34  댓글주소  수정/삭제  댓글쓰기

    지하철에서 님이랑 비슷한 생각을 해서 검색했더니 역시 똑같은 생각을 한 사람이 있군요

흠... 
앞 강의에서 Kernel 을 이야기 한김에 선점혐/비선점형 커널을 이야기 하고 싶은데
그러기에는, 아직 테스크와 스케줄러, 문맥전환에 대해 먼서 설명이 필요하므로 잠시 참고 다시 기초부터~ ㅋㅋ

테스크~ 어디서 많이 들어보지 않으셨습니까? ㅋ 

 
ㅋㅋ 아 욱겨 ㅋㅋㅋ

(특히 힘든, 하기싫은 ) 일 ㅋㅋㅋ

그렇죠 ㅋㅋ  사실 코드짜는게 그렇게 적게 힘들고 하고싶은 일은 아니죠 ㅋㅋ
아 네이버 정의 정확하네 ㅋㅋㅋ

여튼 말그대로 테스크는 일의 단위 입니다. 최소한 여기서 우리는 그렇게 생각하도록 하죠~

하나의 테스크는 크게 볼때 하나의 일을 하고 있는것입니다~

약간 다른 시각에서 보면 하나의 테스크에는 각기 다른 하나의 배경 시스템을 가지고 있습니다.
즉 무한루프를 가지고 있다는 소리지요~

### 여기서 잠시 ####

쓰레드(thread) 와 테스크(Task) 는 같은 말인가요? : 의견이 분분 한데요 약간 다르다는 사람도 있고 ㅋㅋㅋ
제 개인적인 생각으로는, 우리가 지금 공부하고 있는 분야에서는 같은 단어로 간주하고 이야기해도 크게 무리가 없다
입니다. ㅋㅋㅋㅋ 참고하세요~ ㅋㅋ

##################################

그럼 멀티 테스킹은 머냐???

멀티면 여러개라는 뜻 아닙니까 ㅋㅋ 스타 멀티플레이 할때 그 멀티 ㅋㅋ

즉, 태스크가 여러개다 -> (특히 힘들고 하기 싫은) 일이 여러개다 -> 아 ㅆㅃ

가 되는것이죠 ㅋㅋㅋㅋ  일도 많은데 이것을 내보고 다 하라고???

아 이럴바에는 그냥 테스크가 하나밖에 없던 슈퍼루프 방식이 좋았어 ㅆㅃ 이런생각이 들때쯤~~~~
엄청 뛰어나신 고수분들이 말을 해줍니다 ㅋㅋ

야~ 너는 어차피 슈퍼루프 방식 코드짜듯이 그냥 짜기만 하면돼~ 
각각이 하나의 일만 한다고 생각해놓고 쭈욱 코드를 짜 놓으면, 나중에 커널이란 놈이 알아서 번갈아가며 일을
효율적으로 시켜줄꺼야

라고 조언합니다 ㅋㅋㅋㅋ

이렇게 되고나면?? 멀티 테스킹을 하는것이지요 ㅋㅋㅋ

살짝 이해가 되시나요???


생각해보면 매우 당연한 이야기 입니다.

CPU 가 한개인데 무한루프를 여러개 돈다??? 무슨수로??? 말이 안돼자나요 ㅋㅋㅋ
CPU 는 한개인데 10가지 일을 동시에 한다??? 무슨수로??? 말이 안돼자나요 ㅋㅋㅋ

멀티 테스킹이란~~~ 

여러개의 CPU 가 있는것처럼 프로그램을 짜놓고 나면, 1개의 CPU 를 가지고 엄청 빠른 시간동안에
각각의 일들을 번갈아 가면서 처리하다 보니, 사용자의 입장에서 볼때는 동시에 여러가지 일을 처리하는것
처럼 느껴지게 되는 일련의 일처리 방식입니다. 

그럼 이런것들은 어떻게 이루어지나염???

그거슬 더욱 자세히 아실려면 다음강의를 보세요 ㅋㅋ
커널의 스케줄러와 문맥전환(Context Switching) 을 이해하셔야 된답니다 ㅋ

그럼 바이바이~~
Posted by J.Bear

댓글을 달아 주세요