목록포직스 (POSIX) (12)
Automotive Software
멀티 프로세서 또는 코어를 제공하는 SoC의 개발 및 사용이 확산됨에 따라 해당 하드웨어상에서의 다중 운영체제 구동 역시 가능하게 되었는데, 이는 최상위 애플리케이션 개발 시 운영체제 의존적인 코드(함수 호출 등) 사용을 초래하게 되어 이종 운영체제상 호환성 문제를 야기할 수 있다. 이를 위해 운영체제를 추상화하여 이종 플랫폼 간의 호환성을 제공하는 OSAL (Operating System Abstraction Layer)를 설계되었는데, OSAL을 지원하기 위한 API 및 라이브러리들은 SoC 업체들이 별도로 제공 또는 판매하고 있다. 상기 그림에서와 같이 OSAL 계층이 추가되고 애플리케이션에서 OSAL API를 사용할 경우 이종 운영체제상에서의 호환성을 확보할 수 있다. https://en.wiki..
포직스 표준과 호환되는 운영체제들은 각자의 내부설계와 구현방식에 따라 다양한 파일 시스템들을 제공하는데, 그중 QNX의 경우 아래와 같이 구분되는 파일 시스템들을 지원하나, 리눅스와 다른 파일시스템 내부 구조를 가지므로 이에 대한 사전 이해가 필요하다. 이미지(Image) 파일시스템 QNX 커널인 procnto 프로세스가 RAM 파일시스템과 함께 기본적으로 제공하는 파일 시스템 IFS (Image Filesystem) 또는 OS 이미지로 불리는 시스템으로 커널과 최소 필요 파일들을 포함 시스템 설계 초반 별도의 파일 시스템 구성 없이 사용 가능 읽기 전용으로 시스템 구성시 커널, 라이브러리 외 기본 유틸리티들을 파일 시스템상에 추가하여 사용 예외적으로 Shared RAM에 마운트 되는 tmp를 제공하여 ..
QNX의 경우 /tmp 폴더상에 사용자의 추가적인 작업 없이 사용할 수 있는 파일시스템이 커널에 의해 기본적으로 제공되는데, 이는 외관상으로는 일반적인 파일 시스템으로 보일 수 있으나 실제로는 공유메모리 장치 (/dev/shmem)를 투영하는 것으로 아래의 몇 가지 제약사항을 가진다. 디렉터리 생성 현재와 부모 디렉터리 접근을 위한 . 과 .. 엔트리 사용 하드 또는 소프트 링크 실행 프로세스(또는 런어블)에 대해 보호 : 실제 파일 시스템의 경우, 하나의 파일이 프로세스에 의해 사용중일 경우 EBUSY와 같은 에러를 보고 하지만, /dev/shmem의 경우 접근 프로세스가 임의 종료될 수 있다. 만약, 일반 어플리케이션에서 /tmp 상에 특정 폴더를 생성하고 파일을 일시적으로 저장하고자 하는 경우 또는..

쓰레드도 프로세스와 같이 스케줄링 정책 및 우선순위를 적용하여 스케줄링을 제어할 수 있다. 쓰레드 생성 시 별도로 해당 속성을 설정해 주지 않으면 시스템에서 정의한 방식에 따라 쓰레드의 스케줄링을 처리하게 된다. 예, QNX의 경우, 기본적으로 부모 쓰레드의 스케줄링 정책 및 우선순위를 상속받아 생성된다. 스케줄링 방식을 정의할 때 중요한 것은 스케줄링 정책 SCHED_FIFO : First In First Out, 먼저 준비가 된 (Ready Queue에 등록된) 쓰레드를 실행 후 종료 시까지(또는 상위 우선순위를 가진 쓰레드가 준비되기 까지) CPU 점유 SCHED_RR : Round Robin, 운영체제에서 정의된 시할당량(Time slice, 예, QNX 4ms)만큼 실행 후 같은 우선순위의 쓰레..

쓰레드 사용 시 늘 생각해 볼 부분은 바로 쓰레드의 취소(종료)이다. 좀 더 정확히 말하면 종료 후 아래의 경우에 해당하는 쓰레드의 뒷정리일 것이다. 쓰레드에서 동적 자원을 할당하여 사용할 경우, 종료 후 메모리 누수 (Memory Leakage) 뮤텍스 등의 동기화 메커니즘이 사용된 경우, 다른 쓰레드의 데드락 (Deadlock between Threads) 쓰레드가 어떤 상태를 설정하고 그 상태가 다른 쓰레드 또는 메인 쓰레드에서 참조될 경우, 애플리케이션 상에서 상태 회복 불가능 (Unrecoverable state in an application) 1. 쓰레드 취소 포직스 쓰레드에서는 아래 두 가지의 취소 모드를 제공하는데, 이는 쓰레드의 취소 요청을 어떠한 시점에 처리할지를 결정하게 된다. 지연..
포직스에서 정의하는 함수들의 안정성 정도를 나타내기 위한 단계로 MT-Safe (Multi Thread) 메모리 동기기법등이 사용되지 않아 다중 쓰레드 환경에서 사용하여도 안전 AS-Safe (Asynchronous Signal) 비동기화 신호 처리함수에서 사용하여도 안전 AC-Safe (Asynchronous Cancellation) 비동기 철회(Cancellation)시에 호출되어도 안전 원문 출처 : www.gnu.org/software/libc/manual/html_node/POSIX-Safety-Concepts.html