RTOS의 Task와 Linux의 Thread 의 차이점은 ?
안녕하세요.
예전에 RTOS (pSOS, VxWorks, 등)을 이용하여, CE Device를 프로그램을 짰었습니다.
그때는 기능을 모듈별로 나누어서, Task를 만들고
처음에 기기가 전원이 들어오면, 모든 Task를 만들고 suspend 시키고,
Priority에 따라서 각 Task가 돌아가면서 실행되었습니다.
즉 Task가 Suspend되어 있다가, 메시지 큐에 메시지가 들어오면 Task가 활성화되어 수행되는 식이었습니다.
그런데, 요즘 추세가 Linux이다 보니 Device 도 Linux를 사용하게 되었습니다. (Linux도 RTOS이긴 하지만요.^^)
그런데, Linux에서는 Task가 아닌 Thread를 사용하더라구요.
그리고, 책의 예제를 보면, Thread 생성시에 Priority를 설정하는 것 같지 않고,
Thread도 실행중에 만들기도 하고, 끝내기도 하더라구요.
(예전의 RTOS에서는 Task를 실행중에 생성하거나 없애는 일은 많지 않았습니다.)
잠깐 접해본 바로는 일종의 함수처럼 실행한다고나 할까? (아직 제가 자세히 몰라서 그런것일수도 있구요.)
두 개념이 비슷한 형태로 사용되고 있다는 것은 알겠는데,
기존 CE Device에서 사용하던 RTOS의 Task와 Linux의 Thread를 비교해서 설명해 주시겠습니까?
코딩 방식에도 차이가 있나요?
(예를 들면, Thread도 서스펜드 되다가, 어느 순간 활성화되어 처리를 하는 식인가요?
아니면, 필요한 시점에 만들어서 사라지는 식인가요?)
CPU에 MMU가 존재하고,
CPU에 MMU가 존재하고, OS가 이를 사용하여 가상 메모리 기능을 제공한다면 해당 OS에서는 process/thread가 사용 가능합니다.
process는 한개 이상의 thread를 가지며 독립적인 가상 메모리 공간을 가지지요, 하지만 일반적인 RTOS들은 MMU가 없는 cpu에서 실행되며, 따라서 독립적인 가상메모리를 제공하지 못합니다. (MMU가 없어도 가상 메모리를 구현 못하는 것은 아니겠지만, 실제로 구현된 시스템이 있는지는 모르겠습니다.) MMU가 있더라도, RTOS가 이를 사용하지 않는 경우도 많습니다.
이런 시스템에서는 가상 메모리 없이 Physical메모리를 그대로 사용하게 되며 모든 program은 process의 구분 없이 메모리 공간을 나누어 쓰게 됩니다. 이때 프로그램은 커다란 한개의 실행 이미지가 되며, 이 이미지는 OS와 유저 프로그램을 모두 포함하고 있습니다.
비록 메모리 공간은 함께쓰지만, 여러개의 Task를 만들수는 있고, 이 경우 한개의 process안에서 여러개의 thread를 가지고 있는 것과 거의 동일하게 프로그램이 가능합니다.
따라서 1개의 process안에 여러개의 thread가 있는 것과 아주 유사하며, 동일한 프로그램 기법이 사용 가능합니다.
즉 RTOS의 TASK를 process안의 thread와 비교하시면 됩니다.
--------------------------------------------------------------------------------------
조금씩이라도 전진한다.
--------------------------------------------------------------------------------------
조금씩이라도 전진한다.
댓글 달기