QNX RTOS: 7-1. Hardware I/O

2025. 12. 26. 13:59운영체제/QNX

Hardware I/O 개요 정리 (QNX)

1) 기본 개념: 왜 매핑(mapping)이 필요한가?

  • 프로세스는 항상 가상 주소 공간(virtual address space) 에서 실행됨
  • 하드웨어 장치(device)는 물리 주소(physical address) 를 가짐
  • 따라서 물리 주소 → 가상 주소로 매핑 해야 접근 가능
  • 이 매핑을 위해 mmap() 사용


2) 디바이스 메모리 접근 (Memory-mapped I/O)

2.1 mmap을 이용한 디바이스 메모리 매핑

예: 비디오 프레임버퍼, 장치 레지스터 등

필요 요소:

  • size: 매핑할 메모리 크기
  • protection bits:
    • PROT_READ
    • PROT_WRITE
  • cache 설정:
    • 캐시 활성/비활성 여부
  • flags:
    • MAP_PHYS
    • MAP_SHARED
  • file descriptor:
    • NOFD (파일 기반 아님)
  • offset:
    • 디바이스 물리 메모리 시작 주소

결과:

  • mmap() → 가상 주소 포인터 반환
  • 이후 해당 포인터로 장치 메모리에 접근

3) DMA (Direct Memory Access)용 메모리

3.1 DMA 메모리 특징

  • 물리적으로 연속된(contiguous) 메모리 필요
  • 일반적인 가상 메모리는 연속 보장 ❌

3.2 DMA용 mmap 설정

  • mmap() 사용
  • flags:
    • MAP_PHYS
    • MAP_ANON (익명 메모리)
  • offset: 0
  • procnto(process manager)가
    물리 연속 메모리 할당

4) 가상 주소 → 물리 주소 변환

mem_offset()

DMA 컨트롤러에 물리 주소 전달 시 필요

  • 입력:
    • 가상 주소 포인터
    • 메모리 길이
  • 출력:
    • 해당 가상 주소에 대응되는 물리 주소

5) 하드웨어 제어 레지스터 접근

5.1 AArch64 (ARM64) 플랫폼

  • 레지스터가 메모리처럼 매핑됨
  • 접근 방식:
  •  
    volatile uint32_t *reg; *reg = value;
  • volatile 사용 이유
    • 컴파일러 최적화 방지
    • 실제 하드웨어 접근 보장

6) procnto는 하드웨어 정보를 어떻게 아는가?

  • 부팅 시 startup code가 하드웨어 정보 수집
  • 해당 정보는 system page에 저장
  • procnto는 system page를 통해
    • RAM vs Device 메모리 구분
    • 캐시 정책
    • 접근 권한 설정

7) x86 I/O Port 방식 (레거시 방식)

7.1 x86 I/O Port 특징

  • 일부 x86 장치는:
    • 메모리 맵 I/O ❌
    • I/O Port 주소 공간 사용
  • 별도의 주소 라인 + 전용 어셈블리 명령 사용

7.2 QNX의 지원 방식

  • QNX는 I/O Port 접근용 wrapper 함수 제공
  • 헤더 파일:
  •  
    <hw/inout.h>

8) I/O Port 접근을 위한 권한 설정

ThreadCtl()

  • I/O 포트 접근 전 스레드에 I/O 권한 부여 필요
  • ThreadCtl() 사용

9) I/O Port 읽기 / 쓰기 함수

읽기 (input)

  • in8()
  • in16()
  • in32()

쓰기 (output)

  • out8()
  • out16()
  • out32()

10) 전체 흐름 요약 (한 줄 정리)

QNX에서 하드웨어 I/O는 mmap을 이용한 물리 메모리 매핑, DMA용 물리 연속 메모리 할당, volatile 기반 레지스터 접근, 그리고 필요 시 I/O Port + ThreadCtl 권한 설정을 통해 수행된다.

'운영체제 > QNX' 카테고리의 다른 글

QNX RTOS: 7-3. Handling Interrupts  (0) 2025.12.26
QNX RTOS: 7-2. Programming PCI Bus Devices  (0) 2025.12.26
QNX RTOS: 6-2. IPC 선택 기준  (0) 2025.12.15
QNX RTOS: 6-1. IPC Methods  (0) 2025.12.15
QNX RTOS: 5-10. Shared Memory  (0) 2025.12.15