실시간 Linux 운영 체제에서의 C++ 프로그래밍

실시간 Linux 운영 체제에서의 C++ 프로그래밍

표준 Linux 커널과 비교하여 RT Linux 커널에서 실시간 C++ 애플리케이션(사용자 공간 및 Linux 드라이버)을 프로그래밍하는 데 문제가 있습니까?

Linux RT 패치는 커널 스케줄러, 세마포어, 음소거 등을 변경합니다. 이러한 변경 사항이 개발자에게 투명한지 궁금합니다. 아니면 그러한 신청서를 작성할 때 특별한 주의를 기울여야 합니까?

답변1

상황에 따라 다릅니다. 실제로 뮤텍스와 세마포어를 사용하는 커널 공간 드라이버를 개발하는 경우 패치가 있는지 빠르게 확인해야 합니다. 이는 개발자로서 귀하의 책임이며 웹사이트의 어떤 답변도 문제를 해결할 수 없습니다.

주로 사용자 공간 소프트웨어를 개발하는 경우 안정적이어야 하는 커널 인터페이스와만 싸우고 있기 때문에 이러한 변경 사항은 영향을 미치지 않습니다.

강력한 실시간 요구 사항에는 일반적으로 사용자 공간 애플리케이션이 권장되지 않습니다.

RT 코어는 대부분의 주요 배포판에서 사용할 수 있으므로 RT 재미 외에는 특별한 것이 필요하지 않다는 결론에 도달했습니다. 다음 사항을 염두에 두십시오.https://rt.wiki.kernel.org/index.php/HOWTO:_Build_an_RT-application

답변2

저는 C++로 RT 애플리케이션을 작성한 경험이 없습니다. 대신에 Ada를 사용했는데 Erlang이 적합할 수도 있습니다. (RT Java도 있지만 경험이 없습니다.)

원칙적으로 IPC 도구(언급하신 대로)와 다중 프로그래밍 도구 등을 고려하면 forkC++를 사용하는 것은 문제가 되지 않습니다. 명시적 메모리 관리는 마스터하기 전까지는 오류가 발생하기 쉽습니다.

RT Linux는 일반 Linux의 확장입니다. (이것은 많은 RTOS에서 공통적입니다. 이는 비RTS에 대한 확장입니다.하지만시간 공유, 운영 체제. )

RT 작업이 비RT 프로세스와 공존하기 위해 RTOS는 특정 조치를 취합니다. 예를 들어 작업을 메모리에 잠그거나 프로세스보다 높은 우선순위를 할당하는 것입니다. 그 목적은 비RT 프로세스가 RT 작업을 차단하지 않도록 하는 것입니다(따라서 잠재적으로 마감 기한을 지키지 못하게 할 수 있습니다. RTS의 전체 목적은 이러한 일이 발생하지 않도록 방지하는 것입니다).

RT Linux의 경우 Linux 커널을 할당합니다.가장 낮은우선순위.

RT Linux는 Linux 커널 아래와 하드웨어 위에 위치합니다. 그러나 Linux 커널은 이를 인식하지 못합니다. 즉, 하드웨어와 RT Linux를 전체적으로(즉, 하드웨어로) 취급합니다. 그럼에도 불구하고 모든 하드웨어 인터럽트는 RT Linux 커널에 의해 차단되며 그 중 일부(RT 작업과 관련된)는 RTOS에 의해 처리됩니다(나머지는 처리를 위해 일반 Linux 커널로 전달됩니다).

RT Linux는 RT 스케줄링 알고리즘을 사용하여 "예측 가능한" 동작(RT 용어로)을 보장합니다. 즉, 모든 작업이 마감일을 준수합니다. 이는 그러한 보장을 할 수 없는 Linux와는 다릅니다. 또한 RT Linux는 가상 메모리를 지원하지 않습니다. 이로 인해(앞뒤로 스와핑) 컨텍스트 전환이 길어지고(제한되지 않은) 예측할 수 없는 대기 시간이 발생하기 때문입니다. (실제로 모든 RT Linux 작업에는 하드웨어에 대한 전체 액세스 권한이 있습니다.)

관련 정보