기술(IT)

실시간 운영 체제(RTOS)

2019. 10. 16.
728x90

Real Time Operating System (RTOS)는 버퍼 지연 없이 데이터를 처리하는 실시간 애플리케이션을 지원하기 위한 운영 체제이다. 실시간 시스템은 잘 정의된 고정 시간 제약 조건을 가진 시간 제한 시스템이다. 처리 시간 요건은 10분의 1초 또는 짧은 시간 증분으로 측정된다. 정의된 제약조건 안에서 처리를 해야 한다. 그렇지 않으면 시스템이 고장 날 것이다. 그것들은 이벤트 중심적이거나 시간 공유가 된다. 이벤트 기반 시스템은 우선순위에 따라 작업 간에 전환되고 시간 공유 시스템은 클럭 인터럽트를 기반으로 작업을 전환한다. 실시간 OS의 주요 요인은 인터럽트 지연 시간을 최소화하고 스레드 전환 지연 시간을 최소화하는 것이다. 실시간 OS는 주어진 시간 내에 수행할 수 있는 작업의 양보다 얼마나 빨리 또는 얼마나 예측 가능한 방식으로 대응할 수 있는지에 대해 더 높게 평가된다. RTOS는 스케줄링을 위한 고급 알고리즘을 가지고 있다. 스케줄러 유연성은 프로세스 우선순위에 대한 컴퓨터 시스템의 보다 광범위한 조정을 가능하게 하지만, 실시간 OS는 좁은 애플리케이션 집합에 더 자주 전용된다. 주요 설계 목표는 높은 처리량이 아니라 소프트 또는 하드 성능 범주를 보장하는 것이다. 

일시적으로 인터럽트 마스킹/비활성화
범용 운영체제는 대개 사용자 프로그램이 인터럽트를 마스킹하는 것을 허용하지 않는데, 이는 사용자 프로그램이 원하는 기간 동안 CPU를 제어할 수 있기 때문이다. 일부 최신 CPU는 사용자 모드 코드가 주요 운영 체제 리소스로 간주되기 때문에 인터럽트를 비활성화하는 것을 허용하지 않는다. 그러나 많은 임베디드 시스템과 RTOS는 애플리케이션 자체가 커널 모드에서 실행되어 시스템 호출 효율성을 높이고 OS 개입 없이 애플리케이션이 운영 환경을 더 잘 제어할 수 있도록 한다. 단일 프로세서 시스템에서 커널 모드에서 실행 중인 애플리케이션과 인터럽트 마스킹은 공유 리소스에 대한 동시 액세스를 방지하는 가장 낮은 오버헤드 방법이다. 인터럽트는 마스킹되고 현재 태스크는 차단 OS 호출을 하지 않지만, 현재 태스크는 다른 태스크나 인터럽트가 제어할 수 없기 때문에 CPU를 독점적으로 사용하므로 중요 섹션은 보호된다. 태스크가 중요한 섹션을 종료하면 인터럽트를 해제해야 한다. 보류 중인 인터럽트가 있으면 실행된다. 일시적으로 인터럽트를 마스킹하는 것은 중요한 섹션을 통과하는 가장 긴 경로가 원하는 최대 인터럽트 지연 시간보다 짧은 경우에만 수행되어야 한다. 일반적으로 이 보호 방법은 중요 섹션이 몇 가지 지시사항일 뿐 루프가 없는 경우에만 사용된다. 이 방법은 비트가 서로 다른 작업에 의해 제어될 때 하드웨어 비트 매핑 레지스터를 보호하는 데 이상적이다.

