2023. 4. 21. 07:23ㆍ운영체제 (OS)
Producer-Cunsumer Problem
-- 단일 작업 수행을 위해 프로세스가 cooperate 할 수 있음
-- cooperating 은 오버래핑과 병렬적 수행을 통해 성능을 높일 수 있음
-- But 프로세스 통신과 프로세스 간의 데이터 공유는 어떻게 하는가..?
-- producer-comsumer 문제를 통해 해결 방법을 찾을 수 있음
-- process는 제한된 원형 버퍼를 통해 통신
: in = nextp 를 넣는 인덱스 번호
: out = 접근하고 있는 인덱스 번호
: 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
-- service 를 제공하는 process
-- Client : 서비스를 사용하는 process
: Client-Application : 서버와 통신할 수 있는 interface로 서버IP + 포트번호로 연결 후 요청 전송 및 데이터 수신
-- client 는 메시지를 보내고 server 는 메시지를 확인하고 제공가능한 서비스면 결과를 아니면 에러코드를 메시지에 담아서 보냄
RPC ( Remote Procedure Call )
-- local library 밖의 것을 사용할 때 사용하는 방법
-- 메커니즘
: 프로그래머한테 메시지 패싱 입력을 숨김
: 프로시저 콜 같아 보이지만 클라이언트가 서버에서 프로시저 호출하는 것
-- 요청
: 클라이언트가 서버에게 메시지를 보내고 서버에서 요청에 대한 응답을 기다리는 동안 클라이언트가 대기 상태에 빠짐
: 프로시저의 paramter 가 네트워크를 통해 호출된 server 로 전달
: 서버는 프로시저 실행
: parameter 는 네트워크를 통해 retrun 됨
: 프로세스를 호출해 재실행
: 클라이언트 프로세스에 의한 각 RPC 호출은 클라이언트 stub 을 호출하여 메시지를 작성하고 server stub으로 보냄
: server stub 은 메시지를 사용하여 server 에 대한 로컬 프로시저 호출을 생성
: 만약 로컬 프로시저의 return 값을 받으면 server stub 을 이용하여 메시지를 생성하고 client stub 으로 전송
: client stub 은 매시지 파싱 후 받은 value 사용
'운영체제 (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 |