POSIX IPC - Introduction

Merry Berry·2024년 2월 14일
0

System Programming

목록 보기
1/2
post-thumbnail

1. IPC object name

SUSv3에 의하면 POSIX IPC 객체의 이름이 슬래시(/)로 시작("/example")하도록 하는 것이 이식성이 있다. 메시지 큐와 공유 메모리 이름의 길이는 최대 NAME_MAX이고, 세마포어는 "/sem"으로 시작하므로 이름의 최대 길이가 NAME_MAX-4이다.

2. IPC object creation & open

각 POSIX IPC 객체를 생성하는 mq_open(), sem_open(), shm_open() 함수는 open() 시스템 콜과 동일하게 사용된다. 이 함수들은 IPC 객체를 생성한 후 handle을 리턴한다. 이 handle은 메시지 큐에서는 mqd_t, 세마포어에서는 sem_t가 되고, 공유 메모리에서는 파일 디스크립터이다.

3. IPC object close

각 POSIX IPC마다 객체의 사용을 마침을 의미하는 close 호출이 존재하는데, 이는 객체와 관련된 자원을 할당 해제한다. POSIX 공유 메모리 객체의 경우 munmap()의 호출로 종료된다. 또한 프로세스가 종료하거나 exec()를 호출했을 경우 IPC 객체는 자동으로 종료된다.

4. IPC object permissions

IPC 객체의 권한은 실행 권한(x, 아무런 의미 없음)만 제외하면 파일과 동일한 의미를 갖는다. 커널 2.6.19 이후로 POSIX 공유 메모리와 named 세마포어에 한해 ACL을 지원한다.

5. IPC object delection & persistence

각 POSIX IPC 객체는 SYSV IPC와 달리 참조 카운트(reference count)를 갖는다. POSIX IPC 객체를 삭제할 때 unlink 호출을 사용하는데, 이때 참조 카운트가 0이 될 때까지 기다리다가 해당 객체를 삭제한다. 참조 카운트가 0이 아니라는 것은 프로세스가 해당 객체를 open했다는 것이다. 0이 되기 위해서는 프로세스가 종료되거나, close, munmap() 호출을 사용해야 한다.
SYSV IPC와 마찬가지로 POSIX IPC 객체는 unlink되거나 시스템이 종료될 때까지 계속 존재하는 커널 유지기능을 갖는다.

6. Build program using POSIX IPC

POSIX IPC를 사용한 프로그램을 컴파일 할 때 -lrt 옵션을 추가하여 실시간 라이브러리인 librt와 링크해야 한다.

7. System V IPC vs. POSIX IPC

  • POSIX IPC 인터페이스는 SYSV IPC 인터페이스보다 간단하다.
  • POSIX IPC 모델은 유닉스 파일 모델과 일관성이 있다(open, close, unlink).
  • POSIX IPC 객체는 참조 카운트를 갖는다.
  • SYSV IPC는 SUSv3의 명시되었으나, POSIX IPC는 SUSv3에서 필수적이지 않다. 따라서 특정 유닉스 구현에 따라 POSIX IPC를 지원하지 않을 수 있다.
  • ipcs, ipcrm과 달리 POSIX IPC 객체 정보를 출력하는 명령은 SUSv3에 명시되어 있지 않다.

0개의 댓글

관련 채용 정보