반응형
I. 메모리공유 및 메시지 전달을 이용한 협력, IPC의 개념
- 프로세스들 사이에 서로 데이터를 주고 받는 행위 또는 그에 대한 방법이나 경로
- 주용용도: 정보공유, 계산 가속화, 모듈성, 편의성
- 주요 IPC 방식
| 방식 | 운영 체제 및 기타 환경이 제공 |
| 파일 | - 대부분의 운영 체제 |
| 신호 | - 대부분의 운영 체제, - 윈도우와 같은 일부 시스템은 C 런타임 라이브러리에서만 신호 제공 |
| 소켓 | - 대부분의 운영 체제 |
| 메시지큐 | - 대부분의 운영 체제 |
| 파이프 | - 모든 POSIX 시스템, 윈도우 |
| 지평 파이프 | - 모든 POSIX 시스템, 윈도우 |
| 세마포어 | - 모든 POSIX 시스템, 윈도우 |
| 공유 메모리 | - 모든 POSIX 시스템, 윈도우 |
| 메시지 전달 (비공유) | - MPI 패러다임 - 자바 RMI - CORBA - MSMQ - 메일슬롯 |
| 메모리 맵 파일 | - 모든 POSIX 시스템, 윈도우 |
- POSIX는 이식 가능 운영 체제 인터페이스 (Portable Operating System Interface)
II. IPC의 통신모델
| 구분 | Message Passing Model | Shared Memory Model |
| 개념 | - 프로세스 간 메시지 교환 | - 공유 메모리 이용 정보 교환 |
| 개념도 | ![]() |
![]() |
| 통신기능제공 | - 운영체제 | - 응용 프로그래머 |
| 충돌 | - 발생 불가능 | - 발생 가능 |
| 구현 난이도 | - 낮음 | - 높음 |
| 속도/용량 | - 저속/소량 | - 고속/대량 |
| 커널간섭 | - 메시지 전달 시 마다 시스템 호출로 오버헤드 발생 - 커널 의존도 높음 |
- 공유메모리 구축 시만 시스템 호출 - 커널 의존도 낮음 |
| 주요기법 | - PIPE, FIFO, 메시지큐, 소켓, 세마포어 | Shared Memory |
III. IPC의 주요 구현기법
가. 메시지 큐
| 구분 | 설명 | ||
| 정의 | - OS의 제어를 통해 커널 내 Message Queue를 이용하여 프로세스간 메시지를 전달하는 단 방향 통신 기법 | ||
| 특징 | 높은 커널 의존성 | - 메시지 전달 시마다 운영체제 System call 필요 | |
| 메시지 단위 전송 | - 프로세스 간 이산적 데이터를 메시지 형태로 전송 | ||
| 직접/간접 통신 | - 송수신 프로세스를 직접 명시하는 직접통신 방식과 메일박스 이용해 간접적으로통신하는 방식 사용 | ||
| 구성도 | ![]() |
||
| 구성요소 | 메시지 | - 메시지 유형(정수값, id) + 바이트 집합 (데이터) | |
| 시스템호출 함수 | msgget() | - 메시지 큐 및 식별자 생성 | |
| msgsnd(), msgrcv() | - 메시지 전송, 수신 | ||
| msgctl() | - 메시지 큐 제어 | ||
| 동작방식 | 1) Sender 메시지 전송 | - 메시지 큐 마지막에 연결 | |
| 2) Receiver 메시지 수신 | - 사전 정의된 수신 정책 기준으로 메시지큐에서 수신 | ||
나. 공유메모리
| 구분 | 설명 | ||
| 정의 | - 메모리의 일부 공간을 다수의 프로세스에게 공유하는 양방향 통신 기법 | ||
| 특징 | 커널 통한 공유 메모리 할당 | - 프로세스가 공유 메모리 할당/제거를 커널에 요청하여 프로세스에 메모리 공간 할당/제거 | |
| 빠른속도 | - 포인터를 이용한 메모리 공유로 복사 등 오버헤드 미발생 | ||
| 동기화문제 | - 세마포어 등 프로세스 간 동기화 기법의 적용 필요 | ||
| 구성도 | ![]() |
||
| 구성요소 | 공유메모리 | - 공유 메모리 세그먼트를 생성하는 프로세스의 주소 공간에 위치, 다른 프로세스가 이 세그먼트를 자신의 주소 공간에 추가 | |
| 시스템호출 함수 | shmeget() | - 공유메모리 및 식별자 생성 | |
| shmat() | - 공유메모리와 프로세스 데이터 영역과 연결 | ||
| shmdt() | - 연결 해제 | ||
| shmctl() | - 공유메모리 제어 | ||
| 동작방식 | 1) 공유메모리 생성 | - 커널에 공유메모리 생성 요청 | |
| 2) 메모리 공유 | - 통신 프로세스간 포인터 공유 | ||
| 3) 메모리 해제 | - 커널에 공유메모리 해제 요청 | ||
다. 세마포어
| 구분 | 설명 | ||
| 정의 | - 실행단위(프로세스 또는 쓰레드) 간의 동기화 기능을 제공하는 기법 | ||
| 특징 | 상호배제 | - 임계영역에 대한 접근 순서 제어 | |
| 커널모드 동기화 | - 서로 다른 프로세스 간 동기화 가능 | ||
| 구성도 | ![]() |
||
| 구성요소 | 세마포어 종류 | Binary | - 0/1 flag 통해 단일 자원 제어 |
| Counting | - 0 이상 정수값 변수로 다수 자원 제어 | ||
| 시스템호출 함수 | semget() | - 세마포어 및 식별자 생성 | |
| semop() | - 세마포어 연산 | ||
| semctl() | - 세마포어 제어 | ||
| 동작방식 | 1) P 함수 | - 임계영역 진입 전 잠금 수행 | |
| 2) S 함수 | - 작업 종료 후 잠금 해제 | ||
반응형
'IT기술노트 > 컴퓨터구조 및 운영체제' 카테고리의 다른 글
| 뉴로모픽 칩(Neuromorphic Chip) (0) | 2022.07.04 |
|---|---|
| DAS, NAS, SAN (0) | 2022.06.29 |
| 파이프라인 해저드 유형 및 해결방안 (0) | 2022.06.05 |
| HA (High Availability), 고가용성 (0) | 2022.01.27 |
| 우선순위 역전(Priority Inversion) (0) | 2021.10.20 |
| 데스크탑 가상화(VDI, Virtual Desktop Infrastructure) (0) | 2021.03.12 |
| 쿠버네티스(Kubernates) (0) | 2021.03.12 |
| 도커(Docker) (0) | 2021.03.12 |





댓글