RTOS

개요[편집 | 원본 편집]

RTOS(Real-time OS)는 실시간 처리를 보장하는 운영체제를 의미한다. 주로 저성능의 시스템(임베디드 시스템)에 쓰인다. 이 운영체제는 주로 기계제어 분야에서 많이 쓰이는데 디지털 제어 시스템의 경우 샘플링 타임의 정확성이 중요한데, RTOS는 이 조건에 딱 맞기 때문이다. 주변에서 흔히 볼 수는 없지만 고속철도 제어 시스템, 항공기 제어 시스템, 군사용 등으로 쓰인다.

특징[편집 | 원본 편집]

가장큰 특징은 응용프로그램의 명령이 시스템 프로그램의 명령보다 우선에 있을 수 있다는 것이다. RTOS의 목표는 정해진 시간내에 프로그래머의 의도를 따라 가는 것이기 때문이다. 크게 두 가지 구동방식이 있는데

첫번째는 이벤트 구동방식이다. 시스템이 수행하는 task전환이 우선순위가 높은 것이 들어올때마다 일어난다. 두번째는 시분할 방식이다. 클럭 인터럽트같이 시간과 관계된 인터럽트의 변화가 일어날때마다 task의 전환이 일어난다.

task간의 commuication, memory 공유[편집 | 원본 편집]

굉장히 중요하고, 어려운 부분이다. task간의 commuication과 memory공유는 굉장히 정밀하게 프로그래밍되어야한다. 일반적으로 2개이상의 task가 같은 memory 영역을 참조하는 것은 데이터 오염과 잘못된 참조등 오류를 발생시킬 확률이 높다. 이를 위해 일반적으로 사용되는 방법이 몇가지가 있다. 첫번째가 interrupt비활성화 이다. 시분할 방식 RTOS의 경우 task 전환이 interrupt에 의해 일어나게 되는데 interrupt를 일시적으로 비활성화 시켜 하나의 task가 먼저 메모리를 참조하고 interrupt를 다시 활성화 시켜 그다음 task가 메모리를 참조하도록 하는 방식이다. 그 외에 방식은 메시지 교환 방식 등이 있는데 이방법들은 일반적으로 메모리 데이터 오염등을 일으킬 위험이 있기에 일반적으로 사용되지 않는다.

메모리 할당[편집 | 원본 편집]

메모리 할당 또한 굉장히 중요한 부분이다. 실시간으로 데이터 처리를 계속 해줘야하는 RTOS에서는 메모리를 신속하게 할당해 주는 것이 굉장히 중요하다. 일반적으로 linked list를 이용하여 메모리를 할당하지만 이는 메모리 할당에 걸리는 시간에서 불리하기 때문에 RTOS에서는 사용되지 않는 방법이다. 간단한 임베디드 시스템에서 자주 사용되는 메모리 할당 알고리즘은 고정블록 알고리즘을 사용한다. 또한 메모리의 단편화또한 중요한 문제이다. 메모리의 단편화 문제란 메모리 공간이 충분하지만 메모리를 할당 할 수 없는 경우를 말하는데 언뜻 얘기하면 공간이 있는데 왜 메모리 할당이 안되냐는 모순적인 얘기 같지만, 방안에 책이나 여러 잡동사니가 잔뜩 어질러져 있으면 사람이 발디딜 곳이 없지만 잡동사니등을 한쪽으로 몰아 정리하면 공간이 나는 것과 같은 원리다. 즉, 메모리가 이리 저리 파편화 되어 사용할 수 있을 정도로 메모리를 연속적으로 가져 올 수 없는 문제가 일어난다. 일반적으로 범용 컴퓨터는 자주 껏다 켰다 하면서 메모리 리프레쉬가 자주 일어 나지만, 임베디드 시스템은 한번 켜지면 몇십년을(우주 탐사선 같은 것을 생각해보자) 사용하는 경우도 자주 있다. 이런 시스템에서 메모리 할당 알고리즘을 정교하게 짜지 않으면 나중에 원인불명으로 시스템이 정지해버리는 경우가 생긴다.

각주