상세 컨텐츠

본문 제목

3.4 프로세스간 통신 (Interprocess Communication)

Computer Science/OS Concepts

by RACC8N 2020. 4. 24. 11:23

본문

병행(concurrent) 프로세스의 종류

- 독립(Independent)프로세스 : 다른 프로세스의 실행에 영향을 주거나 받지 않음

- 협력(Cooperating)프로세스 : 다른 프로세스의 실행에 영향을 주거나 받음

 

프로세스 협력을 허용하는 이유

- 정보 공유 EX) 공유파일

- 계산 가속화 (Computation Speedup)

  > 작업을 서브 작업으로 나누어 병렬 실행

-모듈성 (Modularity) - 기능 모듈화

- 편의성 (Convenience)

  > 개별 사용자가 한 번에 여러 작업을 수행함 (편집, 프린트,컴파일을 함께 수행(병렬))

 

[EXAMPLE] 다중 프로세스구조 - Chrome Browser

 

단일 프로세스 방식의 웹 브라우저

- 한 웹 사이트가 문제 있으면 전체 브라우저에 영향

 

Chrome Browser의 다중 프로세스 구조 - 3 프로세스 사용

- 브라우저 (browser)

- 렌더러 (renderer) - 웹 사이트마다 별도의 렌더러 실행

- 플러그인 (plug-in)

특징과 장점

- renderers는 sandbox에서 실행되며, 멀티코어에서 병렬 렌더링 지원

- 웹사이트가 다른 웹사이트와 고립되어 동작

  > 문제 발생시 다른 웹사이트의 렌더러에 영향을 주지 않음

 

프로세스간 통신 (IPC) 모델

Shared Memory

- 최대 속도

- 편의성 : 공유메모리 영역 지정 시에만 시스템 호출, 공유 메모리 영역이 구축되면 일반 메모리처럼 접근 (커널 도움 X)

- 코어 수 증가 시 캐시일관성 문제로 성능 저하

 

Message Passing

- 적은 양의 데이터 전달에 유용

- 충돌(Conflict)이 없음

- 구현이 용이

- 코어 수가 증가할 때 더 나은 성능

 

공유 메모리 시스템

공유 영역에 있는 버퍼 사용

- 시스템 호출을 사용하여 공유 메모리 영역 지정

  > UNIX : shmget(),shmat() 

- 공유 메모리가 지정되면 보통의 메모리와 같이 접근됨

 

생산자-소비자 문제(Producer-Consumer)

- 협력 프로세서들의 간단하고 전형적인 예

- Producer 프로세스는 정보를 생산하고, Consumer 프로세스는 정보를 소비함

 

생산자-소비자 문제의 공유 메모리 구현 방법  - 두 유형의 버퍼

- 무한 (unbounded) 버퍼 : 버퍼 크기의 제한이 없음

- 유한 (bounded)버퍼 : 고정된 버퍼 크기

  > 버퍼가 FULL이면, Producer는 기다려야 함

Producer-Consumer 프로그램 

 

Shared buffer

- ln과 Out을 갖는 원형 배열로 구현

- 변수 ln은 버퍼 내에서 다음으로 비어 있는 위치를 가리킴

- 변수 Out은 버퍼 내에서 첫 번째 채워져 있는 위치를 가리킴

- In == Out일 때 : 버퍼는 Empty 상태

- ((In + 1) % BUFFER_SIZE) == Out이면 버퍼는 FULL 상태

 

Producer, Consumer

 

메시지 전달 시스템

메시지 전달 (MessagePassing)

- 같은 주소 공간을 공유하지 않고, 통신을 하고 동작을 동기화하는 기능을 제공함 (네트워크로 연결된 분산환경에 유용)

- 메시지 전달 IPC 함수 이용

 

메시지 전달 IPC 함수 - 최소 두가지

- send(message)

- receive(message)

 

메시지 크기와 IPC 구현

- fixed size : (구현 : 간단함, 프로그래밍 :  더 복잡함)

- variable size : (구현 : 더 복잡함, 프로그래밍 : 더 간단함)

- 한 번에 전송/수신할 수 있는 메시지 길이가는 제한됨.

 > 길이가 길면 제한된 길이로 분할하여 여러번 전송하거나, 여러 번 수신하여 합해야 함

 fixed size IPC : 프로그래머가 이 작업을 수행

 variable size IPC : IPC 함수에서 이 작업을 수행

 