뮤텍스
공유 리소스를 다른 모든 작업을 차단하지 않고 예약해야 하는 경우, 뮤텍스 및 OS가 감독하는 인터프로세서 메시징과 같은 범용 운영 체제에서도 사용할 수 있는 메커니즘을 사용하는 것이 좋다. 이러한 메커니즘은 시스템 호출을 포함하며, 대개 종료 시 OS의 디스패쳐 코드를 호출하므로 일반적으로 실행하기 위해 수백 개의 CPU 명령어를 사용하는 반면, 인터럽트를 마스킹하는 데는 일부 프로세서에서 한 가지 지시사항이 적게 걸릴 수 있다. 음 소거가 잠기거나 잠금 해제되어 있다. 작업이 뮤텍스를 잠근 경우, 다른 모든 태스크는 소유자인 원래 스레드에 의해 뮤텍스가 잠금 해제될 때까지 기다려야 한다. 태스크는 음 소거 대기 시간을 설정할 수 있다. 음 소거 기반 설계에는 우선순위 반전 및 교착 상태와 같은 잘 알려진 문제가 몇 가지 있다. 우선 순위 반전에서는 우선 순위가 낮은 태스크에 음소거가 있기 때문에 우선 순위가 높은 태스크가 대기하지만 우선 순위가 낮은 태스크에는 작업을 완료할 수 있는 CPU 시간이 주어지지 않는다. 일반적인 해결책은 가장 높은 대기 태스크의 우선 순위인 음소거 또는 상속을 소유하는 태스크를 갖는 것이다. 그러나 이러한 간단한 접근방식은 여러 가지 수준의 기다림이 있을 때 더욱 복잡해진다. 즉, 과제 A는 과제 B에 의해 잠기는 뮤텍스를 기다리고, 과제 C에 의해 잠기는 뮤텍스를 기다린다. 여러 단계의 상속을 처리하면 다른 코드가 높은 우선순위 상황에서 실행되어 중간 우선순위 스레드가 소진될 수 있다. 교착상태에서 두 개 이상의 태스크는 시간 초과 없이 뮤텍스를 잠근 다음 다른 태스크의 뮤텍스를 영원히 기다리며 주기적 종속성을 만든다. 가장 간단한 교착상태 시나리오는 두 개의 작업이 번갈아 두 개의 뮤텍스 잠글 때 발생하지만 그 반대 순서로 진행된다. 교착상태는 세심한 설계로 방지된다.

메시지 전달
자원 공유에 대한 다른 접근법은 조직된 메시지 전달 체계에서 메시지를 보내는 작업을 위한 것이다. 이 패러다임에서 자원은 단 하나의 태스크에 의해 직접 관리된다. 다른 태스크가 리소스를 조회하거나 조작하려는 경우 관리 태스크로 메시지를 전송한다. 이들의 실시간 행동은 세마포어 시스템보다 덜 바삭하지만, 단순한 메시지 기반 시스템은 대부분의 프로토콜 교착 위험을 회피하며, 일반적으로 세마포어 시스템보다 더 나은 행동을 보인다. 그러나 세마포어 같은 문제는 가능하다. 우선순위 반전은 태스크가 낮은 우선순위 메시지에서 작업 중이고 들어오는 메시지 대기열에 있는 높은 우선순위 메시지를 무시할 때 발생할 수 있다. 프로토콜 교착은 두 개 이상의 태스크가 응답 메시지를 전송하기 위해 서로 기다릴 때 발생할 수 있다.

메모리 할당
메모리 할당은 다른 운영 체제보다 실시간 운영 체제에서 더 중요하다. 첫째, 안정성을 위해 메모리 누수가 있을 수 없다. 기기는 재부팅할 필요 없이 무한정 작동해야 한다. 가능한 경우, 필요한 모든 메모리 할당은 컴파일 시간에 정적으로 지정된다. 동적 메모리 할당을 피하는 또 다른 이유는 메모리 조각화 때문이다. 메모리의 작은 덩어리를 자주 할당하고 해제하면 사용 가능한 메모리가 몇 개의 섹션으로 분할되고 RTOS는 사용 가능한 메모리가 충분하지만 충분히 연속적인 메모리 블록을 할당할 수 없는 상황이 발생할 수 있다. 둘째로, 할당 속도가 중요하다. 표준 메모리 할당 체계는 적절한 사용 가능한 메모리 블록을 찾기 위해 불확정 길이의 링크된 목록을 스캔하며, 메모리 할당은 일정 시간 내에 이루어져야 하므로 RTOS에서는 허용되지 않는다. 기계식 디스크는 응답 시간이 훨씬 길고 예측 불가능한 경우가 많기 때문에 위에서 설명한 RAM 할당과 같은 이유로 디스크 파일로 스와핑이 사용되지 않는다. 간단한 고정 크기 블록 알고리즘은 오버헤드가 낮기 때문에 간단한 임베디드 시스템에 매우 적합하다.

LIST

'기술(IT)' 카테고리의 다른 글

에러 제어 (Error control)  (0) 2019.10.18
MPLS (Multi Protocol Label Switching)  (0) 2019.10.17
RISC(Reduced Instruction Set Computer)  (0) 2019.10.15
임베디드 시스템(Embedded system)  (0) 2019.10.14
가상기억장치 (Virtual memory)  (0) 2019.10.13

댓글

추천 글