목차
개요
상위의 포스팅에서는 IPC의 개념과 종류에 대해서 알아보았고
2022.08.29 - [OS :: 운영체제] - 프로세스 :: 프로세스 간 통신 IPC
이번 포스팅에서는 IPC의 방식 중 하나인 메시지 전달 시스템에 대해서 자세히 알아볼 것이다.
메시지 전달 시스템
개념
운영체제가 메시지를 이용하여 프로세스간 통신을 하게 하는 기법
메모리 공유 시스템에 비해서 영역을 할당을 할 필요도 없고 프로세스 들끼리 메모리를 공유할 필요가 없다.
이에 따라 장단점도 생겨나는데 자세한 내용은 포스팅에
2022.08.29 - [OS :: 운영체제] - 프로세스 :: 프로세스 간 통신 IPC
메시지 전달 시스템은 최소한 두가지 연산을 요하는데
send() 와 receive() 연산이다. 당연히 메세지를 보낼때 메세지 내용도 중요하지만 어떤 프로세스가 보내고 받는지도 확인이 되야되기 때문이다. 만약에 두 프로세스가 서로 통신을 원한다면 이 사이에 통신 연결(communication link) 가 연결되어야 한다.
종류
이러한 연결을 구현하는 법에는 여러가지가 있는데
1. 직접 또는 간접 통신
2. 동기식 또는 비동기식 통신
2022.09.01 - [분류 전체보기] - 동기식 통신 비동기식 통신
3. 자동 또는 명시적 버퍼링
2022.09.01 - [분류 전체보기] - 프로세스 :: 버퍼(Buffer), 버퍼링(Buffering)
등이 있다.
Mach OS 에서의 메시지 전달
관련된 애플 사의 개발자 문서
Mach 에서는 포트를 사용하여 시스템에 있는 동일한 호스트 사이나 분산 시스템 내의 별도의 호스트의 두 포트 사이에서 메시지를 통해 통신을 한다.
각 포트에서는 상대 포트와 상호작용을 위해 자격을 식별하는 포트 권한이 있어야하는데
예로 들어 포트에서 메시지를 수신하기 위해서는 해당 포트에 대해 MACH_PORT_RIGHT_RECEIVE 자격이 있어야한다. 반대로 송신을 위해서는 MACH_PORT_RIGHT_SEND 자격이 있어야한다.
mach_port_right_t 에 int 형으로 구분되어 할당 되어있는 것을 확인 할 수있다.
mach_port_t 는 포트 권한을 나타내는 변수인데
따라서 메시지 전달 IPC를 위해서는 특정한 포트에 대한 권한을 먼저 확인한 후에 포트 할당, 메모리 할당이 이루어 짐을 확인 할 수 있다.
다음으로 포트 할당이 이루어 지게 되는데 mach 에서는
위와 같은 API를 통하여 포트에 대한 권한을 식별 후에 할당, 액세스 허용 등이 이루어진다.
각 task 는 또한 부트스트랩 포트에 액세스가 가능해 생성된 포트를 부트스트랩 서버에 등록 가능하다. 이에 관련된 자세한 내용은 나중에 포스팅 하도록 하겠다.
다음으로는 메세지 송수신 API를 알아보자
mach_msg는 메시지를 보내고 받는 API로서 함수의 매개변수에 MACH_SEND_MSG인지 MACH_RCV_MSG인지에 따라서 송신 연산인지 수신 연산인지가 나타난다. 따라서 이러한 option 의 변화로 클라이언트 태스크가 헤더를 구성후에 서버로 메시지를 보내는 경우와 서버가 클라이언트가 보낸 메시지를 수신하는 기능 둘다 구현이 가능하다.
메시지 전달을 수행할 경우에는
mach_msg -> mach_msg_trap -> mach_msg_overwrite_trap 순서로 메시지의 실제 전달을 수행하게 된다.
또한 mach 에 구현되어있는 송수신 프로그램은 융통성있는 방식으로 큐에 공간이 없는경우 여러 옵션을 통하여 이를 관리한다. 또한 가상 메모리를 이용하여 복사 연산도 회피한다.
'CS > Operating System' 카테고리의 다른 글
프로세스 :: 익명 파이프(anonymous pipes) (0) | 2022.09.21 |
---|---|
프로세스 :: 버퍼(Buffer), 버퍼링(Buffering) (0) | 2022.09.06 |
프로세스 :: 공유 메모리 시스템 at POSIX (0) | 2022.08.31 |
프로세스 :: 프로세스 간 통신(IPC) 개념, 종류 (0) | 2022.08.29 |
프로세스 :: 생성과 종료 (0) | 2022.08.19 |