분류 전체보기(95)
-
QNX RTOS: 10-4. Handling read() and write() - write()
1) POSIX 관점에서 write()의 의미write(fd, buf, nbytes)의 기대 동작:성공: 1..nbytes 바이트를 “썼다”고 보고하고, 반환값은 실제로 쓴 바이트 수에러: -1 반환 + errno 설정nbytes == 0: 권한이 있으면 0 반환(성공) 가능read()와 달리 “0이 EOF 의미가 아니다”파일은 보통 커지거나, 디바이스 특성(프레임버퍼 등)상 “가득 참”을 에러로 처리할 수 있음2) QNX에서 write()는 메시지 전송이며, header + data 형태QNX write()는 내부적으로 MsgSendv()를 사용합니다(벡터 전송).첫 iov: 헤더 struct _io_write메시지 타입(_IO_WRITE), xtype, nbytes 등 포함둘째 iov: 데이터(사용자..
2026.01.23 -
QNX RTOS: 10-3. Handling read() and write() - read()
1) 클라이언트 관점: cat /dev/example이 왜 “0 바이트면 종료”인가cat의 핵심 루프는 사실상 다음입니다.open("/dev/example")반복:n = read(fd, buf, N)n > 0이면 화면에 write(1, buf, n) 후 반복n == 0이면 EOF로 판단하고 반복 종료close(fd)따라서 RM이 read에 0바이트를 응답하면(EOF) cat은 즉시 끝납니다. (POSIX 규칙)2) QNX 내부 동작: read()는 “시스템 콜”이 아니라 “메시지 전송”QNX는 마이크로커널이므로 read()는 커널 내부에서 파일을 직접 읽는 방식이 아니라:read() 라이브러리 함수가_IO_READ 타입의 메시지(struct _io_read)를 구성하고MsgSend()로 리소스 매니저 프..
2026.01.23 -
QNX RTOS: 10-2. A Simple Resource Manager
목표(Behavior)클라이언트 관점에서 이 예제 리소스 매니저(Resource Manager)는 다음처럼 동작합니다.read() : 항상 0바이트 반환 (EOF처럼 동작, 실제 하드웨어 입력 없음)write() : 어떤 크기든 성공 처리 (데이터를 “받아주기만” 하는 형태)그 외 동작(open/close/stat 등)은 프레임워크 기본(default) 동작을 따름즉, “가짜 디바이스(dummy device)”를 만들어 /dev/example 같은 엔트리를 노출시키고, 최소한의 read/write만 커스터마이즈하는 전형적인 연습 구조입니다.초기화 전체 흐름(One Big Picture)초기화 단계는 크게 두 덩어리입니다.구조체/테이블 준비(정적 설정)pathname space 등록 + 메시지 수신 루프(..
2026.01.23 -
QNX RTOS: 10-1. Overview of Resource Managers
1) Resource Manager란?QNX에서 Resource Manager(리소스 매니저) 는 매우 QNX 특유의 개념으로, “운영체제를 확장하는 것처럼 보이는” 사용자 공간(user space) 프로세스입니다.핵심 아이디어는 두 가지입니다.Pathname space(경로 이름 공간) 에 이름을 등록한다예: /dev/ser1, /dev/con1, /mnt, /home 등클라이언트가 그 이름을 POSIX 인터페이스(open/read/write/lseek 등) 로 접근하게 만든다클라이언트 입장에서는 “파일/디바이스를 다루듯” 동일한 호출 방식을 사용리소스는 하드웨어에 대응할 수도 있고(대부분의 드라이버), 순수 소프트웨어 엔터티일 수도 있습니다.하드웨어 예: Serial, Disk/File system,..
2026.01.23 -
QNX RTOS: 9-1. Images & Buildfiles
Boot Sequence, Buildfile(Formatted buildfile), mkifs로 이미지 만들기1) QNX Boot Sequence 큰 흐름부팅은 “CPU가 실행된 다음 무엇이 이어지느냐”가 보드/플랫폼에 따라 달라지는 구조다.1.1 초기 부트 단계(보드 의존)가상환경(VMware/VirtualBox/QEMU)BIOS(또는 확장), 가상 BIOS 등x86 계열 실제 보드UEFI 등 가능다수 임베디드 보드ROM monitor(U-Boot 등) 또는Flash 내 IPL(Initial Program Loader) 코드1.2 IPL → Startup → procnto → Boot Script일반적인 QNX 흐름은 다음과 같다.IPLBSP에 포함되는 경우가 많음RAM 초기화, chip select ..
2026.01.02 -
QNX RTOS: 8-6. Kernel Timeouts
1. Kernel Timeout이 필요한 이유QNX의 IPC(Message Passing)는 매우 강력하지만, 다음과 같은 상황이 문제를 만든다.클라이언트가 MsgSend()를 호출했는데서버가 아직 receive하지 않음서버는 받았지만reply를 매우 늦게 보내거나아예 죽어버림이 경우 클라이언트 스레드는:SEND blockREPLY block상태에서 무한정 멈출 수 있다.실시간 시스템에서 이는 치명적이다.2. Kernel Timeout의 개념Kernel Timeout은:“이 스레드가 특정 커널 블로킹 상태에 들어가면”“지정한 시간 이후에는 강제로 timeout 처리해라”라는 요청을 커널에 사전 등록하는 방식이다.핵심 특징:타이머가 아님스레드의 블로킹 상태에 직접 적용커널이 직접 관리 3. TimerTim..
2026.01.02