SW Engineering/OS Concept

12_프로세스간 통신

SungWookKang 2015. 7. 16. 13:04
반응형

12_프로세스간 통신

 

운영체제 내에서 수행되는 병행 프로세스가 시스템에서 실행중인 다른 프로세스들에 영향을 주거나 받지 않는다면 독립적인 프로세스라 하며 영향을 준다면 협력적인 프로세스라 한다.

 

프로세스 협력을 허용하는 이유는 다음과 같다.

  • 정보 공유(Information Sharing) : 여러 사용자가 동일한 정보를 병행적으로 접근할 수 있는 환경을 제공해야 한다.(공유 파일 등)
  • 계산 가속화(Computation Speed UP) : 특정 작업을 서브 태스크로 나누어 각각 다른 서브 태스크들과 병렬로 실행 되어야 한다.
  • 모듈성(Modularity) : 시스템 기능을 별도의 프로세스들 또는 쓰레드 들로 나누어 모듈식 형태로 시스템을 구성하기를 원할 수 있다.
  • 편의성(Convenience) : 개별 사용자들이 한순간에 작업할 많은 태스크를 가질 수도 있다.(컴파일 중 문서 편집, 인쇄 작업의 병행 등)

 

 

협력적 프로세스들은 자료와 정보를 공유하기 위해 공유 메모(Shared Memory)리 기법과 메시지 전달(Message Passing) 두 가지 모델을 기본적으로 사용 한다.

 

[공유 메모리 시스템(Shared Memory System)]

프로세스간 통신에서 공유 메모리 영역을 구축 해야 한다. 통상 공유 메모리 영역은 공유 메모리 세그먼트를 생성하는 프로세스의 주소 공간에 위치 한다. 이 공유 메모리 세그먼트를 이용하여 통신하고자 하는 다른 프로세스들은 이 세그먼트를 자신의 주소 공간에 추가 하여야 한다.

 

 

 

메모리 영역을 구축 할 때 시스템을 호출 하며 공유 메모리 시스템이 구축 되면 모든 접근은 일반적인 메모리 접근으로 처리 되며 커널의 도움은 필요 없다. 하나의 시스템 안에서 통신할 때 메모리 속도로 접근하기 때문에 최대 속도와 편의성을 제공한다.

 

일반적으로 운영체제는 한 프로세스가 다른 프로세스의 메모리가 접근하는 것을 금지 한다. 공유 메모리는 둘이 상의 프로세스가 접근을 허용해야 한다. 그런 후에 공유 메모리 영역을 읽고 쓰면서 정보를 공유 한다.

 

자료 형식과 이들의 위치는 운영체제가 관여하지 않으며 이들 프로세스에 의해 결정이 되며 프로세스들은 동시에 동일한 위치에 쓰지 않도록 설계되어야 한다.

 

협력하는 프로세스를 설명하기 위해 일반적으로 생산자-소비자 패러다임을 설명하는데 생산자 프로세스는 정보를 생산하고 소비자 프로세스는 정보를 소비한다. 생산자와 소비자는 프로세스들이 병행으로 실행 되도록 하려면 생산자가 채워놓고 소비자가 소비할 수 있는 항목들의 버퍼가 반드시 있어야 한다. 이 버퍼는 생산자와 소비자가 공유하는 메모리 영역에 위치 하게 되며 2가지 버퍼 유형이 있다.

  • 무한 버퍼(Unbounded Buffer) : 생산자와 소비자 문제에서는 버퍼 크기에 실질적인 한계가 없다. 소비자는 새로운 항목을 기다려야만 할 수도 있지만 생산자는 항상 새로운 항목을 생산할 수 있다.
  • 유한 버퍼(Bounded Buffer) : 버퍼 크기가 고정되어 있다고 가정하며 이 버퍼가 비어 있으면 소비자는 반드시 대기 해야 하며 모든 버퍼가 채워져 있으면 생산자가 대기 하여야 한다.

 

 

 

[메시지 전달 시스템(Message Passing System)]

동일한 주소 공간을 공유하지 않고도 프로세스들이 통신을 하고 그들의 동작을 동기화 할 수 있도록 허용 하는 기법이다. 통신하는 프로세스들이 네트워크에 의해 연결된 다른 컴퓨터들에 존재할 수 있는 분산 환경에서 특히 유용하다.

 

 

 

메시지 전달 모델은 충돌을 회피할 필요가 없기 때문에 적은 양의 자료를 교환하는데 유용하다. 또한 컴퓨터간 통신을 할 때 공유 메모리 모델보다 구현하기 쉽다. 하지만 시스템 호출을 사용하여 구현 되므로 커널 간섭 등의 부가적인 시간 소비 작업들을 필요로 한다.

 

메시지 전달 시스템은 최소한 두 가지 연산(Send Message, Receive Message)을 제공한다. 프로세스가 보낸 메시지는 고정 또는 가변일 수 있다. 고정의 경우 시스템 구현은 간단하지만 프로그래밍에 제약이 있으며 가변의 경우 고정보다 복잡하지만 프로그래밍 작업은 더욱 간단해 진다.

 

