[운영체제] IPC(Inter Process Communication)

함민혁·2023년 7월 31일
0

cs면접준비

목록 보기
2/43

들어가기전에

기본적으로 각 프로세스는 메모리에 별도의 주소 공간에서 실행되기 때문에, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없음.
하지만 대부분의 컴퓨터 프로그램을 보면 다른 프로그램에 있는 정보를 가져오는 경우를 쉽게 볼 수 있음
여러가지 방법으로 프로세스가 다른 프로세스의 정보에 접근하는 게 가능함. 프로세스 간 정보를 공유하는 방법으론
IPC, LPC, 별도 공유 메모리 생성이 있다.

IPC(Inter Process Communication)

IPC란?

Inter Process Communication의 약자로 운영체제 상에서 실행 중인 프로세스 간에 정보를 주고받는 메커니즘을 말함. 종류로는 커널이 제공하는 API를 이용하는 메시지 전달 방식, 프로세스끼리 특정 공통의 메모리 영역을 공유하는 메모리 공유 방식, 소켓방식, Named PIPE 방식 등등이 있다.

프로세스는 완전히 독립된 실행객체여서 별도의 설비 없이는 서로 통신이 어려움.
커널 영역에서 IPC라는 내부 프로세스 간 통신을 제공하게 되고, 프로세스 커널이 제공하는 IPC설비를 이용해서 프로세스 간 통신을 할 수 있게 됨

커널이란?

운영체제 자체도 소프트웨어이기 때문에 메모리에 올라가야 사용할 수 있음. 하지만 메모리 공간의 제약으로 운영체제 중 항상 필요한 부분만을 메모리에 올려서 사용함. 이 때 메모리에 상주하는 운영체제 부분을 커널이라고 함.(운영체제의 핵심)

IPC의 종류

1. 메시지 전달(Message Passing)

커널이 제공하는 API를 이용해서 커널 공간을 통해 통신함. 메세지 큐를 사용하여 송신 프로세스는 큐에 올리고, 수신 프로세스는 큐에서 내리며 상호간 통신함. 메시지 큐는 커널에서 관리함

2. 메모리 공유(Shared Memory)

프로세스끼리 특정 공통의 메모리 영역을 공유하며 상호간 통신하는 방법
데이터 자체를 공유. 한 프로세스에서 변경한 메모리 공간의 내용을 다른 프로세스에서 접근할 수 있음. 공유 메모리는 커널에서 관리함

3. 익명 PIPE
하나의 프로세스는 데이터
를 쓰기만 하고, 다른 하나는 데이터를 읽기만 할 수 있음
반 이중 통신이라고도 부름. 통신할 프로세스를 명확히 알 수 있는 경우에 사용

4. Named PIPE

전혀 모르는 상태의 프로세스들 사이 통신을 할 때 사용. 익명파이프의 확장된 형태임

세마포어 & 뮤텍스

IPC 통신에서 프로세스 간 데이터를 동기화하고 보호하기 위해 세마포어와 뮤텍스를 사용함

세마포어와 뮤텍스가 필요한 이유

한 자원에 동시에 여러 프로세스가 접근하면 Critical Section 문제가 발생
이를 해결하기 위해 한번에 하나의 프로세스만 접근 가능하게 제한을 두는 방식을 취하는데, 이때 대표적인 동기화 도구 두개가 뮤텍스세마포어 이다

뮤텍스란?

공유된 자원의 데이터 또는 임계영역에 하나의 프로세스나 하나의 스레드가 접근하는 걸 막아줌
동기화 대상이 하나임
임계 영역을 가진 스레드들의 러닝타임이 서로 겹치지 않고 각각 단독을 실행될 수 있게 상호배제되되록 해주는 기술. key를 가진 프로세스,스레드만 접근 가능

세마포어란?

공유된 자원의 데이터 또는 임계영역에 여러 프로세스,스레드가 접근하는 것을 막아줌
동기화 대상이 하나가 아님
공유 자원에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 사용자가 접근 가능
현재 공유자원에 접근 가능한 쓰렏,프로세스의 갯수를 업데이트하며 사용자의 접근을 허용

뮤텍스와 세마포어의 차이

뮤텍스는 주로 상호 배제를 위해 사용되고 자원에 대한 소유권이 있으며, 세마포어는 자원의 개수를 제어하는 데 사용되며 소유권이 없음. 그리고 뮤텍스는 동기화 대상이 오로지 하나의 자원일 경우에만 사용한다. 반면 세마포어는 1개 이상의 공유 자원에 대한 접근을 허용함

뮤텍스와 이진 세마포어의 차이

뮤텍스는 lock한 스레드만이 해제할 수 있고, 이진 세마포어는 어떤 스레드든지 세마포어를 해제할 수 있다는 점이 둘의 핵심적인 차이다. 이러한 특성으로 인해 뮤텍스는 주로 상호 배제를 위해 사용되고, 이진 세마포어는 주로 리소스의 접근 제어를 위해 사용됨.

🫠

출처:https://velog.io/@yanghl98/OS%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-IPC%EB%9E%80

https://github.com/VSFe/Tech-Interview/blob/main/02-OPERATING_SYSTEM.md

profile
Born to be FE developer 🧑🏻‍💻

0개의 댓글