IPC의 통신 연결 (Communication Link)

- 통신 프로세스 P와 Q가 서로 통신을 하려면 그들 간에 통신 연결이 설정되어야 함

 

Communication link의 구현

- 물리적 구현 : 공유 메모리, 하드웨어 버스, 네트워크

- 논리적 구현 : 운영체제의 관심 사항

 

Communication link와 send/receive의 논리적 구현 방법

- direct / indirect communication ->명명(naming) 방법

  > 상대편을 참조하는(가리키는) 방법

- synchronous / asynchronous communication 

  > send와 receive의 동작 동기화 여부

- 자동 (automatic) / 명시적 (explicit) buffering

 

Naming - Direct Communication

Direct Communication - 서로의 이름을 명시 (대칭 주소 지정)

- send (P, message) - process P에게 message 전송

- receive (Q, message) -process Q로부터 message 수신

비대칭 (asymmetric) 주소 지정

- send (P, message)

- receive (id, message) - 임의의 process로부터 message 수신 (id = sending process의 이름)

Communication link의 특성

- 링크가 자동적으로 설정

- 링크는 두 프로세스들 사이에서만 연관됨

- 두 프로세스들 사이에 정확히 1개의 링크만 존재

 

문제점 

- 프로세스의 이름을 변경하면, 모든 다른 프로세스 정의에 대한 검사가 필요함

 > 해결책 : 간접 통신

 

Naming - Indirect Communication

Indirect communication - mailbox(또는 port)를경유하여 message를송신하거나 수신함

- 각 메일박스는 고유의 ID를 가짐

- 프로세스들은 메일박스를 공유할 때에, 메일박스를 통하여 통신

 

메일박스를 사용한 send/receive

- send(A, message) - mailbox A로 message송신

- receive(A, message) - mailbox A에서 message 수신

 

communication link의 특성

- 프로세스들이 공유(common) 메일박스를 가질 때에만 통신 링크가 설정됨

- 링크는 두 개 이상의 프로세스와 연관가능

- 두 프로세스들 간에 다수의 링크를 공유 가능

 

메일박스 생성 및 소유

- 운영체제는 메일박스 생성/송수신/삭제 가능

- 메일박스는 생성한 프로세스의 소유임

- 운영체제도 자체 메일박스 소유 가능

 

동기화 (Synchronization)

동기식(synchronous) 통신 - Blocking 송수신 (동작이 상대편 동작에 영향을 받음)

- Blocking send - 송신 프로세스는 수신 프로세스나 메일박스가 메시지 받을 때 까지 block

- Blocking receive - 수신 프로세스는 수신 메시지가 있을 때까지 block

 

비동기식(asynchronous) 통신 - Non-blocking 송수신 (동작이 상대편 동작에 영향을 받지 않음)

- Non-blocking send - 송신 프로세스는 메시지를 보내고 바로 return, 작업을 계속 수행함 (수신 여부와 관계 없이)

- Non-blocking receive - 수신 프로세스는 유효한 메시지를 받거나 널(null)을 받고 바로 return, 작업을 계속 수행함

 

※ 동기식 통신이 프로그래머가 사용하기 더 쉽다.

 

버퍼링(Buffering)

메시지 큐 

- 프로세스간에 교환되는 메시지는 링크에 연관된 Message queue(버퍼)에 저장되어 전송됨

 

buffer queue의 구현 방법

1. 유한 용량(Bounded capacity) - 유한한 길이의 버퍼 (길이 n)

 > queue가 full이면 sender는 기다려야 함 (blocking)

2. 무한 용량(Unbounded capacity) - 무한한 길이의 버퍼 (이상적)

 > Sender는 결코 기다리지 않음 (nonblocking)

3. 무용량 (Zero capacity) - 링크에 버퍼가 없음

 > Sender는 receiver가 준비되어 직접 수신할 때까지 기다려야 함. -> 랑데부 (rendezvous)

 

 

'Computer Science > OS Concepts' 카테고리의 다른 글

3.6 클라이언트-서버 시스템에서의통신  (0) 2020.04.24
3.5 IPC 시스템사례  (0) 2020.04.24
3.3 프로세스 연산  (0) 2020.04.17
3.2 프로세스 스케줄링  (0) 2020.04.17
3.1 프로세스 개념  (0) 2020.04.17

관련글 더보기

댓글 영역