System V IPC 대 POSIX IPC


84
  1. 의 차이점은 무엇입니까 System V IPC와는 POSIX IPC?
  2. 두 가지 표준이있는 이유는 무엇입니까?
  3. 사용할 IPC 기능을 결정하는 방법은 무엇입니까?

2
내가 posix 대신 sysv 메시지 대기열을 선택하게 된 한 가지 이유가 있습니다. posix 메시지 대기열에서는 mtype 별 메시지 전달 가능성이 지원되지 않습니다. 나는 한 블로그 .. 그것에 대해
takladev

라는 제목의 책에서 해방 2 판을 프로그래밍 리눅스커트 벽 , 페이지 382, 그것은 말했다 : System V IPC is well known and commonly used, but the Linux implementation of it is badly broken. 리눅스 개선 문제, 말해 누군가가 알고 있다면하시기 주소 사항이있는 경우, 나는 몰라. 오늘날 나는 Posix IPC 또는 System V IPC 와 비슷한 선택에 직면 하고 있으며, 저의 접근 방식은 다른 것보다 장점이 있기 때문에 어떤 유형의 IPC 프리미티브가 사용될 것인지 신중하게 이해하는 것입니다. 예를 들어, 프로세스가 갑작스럽게 죽을 수 있습니다.
eigenfield

답변:


106

둘 다 동일한 기본 도구 (세마포어, 공유 메모리 및 메시지 큐)를 가지고 있습니다. 이러한 도구에 대해 약간 다른 인터페이스를 제공하지만 기본 개념은 동일합니다. 주목할만한 차이점 중 하나는 POSIX가 Sys V가 제공하지 않는 메시지 대기열에 대한 몇 가지 알림 기능을 제공한다는 것입니다. (참조 mq_notify())

Sys V IPC는 오랫동안 사용되어 왔으며 몇 가지 실질적인 의미가 있습니다.

첫째, POSIX IPC는 덜 널리 구현됩니다. 나는 POSIX IPC를위한 파이썬 래퍼를 작성했고 그 문서는 내가 다양한 플랫폼에서 POSIX IPC 구현에 대해 알고있는 것을 나열합니다 .

해당 문서에 나열된 모든 플랫폼에서 Sys V IPC는 AFAIK를 완전히 구현 한 반면 POSIX IPC는 그렇지 않습니다.

두 번째 의미는 POSIX IPC가 Sys V IPC가 한동안 사용 된 후에 설계되었다는 것입니다. 따라서 POSIX API 설계자는 Sys V API의 강점과 약점을 배울 수있었습니다. 결과적으로 POSIX API는 IMO를 더 간단하고 사용하기 쉬우 며 Sys V API보다 권장합니다.

두 가지를 비교하기 위해 성능 테스트를 실행 한 적이 없습니다. 이전 API (Sys V)가 성능 조정에 더 많은 시간을 할애했을 것이라고 생각하지만, 이는 물론 실제 테스트를 대체 할 수없는 추측 일뿐입니다.

두 가지 표준이있는 이유는 POSIX가 Sys V 표준의 개선이라고 생각했기 때문에 표준을 만들었습니다. 그러나 모두가 POSIX IPC가 더 낫다는 데 동의한다면 많은 많은 프로그램이 여전히 Sys V IPC를 사용하고 있으며 모두 POSIX IPC로 이식하는 데 몇 년이 걸릴 것입니다. 실제로는 노력할 가치가 없으므로 내일부터 모든 새로운 코드가 POSIX IPC를 사용하더라도 Sys V IPC는 수년 동안 계속 유지 될 것입니다.

무엇을 하려는지에 대해 더 많이 알지 못하고 어떤 것을 사용해야하는지 말할 수는 없지만 여기에있는 답변은 스스로 결정할 수있는 충분한 정보를 제공해야합니다.


