문제

시스템 V와 POSIX 세마포어 사용 사이의 상충 관계는 무엇입니까?

도움이 되었습니까?

해결책

에서 오라일리:

  • System V와 Posix Semaphore 구현의 현저한 차이점 중 하나는 시스템 V에서 세마포어 수가 증가하거나 감소 할 수있는 양을 제어 할 수 있다는 것입니다. POSIX에서는 세마포어 수가 증가하고 감소합니다.
  • Posix 세마포어는 세마포어 권한을 조작 할 수 없으며 System v Semaphores는 세마포어 권한을 원래 권한의 하위 집합으로 변경할 수 있습니다.
  • semaphores의 초기화 및 생성은 Posix semaphores에서 원자 (사용자의 관점에서)입니다.
  • 사용 관점에서, 시스템 v 세마포어는 서투르고, posix semaphores는 똑바로
  • Posix semaphores (이름이없는 세마포어 사용)의 확장 성은 System v semaphores보다 훨씬 높습니다. 각 사용자가 자신의 서버 인스턴스를 작성하는 사용자/클라이언트 시나리오에서는 POSIX 세마포어를 사용하는 것이 좋습니다.
  • System v Semaphores는 세마포어 객체를 만들 때 세마포어 배열을 생성하는 반면 Posix semaphores는 하나만 만듭니다. 이 기능으로 인해 Semaphore Creation (메모리 풋 프린트 별)은 Posix Semaphores와 비교할 때 System v Semaphores에서 비용이 많이 듭니다.
  • POSIX 세마포어 성능은 시스템 V 기반 세마포어보다 낫다고합니다.
  • Posix semaphores는 시스템 전체의 세마포어가 아닌 프로세스 전체의 세마포어에 대한 메커니즘을 제공합니다. 따라서 개발자가 세마포어를 닫는 것을 잊어 버리면 프로세스 출구에서 세마포어가 정리됩니다. 간단히 말해서, posix semaphores는 비 연개 세미 포어에 대한 메커니즘을 제공합니다.

다른 팁

POSIX 공유/명명 된 세마 파어의 두 가지 주요 문제 (스레드가 아님) : POSIX Semaphores는 세마포어 잠금 장치를 잡고있는 동안 다른 프로세스가 죽을 때 대기 프로세스를 깨울 수있는 메커니즘을 제공하지 않습니다. 이러한 정리 부족은 좀비 세마포어로 이어질 수 있으며, 이는 교착 상태에 사용하려는 다른 또는 후속 프로세스를 유발할 수 있습니다. OS에 세마포어를 나열하여 식별하고 청소하려고 시도하는 POSIX 방법도 없습니다. SYSV IPC의 POSIX 섹션은 IPC 및 IPCRM 도구를 지정하여 글로벌 SYSV IPC 리소스를 나열하고 조작합니다. POSIX IPC에는 이러한 도구 나 메커니즘이 지정되지 않지만 Linux에서는 이러한 리소스가 종종 /shm에서 찾을 수 있습니다. 이는 잘못된 시간에 잘못된 프로세스에 대한 킬 신호가 재부팅 될 때까지 상호 작용 프로세스의 전체 시스템을 교착시킬 수 있음을 의미합니다.

또 다른 단점은 Posix semaphores에 파일 의미론을 사용하는 것입니다. 의미는 동일한 이름이지만 다른 상태에 하나 이상의 공유 세마포어가있을 수 있다는 의미입니다. 예를 들어 프로세스는 SEM_OPEN을 호출 한 다음 SEM_CLOSE 전에 SEM_UNLINK를 호출합니다. 이 프로세스는 여전히 파일을 닫기 전에 열린 파일을 끊지 않는 것처럼 세마포어를 사용할 수 있습니다. Process 2는 SEM_UNLINK와 SEM_CLOSE CONSS 사이의 SEMAPORE에서 SEM_OPEN을 프로세스 1의 호출로 호출하고 (문서에 따라) 동일한 이름을 가진 새로운 세마포어를 가져옵니다. 그러나 프로세스와 다른 상태 1. 동일한 이름을 가진 두 개의 공유 세미 포어가됩니다. 운영은 독립적으로 공유 세마포어의 목적을 물리칩니다.

위의 한계는 POSIX 공유 세마포어를 실제 시스템에서 사용할 수 없게 만들 수 없습니다. 주어진 세마포어를 사용하는 모든 코드를 제어한다고 가정하면 신중한 코딩으로 제한 2를 완화 할 수 있습니다. 솔직히 말해서, 그들은 약간 놀랍게도 그들이 표준으로 표준으로 만들었습니다.

나는 이것이 오래되었음을 알고 있지만, Google 의이 예의를 읽고있는 사람들의 이점을 위해 Posix (System Level) Semaphores를 통해 System v Semaphores를 사용하는 것이 가장 좋은 이유는 세마포어 자원을 얻는 방식으로서 프로세스가 어떻게 종료하든 커널에 의해 자동으로 반환됩니다.

다중 (원자) 세마포어 작업은 거의 사용되지 않으며 (스테이징 중에 유용 할 수는 있지만) System V 인터페이스는 기괴하지만 Posix 세미 포어와 동일한 청소 의미를 안정적으로 달성 할 수있는 방법은 없습니다.

나는 사람들이 무엇을 만드는지 궁금합니다 BAD API와 같은 시스템 v 세마포어를 디자인하십시오! 무의식적으로는 시스템 v 세마포어 (예 : 한 단계에서 여러 증가한 원자 연산)와 함께 가야 할 이유가 매우 강력합니다. Semaphores라는 POSIX를 고수해야합니다.

링크 된 기사는 무엇이 잘못되었는지에 대해 설명합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top