RTOS는 임베디드 시스템 환경에서 멀티태스킹 동작을 설계하는데 강력한 도구이다. 그러나 협소한 메모리를 가진 MCU에서는 응용프로그램에 비해 기존의 RTOS가 차지하는 비율이 크기 때문에 적용하기 어려웠다. 본 논문에서는 기존의 RTOS에서 사용빈도가 적은 기능을 제거하고, 스케줄링과 자원 관리의 기능만 가지고 최소한의 코드로 동작하는 경량화된 RTOS를 설계하였다. 공유 스택을 사용하여 사용자 메모리를 확보하며, 태스크의 문맥 전환시에 발생하는 오버헤드를 감소시키고, TCB등의 사이즈를 축소하는 기법을 사용하였다. 설계 및 검증 결과, 커널의 사이즈를 1KB이하로 축소할 수 있었고, 커널과 응용 프로그램의 비율을 고려해 볼 때, 본 논문에서 설계한 RTOS는 4KB이상의 프로그램 메모리를 가진 MCU에서 사용할 수 있다.
RTOS는 임베디드 시스템 환경에서 멀티태스킹 동작을 설계하는데 강력한 도구이다. 그러나 협소한 메모리를 가진 MCU에서는 응용프로그램에 비해 기존의 RTOS가 차지하는 비율이 크기 때문에 적용하기 어려웠다. 본 논문에서는 기존의 RTOS에서 사용빈도가 적은 기능을 제거하고, 스케줄링과 자원 관리의 기능만 가지고 최소한의 코드로 동작하는 경량화된 RTOS를 설계하였다. 공유 스택을 사용하여 사용자 메모리를 확보하며, 태스크의 문맥 전환시에 발생하는 오버헤드를 감소시키고, TCB등의 사이즈를 축소하는 기법을 사용하였다. 설계 및 검증 결과, 커널의 사이즈를 1KB이하로 축소할 수 있었고, 커널과 응용 프로그램의 비율을 고려해 볼 때, 본 논문에서 설계한 RTOS는 4KB이상의 프로그램 메모리를 가진 MCU에서 사용할 수 있다.
RTOS in the embedded system is a powerful tool for the design of multi-tasking. However, previous RTOS has large proportion in the MCU with limited memory. So it is difficult to apply RTOS. In this paper, I removed less frequently used features from the traditional RTOS, and designed lightweight RTO...
RTOS in the embedded system is a powerful tool for the design of multi-tasking. However, previous RTOS has large proportion in the MCU with limited memory. So it is difficult to apply RTOS. In this paper, I removed less frequently used features from the traditional RTOS, and designed lightweight RTOS that schedules and manages the resources with minimal code. I used techniques to obtain user memory using sharing stack, and to reduce the overhead at context. Considering ratio of kernel and applications, the RTOS designed in this paper is available on the MCU with more than 4KB of program memory.
RTOS in the embedded system is a powerful tool for the design of multi-tasking. However, previous RTOS has large proportion in the MCU with limited memory. So it is difficult to apply RTOS. In this paper, I removed less frequently used features from the traditional RTOS, and designed lightweight RTOS that schedules and manages the resources with minimal code. I used techniques to obtain user memory using sharing stack, and to reduce the overhead at context. Considering ratio of kernel and applications, the RTOS designed in this paper is available on the MCU with more than 4KB of program memory.
* AI 자동 식별 결과로 적합하지 않은 문장이 있을 수 있으니, 이용에 유의하시기 바랍니다.
문제 정의
본 논문에서는 아래에 해당하는 비교적 성능이 낮은 프로세서에서 동작 가능한 경량화된 RTOS 설계를 목표로 한다.
본 논문에서는 저사양의 MCU에서 멀티태스킹환경을 쉽게 구현할 수 있도록 RTOS를 설계하였다.
본 논문에서는 저사양의 프로세서에 적합한 RTOS를 설계하기 때문에 외부 인터럽트, 커널 서비스, 문맥전환과 관련된 잠복시간을 최소화에 관해 관심을 갖고 설계를 진행하였다. 설계 언어는 표준 C로만 구현하며, 여러 MCU에 이식하기 쉽도록 어셈블리 언어를 배제 하였으며, 이식 작업은 단순히 틱(tick)을 발생시키는 타이머 관련 루틴만 수정하면 되도록 하였다.
제안 방법
C언어의 매크로를 이용하여 레이블을 생성하고, 다른 태스크로 전환 시에 레이블의 주소를 TCB에 저장하고, 복귀 시에 태스크 함수를 재호출하면서 매개변수로 입력되는 주소를 사용하여 다음 실행할 문장으로 복귀한다.
다음으로, 스케줄러 및 세마포어의 동작을 검증하기 위해 6개의 태스크가 각자 하나 이상의 하드웨어를 제어하고 공유자원인 ADC와 문자 LCD 모듈을 관리하기 위해 각각 세마포어를 할당하였다. 태스크의 구성은 그림 3과 같이 하였고, [9-11]을 참고하여 태스크를 작성하였다.
대부분 매크로로 작성되어 있으며 이진 세마포어를 옵션사항으로 두어 공유자원을 관리하도록 설계 하였다.
본 논문에서 설계하는 RTOS는 커널의 좋은 성능보다 메모리 사용량의 절약에 비중을 더 두기 때문에 비선 점형 커널 방식을 사용한다.
본 논문에서는 AVR 계열을 중점적으로 검증하였다. 향후에 다른 계열의 MCU에 이식하여 검증한 후 공개할 계획이다.
본 논문에서는 이를 해결하기 위해 핵심기능인 스케줄링과 자원을 관리하는데 필요한 최소한의 코드를 가지면서, 성능을 저하시키지 않고, 메모리를 많이 요구하지 않으면서 짧은 잠복시간(latency)를 제공하는 경량화된 RTOS를 설계하였다.
사용자 응용프로그램에서 RTOS의 시스템 호출을 지원하기 위한 API는 표 2와 같고 기존의 RTOS를 참고하여 설계하였다[5-8].
본 논문에서는 저사양의 프로세서에 적합한 RTOS를 설계하기 때문에 외부 인터럽트, 커널 서비스, 문맥전환과 관련된 잠복시간을 최소화에 관해 관심을 갖고 설계를 진행하였다. 설계 언어는 표준 C로만 구현하며, 여러 MCU에 이식하기 쉽도록 어셈블리 언어를 배제 하였으며, 이식 작업은 단순히 틱(tick)을 발생시키는 타이머 관련 루틴만 수정하면 되도록 하였다.
본 논문의 RTOS의 태스크는 그림 4와 같은 상태천이를 가진다. 태스크의 형태는 사이즈를 고려하여 가장 고전적인 형태를 가지도록 하였다. [1][5-6]
프로그램 및 데이터 메모리의 절약, 문맥전환 및 인터럽트 응답 속도 개선의 목적에 맞도록 고려한 결과, RTOS의 설계 방향을 비선점형 공유 스택 RTOS로 정하고, 어셈블리 문맥전환 방식이 아닌 매크로에 의한 방식으로 하였다.
대상 데이터
앞서 설계한 RTOS의 동작을 검증하기 위해 AVR 계열의 ATmega 128 MCU를 내장한 "RTEB-128"라는 RTOS training board 제품을 이용하였다[10].
성능/효과
그리고 LIST 파일 및 메모리 맵을 확인 결과, 기존의 경량화된 RTOS[12]에 비해 1/5 정도인 5 Byte의 TCB을 생성하여 효율적인 메모리 관리가 가능함을 확인하였다. AVR 시뮬레이터를 이용하여 문맥전환이 이루어지는 과정이 함수호출 레벨에서 신속하게 진행됨을 확인하였다.
간단한 태스크 프로젝트를 작성하여 메모리 할당 조사 및 시뮬레이터 상에서 동작을 검증한 결과 본 논문에서 설계한 RTOS는 태스크 당 기존 경량화된 RTOS에 비해서도 1/5 정도인 5Byte의 TCB을 생성하며 효율적인 메모리 관리가 가능함을 확인하였다. 그리고 TCB에 현재 문맥을 모두 저장하는 기존 방식에 비해 함수호출 레벨에서 문맥전환이 신속하게 진행됨을 확인하였다.
먼저, 커널 사이즈를 확인하기 위해 가장 간단한 두 개의 LED 점멸 태스크를 작성하여 AVR Studio 5의 내장 컴파일러로 컴파일한 결과 800Byte 이내의 실행 파일을 얻을 수 있었다. 그리고 LIST 파일 및 메모리 맵을 확인 결과, 기존의 경량화된 RTOS[12]에 비해 1/5 정도인 5 Byte의 TCB을 생성하여 효율적인 메모리 관리가 가능함을 확인하였다. AVR 시뮬레이터를 이용하여 문맥전환이 이루어지는 과정이 함수호출 레벨에서 신속하게 진행됨을 확인하였다.
간단한 태스크 프로젝트를 작성하여 메모리 할당 조사 및 시뮬레이터 상에서 동작을 검증한 결과 본 논문에서 설계한 RTOS는 태스크 당 기존 경량화된 RTOS에 비해서도 1/5 정도인 5Byte의 TCB을 생성하며 효율적인 메모리 관리가 가능함을 확인하였다. 그리고 TCB에 현재 문맥을 모두 저장하는 기존 방식에 비해 함수호출 레벨에서 문맥전환이 신속하게 진행됨을 확인하였다. 이는 문맥 전환 성능 개선을 위한 다중 레지스터 파일을 지원하지 않는 저사양 MCU에 효율적으로 사용될 수 있음을 말한다.
둘째, 태스크 간의 사용자의 자원관리 부주의로 인한 교착상태가 일어나지 않도록 주의해야 한다.
먼저, 커널 사이즈를 확인하기 위해 가장 간단한 두 개의 LED 점멸 태스크를 작성하여 AVR Studio 5의 내장 컴파일러로 컴파일한 결과 800Byte 이내의 실행 파일을 얻을 수 있었다. 그리고 LIST 파일 및 메모리 맵을 확인 결과, 기존의 경량화된 RTOS[12]에 비해 1/5 정도인 5 Byte의 TCB을 생성하여 효율적인 메모리 관리가 가능함을 확인하였다.
테스트 결과 각 태스크가 동시간대에 정상적으로 동작하고, 특히 문자 LCD가 세마포어를 이용하여 자원의 제어권을 충돌 없이 관리할 수 있음을 확인하였다. 오동작 유무를 확인하기 위하여 다른 하나의 UART 포트를 사용하여 PC로 모니터링 한 결과 48시간 이상 구동하여 안정적으로 구동함을 확인하였다.
첫째, 태스크의 응답속도는 태스크의 최대 실행시간과 밀접한 관련이 있다. 만약, 최대시간이 길어질 경우 응답속도를 개선하기 위하여 osYIELD()를 호출하여 다른 태스크에게 CPU점유권을 명시적으로 양보할 필요가 있다.
테스트 결과 각 태스크가 동시간대에 정상적으로 동작하고, 특히 문자 LCD가 세마포어를 이용하여 자원의 제어권을 충돌 없이 관리할 수 있음을 확인하였다. 오동작 유무를 확인하기 위하여 다른 하나의 UART 포트를 사용하여 PC로 모니터링 한 결과 48시간 이상 구동하여 안정적으로 구동함을 확인하였다.
하드웨어에 의한 검증결과, 6개의 태스크와 2개의 세마포어가 안정적인 동작을 함을 확인할 수 있었다.
후속연구
스케줄러 동작 중 문맥전환이 이루어지는 동안은 실제 응용 프로그램에서 원하는 작업은 이루어지지 않기 때문에 오버헤드라고 볼 수 있다. 고속 또는 고성능의 프로세서에는 이 문제가 크게 발생하지 않지만 현재 본 논문에서는 낮은 사양의 프로세서를 타겟으로 하고 있기 때문에 설계 시에 다른 전략으로 접근할 필요가 있다.
향후에 다른 계열의 MCU에 이식하여 검증한 후 공개할 계획이다. 제안하는 RTOS가 다양한 프로젝트에 적용될 수 있으리라 사료된다.
본 논문에서는 AVR 계열을 중점적으로 검증하였다. 향후에 다른 계열의 MCU에 이식하여 검증한 후 공개할 계획이다. 제안하는 RTOS가 다양한 프로젝트에 적용될 수 있으리라 사료된다.
질의응답
핵심어
질문
논문에서 추출한 답변
멀티태스킹이란?
최근 들어 멀티미디어 정보를 처리해야 하는 임베디드 시스템이 늘어나면서 시스템이 복잡해지고 있으며 이를 구현하기 위해 임베디드 시스템은 멀티태스킹으로 동작된다. 멀티태스킹이란 스케줄러를 이용하여 각각의 실행중인 프로그램들의 실행 객체인 태스크의 실행시간을 관리 및 전환하여서 각각의 태스크가 동시에 실행되는 것처럼 보이게 하는 것으로 응용프로그램의 복잡성을 줄이고 관리의 용이성을 가지게 하는 방식이다[1].
RTOS의 선점형과 비선점형을 설명하면?
선점형은 OS가 CPU를 독점하게 되고, 태스크 들이 OS로부터 CPU의 점유권을 대여하여 사용하는 방식이다. 태스크는 언제든지 CPU의 소유권을 선점될 수 있어 비선점형 커널에 비해 자유로운 멀티태스킹이 구현된다. 그러나 OS의 권한이 커지기 때문에 구조가 복잡해지고 메모리의 소모도 많아진다[2].
비선점형 커널은 태스크가 CPU를 독점하게 된다. 다시 말해 아무리 우선순위가 낮은 태스크라도 CPU 점유권을 반환할 때까지 다른 태스크는 절대 실행되지 않는다. 멀티태스킹이 태스크 간의 협조로 이루어지므로 협조적 커널(cooperative kernel)라고도 한다. 이 커널 방식은 기능이 제한적이지만 커널의 코드 사이즈가 줄어들고, 인터럽트 응답이 좋은 효과를 얻을 수 있다[3].
RTOS란?
RTOS(Real Time Operating System)는 태스크를 시간에 따라 정확하게 관리하고, 시스템 자원을 관리하며, 응용프로그램 개발을 위한 일관된 기반을 제공하는 일종의 프로그램이다. 수행된 태스크에 대해 반응시간이 느리더라도 문제가 없는 범용 OS에 비하여 RTOS의 경우 사용되는 용도에 따라 안정성을 위한 반응성을 지녀야하므로 멀티태스킹에 있어서도 차이를 가지게 되는데 반응성을 충족시키기 위해 RTOS의 경우 시스템에 정해진 방식에 따라 우선순위를 두고 그에 따라 정해진 시간 내에 수행된 태스크에 대해 반응을 할 수 있게 해야 한다.
※ AI-Helper는 부적절한 답변을 할 수 있습니다.