3 분 소요

이 글은 ‘uC/OS-III: The Real-Time Kernel For the STM32 ARM Cortex-M3, Jean J. Labrosse, Micrium, 2009’를 번역한 글입니다. 오역이 있을 수 있으며, 발견하시면 github에 issue나 댓글 남겨주시기 바랍니다.

What is microC/OS-III

scalable, ROMable, preemptive real-time kernel that manages an unlimited number of tasks

  • ROMable: ROM에서 실행될 수 있는 프로그램
  • preemptive: 어떤 프로세스가 실행 중일 때, 우선순위가 높은 프로세스가 있으면 실행중인 프로세스를 일시중지시키고 우선순위가 높은 프로세스가 실행될 수 있는 것

Real-time system

Real-time 시스템은 계산 값의 정확성과 적시성이 가장 중요한 시스템이다.Real-time 시스템은 hard real time와 soft real time으로 구분된다.

hard real time과 soft real time을 구별하는 것은 missing deadline의 일부 허용과 missing deadline의 결과이다. 데드라인 이후에 정확하게 계산된 값은 종종 쓸모가 없다.

hard real time에서, 데드라인을 놓치는 것은 선택 사항이 아니다. 사실, 많은 경우에, 데드라인을 놓치는 것은 종종 인간의 생명을 수반할 수 있는 재앙을 초래한다. 그러나 soft real time의 경우, 데드라인을 놓치는 것은 일반적으로 그렇게 중요하지 않다.

real time 프로그램들은 여러 곳에 있지만, 많은 real time 시스템은 내장되어있다. 내장(embedded)시스템은 사용자가 컴퓨터라고 인식하지 못하는 컴퓨터이다. 보통 전용 시스템이며, 특정 기능을 수행하도록 설계된 시스템이다. 예를 들어 라우터, 프린터, mp3 플레이어 등이 있다.

real time 시스템은 그렇지 않은 시스템보다 설계, 디버그, 배포가 어렵다.

Foreground/Background Systems

복잡도가 낮은 작은 시스템들은 전형적으로 foreground/background 시스템 또는 무한 루프로 설계된다. 애플리케이션은 원하는 동작들(background)을 수행하기 위해 모듈들(즉, task들)을 호출하는 무한 루프(F1-1(1))로 구성된다. F1-1(3)에 나타낸 인터럽트 서비스 루틴들(ISR)은 비동기 이벤트들(foreground)을 처리한다. foreground은 인터럽트 레벨이라고도 하고, background은 태스크 레벨이라고도 한다.

task level에서 수행되어야 하는 중요한 연산들은 ISR에 의해 처리되어야만 적시에 처리될 수 있다. 이로 인해 ISR은 더 오랜 시간이 걸린다. 또한 ISR이 실행한 background task는 background routine이 실행될 차례가 될 때까지 처리되지 않으며, 이를 task-level response이라고 한다. 최악의 경우, task-level response는 background loop가 실행되는데 걸리는 시간에 따라 달라지며, 코드의 실행 시간은 일정하지 않으므로, loop의 일부를 통과하는 시간은 비결정적이다. 코드 변경이 이루어지면 루프의 시간에 영향을 미친다.

대부분의 대용량 및 저비용 마이크로컨트롤러 기반 애플리케이션(예: 전자레인지, 전화기, 장난감 등)은 foreground/background 시스템으로 설계된다.

image

Real-time kernels

Real-time kernel은 마이크로프로세서, 마이크로컨트롤러, 또는 디지털신호 프로세서의 시간과 자원을 관리하는 소프트웨어이다.

  • 마이크로프로세서: 연산에 특화된 기능을 갖는 장치. 램,롬,출력장치가 있어야 동작한다( = 레지스터 + 연산장치 + 제어장치)
  • 마이크로컨트롤러: 마이크로프로세서에 메모리, 입력장치 등이 함꼐 집적된 장치
  • 디지털신호 프로세서(DSP): 디지털 신호(오디오, 영상 신호 등) 처리에 특화된 장치

real-time application의 설계과정은 각각 작업의 일부를 담당하는 task로 나누는 것을 포함한다. task(thread)는 자신에게 완전히 CPU(중앙 처리 장치)가 있다고 생각하는 단순한 프로그램이다. 단일 CPU 상에서는 임의의 주어진 시간에 하나의 task만 실행된다. task는 일반적으로 무한 루프(infinite loop)로 구현된다.

커널은 task들의 관리를 담당한다. 이를 멀티태스킹(multitasking)이라고 한다. 멀티태스킹은 CPU를 여러 task들 사이에서 스케줄링하고 전환하는 과정이다. CPU는 여러 순차적인 task들 사이에서 주의를 전환한다. 멀티태스킹은 CPU가 여러 개인 것 같은 착각을 불러일으키며 CPU의 사용을 극대화한다. 멀티태스킹은 modular application의 생성에도 도움을 준다. 멀티태스킹의 가장 중요한 측면 중의 하나는 실시간 응용프로그램에 내재된 복잡성을 응용프로그래머가 관리할 수 있게 해준다는 점이다. 응용프로그램은 멀티태스킹을 사용할 때 설계하고 유지보수하기가 더욱 쉽다.

  • modular application: 모듈이라고 불리는 여러 subprogram들이 느슨하게 결합하여 구성된 프로그램. subprogram 끼리는 순서는 없고 우선순위만 있음. 예를 들어 프로그램이 p1,p2,p3의 작은 subprogram으로 구성되어있다면 p1->p2->p3로 실행될 수도 있고, p2->p1->p3로 실행될 수도 있다.

