본문 바로가기

Study/Computer Science

[OS] 프로세스간 커뮤니케이션 - IPC(InterProcess Communication)

※ 복습을 목적으로 작성된 포스팅입니다.

틀린 내용이 있을 경우 피드백 환영합니다.

 

출처: 패스트 캠퍼스 '컴퓨터 공학 전공 필수 올인원 패키지 Online.' - 운영체제 과목

 

 

프로세스와 스레드를 이해하고 있다는 전제 하에 작성하였습니다.

 

프로세스(Process)

  • 실행 중인 응용 프로그램
  • 메모리 구조를 그대로 가지고 있음
  • CPU 자원을 할당 받아 프로그램이 실행되고 있는 상태

프로세스 간 커뮤니케이션 가능한가?

  • 원칙적으로 불가능함
  • 프로세스 간 메모리 영역을 공유하지 않기 때문
  • 그 이유는?

    서로의 공간을 접근할 수 있다면 프로세스의 데이터/코드가 바뀔 수 있기 때문에 이를 원칙적으로 접근할 수 없게 함

그렇다면 프로세스 간 커뮤니케이션이 필요한가?

  • 그렇다.

    - 여러 프로세스를 만들어 동시 실행함으로 실행 속도를 높여 성능을 높일 수 있기 때문

    - 이때, 프로세스 간 상태 확인 및 데이터 송수신이 필요함

  • 예시를 들자면

    CPU의 core는 여러 개 존재하며, 각 core에서 동시에 실행한 뒤 최종 작업을 위해 특정 Process에서 모아 결과를 처리해야 함
    이때 프로세스 간 통신이 필요함

    정리하자면, 프로세스 간 커뮤니케이션(통신)은 각 처리를 병렬로 처리해 통합함으로 생산성을 높이기 위해 필요함

IPC(InterProcess Communication)

  • 프로새스 간 통신 방법을 제공함

  • 간단하게 생각해보자. 프로세스 간 통신을 통해 1부터 10,000까지의 수를 더해보자.

    - fork() 함수로 10개의 프로세스를 만들어, 각 프로세스에서 1천 단위로 더하기를 수행한 다음 각 프로세스의 결과 값을 합하면 더욱 빠른 처리가 가능함

    - 즉, 계산을 병렬처리함으로 수행시간을 단축시킨 것이며, 각 프로세스가 더한 값을 수집해야 하기에 프로세스 간 통신이 필요함

  • IPC 기법 종류 [ (2)번 부터는 모두 커널 공간을 사용함 ]

    (1) file 사용  :  실시간 불가, 시간이 오래 걸림

    (2) Message Queue

    (3) Shared Memory

    (4) Pipe

    (5) Signal

    (6) Semaphore

    (7) Socket
fork() 시스템콜이란?
 - fork() 함수로 프로세스 자신을 복사해 새로운 프로세스를 만듦
 - 부모 프로세스 : fork( ) 호출
 - 자식 프로세스 : fork( ) 호출로 인해 생성된 프로세스
예시. 클라이언트와 서버
- 웹 서버는 요청 발생 시, 그에 맞는 응답을 클라이언트에 제공하는 프로그램
- 새로운 사용자 요청이 올 때마다, fork( ) 함수로 새로운 프로세스를 만들고, 각 사용자 요청에 즉시 대응
- CPU 병렬처리가 가능하다면, 더 빠른 대응이 가능하며
- 각 프로세스 제어 및 상태 정보 교환을 위해 프로세스 간 통신 필요

IPC (1) 파일을 사용한 커뮤니케이션

  • 저장매체는 공유가 가능하다는 특징을 살림

  • 다른 프로세스에 전달할 내용을 파일에 작성하고, 다른 프로세스는 해당 파일을 읽음

  • 허나 CPU에서 저장매체에 접근할 때에를 생각해보면, 굉장히 오랜 시간이 걸림.
    이 경우 해당 프로세스를 잠시 중단한 상태에서 다른 프로세스를 처리하고 응답을 받기까지 대기하기 때문임.

  • 즉, 이는 실시간으로 원하는 프로세스에 데이터 전달이 어려워 수행 시간이 느리다는 큰 단점이 있음

프로세스의 예시 : 리눅스

  • CPU Protection rings와 연관됨

    - 사용자 모드 : 응용 프로그램이 CPU를 사용할 때 사용

    - 커널 모드 : OS가 CPU를 사용할 때 사용

  • 1 Process = 4GB

    - 0 ~ 3GB : User space  =>  작성한 프로그램 수행

    - 4GB : Kernel space     => 운영체제 코드 작동

  • 리눅스에서 프로세스 간의 공간은 완전 분리되어 있어 사용자 모드에서 커널 공간 접근이 불가함

  • 그렇다면 IPC는 어떻게 가능한가?

 

  • 커널 공간을 공유해 프로세스 간 통신이 가능하도록 함

    - 0 ~ 3GB (User space)는 각 프로세스에서 관리

    - 4GB(Kernel space)는 메모리 상에서 공유함으로 프로세스 간 통신을 가능하게 함

정리

  • 여러 프로세스 동시 실행을 통한 성능 개선

  • 복잡한 프로그램을 위해서는 프로세스 간 통신 필요

  • 프로세스 간 공간은 완전 분리되어 있음

  • 프로세스 간 통신을 위해 특별한 기법 필요

    - IPC (InterProcess Communitaion)

  • 대부분의 IPC 기법은 커널 공간을 활용하며, 이유는 커널 공간은 공유되기 때문임