병행(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 함수에서 이 작업을 수행
- 통신 프로세스 P와 Q가 서로 통신을 하려면 그들 간에 통신 연결이 설정되어야 함
Communication link의 구현
- 물리적 구현 : 공유 메모리, 하드웨어 버스, 네트워크
- 논리적 구현 : 운영체제의 관심 사항
Communication link와 send/receive의 논리적 구현 방법
- direct / indirect communication ->명명(naming) 방법
> 상대편을 참조하는(가리키는) 방법
- synchronous / asynchronous communication
> send와 receive의 동작 동기화 여부
- 자동 (automatic) / 명시적 (explicit) buffering
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개의 링크만 존재
문제점
- 프로세스의 이름을 변경하면, 모든 다른 프로세스 정의에 대한 검사가 필요함
> 해결책 : 간접 통신
Indirect communication - mailbox(또는 port)를경유하여 message를송신하거나 수신함
- 각 메일박스는 고유의 ID를 가짐
- 프로세스들은 메일박스를 공유할 때에, 메일박스를 통하여 통신
메일박스를 사용한 send/receive
- send(A, message) - mailbox A로 message송신
- receive(A, message) - mailbox A에서 message 수신
communication link의 특성
- 프로세스들이 공유(common) 메일박스를 가질 때에만 통신 링크가 설정됨
- 링크는 두 개 이상의 프로세스와 연관가능
- 두 프로세스들 간에 다수의 링크를 공유 가능
메일박스 생성 및 소유
- 운영체제는 메일박스 생성/송수신/삭제 가능
- 메일박스는 생성한 프로세스의 소유임
- 운영체제도 자체 메일박스 소유 가능
동기식(synchronous) 통신 - Blocking 송수신 (동작이 상대편 동작에 영향을 받음)
- Blocking send - 송신 프로세스는 수신 프로세스나 메일박스가 메시지 받을 때 까지 block
- Blocking receive - 수신 프로세스는 수신 메시지가 있을 때까지 block
비동기식(asynchronous) 통신 - Non-blocking 송수신 (동작이 상대편 동작에 영향을 받지 않음)
- Non-blocking send - 송신 프로세스는 메시지를 보내고 바로 return, 작업을 계속 수행함 (수신 여부와 관계 없이)
- Non-blocking receive - 수신 프로세스는 유효한 메시지를 받거나 널(null)을 받고 바로 return, 작업을 계속 수행함
※ 동기식 통신이 프로그래머가 사용하기 더 쉽다.
메시지 큐
- 프로세스간에 교환되는 메시지는 링크에 연관된 Message queue(버퍼)에 저장되어 전송됨
buffer queue의 구현 방법
1. 유한 용량(Bounded capacity) - 유한한 길이의 버퍼 (길이 n)
> queue가 full이면 sender는 기다려야 함 (blocking)
2. 무한 용량(Unbounded capacity) - 무한한 길이의 버퍼 (이상적)
> Sender는 결코 기다리지 않음 (nonblocking)
3. 무용량 (Zero capacity) - 링크에 버퍼가 없음
> Sender는 receiver가 준비되어 직접 수신할 때까지 기다려야 함. -> 랑데부 (rendezvous)
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 |
댓글 영역