1 분 소요

5. IPC 시스템 사례 - UNIX의 공유 메모리 함수

Shared memory IPC

공유 메모리 세그먼트 생성, id 반환

segment id = shmget(IPC_PRIVATE, size, S_IRUSR | S_IWUSR);

id가 지정하는 공유 메모리를 프로세스에 연결(attach)

shared_memory = (char *) shmat(id, NULL, 0);

공유 메모리 세그먼트에 읽고 쓰기(배열 read/write와 동일)

sprintf(shared_memory, "Writing to shared memory");

공유 메모리를 프로세스에서 제거(detach)

shmdt(shared_memory);

Windows의 IPC - Local Procedure Calls

message passing - port(메일박스와 같음)를 경유

  • Advanced Local Procedure Call(ALPC) 이용

image

6. 클라이언트-서버 시스템에서의 통신

Sockets

A socket

  • 응용 프로그램 간에 통신이 연결되는 종단점
  • IP주소와 포트번호에 의해서 식별됨

    • IP 주소는 시스템을 가리킴
    • 포트 번호는 해당 시스템의 프로세스와 연결됨

image

Remote Procedure Calls(RPC)

네트워크에 연결되어 있는 시스템의 프로세스들 간에 procedure calls을 추상화한 것으로 IPC기반으로 구현됨

stub

서버의 프로시저에 대한 원격 호출을 대행해주는 프로시저

image

  • The client-side stub - 원격서버의 포트를 찾고, 매개변수를 중립적 표현 방식으로 정돈

  • The server-side stub - 메시지 수신, 정돈된 메시지 해제, 서버에서 요청한 프로시저 호출하여 수행하여 결과 전송

Pips

두개의 프로세스가 서로 통신이 가능하도록 전달자 역할 수행

고려사항

  • 통신 방향 : 단방향 or 양방향
  • 양방향 통신의 경우 : 반이중 or 전이중
  • 통신하는 두 프로세스 간에 특별한 관계(예: 부모-자식)필요 여부
  • 네트워크 통신 가능 여부

일반 파이프(ordinary pipe)

  • 생성한 프로세스만 접근 가능
  • 부모 프로세스가 파이프를 생성하고, 자식 프로세스를 생성하여 파이프를 사용하여 자식 프로세스와 통신

지명 파이프(named pipe)

  • 파이프 특성을 가지며, 보통의 파일처럼 존재
  • 지명 파이프를 사용하는 프로세스들은 부모-자식 관계가 필요하지 않음

일반 Pipes(Windows의 anonymous pipe)

생산자-소비자 형태로 두 프로세스 간의 통신을 허용

  • Producer는 한쪽 끝으로 쓰기를 함
  • Consumer는 다른쪽 끝에서 일기를 함

일반 pipe는 단방향 통신만 가능 통신하는 두 프로세스는 부모-자식 관계가 필요함

image

지명 Pipes

  • 일반 pipe보다 강력한 기능 제공
  • 지명 pipe는 양방향 통신 가능
  • 부모-자식 관계가 필요 없음
  • 여러 프로세스들이 지명 pipe를 사용하여 통신 가능
  • UNIX에서는 FIFO 특수 파일로 나타남
  • Windows는 full-duplex 양방향 전송 가능

태그: ,

카테고리:

업데이트:

댓글남기기