IPC

김하영·2023년 5월 28일
0

운영체제

목록 보기
6/13

프로세스는 독립적으로 실행되므로 다른 프로세스의 영향을 받지 않는다.
(cf. 스레드는 프로세스안에서 자원을 공유하므로 영향을 받는다고 할 수 있다.)

독립적 구조를 가진 프로세스간에 통신을 IPC 통신이라고한다.

프로세스는 커널이 제공하는 IPC 설비를 이용해 프로세스간 통신을 할 수 있다.
(커널은 운영체제의 핵심 부분으로, 다른 모든 부분에 대한 기본적인 서비스를 제공한다.)

IPC 종류

1. 익명 PIPE

파이프는 두개의 프로세스를 연결한다. 이때 하나의 프로세스는 데이터 쓰기만 가능하고, 다른 하나는 읽기만 가능하다.

한쪽 방향으로만 통신이 가능한 반이중 통신이라고도 부른다.
따라서 양쪽으로 모두 송/수신하고 싶다면 2개의 파이프를 만들어야 한다.

장점 : 간단하게 사용가능, 단순한 데이터 흐름이라면 파이프 사용이 효율적.
단점: 전이중 통신을 위해 파이프를 2개 만들어야 할때는 구현이 복잡함.

2. Named PIPE(FIFO)

익명 파이프는 통신할 프로세스를 명확히 알 수 있는 경우에 사용한다. (ex. 부모-자식 프로세스 간 통신)

Named 파이프는 전혀 모르는 상태의 프로세스들 사이 통신에 사용한다.

즉, 익명 파이프의 확장된 상태로 부모 프로세스와 무관한 다른 프로세스도 통신이 가능한 것 (통신을 위해 이름있는 파일을 사용)

하지만, Named 파이프 역시 읽기/쓰기 동시에 불가능하기에 전이중 통신을 위해서는 익명 파이프처럼 2개를 만들어야 가능하다.

3. Message Queue

입출력 방식은 Named 파이프와 동일함(FIFO)

다른점은 메시지 큐는 파이프처럼 데이터의 흐름이 아니라 메모리 공간이다.

사용할 데이터에 번호를 붙이면서 여러 프로세스가 동시에 데이터를 쉽게 다룰 수 있다.

4. 공유 메모리

파이프, 큐가 통신을 위한 설비라면, 공유메모리는 데이터 자체를 공유하도록 한다.

프로세스는 메모리 영역을 독립적으로 가지며, 다른 프로세스가 접근하지 못하도록 보호되어야한다. 하지만 다른 프로세스가 데이터를 사용하는 경우에, 파이프를 통한 통신을 통해 데이터 전달도 가능하지만, 스레드처럼 메모리를 공유하도록 하면 더욱 편리할 수 있다.

공유메모리는 프로세스간 메모리 영역을 공유해서 사용할 수 있도록 허용한다.

프로세스가 공유 메모리 할당을 커널에 요청하면, 커널은 해당 프로세스에 메모리 공간을 할당해주고 이후 모든 프로세스는 해당 메모리 영역에 접근할 수 있게 된다.

장점: 중개자 없이 곧바로 메모리에 접근할 수 있기 때문에 IPC 중 가장 빠르다!

5. 메모리 맵

공유 메모리 처럼 메모리 공유 방식이다.
열린 파일을 메모리에 맵핑시켜 공유하는 방식이다.

즉, 공유 매개체가 파일 + 메모리!
주로 파일로 대용량 데이터를 공유할 때 사용한다.

6. 소켓

네트워크 소켓 통신을 통해 데이터를 공유한다.

클라이언트와 서버가 소켓을 통해서 통신하는 구조로, 원격에서 프로세스 간 데이터를 공유할 때 사용한다.

서버(bind, listen, accept), 클라이언트(connect)


IPC 통신에서 프로세스 간 데이터를 동기화 하고 보호하기 위해, 공유된 자원에 한번에 하나의 프로세스만 접근하도록 하기 위해 세마포뮤택스를 사용한다!

참고자료

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=akj61300&logNo=80130589983

https://gyoogle.dev/blog/computer-science/operating-system/IPC.html

profile
백엔드 개발자로 일하고 싶어요 제발

0개의 댓글