이번 글에서는 타스크와 관련된 내용인 TCB와 context에 대한 설명과 함께 실제로 어떻게 새로운 타스크를 만드는지 구현해 보도록 하겠다. 위의 그림은 uC/OS-II 문서에 나와 있는 그림이다. 이 그림을 보면 전체적인 타스크와 관련된 내용을 한눈에 볼수가 있다. Task Control Block이라고 하는 TCB는 각 타스크에 대한 정보를 가지고 있다. RTOS 글에서 나오는 아무추어 바둑선수들의 프로필 정보라고 생각하면 될것이다. TCB에는 타스크의 우선순위, 상태, 스택 포인터 등등 많은 정보를 가지고 있다. 그림에서 볼수있듯이 각 타스크는 별도의 스택 영역을 가지고 있어야 한다. 스택의 크기는 타스크의 기능에 따라 그 크기를 알맞게 설정할 수 있다. Context라고 하는것은 위의 그림에 표..
OS에서 가장 핵심이 되는 부분을 커널이라고 부르고, 그리고 그 커널안에서도 가장 중요한 부분을 굳이 말하라고 한다면 스케줄러일것이다. 스케줄러가 무엇인지 한줄로 요약한다면 여러 타스크들중에 어떤 타스크를 실행 시킬것인지 선택하여 그 타스크에게 CPU 점유권을 넘겨주는 기능을 수행하는 블럭이라 하겠다. 문제는 어떤 기준을 가지고 많은 타스크중에 하나를 선택할 것인가이다. 이러한 선택의 알고리듬의 차이가 각각의 RTOS의 특징이 되고 장단점이 되는 것이다. 이번 글에서는 megaOS의 스케줄러가 어떤식으로 동작되는지 설명하고, 스케줄러의 초기화 부분을 구현해 보도록 하겠다. megaOS는 모두 8개의 우선순위(Priority)를 제공한다. 그러므로 각 타스크는 0~7 중에 하나의 우선순위 값을 가질 수 있..
megaOS는 자료 관리를 위하여 double linked list를 사용한다. megaOS의 동작을 이해하기 위해서는 반드시 double linked list가 어떻게 동작되는지 정확히 알고 있어야 한다. 따라서 이번 글에서는 본격적으로 megaOS 코드를 구현하기 전에 앞서서 megaOS에서 사용하는 double linked list에 대한 설명을 하기로 하겠다. os.h 파일에 다음과 같은 구조체를 선언한다. /*------------------------------------------------------------------------------ * Base types and Macros *----------------------------------------------------------..