티스토리 뷰
what IPC
프로세스간에 통신을 의미합니다.
원칙적으로는 프로세스는 독립적이기 때문에 서로의 수행에 영향을 주면 안 됩니다.
하지만, 업무 효율을 위해 프로세스 간에 통신이 필요한 경우가 있습니다. 이를 위해 OS에서 제공하는 것이 IPC입니다.
또한, 의사소통이 제대로 이루어 지기 위해 동기화도 주의해야합니다.
when IPC
정보 공유 : 프로세스가 동일한 정보를 필요 할 수 있습니다.
계산 가속화 : 업무를 분할하여 병렬로 계산속도를 높일 수 있습니다.
모듈성 : 기능을 별도의 프로세스(쓰레스)로 나누어 모듈식으로 시스템을 구성할 수 있습니다.
편의성 : 동시에 여러 작업이 가능합니다. ex) 문서 작업, 노래 듣기 등등 병렬로 처리가능합니다.
message passing VS shared memory
프로세스 사이에 공유 변수 유무에 따라 크게 2가지 모델로 나눌 수 있습니다.
msg passing은 공유 변수 없이 메세지를 주고 받으며 통신하며,
shared memory는 공유 변수를 이용합니다.
1. msg passing
프로세스는 독립적입니다. 따라서, 정보 공유를 위해 중간에서 커널이 메세지를 전달해줍니다.
장점 : 커널을 이용하기 때문에 비교적 구현이 쉽다. 또한, 커널이 동기화를 보장합니다.
단점 : 시스템 콜로 인한 오버헤드가 발생합니다. => 느립니다.
msg passing 종류
msg passing을 direct/indirect로 나눌 수 있지만, 인터페이스 차이일 뿐 내부적으로 커널을 거치는 것은 동일합니다.
msg passing - direct communication
통신하려는 프로세스의 이름을 명시적으로 표시합니다. communication link가 자동적으로 생성되고 한 쌍에게 할당됩니다.
제공되는 시스템 콜
send( P, msg ) / receive( P, msg )
msg passing - indirect communication
중간에 mail box( 또는, port )를 공유하여 통신합니다.
mail box를 공유하는 프로세스는 고유한 메일박스 id를 이용해 통신합니다. 메일 박스는 여러 프로세스가 공유할 수 있습니다. 그래서, 하나의 링크가 여러 프로세스에게 할당될 수 있습니다.
이 때, 동기화를 처리하기 위해 mail box는 두 프로세스에게 링크를 할당하는 방법이 있습니다.
제공되는 시스템 콜
메일 박스 생성 및 삭제, send/receive
2. shared memory
OS는 물리적 메모리를 공유 메모리를 지원해줄 수 있습니다.
msg passing은 데이터를 전송하지만, 공유 메모리를 데이터 자체를 공유하는 특징이 있습니다. 이름 그대로!
장점 : 커널을 거지치 않기 때문에 공유가 빠릅니다.
단점 : OS가 동기화 보장을 해주지 않습니다.
따라서, critical section 제어 방식으로 세마포어 등을 사용할 수 있습니다.
ipc 종류
1. (익명) pipe
pipe는 한쪽 방향으로만 통신이 가능한 반이중 통신입니다.
데이터를 보내는 프로세스와 받는 프로세스가 정해져 있습니다.
따라서, 양방향 통신이 가능케하려면 두 개의 pipe를 쓰면 되지만 구현이 어렵다는 단점이 있습니다.
또한, 통신할 프로세스를 알고 있는 경우에 이용하는 통신이기도 합니다.
ex) parent-child process
2. Named pipe (FIFO in UNIX)
Named pipe는 익명 pipe와 다르게 전혀 모르는 프로세스 사이에서도 가능한 통신입니다.
양방향 통신을 위해서는 마찬가지로 두 개의 pipe를 사용해야 합니다.
3. Message queue
Named pipe와 동일하게 동작하지만, 데이터의 흐름이 아님 메모리 공간입니다.
사용할 데이터에 번호를 붙이면서 여러 프로세스가 동시에 데이터를 쉽게 다룰 수 있습니다.
4. 소켓
네트워크 소켓 통신을 통해 데이터를 공유합니다.
클라이언트와 서버가 소켓을 통해서 통신하는 구조로, 원격에서 프로세스 간 데이터를 공유할 때 사용합니다.
서버(bind, listen, accept), 클라이언트(connect)
5. memory map
공유 메모리처럼 메모리를 공유합니다. 차이점은 열린 파일을 메모리에 맵핑시켜 공유하는 방법입니다.
주로 파일로 대용량 데이터를 공유해야 할 때 사용합니다.
참고
http://blog.naver.com/PostView.nhn?blogId=bycho211&logNo=220985701140
'CS > OS' 카테고리의 다른 글
OS 부팅과정 (2) | 2023.11.21 |
---|---|
address space VS virtual memory VS swap memory (0) | 2020.07.13 |
데드락 (DeadLock) (0) | 2020.06.23 |
process synchronization(동기화) (0) | 2020.04.27 |
process vs thread (0) | 2020.04.27 |
- Total
- Today
- Yesterday
- 라면공장
- 단체사진 찍기
- programmers
- 17779
- 카카오 2020 공채
- 찾아라 프로그래밍 마에스터
- Brainf**k 인터프리터
- java
- 백준
- 2018 카카오 공채
- 후보키
- 게리맨더링 2
- 투포인터
- 티스토리챌린지
- 짝지어 제거하기
- 주사위 윷놀이
- 자바
- 3954
- 프로그래머스
- 가장 큰 정사각형 찾기
- 카카오2020 공채
- 괄호 변환
- 큰 수 만들기
- DP
- 124 나라의 숫자
- 문자열을 정수로 바꾸기
- 오블완
- 2019 카카오 공채
- 17825
- 정수 내림차순으로 배치하기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |