ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로세스 간 통신(IPC)란 무엇인가
    CS지식/운영체제 2021. 6. 6. 23:18

    프로세는 시스템 내에서 자신이 가진 code, stack, data를 쓰면서 독립적으로 실행되기도 하지만 프로세스끼리 서로 데이터를 주고받으며 협업하기도 한다.

    여기서 프로세스끼리 데이터를 주고받기 위해 프로세스 간 통신(이하 IPC)이 이루어지고 IPC에는 같은 컴퓨터 내에 있는 프로세스끼리 통신 뿐만 아니라 네트워크로 연결된 다른 컴퓨터에 있는 프로세스와도의 통신도 의미한다.

     

    이러한 프로세스 간 통신에는 여러 종류가 존재한다.

    1) 전역 변수를 이용한 통신

    전역변수를 이용한 통신은 공동으로 관리하는 메모리를 사용하여 데이터를 주고받는 것으로 송신측은 전역변수에 데이터를 쓰고, 수신측은 전역변수의 값을 읽어 통신이 이루어진다.

    주로 직접적으로 관련이 있는 프로세스 간에 사용되는 통신방식이다.

    예를 들어 부모 프로세스가 전역 변수를 선언한 후 자식 프로세스를 만들면 부모 프로세스와 자식 프로세스가 통신을 할 수 있다.

    하지만 굳이 직접적으로 관련이 있지않아도 extern변수와 같은 전역 변수를 사용하여 통신을 할 수 있다.

     

    2) 파이프를 이용한 통신

    파이프는 운영체제가 제공하는 동기화 통신 방식으로 open()함수로 파이프를 얻고 작업 후 close()함수로 파이프를 끝낸다.

    (동기화: 프로세스 또는 스레드들이 수행되는 시점을 조절하여 서로가 알고 있는 정보가 일치하는 것)

    파이프를 이용한 통신은 단방향 통신이므로 양방향 통신을 원한다면 파이프를 2개 사용하면 된다.

    파이프에는 anonymous pipe와 named pipe가 있다.

    anonymous pipe는 부모와 자식 프로세스 혹은 같은 부모를 가진 자식 프로세스와 같이 서로 관련 있는 IPC에 사용된다.

    named pip는 FIFO라 불리는 파일을 이용하여 서로 관련 없는 IPC에 사용된다.

     

    3) 소켓을 이용한 통신

    위에서 말한 전역변수, 파이프를 이용한 통신은 같은 컴퓨터 내에 있는 프로세스끼리의 IPC 종류였다.

    소켓을 이용한 통신은 서로 다른 컴퓨터에 있는 프로세스끼리 통신을 하는데 사용된다.

    서로 다른 컴퓨터에 있는 프로세스 간 통신은 네트워킹이라 하며 네트워킹 상황에서는 원격 프로시저 호출이나 소켓을 이용한다.

    통신하고자 하는 프로세스끼리 각자의 소켓을 연결하는 작업이 필요한데 이 작업을 바인딩(binding)이라 한다.

    바인딩 후, 소켓에 write하면 데이터가 전송되고 read하면 데이터를 받아올 수 있다.

    소켓을 이용한 통신은 동기화를 지원하고 각 프로세스가 소켓 하나만 가지고 있으년 양방향 통신이 가능하다.

    댓글

Designed by Tistory.