**NetBSD Modular Portability Layer(MPL)**는
NetBSD가 “한 번 작성하고, 거의 모든 하드웨어에서 동작”할 수 있게 만든 운영체제 이식성(Portability) 설계 철학 + 코드 구조를 말합니다.
공식 문서에서 딱 저 이름을 고유 컴포넌트로 쓰기보다는, 보통은
NetBSD의 machine-independent / machine-dependent 분리 구조
abstraction layer들의 모듈화된 집합
을 통칭해 이렇게 부릅니다.
아래에서 구조적으로 정리해 설명할게요.
---
1. NetBSD 이식성의 핵심 개념
NetBSD의 슬로건:
> Of course it runs NetBSD
이를 가능하게 만든 핵심 원칙은 3단 분리입니다.
(1) MI (Machine Independent)
CPU·보드에 완전히 무관한 코드
커널 핵심 로직
프로세스 / 스케줄러
VM 시스템
VFS
네트워크 스택
대부분의 device driver 공통 로직
libc / userland 대부분
예:
sys/kern/
sys/net/
sys/uvm/
sys/fs/
---
(2) MD (Machine Dependent)
CPU 아키텍처별 코드
컨텍스트 스위치
인터럽트 처리
MMU 제어
trap / syscall 진입
부트 스트랩 코드
예:
sys/arch/arm/
sys/arch/x86/
sys/arch/mips/
sys/arch/riscv/
---
(3) Platform / Board support
같은 CPU라도 SoC / 보드별 차이 처리
clock / timer
SoC 인터럽트 컨트롤러
GPIO / pinmux
온보드 장치 초기화
예:
sys/arch/arm/soc/
sys/arch/arm/omap/
sys/arch/arm/broadcom/
---
2. Modular Portability Layer의 실제 구성 요소
NetBSD는 **“이식성을 위한 공통 인터페이스 모듈”**들을 층층이 둡니다.
1+ bus_space / bus_dma
하드웨어 접근 추상화의 핵심
bus_space_read_4(tag, handle, offset);
bus_dmamap_load(...);
ISA / PCI / memory-mapped I/O 차이를 숨김
CPU endianness 차이 자동 처리
드라이버는 CPU를 전혀 모르게 됨
✅ 이게 NetBSD portable driver의 핵심
---
2+ autoconf framework
장치 자동 탐지 계층
MI driver + MD attachment 분리
장치가 “어디에 연결됐는지”와 “무엇인지” 분리
CFATTACH_DECL_NEW(uart, sizeof(struct uart_softc),
uart_match, uart_attach, NULL, NULL);
---
3+ MI device driver 구조
하나의 드라이버로 여러 플랫폼 지원
driver (MI logic)
├─ PCI attachment
├─ SoC attachment
└─ FDT (device tree) attachment
---
4+ FDT / ACPI 추상화
하드웨어 기술 방식 분리
ARM / RISC-V: FDT (Device Tree)
x86 / 서버: ACPI
둘 다 MI driver에 동일 인터페이스로 연결
---
5+ pmap layer (MMU abstraction)
CPU마다 다른 MMU 구조를 통합
x86: page table
ARM: LPAE / VMSA
MIPS: TLB 중심
RISC-V: Sv39 / Sv48
VM 시스템은 pmap 인터페이스만 사용
---
3. 왜 “Modular”이라고 부르는가
NetBSD의 포터블 레이어는 단일 레이어가 아니라
교체 가능한 모듈들의 집합입니다.
계층 역할 교체 단위
bus_space I/O 추상화 CPU / Bus
bus_dma DMA 모델 캐시 구조
pmap MMU CPU
autoconf 장치 연결 플랫폼
interrupt IRQ 모델 SoC
새로운 CPU 포팅 시:
MI 코드는 거의 수정 없음
MD 디렉토리만 추가
---
4. NetBSD가 포팅된 아키텍처 수가 많은 이유
DOS PDA
Dreamcast
PlayStation 2
VAX
SPARC
Alpha
ARM Cortex-M 일부
RISC-V
8bit CPU(Z80, 실험)
❗ 이식성 목표가 아니라면 유지비 때문에 불가능한 수준
---
5. 다른 OS와 비교
OS 이식성 방식 특징
Linux 아키텍처별 ifdef 많음 빠르지만 난잡
FreeBSD MI/MD 분리 서버 중심
Zephyr HAL 중심 MCU용
NetBSD 강력한 abstraction 궁극의 이식성
NetBSD는 성능보다 구조적 우아함을 선택한 OS입니다.
---
6. 한 줄 요약
> NetBSD Modular Portability Layer란,
CPU·버스·보드 차이를 ‘모듈화된 추상 계층’으로 분리해
같은 커널과 드라이버가 거의 모든 하드웨어에서 동작하게 만드는 구조이다.
---
원하시면 다음도 설명해줄게요:
실제 새 CPU 포팅 절차
bus_space / bus_dma 코드 해부
Linux HAL과 NetBSD portability 구조 비교
임베디드 관점에서 NetBSD 채택 이유
NetBSD의 MI/MD 분리 + 모듈화된 portability layer와 철학·구조적으로 유사한 운영체제들을
“이식성을 설계 목표로 내장한 OS” 기준으로 정리해 드릴게요.
아래는 정말 비슷한 것 → 부분적으로 비슷한 것 → 철학만 공유 순서입니다.
---
✅ 1. L4 계열 마이크로커널 (L4, seL4, Fiasco)
NetBSD와 가장 철학적으로 유사
공통점
극단적인 hardware abstraction
아키텍처 의존 코드를 최소한의 레이어로 격리
포팅 시:
커널 핵심은 거의 수정 없음
CPU-specific 코드만 교체
구조
MI microkernel
└─ MD arch layer (MMU, IRQ, context switch)
Userland servers (OS 기능)
차이점
NetBSD: monolithic kernel
L4: microkernel (OS 기능은 전부 userland)
---
✅ 2. MINIX 3
공통점
장치 드라이버와 커널 분리
MI/MD 코드 엄격 분리
재시작 가능한 드라이버 구조
특징
NetBSD userland 일부 공유
교육용 출신 → 구조가 매우 정갈
x86 / ARM 포팅이 비교적 단순
차이
성능보다 안정성·복구성 우선
드라이버가 전부 userland
---
✅ 3. FreeBSD (초기 설계는 매우 비슷)
공통점
MI/MD 소스 구조 유지
bus_dma / bus_space 개념 공유
pmap 인터페이스
차이
지원 아키텍처 수 훨씬 적음
서버 성능에 최적화
이식성보다 실용성 중시
NetBSD의 보수·현실적 버전
---
✅ 4. GNU Hurd (Mach 기반)
공통점
커널은 hardware abstraction만 담당
OS 기능은 모듈 서버화
차이
구조는 이상적, 현실성은 낮음
포팅보다 설계 실험 쪽에 가까움
---
✅ 5. QNX Neutrino
공통점
잘 정의된 HAL
아키텍처 의존성 극소화
실시간 OS임에도 넓은 CPU 지원
특징
자동차·산업용에서 실제 성공
POSIX 호환성 높음
---
6. Haiku (BeOS 계승)
유사점
깔끔한 HAL
MI/MD 코드 분리
차이
데스크탑 OS 목표
지원 CPU 거의 x86_64 한정
---
7. Fuchsia (Zircon 커널)
공통점
강한 hardware abstraction
아키텍처별 레이어 명확
차이
capability 기반 커널
포팅을 위한 범용성보단 보안 중심
---
“비슷해 보이지만 사실 다른” 예
OS 이유
Linux 포팅은 가능하지만 abstraction이 느슨
Zephyr HAL은 있으나 MCU 중심
Windows NT HAL 존재하지만 폐쇄적
RTEMS 구조는 단순하지만 확장성 제한
---
비교 요약표
OS Portability 설계 유사도
NetBSD MI/MD + 모듈화 추상층 ★★★★★
L4 / seL4 최소 커널 + HAL ★★★★★
MINIX 3 MI/MD + 서버화 ★★★★☆
FreeBSD MI/MD ★★★☆☆
QNX HAL 중심 RTOS ★★★★☆
Fuchsia 현대식 abstraction ★★★☆☆
---
한 문장 요약
> NetBSD와 유사한 OS는 “단순히 여러 CPU에서 돌아가는 OS”가 아니라,
이식성 자체를 커널 구조의 1급 목표로 삼은 시스템들이다.
---
원하시면:
“NetBSD vs Linux 이식성 구조를 코드 레벨로 비교”
“새 OS 만들 때 어떤 portability layer를 설계해야 하나”
“임베디드용으로 이 구조를 축소 적용하는 방법”
중에서 골라서 더 파볼까요?
댓글 0