[운영체제] IPC

지니🧸·2023년 4월 7일
0

CS 저장소

목록 보기
11/48
post-custom-banner

🗽 IPC

Inter-process Communication

  • 프로세스끼리 직접적으로 대화하지 않음
    • 프로세스들이 서로 공간을 쉽게 접근하면 프로세스의 데이터/코드가 다른 프로세스에 의해 쉽게 바뀔 수 있음
  • 프로세스끼리 통신이 필요한 이유
    • 성능을 높이기 위해
      • 어떤 로직을 하나의 프로세스로만 수행하는 것보다 여러 프로세스가 수행해서 빠른 성능
      • 이 로직을 수행하는 과정에서 필요한 데이터를 서로 공유해야 함

🗽 IPC의 종류

  • (1) File 사용
    • 텍스트 파일 등을 통해 데이터를 주고 받는 것
    • 단점:
      • 실시간으로 직접 원하는 프로세스에 데이터 전달 어려움
      • 디스크에서 데이터 파일을 읽고, 프로세스에 적재되는 과정에서 컨텍스트 스위칭, 인터럽트 등 여러 일을 처리해야 함
  • (2) 파이프
    • 단방향 통신
    • 부모 프로세스가 자식 프로세스에게 일방적으로 통신
  • (3) 메시지 큐
    • FIFO를 따른 데이터 전송
    • 어떤 프로세스 간이라도 통신 가능 (양방향)
    • 커널에서 데이터 수/송신 컨트롤 가능 > 별도의 동기화 로직 필요 없음
    • 공유 메모리보다는 속도가 느림
      • 큐에 데이터를 넣고 나오는 과정에서 오버헤드 가능성
  • (4) 공유 메모리
    • 커널 공간에 메모리 공간을 만듬 > 해당 공간을 변수처럼 사용
      • 리눅스에서 프로세스 공간이 완전히 분리되어있지만 모든 프로세스가 커널 공간은 공유함
      • 그래서 커널 공간에서 프로세스간 통신
    • 메모리 주소를 변수처럼 접근하여 사용
  • (5) 시그널
    • 커널/프로세스에서 다른 프로세스에 이벤트가 발생되었는지 알려줌
    • 프로세스 관련 코드에 관련 시그널 핸들 등록 > 해당 시그널 처리를 실행
    • 매커니즘
  • (6) 소켓 (네트워크 통신 기술)
    • 프로세스는 포트 번호를 이용하여 통신하려는 상대 프로세스의 소켓 찾음
    • 프로세스의 위치에 독립적
    • local/remote 모두에서 사용 가능
    • 양방향 통신

🗽 Shared Memory를 사용할 때 유의사항

Shared Memory

  • IPC 기법의 종류
  • IPC 중 가장 빠른 수행속도:
    • 하나의 메모리를 공유해서 접근
      • 데이터 복사와 같은 불필요한 오버헤드 발생 X
  • 커널이 관리함
  • PC를 재부팅하거나 직접 삭제하지 않는 한, 공유 메모리를 사용하는 모드 프로세스가 종료되어도 공간 유지됨

유의사항:

  1. 동기화
  • 여러 프로세스가 하나의 메모리 공간에 접근
  • 데이터 훼손/경쟁 상태를 방지하기 위해 동기화 잘해야 함
  • 세마포어 등으로 해결
  1. 데이터 일관성
  • 공유 메모리는 자료구조도 공유할 수 있음
  • 공유 메모리에 접근하는 모든 프로세스에게 같은 데이터임을 확실히 해야함
  • 여러 프로세스가 같은 데이터를 수정하고 있는 경우 특히 유의
  1. 보안
  • 여러 프로세스가 같은 메모리 공간에 접근 가능
  • 승인된 프로세스만이 공유메모리에 접근할 수 있도록
  1. 확장성
  • 공유 메모리는 빠른 통신이 가능하지만 확장성은 떨어짐
  • 규모가 큰 애플리케이션은 메시지큐, 소켓 등을 고려해야 함

🗽 메시지 큐를 단방향으로 구현하기

메시지 큐는 어떤 프로세스 간이라도 통신이 가능하여 양방향이지만, 단방향으로 구현할 수 있다.

  1. msgget() 시스템 콜을 사용해 메시지 큐 생성: 프로세스들은 메시지 큐의 고유번호를 이용해 메시지 큐에 접근

  2. msgsnd() 시스템 콜을 이용해 메시지 큐에 메시지 송신:
    msgsnd()에는 메시지 큐 identifier, 메시지 포인터, 메시지 크기, 그리고 메시지 종류를 담음

  3. msgrcv() 시스템 콜을 이용해 메시지 큐에서 메시지 수신:
    msgrcv()에는 메시지 큐 identifier, 수신한 메시지를 담을 버퍼에 대한 포인터, 수신할 수 있는 최대 메시지 크기, 메시지 종류, 그리고 플래그를 담음


참고:

profile
우당탕탕
post-custom-banner

0개의 댓글