본문 바로가기
Study/운영체제

3. Processes - Inter-process communication

by 이미뇨 2023. 4. 11.

1. Inter-process Communication (IPC)

IPC의 목표: 협력

  • 정보 공유 : 공유 파일, …
  • 계산 속도 향상 : 다중 CPU 또는 I/O
  • 모듈화 : 시스템 기능 분할
  • 편의성 : 병렬로 편집, 인쇄, 컴파일

 

IPC models

  • Message passing model : 프로세스 간 통신을 위해 메시지를 보내고 받는 모델
    • 메시지 큐를 사용하여 메시지를 저장하고 전송
    • 메시지 큐는 커널 내부에 존재 (커널은 우체국 같은 역할을 한다.)
    • 프로세스는 시스템 콜을 사용하여 메시지 큐에 메시지를 보내고, 받는다.
    • 장점 : 프로세스 간의 독립성과 안전성을 보장
  • Shared-memory model : 프로세스 간 통신을 위해 동일한 메모리 영역을 공유하는 모델
    • 공유 메모리 영역을 생성하고, 해당 영역을 사용하여 데이터를 읽고 쓰는 작업을 직접 수행
    • 장점 : Message passing model에 비해 더 높은 성능을 가짐

IPC models

 

2. Shared-Memory Systems

  • 두 개 이상의 프로세스가 공유할 수 있는 특수 메모리 공간
  • 데이터의 형태와 위치는 OS에 의해 결정되는 것이 아니라, 이러한 프로세스에 의해 결정
  • 프로세스는 스스로 동시에 쓰는 것을 피해야 한다.
  • 장점 : 빠르다 -> 대용량 데이터에 적합

*problem : producer-consumer problem

3. Producer-Consumer Problem

Producer와 consumer가 공유 메모리를 통해 정보(항목)를 전달

  • Producer: 소비자를 위한 정보를 생산
  • Consumer: 생산자가 작성한 정보를 소비

Producer-Consumer Problem

Two types of buffer

  • Unbounded buffer
    • 버퍼 크기에 대한 실질적인 제한 없음
    • 생산자는 항상 생산할 수 있다.
  • Bounded buffer
    • 버퍼가 가득 찬 경우 생산자는 기다려야 합니다

4. Producer-Consumer Problem using Bounded Buffer

Representation of buffer

버퍼는 circular queue로 표현될수 있다. 

#define BUFFER_SIZE 6
typedef struct {
. . .
} item;
item buffer[BUFFER_SIZE];
int in = 0; // tail or rear
int out = 0; // head or front

circular queue

마지막 한칸을 비워둬야 한다 -> full / empty 구별하기 위해서 

 

Empty/full condition

  • in == out: // 버퍼가 비어있다. 둘이 같으면 아무것도 안들어갔다.
  • (in+1)%BUFFER_SIZE == out: // 버퍼가 가득찼다. 한칸앞에 있는 이유는 full / empty 구별 위해
    • Cf. 버퍼는 최대 BUFFER_SIZE – 1개 항목까지 저장 가능
더보기

Circular Queue

Circular queue: 논리 구조가 원형인 고정 크기 버퍼

마지막 요소 다음에 첫 번째 요소가 나온다.

 

Inserting an item

buffer[in] = newItem;

in = (in + 1) % n;

Extracting an item

item = buffer[out];

out = (out + 1) % n;

[ Producer ]
item nextProduced;

while (1) {
    // produce an item in nextProduced
    while (((in + 1) % BUFFER_SIZE) == out); // waiting
    buffer[in] = nextProduced; // 현재 위치에 넣고
    in = (in + 1) % BUFFER_SIZE; // 한칸 앞으로 보내쟝
}

[ Consumer ]
item nextConsumed;

while (1) {
    while (in == out); // waiting (비어있으면 기다려라)
    nextConsumed = buffer[out];
    out = (out + 1) % BUFFER_SIZE;
    // consume the item in nextConsumed
}

 

5. Message-Passing Systems

OS에서 제공하는 Message-passing 시설을 통한 프로세스 통신

장점 : 충돌이 없다 -> 적은 양의 데이터에 적합, 서로 다른 컴퓨터의 프로세스 간 통신

 

message passing의 경우 프로세스 간에 통신 링크가 존재해야 합니다

 

Essential operations

  • send(message)
  • receive(message)

(Logical) Implementation methods (구현방법)

  • Direct/indirect
  • Synchronous/asynchronous
  • Buffering

6. Direct/Indirect Communication

Direct communication : 데이터를 직접 주고 받는 방법

Indirect communication : 데이터 교환에 사용되는 버퍼 영역을 거쳐서 주고 받는 방법

7. Buffering

데이터를 주고 받을 때 버퍼링 처리 방식

통신 중 메시지는 temporary queue (buffer)에 저장됩니다

 

Three kinds of buffer capacity (3가지 버퍼 용량)

  • Zero capacity : 전송 차단만 가능
  • Bounded capacity : 버퍼의 길이가 n개로 제한됨
    • 버퍼가 가득 찬 경우 보낸 사람을 차단해야 한다.
      그렇지 않으면 보낸 사람이 다시 시작할 수 있다.
  • Unbounded capacity : 버퍼의 용량 무한
    • 보낸 사람 차단하지않음

'Study > 운영체제' 카테고리의 다른 글

4. Threads - Overview  (0) 2023.04.12
3. Processes - Example of IPC system  (0) 2023.04.11
3. Processes - Operations on processes  (0) 2023.04.11
3. Processes - Process scheduling  (0) 2023.04.11
3. Processes - Overview  (0) 2023.04.11