- 과거 높은 오버헤드로 실용성이 떨어졌던 마이크로커널은 오늘날 보편화된 IOMMU와 공유 메모리 덕분에 다시 현실적인 선택지가 될 수 있음
- 드라이버와 서브시스템을 사용자 공간에 격리하면 결함이나 공격의 영향 범위를 제한해 보안·신뢰성·모듈성을 높일 수 있음
- 1980~90년대에는 사용자 공간 프로세스가 장치에 직접 접근할 수 없어 디스크 읽기 같은 작업마다 시스템 호출과 문맥 전환, 잠금, 메모리 복사가 뒤따랐음
- IOMMU와 공유 명령 큐를 활용하면 정상 경로에서 문맥 전환과 주소 공간 간 복사, 잠금 없이 비동기 IPC와 장치 접근을 처리할 수 있음
- Xen, FreeBSD, Linux DRM 같은 기존 구성 요소를 활용할 수 있어 하이퍼바이저와 시스템 서버를 처음부터 새로 만드는 부담도 크지 않음
마이크로커널의 구조와 격리 효과
- 마이크로커널은 스케줄링, I/O 장치 접근 관리, 프로세스 간 통신(IPC)을 제외한 기능을 사용자 공간에서 실행하는 커널 구조임
- 서브시스템 격리는 세 가지 이점을 제공함
- 보안: 드라이버 하나의 취약점이 공격자에게 전체 시스템이 아닌 해당 서브시스템이나 드라이버의 접근 권한만 줄 수 있음
- 신뢰성: 한 서브시스템의 충돌이 시스템 전체가 아니라 해당 부분에만 영향을 미침
- 모듈성: Linux 커널 팀이 모든 하드웨어 드라이버를 병합하고 각 칩의 내부 동작까지 검토해야 하는 부담을 덜 수 있음
- Windows가 마이크로커널 시스템이었다면 CrowdStrike 버그는 일부 IT 보안 담당자의 원격 측정 데이터 수집만 중단시키는 데 그쳤을 수 있음
과거의 성능 한계와 IOMMU의 해법
- 과거 마이크로커널에서는 사용자 공간 프로세스가 특정 장치에 직접 접근할 수 없어 작업마다 시스템 호출과 문맥 전환이 필요했고, 비싼 잠금과 메모리 복사까지 뒤따랐음
- Mach는 성능 문제 때문에 사용자 공간 프로세스를 점차 커널 안으로 옮겼고, 결국 일반적인 모놀리식 커널에 가까워짐
- 오늘날 PC에는 약 10년간 IOMMU가 표준적으로 탑재됐으며, 공유 메모리와 함께 사용하면 코어가 충분한 정상 경로에서 문맥 전환을 완전히 제거할 수 있음
- 약간의 지연 시간을 받아들이면 전체적으로도 문맥 전환을 거의 없앨 수 있음
- 가상화 기술 기반 스케줄러는 Xen 하이퍼바이저와 유사한 형태로 구성할 수 있음
- I/O 장치 접근은 IOMMU 하드웨어가 관리함
- IPC는 프로세스 사이에 공유 버퍼를 할당하고 정수 원자적 compare-and-swap을 제공하는 방식으로 구현할 수 있음
- 공유 버퍼를 링 버퍼 형태의 명령 큐로 사용하고 시작·끝 포인터를 원자적으로 갱신함
- 정상 경로에서는 문맥 전환, 주소 공간 간 복사, 잠금 없이 비동기 메시지를 전달할 수 있으며, GPU 드라이버에서도 널리 쓰이는 방식임
라이브러리 구성과 기존 코드 활용
- 프로세스가 VM 게스트인 환경에서는 공유 라이브러리를 프로그램 시작 시 링크하고, 다른 프로세스에서 실행할 필요가 없는 기능은 exokernel 방식으로 로컬에서 처리할 수 있음
- Electron 형태로 애플리케이션마다 자체 운영체제 구성 요소를 함께 배포하는 오늘날에는 메모리의 중복 라이브러리가 30년 전만큼 큰 문제가 아님
- 구현에 필요한 주요 기반도 이미 존재함
- Xen은 하이퍼바이저 계층에 필요한 기능 대부분을 갖추고 있음
- Mach처럼 네트워크와 파일시스템 서버를 구성하되 FreeBSD 코드를 가져와 사용할 수 있음
- DRM은 이미 비동기 명령 버퍼를 기반으로 하므로 Linux 그래픽 서브시스템을 사용자 공간에서 실행할 수 있음
- 편의상 디스플레이 서버와 그래픽 서브시스템을 같은 프로세스에서 실행하는 구성도 가능함