μC/OS-III는 preemptive 커널로서, Fig 1-2와 같이 ready-to-run된 가장 중요한 task를 μC/OS-III가 항상 실행한다는 것을 의미한다.

 Low Priority Task(1)        (2)
                    ----------------------->
                                                ISR(3)
                                            (4) 
                                            <----   
                        (5)High priority Task(infinite Loop)
                     (6) 
                    <----  
 (7)Low priority Task

 //Fig 1-2

F1-2(1)

낮은 우선순위 task가 동작 중이다.

F1-2(2)

인터럽트가 발생하고, 인터럽트를 발생시킨 장치를 담당하는 ISR을 CPU가 실행한다.

F1-2(3)

ISR은 약간의 일만하는데, 보통 인터럽트를 발생시킨 장치 처리의 대부분을 담당하는 더 높은 우선순위의 task에 신호를 보내거나 메시지를 보낸다. 예를 들어 인터럽트가 이더넷 컨트롤러로부터 온 경우 ISR은 단순히 task에 신호를 보내 수신된 패킷을 처리할 것이다.

F1-2(4)

ISR이 완료되면 μC/OS-III는 ISR에 의해 더 중요한 작업이 실행 준비 상태로 만들어진 것을 알게되고, 중단된 작업으로 돌아가지 않고, 대신 더 중요한 task로 문맥교환(context-switch)한다.

F1-2(5)

high priority task는 인터럽트를 발생시킨 장치를 처리한다.

F1-2(6)

high priority task가 완료되면 처음 task로 돌아가고 microC/os-iii는 다음 인터럽트를 대기한다.

F1-2(7)

low priority task는 작업이 중단된 지점에서 정확히 다시 시작된다.

참고) 기본적으로 ISR은 우선순위가 매우 높고 종종 인터럽트를 비활성화하기때문에 ISR 실행시간은 최소화시킨다.

또한 μC/OS-III와 같은 커널은 task 간의 통신을 관리하고 시스템 리소스(메모리 및 I/O 장치)를 관리한다.

커널은 커널이 제공하는 서비스들이 실행하는 데 시간이 필요하기 때문에 시스템에 오버헤드를 더한다. 오버헤드의 양은 이러한 서비스들이 얼마나 자주 호출되느냐에 따라 달라진다. 잘 설계된 애플리케이션에서 커널은 CPU 시간의 2%에서 4% 사이를 사용한다. 그리고 μC/OS-III는 애플리케이션에 추가되는 소프트웨어이기 때문에 여분의 ROM(코드공간)과 RAM(데이터공간)이 필요하다.

저사양의 단일 칩 마이크로컨트롤러들은 매우 적은 RAM에 접근할 수 있기 때문에 일반적으로 μC/OS-III와 같은 실시간 커널을 실행할 수 없다. μC/OS-III은 1~4KB 사이의 RAM을 필요로 하며, 각 작업은 자신의 스택 공간을 필요로 한다. μC/OS-III이 4KB 이내의 RAM을 갖는 프로세서에서 작동하는 것이 가능하다.

마지막으로 μC/OS-III는 약 70여 가지의 서비스를 제공함으로써 CPU를 더 잘 사용할 수 있게 한다. μC/OS-III와 같은 실시간 커널을 이용하여 시스템을 설계한 후에는 foreground/background 설계로 돌아가지 않을 것이다.

RTOS

Real Time Operating System은 일반적으로 실시간 커널 및 파일 관리, 프로토콜 스택, GUI(Graphical User Interface) 및 기타 구성 요소와 같은 기타 고급 서비스를 포함하며, 대부분의 부가 서비스는 I/O 장치를 중심으로 이루어진다.

microC/OS-iii

μC/OS-III은 scalable, ROMable, preemptive 실시간 커널로서 무제한의 작업을 관리한다. μC/OS-III은 3세대 커널로서 자원 관리, 동기화, 작업 간 통신 등을 포함한 현대의 실시간 커널에서 기대되는 모든 서비스를 제공한다.그리고 μC/OS-III은 런타임에 성능 측정을 수행하거나 작업에 직접 신호를 보내거나 메시지를 보낼 수 있는 기능, 세마포어나 메시지 큐와 같은 여러 커널 객체에 대한 pending(waiting) 기능 등 다른 실시간 커널에서 발견되지 않는 많은 독특한 기능들도 제공한다.

  • Source Code: ANSI-C source form
  • 직관적인 API
  • preemptive multitasking
  • 우선순위가 같을 경우 round robin 스케쥴링을 함
  • interrupt disable time이 적음
  • 확장가능
  • 많은 CPU 아키텍처에 설치가능
  • ROM에 설치가능
  • 무제한 task 실행가능
  • 무제한 우선순위 단계
  • Mutual Exclusion Semaphore
  • software timer
  • 에러 확인
  • 성능 측정
  • deadlock 방지
  • etc…

Reference

  • uC/OS-III: The Real-Time Kernel For the STM32 ARM Cortex-M3, Jean J. Labrosse, Micrium, 2009
  • https://blog.naver.com/PostView.nhn?blogId=roboholic84&logNo=220815649199
  • https://www.crowdbotics.com/blog/best-practices-for-building-a-modularized-app

책 링크

댓글남기기