목차
개요
상위의 포스팅에서는 IPC의 개념과 종류에 대해서 알아보았고
2022.08.29 - [OS :: 운영체제] - 프로세스 :: 프로세스 간 통신 IPC
프로세스 :: 프로세스 간 통신 IPC
목차 개요 이전 포스팅에서는 프로세스가 생성되고 종료되며 그러한 프로세스가 다중 프로그래밍 환경에서 적재와 할당 해제가 반복되면서 작업이 이루어지는 멀티테스킹; 병행 수행되는 경우
nstgic3.tistory.com
이번 포스팅에서는 IPC의 방식 중 하나인 메시지 전달 시스템에 대해서 자세히 알아볼 것이다.
메시지 전달 시스템
개념
운영체제가 메시지를 이용하여 프로세스간 통신을 하게 하는 기법
메모리 공유 시스템에 비해서 영역을 할당을 할 필요도 없고 프로세스 들끼리 메모리를 공유할 필요가 없다.
이에 따라 장단점도 생겨나는데 자세한 내용은 포스팅에
2022.08.29 - [OS :: 운영체제] - 프로세스 :: 프로세스 간 통신 IPC
메시지 전달 시스템은 최소한 두가지 연산을 요하는데
send() 와 receive() 연산이다. 당연히 메세지를 보낼때 메세지 내용도 중요하지만 어떤 프로세스가 보내고 받는지도 확인이 되야되기 때문이다. 만약에 두 프로세스가 서로 통신을 원한다면 이 사이에 통신 연결(communication link) 가 연결되어야 한다.
종류
이러한 연결을 구현하는 법에는 여러가지가 있는데
1. 직접 또는 간접 통신
2. 동기식 또는 비동기식 통신
2022.09.01 - [분류 전체보기] - 동기식 통신 비동기식 통신
3. 자동 또는 명시적 버퍼링
2022.09.01 - [분류 전체보기] - 프로세스 :: 버퍼(Buffer), 버퍼링(Buffering)
프로세스 :: 버퍼(Buffer), 버퍼링(Buffering)
목차 개요 현재는 인터넷의 발달로 인해 영상 등을 스트리밍 할때 버퍼링 화면을 자주 보지는 못하지만 초등학교때 처음 나왔던 갤럭시1으로 옆집의 와이파이를 잡아서 볼때는 까만 화면에 원
nstgic3.tistory.com
등이 있다.
Mach OS 에서의 메시지 전달
관련된 애플 사의 개발자 문서
Apple Developer Documentation
developer.apple.com
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 |