Mach에서 대부분의 통신 메일박스(포트)로 메세지를 주고 받으면서 수행된다.
각 포트에는 그 포트와 상호 작용하는데 필요한 자격을 식별하는 포트 권한이 필요하다.
1 ) MACH_PORT_RIGHT_RECEIVE
2 ) MACH_PORT_RIGHT_SEND
태스크가 생성이 되면 Task self 포트와 Notify 포트라는 두 개의 포트가 생성된다.
이 두 가지 포트는 커널과 송수신 권한을 가지고 있기 때문에, 태스크는 커널을 통해 메세지를 보낼 수 있고, 커널은 이벤트 발생 알림 작업을 태스크로 보낼 수 있다.
mach_port_allocate() 함수는 새 포트를 작성하고 메세지 큐를 위한 공간을 할당한다.
mach_port_t port;
mach_port_allocate(
mach_task_self(),
MACH_PORTRIGHT_RECEIVE,
&port
)
mach_msg()함수는 메세지를 보내고 받는 표준 API이다. 함수의 매개 변수 중 하나가
MACH_SEND_MSG / MACH_RCV_MSG를 갖는다.
mach_msg()는 mah_msg_trap()함수를 호출한다.(mah커널에 대한 시스템 콜)
이 후 커널 내에서 mach_msg_trap()은 mach_msg_overwrite_trap()함수를 호출하여 메세지의 실제 전달을 처리한다.
Mach의 문제점은 송신자의 포트에서 수신자의 포트로 메세지를 복사해야 하므로 발생하는 성능 저하이다.
Windows에서 응용 프로그램은 메세지 전달 기법을 통해 서로 통신한다.
메세지 전달 설비는 고급 로컬 프로시저 호출 설비(ALPC)라 불리며, 동일 기계상에 있는 두 프로세스간의 통신에 사용한다. Mach와 유사하게, windows는 두 프로세스 간에 연결을 구축하고 유지하기 위해 연결 포트와 통신 포트를 이용한다.
과정은 다음과 같다.
1 ) 서버 프로세스는 모든 프로세스가 접근할 수 있는 연결 포트 객체를 공표한다.
2 ) 클라이언트가 서버시스템으로부터 서비스를 원할 경우, 서버의 연결 포트 객체에 대한 핸들을 열고 연결 요청을 보낸다.
3 ) 서버는 채널을 생성하고 핸들을 클라이언트에게 반환한다.
cf ) 대용량 메세지(256byte이상)은 반드시 섹션 객체를 통하여 전달되어야 한다.
섹션객체란 채널과 연관된 공유 메모리의 영역을 말한다.