Mach Interface Generator

Mach Interface Generator(MIG)는 Mach IPC의 메시지 기반 인터페이스 명세에서 클라이언트와 서버의 RPC 처리 코드를 생성하는 도구다. 개발자가 메시지 포맷과 송수신 절차를 매번 수동으로 작성하지 않고 .defs 파일에 인터페이스를 정의한 뒤 통신용 스텁을 생...

약칭MIG
분류Mach RPC 인터페이스 코드 생성기
기술 기반Mach IPC
입력 형식인터페이스 정의 파일(.defs)
주 출력클라이언트 스텁, 서버 코드
기능메시지 인코딩·디코딩 및 디스패치
사용 커널Mach, XNU, GNU Mach
관련 객체Mach 포트
주 사용 언어C 인터페이스
역할운영체제 서비스의 RPC 정의
상태현대 Mach 계열 개발 도구
참고 자료GNU MIG Documentation

Mach Interface Generator(MIG)는 Mach IPC의 메시지 기반 인터페이스 명세에서 클라이언트와 서버의 RPC 처리 코드를 생성하는 도구다. 개발자가 메시지 포맷과 송수신 절차를 매번 수동으로 작성하지 않고 .defs 파일에 인터페이스를 정의한 뒤 통신용 스텁을 생성할 수 있도록 한다. 역사적인 Mach와 현대 XNU 환경에서 사용되며, 실행되는 커널 자체가 아닌 시스템 개발 도구다.[1]

MIG는 개발자가 인터페이스 정의 파일에 루틴의 이름과 인수·반환값, 포트 및 타입 정보를 기술하면 해당 호출에 필요한 메시지 직렬화와 응답 처리 코드를 생성한다. 일반적으로 클라이언트 측 스텁과 서버 측의 요청 해석·디스패치 코드가 만들어지므로 구현자는 메시지의 바이트 단위 구조보다 제공할 시스템 기능에 집중할 수 있다. 이 방식은 Mach 포트와 메시지 규약 위에서 원격 프로시저 호출과 유사한 인터페이스를 구성한다.[2]

Mach 계열의 RPC 도구는 단순히 함수 호출 문법을 바꾸는 것을 넘어 메시지 크기, 타입과 포트 권한을 올바르게 검사하는 문제와 관련된다. GNU Mach·XNU의 서버·커널 인터페이스에서도 MIG 기반 생성 코드를 활용해 호출 측과 구현 측의 계약을 맞춘다. 같은 이름의 기술이라도 버전·운영체제에 따라 지원되는 정의 파일 문법과 생성 결과는 차이가 있을 수 있으므로 구현별 문서를 기준으로 구분한다.

MIG는 시스템 개발자가 포트와 메시지 헤더의 세부 형식을 반복 구현하지 않고 인터페이스 정의에 집중하도록 한다. 개발자가 루틴의 인수·결과와 메시지 타입을 선언하면 MIG가 클라이언트 측의 통신 코드와 서버 측의 요청 처리 코드를 생성한다. 이로써 호출자와 서비스 구현자는 같은 명세를 공유하며, 버전과 데이터 구조가 변경될 때 관련 코드를 일관되게 다시 생성할 수 있다.[3]

이 도구는 UNIX에서 흔히 사용하는 일반적인 링커나 컴파일러 자체가 아니라 Mach IPC 계층의 인터페이스 생성에 특화되어 있다. GNU Mach·XNU와 관련된 서버 및 커널 개발에서 중요하지만 각 구현의 MIG 버전, 메시지 타입 검사와 생성 코드의 세부 규약은 다를 수 있다. 따라서 Mach 계보의 운영체제 구현 도구로 설명하되 그 자체를 별도 운영체제나 마이크로커널로 분류하지 않는다.

역사

Mach IPC와 RPC

MIG의 도입

설계 목표

인터페이스 명세

.defs 파일

타입 정의

루틴 선언

코드 생성

클라이언트 스텁

서버 디스패치

메시지 직렬화

Mach 포트와 권한

컴파일 및 빌드 통합

오류 처리와 보안

XNU에서의 사용

관련 문서

  1. 관련 기술 문서 ↩
  2. Apple MIG 관련 자료 ↩
  3. GNU Hurd: MIG ↩