명명(Naming) : 통신을 원하는 프로세스들은 서로를 가리킬 수 있는 방법이 있어야 한다. 이들은 직접 또는 간접 통신을 사용 한다.

직접 통신에서 통신을 원하는 각 프로세스는 통신의 수신자 또는 송신자의 이름을 명시해야 한다. 이 기법의 단점으로는 프로세스 정의의 제한된 모듈성에 있다. 프로세스 이름을 바꾸면 모든 다른 프로세스의 정의를 검사할 필요가 있을 수 있다. Send(), Receive() 프리미티브들의 특성을 살펴 보자.

  • 대칭성
    • Send(P, message) – 프로세스 P에게 메시지를 전송 한다.
    • Receive(Q, message) – 프로세스 Q로부터 메시지를 수신한다.
    • 통신을 원하는 각 프로세스 상들 사이에 연결이 자동적으로 구축 된다. 프로세스들은 통신하기 위해 서로 상대방의 Identity만 알면 된다.
    • 연결은 정확히 두 프로세스들 사이에만 연관 된다.
    • 통신하는 프로세스들의 각 쌍 사이에는 정확하게 하나의 연결이 존재해야 한다.

 

  • 비대칭성
    • Send(P, message) – 프로세스 P에게 메시지를 전송 한다.
    • Receive(id, message) – 임의의 프로세스로부터 메시지를 수신한다. 변수 ID는 통신을 발생시킨 프로세스의 이름으로 설정 된다.

 

 

간접 통신은 메일박스(Mailbox) 또는 포트(port)로 송신되고 그것으로부터 수신 된다. 각 메일박스는 고유 ID를 가진다. Send(), Receive() 프리미티브 특성을 살펴보자.

  • Send(A, message) – 메시지를 메일박스 A로 송신한다
  • Receive(A, message) – 메시지를 메일박스 A로부터 수신한다.
  • 한 쌍의 프로세스들 사이의 연결은 이들 프로세스가 공유 메일박스를 가질 때만 구축 된다.
  • 연결은 두 개 이상의 프로세스들과 연관 될 수 있다.
  • 통신하고 있는 가 프로세스들 사이에는 다수의 서로 다른 연결이 존재할 수 있고 각 연결은 하나의 메일 박스에 대응된다.

 

 

동기화(Synchronization) : 프로세스간 통신은 Send()와 Receive() 프리미티브에 대한 호출에 의해 발생한다, 메시지 전달 방식은 동기식(봉쇄형, Blocking) 또는 비동기식(비봉쇄형, nonblocking)이 있다.

  • 동기식 보내기 : 송신하는 프로세스는 메시지가 수신 프로세스 또는 메일박스에 의해 수신될 때까지 봉쇄 된다.
  • 비동기식 보내기 : 송신하는 프로세스가 메시지를 보내고 작업을 재시작 한다.
  • 동기식 받기 : 메시지가 이용 가능할 때가지 수신 프로세스가 봉쇄 된다.
  • 비동기식 받기 : 송신하는 프로세스가 유효한 메시지 또는 널(null)을 받는다.

 

Send()와 Receive()가 모두 봉쇄형일 때 우리는 송신자와 수신자간에 랑데부(Rendezvouns)를 갖게 된다.

 

 

버퍼링(Buffering) : 통신이 직접적이든 간접적이든 간에 통신하는 프로세스들에 의해 교환되는 메시지는 임시 큐에 들어 있다. 큐를 구현하는 방식은 세 가지가 있다.

  • 무용량(Zero Capacity) : 큐의 최대 길이가 0이다. 즉 링크는 자체 안에 대기하는 메시지들을 가질 수 없다. 이 경우 손신자는 수신자가 메시지를 수신할 때 까지 기다려야 한다.
  • 유한 용량(Bounded Capacity) : 큐는 유한 길이를 가지고 있으며 최대 큐 길이 메시지가 안에 들어올 수 있다. 새로운 메시지가 전송 될 때 큐가 가득 차 있지 않으면 큐에 저장되며 송신자는 대기하지 않고 실행을 계속 한다.
  • 무한 용량(Unbounded Capacity) : 무한길이를 가진다. 메시지들이 얼마든지 큐 안에서 대기할 수 있다. 송신자는 결코 봉쇄되지 않는다.

무한 용량의 경우 버퍼가 없는 시스템이라고 부른다. 다른 경우들은 자동 버퍼링이라 부른다.

 

 

 

[참고자료]

Operating System Concept / 홍릉과학출판사

 

반응형

'SW Engineering > OS Concept' 카테고리의 다른 글

14_스레드 개념과 다중 스레드  (0) 2015.07.16
13_클라이언트 서버 환경에서 통신  (0) 2015.07.16
11_프로세스에 대한 연산  (0) 2015.07.16
10_프로세스 스케줄링  (0) 2015.07.16
09_프로세스 개념  (0) 2015.07.16