티스토리 뷰
📌 프로세스 간 통신
💡 목표
공유 메모리와 메시지 전달을 통한 프로세스 간 통신에 대해 이해하고 비교할 수 있다.
💡 개념
프로세스들은 독립적이거나 혹은 협력적인데,
협력 프로세스는 데이터 공유를 포함하여, 프로세스들에게 영향을 주거나 받음.
협력을 허용하는 환경을 제공하는 이유는
✔️ 정보를 공유할 수 있고,
✔️ 계산을 가속화할 수 있으며,
✔️ 모듈 형태로 프로세스를 구성할 때 필요할 수 있고,
✔️ 개별 사용자들이 여러 프로세스들을 작업할 때 편리하게 활용할 수 있기 때문이다.
💡 IPC의 모델들 | (Inter Process Communication, IPC) : 프로세스들간의 통신
a) 공유 메모리 shared memory
b) 메시지 전달
1. 공유 메모리
통신하는 프로세스들이 공유 메모리를 구축해야한다.
📝 생산자 (프로세스 정보 생성) - 소비자 (프로세스 정보 소비) 문제
ex. 웹 서버 (생산자) - 웹 브라우저 (소비자)
만약 소비자가 생산자가 생산하는 속도보다 빠르게 소비하면, 소비자는 기다리는 문제가 생길 수 있음.
이 문제를 생산자 - 소비자 문제라고 하는데,
⭐️ 해결책으로는 공유 메모리 사용하는 것이다. ⭐️
공유 메모리는 버퍼이며, 버퍼는 반드시 사용이 가능해야한다.
공유 메모리 (버퍼)를 생산자는 정보를 생산하고, 소비자는 정보를 소비하며 동시에 통신하는 방법이다.
📝 버퍼의 종류
무한 버퍼 : 버퍼의 크기의 실질적인 한계가 없음. (현실적으로 불가능)
유한 버퍼 : 버퍼 크기 고정
버퍼가 비어있으면 -> 소비자는 반드시 대기
모든 버퍼가 채워져 있으면 -> 생산자가 대기.
2. 메시지 전달
- 공유 메모리처럼 동일한 주소 공간을 공유하지 않고도 프로세스들이 통신을 하고, 그 동작을 동기화할 수 있도록 허용하는 기법이다.
- send (message) - receive (message) 연산을 제공.
- 메시지는 고정 길이 일수도, 가변 길이 일수도 있음.
- 통신 연결 (commnuication link)을 통해 프로세스 간 메시지를 송수신한다.
논리적 구현 방법으로는,
✔️ 직접, 간접 통신
✔️ 동기식, 비동기식 통신
✔️ 자동, 명시적 버퍼링
1) 직접 통신
- 통신을 원하는 각 프로세스는 통신의 수신자 혹은 송신자의 이름을 명시해야한다.
- 연결(link)가 자동으로 생성
- 서로의 신원이 확실하기 때문에 연결은 정확히 두 프로세스들 사이에서만 연관된다.
- 대칭 주소 지정 : 발신자, 수신자 프로세스 모두 이름 지정하여 통신.
- 비대칭 주소 지정 : 발신자만 수신자의 프로세스 이름 지정.
2) 간접 통신
- 메일함이나 포트로 메시지 송수신. (직접통신과 다르게 메일함, 포트같이 중간 매개채 존재)
- 두 프로세스는 프로세스가 공유된 경우에만 통신함.
- 두 구성원이 모두 있는 경우에만 연결 설정 (공유 메일함 존재)
- 연결은 두개 이상의 프로세스와 연결이 가능.
- 프로세스의 각 쌍 상태에는 여러가지 서로 다른 연결이 존재.
- 공유 메일함 : 프로세스 혹은 운영체제에게 소유권이 존재.
3) 동기화 (동기 / 비동기)
[ Blocking 모드 (동기)] - 기다림
- send : 송신된 메시지가 수신될 때 까지 송신자를 블록 (정지)시킴. (혹은 큐에 메시지가 가득차있을 때에도 블록)
- receive : 이용 가능한 메시지가 있을 때까지 수신자를 블록 (정지)
[Non - Blocking 모드 (비동기)] - 안기다리고 처리 ㅇㅇ
- send : 메시지를 전달한 뒤 다른 작업을 처리.
- receive : 유효한 메시지를 받거나 null 메시지를 수신.
4) 버퍼링
- 통신 프로세스 간 교환되는 메시지는 직접적이든 간접적이든 임시 대기열에 존재.
📝 임시대기열을 구현하는 방법들
[ 용량 zero (최대 길이 0)]
- 발신자는 수신자가 메시지를 받을 때까지 차단.
[ 제한된 용량 (유한 길이 n) ]
- 연결이 가득 차면 발신자는 대기열 공간이 확보될 때까지 차단.
[ 무한 용량 ]
- 발신자는 절대 차단하지 않음. 서버 부담도 있고.. 예측하기도 어려움
공유 메모리 | 메시지 전달 | |
구현 용이성 | 동시 사용이라 충돌 회피 관련 코드 짜야함. | 이게 더 편함 (충돌 회피가 딱히 필요없음 큐로 처리돼서) |
속도 | 이게 더 빠름 (시스템 콜 x) | 커널을 사용해서 시스템 콜처리 때문에 좀 더 느림 |
분산 환경 | 공유 메모리가 캐시들 사이에서 왔다갔다 해야해서 캐시 일관성 지키다가 성능 떨어질 수 있음. |
이게 더 성능 좋다. |
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 단일 스레드와 멀티 스레드, 스레드 풀, 프로세스-스레드 차이 (1) | 2023.10.23 |
---|---|
[운영체제] 소켓 통신, 서버 - 클라이언트 통신, RPC (2) | 2023.10.23 |
[운영체제] 프로세스 연산(생성 / 종료) (0) | 2023.10.22 |
[운영체제] 프로세스, 스케쥴링, 컨텍스트 스위칭 (0) | 2023.10.22 |
[운영체제] 운영체제의 서비스, 시스템 콜 (0) | 2023.10.21 |
- Total
- Today
- Yesterday
- 국비지원
- be
- 카카오API
- 야놀자X패스트캠퍼스부트캠프
- #국비지원취업
- TiL
- 프로젝트후기
- 야놀자
- 백엔드부트캠프
- 백엔드
- 백엔드개발자
- 패스트캠퍼스강의
- 그룹스터디워크샵
- 채팅기능개발
- 데이터베이스
- 자료구조
- Java
- 국비지원캠프
- 그룹스터디
- 백준
- 자료구조 #스택 #큐 #덱 #선형자료구조
- qjzl
- 부트캠프
- 커리어멘토링
- boj
- 스터디후기
- 패스트캠퍼스
- 과정중간회고
- 국비지원취업
- springboot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |