본문 바로가기
컴퓨터 공학/운영체제

[운영체제] 프로세스 간 통신

by tempus 2021. 9. 22.
반응형

앞서 프로세스 개념과 스케줄링에 대해 알아보았습니다. 그럼 여기서 서로 독립된 개체인 프로세스들끼리는 어떻게 데이터를 주고받는지 알아보겠습니다.


프로세스 간 통신의 종류

[프로세스 내부 데이터 통신]

하나의 프로세스 내에 2개 이상의 스레드(thread)가 존재하는 경우의 통신이다. 스레드(thread)는 전역 변수나 파일을 이용하여 데이터를 주고받는다.

프로세스 내부 데이터 통신
프로세스 내부 데이터 통신

[프로세스 간 데이터 통신]

같은 컴퓨터에 있는 여러 프로세스끼리 통신할 때는 공용 파일 또는 운영체제가 제공하는 파이프를 사용해 통신합니다.

프로세스 간 데이터 통신
프로세스 간 데이터 통신

[네트워크를 이용한 데이터 통신]

여러 대의 컴퓨터가 네트워크로 연결되어 있을 때, 소켓을 이용하여 데이터를 주고받습니다. 이렇게 소켓(socket)을 이용한 프로세스 간 통신을 네트워킹이라고 합니다.

같은 컴퓨터에 있는 프로세스끼리도 루프백 주소를 통해 소켓 통신이 가능하지만 오버헤드가 크기 때문에 거의 사용하지 않습니다.

네트워크를 이용한 데이터 통신
네트워크를 이용한 데이터 통신

기본적으로 프로세스 간 통신 방식은 ''주거나(send) 받는다(receive)''로 이루어져 있습니다. 겉으로 보기에는 단순해 보이지만 통신하려는 상대 프로세스를 어떻게 찾을지, 데이터의 크기는 얼마로 할지, 데이터 도착 여부는 어떻게 알지 고려해야 할 사항들이 많습니다.


프로세스 간 통신의 분류

[통신 방향에 따른 분류]

  • 양방향 통신 : 데이터를 동시에 양쪽 방향으로 전송할 수 있는 구조 (소켓 통신)
  • 반양방향 통신 : 양쪽 방향으로 전송할 수 있지만 동시 전송을 불가능한 구조 (무전기)
  • 단방향 통신 : 한쪽 방향으로만 데이터를 전송할 수 있는 구조 (전역 변수, 파이프)

대부분의 통신은 양방향 통신이지만 전역 변수는 단방향 통신입니다. 만약 양쪽에서 동시에 전역 변수를 변경한다면 하나의 데이터는 지워지게 됩니다. 그러므로 항상 전역 변수를 사용할 때는 주의해야 합니다.


[통신 구현 방식에 따른 분류]

전역 변수를 사용하는 통신 방식의 큰 문제는 언제 데이터를 보낼지 데이터를 받는 쪽에서는 모른다는 것입니다. 알기 위해서는 전역 변수의 값을 반복적으로 확인하는 방법밖에 없습니다. 결국 이는 무한 루프에 빠지게 되고 바쁜 대기 상태(busy waiting)가 됩니다. 시스템 차원에서 바쁜 대기는 안 좋은 프로그램의 전형적인 예입니다.


바쁜 대기 문제를 해결하기 위해서는 데이터가 도착했음을 알려주는 동기화(synchronization) 작업이 필요합니다. 카카오톡 메시지 알림 같은 것이 동기화에 대표적인 예입니다. 프로세스 간 통신에서 동기화 여부에 따라 분류할 수 있습니다. 내용은 아래와 같습니다.


  • 대기가 있는 통신 : 동기화를 지원하는 통신 방식 (파이프, 소켓)
  • 대기가 없는 통신 : 동기화를 지원하지 않는 통신 방식 (전역 변수, 파일)

대기가 있는 통신은 필연적으로 오버헤드가 발생할 수밖에 없는 구조입니다. 그래서 네트워크 통신 같은 경우는 비동기로 처리하는 경우가 많습니다. 단 비동기로 처리할 경우 통신 오류로 인한 예외 처리나 통신이 완료되고 난 후의 처리는 사용자가 직접 해주어야 합니다.

 

반응형

댓글


loading