2
맨 페이지와 다른 기사가 강조 표시하지 않는 한 가지 중요한 차이점이 있습니다. 즉, sysv 메시지 대기열에는 mtype별로 메시지를 전달하는 개념이 있습니다 (posix msgq에는이 기능이 없습니다). 어떤 경우에는 이것은 중요한 디자인 요소가 될 수 있으며 내 경험을 인용하면 쇼 스토퍼로 판명되었습니다. 나는 그것에 대해 블로그올렸다 .
takladev

OpenGroup의 문서 이후 SysV IPC는 Issue 2부터 SUS의 일부 였고, Issue 7부터는 새로운 인터페이스였습니다. 실제로 하나는 더 오래 있었지만 둘 다 SUS의 일부이므로 둘 다 POSIX의 일부입니다.
Hibou57

23
  1. 가장 큰 차이점은 모든 POSIX IPC는 스레드로부터 안전하지만 대부분의 SysV IPC는 [ 1 ] 이 아니라는 것 입니다.
  2. 유닉스 전쟁 때문에 [ 2 ]. 단일 UNIX 사양 (SUS) [ 3 ], POSIX 일명 유닉스 기반 시스템에 인터페이스를 표준화하기 위해 만들어졌다.
  3. POSIX를 원할 것입니다. 전적으로 귀하의 요구 사항에 따라 다릅니다.

11

System V IPC는 이전 버전이고 POSIX IPC는 최신 버전입니다. 그러나 일부 측면에는 약간의 차이가 있습니다. 항상 Posix가 System V보다 나은 것은 아닙니다.

  1. Posix의 세마포어, 큐 및 공유 메모리에는 Ascii 문자열 이름이 있으며 System V에서는 정수로 제공됩니다.

  2. System V 세마포어는 프로세스가 종료되면 자동으로 해제되도록합니다 (semop SEM_UNDO 플래그). Posix에는 그런 것이 없습니다.

  3. Linux와 FreeBSD에서는 posix 큐의 큰 장점이 있습니다. mq_open에 의해 주어진 핸들러는 기본적으로 폴링 /에 폴링 / 선택 / kqueued 할 수있는 파일 디스크립터이기 때문입니다.


따라서 선택은 사용할 IPC 기본 유형에 따라 달라집니다 . Posix가 좋은 곳도 있지만 System V가 좋은 곳도 있습니다. 프로세스가 갑작스럽게 종료되고 세계의 어떤 API도 이러한 이벤트를 가로 챌 수없는 경우 IPC 프리미티브 가 중단 되거나 그로 인해 탐지됩니다. Posix가 가장 좋은 다양한 사용 사례가 있으며 System V가 문제를 잘 처리하는 다른 사용 사례가 있습니다.
eigenfield

-3
  • Systen V와 POSIX IPC는 서로 다르지만 동일한 구현과 관련이 있습니다.

"일반적으로 약어로 SysV (일반적으로"System Five "로 발음 됨)로 발음되는 Unix System V는 Unix 운영 체제의 최초 상용 버전 중 하나입니다. 원래 American Telephone & Telegraph (AT & T)에서 개발했습니다. 1983 년에 처음 출시되었습니다. "

-위키 백과

"POSIX 또는"Portable Operating System Interface [for Unix] "는 API (응용 프로그래밍 인터페이스)를 정의하기 위해 IEEE에서 지정한 관련 표준 제품군의 이름입니다."

-위키 백과

  • Systm V는 더 일찍 거기에있었습니다. POSIX는 IEEE의 표준화 이니셔티브에서 발전했습니다.

  • GNU / Linux는 partiallyPOSIX를 준수합니다. 사용할 OS는이 IPC를 사용하는 OS에 따라 다릅니다. 대부분의 공급 업체는 POSIX.

Unix 네트워크 프로그래밍 : Richard Stevens의 Interprocess Communications v. 2 는이 두 가지를 모두 잘 살펴 봅니다.

유닉스 네트워크 프로그래밍


5
질문에서 언급 한대로 Interprocess Communicaton에 대해 논의하지 않습니다.
Michael Rice
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.