결정론적 차량 제어 작업을 위한 POSIX 실시간 스레딩 엔지니어링 가이드

PREEMPT_RT 리눅스나 차량용 RTOS 환경에서 고신뢰성 제어 소프트웨어를 개발할 때 스레드 설정의 엄격한 규율은 필수적입니다. 제어 루프에서 단 한 번의 페이지 폴트나 우선순위 역전이 발생해도 조향 명령이 지연될 수 있습니다. 본 가이드에서는 핵심 스레드 설계 원칙을 제시합니다.

mlockall 및 메모리 사전 할당을 통한 페이지 폴트의 원천 차단

실시간 주행 제어 루프 중 동적 메모리 할당(malloc)은 페이지 폴트를 유발하여 실시간 스레드를 수 밀리초 동안 멈추게 만듭니다. 차량용 POSIX 애플리케이션은 스레드 생성 전 `mlockall(MCL_CURRENT | MCL_FUTURE)`을 호출하여 모든 메모리를 물리 RAM에 잠그고, 스택 사전 터치 및 정적 메모리 풀을 강제해야 합니다.

우선순위 상속 뮤텍스를 통한 우선순위 역전 현상 원천 차단

낮은 우선순위의 로깅 스레드가 뮤텍스를 점유한 상태에서 중간 순위 태스크에 선점되면, 최우선 순위인 브레이크 제어 스레드가 무기한 대기하는 우선순위 역전이 발생합니다. POSIX에서는 `PTHREAD_PRIO_INHERIT`을 설정하여 락을 쥔 스레드의 우선순위를 대기자 수준으로 즉시 승격시켜 지연 없이 락을 해제하도록 보장합니다.

도메인 포트폴리오 살펴보기