[07] Cooperating Process

2023. 4. 21. 07:23운영체제 (OS)

SMALL

Producer-Cunsumer Problem

-- 단일 작업 수행을 위해 프로세스가 cooperate 할 수 있음

-- cooperating 은 오버래핑과 병렬적 수행을 통해 성능을 높일 수 있음

-- But 프로세스 통신과 프로세스 간의 데이터 공유는 어떻게 하는가..?

-- producer-comsumer 문제를 통해 해결 방법을 찾을 수 있음

-- process는 제한된 원형 버퍼를 통해 통신

 

: in = nextp 를 넣는 인덱스 번호

: out = 접근하고 있는 인덱스 번호

 

producer-consumer problem

: producer 가 [1] 인덱스의 데이터를 넣고 있는 상황

: consumer 가 [2] 인덱스의 데이터를 읽고 있는 상황

: 위의 경우 in+1 mod n == out 이므로 producer 가 다음에 데이터를 넣을 공간이 존재하지 않으므로 기다려야 하는 상황

: [2] 인덱스가 free 가 되면 [1] 인덱스의 값을 채우고 다음 프로세스에 in 값을 2로 전달

 

 

Message Passing using send & receive

-- Message Passing : 프로세스 간 통신, IPC ( Inter-Process Coummunication ) 을 위한 기법 중 하나

-- 메시지는 일반적으로 데이터와 목적지 프로세스 등의 정보가 포함

-- 각 프로세스가 독립적으로 실행되어 프로세스를 명시하는 작업이 필요

-- Blocking send 

: send process 는 receiver process 가 메시지를 받을 때까지 wait

-- Blocking receive

: send process 는 메시지를 보낼 수 없음

코드 흐름

 

DIrect & Indirect communication 

-- Direct communication : 통신 중인 process 이름 명시 ex) send ( consumer, item )

: 정확히 2 개의 프로세스에 연결된 link 사용

: 링크는 일반적으로 양방향 링크를 사용

 

-- Indirect communication 

: receiver 소유의 mailbox 를 사용하여 통신

: 링크는 두 개 또는 mailbox 를 공유하는 다른 프로세스까지 더 많은 프로세스와 연결되어 있을 수 있음

: 두 프로세스 사이에는 여러 개의 링크가 있을 수 있음 : mailbox ( 즉 que 라고 생각 가능 )를 이용하여 한 process 가 여러 메시지를 보낼 수 있음 

: 링크는 단방향 양방향 모두 사용 가능

 

 

Buffering 

-- buffer : 데이터의 전송속다가 다른 두 장치간의 데이터 흐름을 일치시키기 위해 존재

-- Direct/Indirect 모두 buffer 는 필요함

-- 링크에 일시적으로 대기할 수 있는 메시지 수를 결정하는 일부 용량이 있을 수 있음 : link waiting que 는 한정적임

-- Zero Capacity 

: 메세지 대기 불가

: 랑데부 : 데이터 교환을 위한 동기화로 sender는 receiver 가 메시지를 받을 때까지 기다려야 함

-- Bounded Capactiry

: receiver 의 큐가 꽉차지 않으면 새로운 메시지는 큐로 가고 sender 는 실시간으로 계속 메시지 전송함

: But 큐가 다 차면 sender 는 큐에 자리가 날 때까지 기다리고 메시지 전송을 못함

-- Unbounded Capacity 

: 무제한  buffer

 

Client-Server Model

message passing

-- service 를 제공하는 process

-- Client : 서비스를 사용하는 process 

: Client-Application : 서버와 통신할 수 있는 interface로 서버IP + 포트번호로 연결 후 요청 전송 및 데이터 수신

-- client 는 메시지를 보내고 server 는 메시지를 확인하고 제공가능한 서비스면 결과를 아니면 에러코드를 메시지에 담아서 보냄

RPC ( Remote Procedure Call )

-- local library 밖의 것을 사용할 때 사용하는 방법

-- 메커니즘

: 프로그래머한테 메시지 패싱 입력을 숨김

: 프로시저 콜 같아 보이지만 클라이언트가 서버에서 프로시저 호출하는 것

-- 요청

: 클라이언트가 서버에게 메시지를 보내고 서버에서 요청에 대한 응답을 기다리는 동안 클라이언트가 대기 상태에 빠짐

: 프로시저의 paramter 가 네트워크를 통해 호출된 server 로 전달

: 서버는 프로시저 실행

: parameter 는 네트워크를 통해 retrun 됨

: 프로세스를 호출해 재실행

stub을 이용한 통신

: 클라이언트 프로세스에 의한 각 RPC 호출은 클라이언트 stub 을 호출하여 메시지를 작성하고 server stub으로 보냄

: server stub 은 메시지를 사용하여 server 에 대한 로컬 프로시저 호출을 생성

: 만약 로컬 프로시저의 return 값을 받으면 server stub 을 이용하여 메시지를 생성하고 client stub 으로 전송

: client stub 은 매시지 파싱 후 받은 value 사용

 

반응형
LIST

'운영체제 (OS)' 카테고리의 다른 글

[10 & 11] Mutual Exclusion & Semaphore  (1) 2023.04.23
[08] Thread  (0) 2023.04.21
[06] UNIX Process Model  (0) 2023.04.21
[05] Process -- more specific  (0) 2023.04.21
[04] Process Manager  (1) 2023.04.21