Pregunta

¿Cuáles son las ventajas y desventajas entre el uso de un sistema de V y un semáforo Posix?

¿Fue útil?

Solución

Desde O 'Reilly :

  
      
  • Una marcada diferencia entre el Sistema V y semáforos POSIX   implementaciones es que en System V   se puede controlar la cantidad del semáforo   recuento puede ser aumentado o disminuido;   mientras que en POSIX, el recuento de semáforos   aumenta y disminuye por 1.
  •   semáforos
  • POSIX no permiten la manipulación de los permisos de semáforos,   mientras que System V semáforos que permiten   para cambiar los permisos de   semáforos a un subconjunto del original   permiso.
  •   
  • La inicialización y la creación de semáforos es atómica (desde el usuario de   perspectiva) en semáforos POSIX.
  •   
  • Desde una perspectiva de uso, System V semáforos son torpes, mientras POSIX   semáforos son recta de avance
  •   
  • La escalabilidad de semáforos POSIX (utilizando semáforos sin nombre) es mucho   más alto que los semáforos System V. en un   escenario de usuario / cliente, donde cada usuario   crea sus propias instancias de un servidor,   sería mejor usar POSIX   semáforos.
  •   semáforos
  • Sistema V, cuando se crea un objeto semáforo, crea una matriz de   semáforos, mientras que los semáforos POSIX   crear uno solo. Debido a esto   función, la creación de semáforos (memoria   huella-wise) es más costoso en el Sistema   semáforos V cuando se compara con POSIX   semáforos.
  •   
  • Se ha dicho que el rendimiento POSIX semáforo es mejor que   semáforos del sistema basado en V.
  •   
  • semáforos POSIX proporcionan un mecanismo para semáforos en todo el proceso en lugar   de semáforos de todo el sistema. Por lo tanto, si una   desarrollador olvida de cerrar la   semáforo, a la salida del proceso de   semáforo se limpia. en simples   términos, semáforos POSIX proporcionan una   mecanismo para no persistente   semáforos.
  •   

Otros consejos

Los dos problemas principales con POSIX compartieron / semáforos con nombre utilizados en procesos separados (no hilos): semáforos POSIX proporcionan ningún mecanismo para despertar a un proceso de espera cuando un proceso diferente muere mientras se mantiene un bloqueo de semáforo. Esta falta de limpieza puede conducir a los semáforos de zombies que hará que cualquier otra o subsiguiente proceso que intenta utilizarlos a un punto muerto. Tampoco hay manera de POSIX de la inclusión de los semáforos en el sistema operativo para tratar de identificar y limpiarlos. La sección POSIX en SysV IPC sí especifica ipcs y herramientas ipcrm para mostrar y manipular los recursos globales SysV IPC. Ninguna de estas herramientas o incluso mecanismos se especifican para POSIX IPC, aunque en Linux a menudo se pueden encontrar estos recursos en / SHM. Esto significa que una señal KILL al proceso equivocado en el momento equivocado puede interbloqueos todo un sistema de procesos de interacción hasta el reinicio.

Otra desventaja es el uso de la semántica de archivos para los semáforos POSIX. La implicación es que no puede haber más de un semáforo compartida con el mismo nombre, pero en diferentes estados. Por ejemplo un proceso llama sem_open, a continuación, antes de sem_unlink sem_close. Este proceso todavía se puede utilizar el semáforo al igual que desvincular un archivo abierto antes de cerrarlo. Proceso 2 sem_open llamadas en el mismo semáforo entre las llamadas sem_unlink y sem_close de proceso 1, y (de acuerdo a la documentación) para crear una nueva marca de semáforos con el mismo nombre, pero en un estado diferente de proceso 1. Dos semáforos compartidos con el mismo nombre operando de forma independiente en contra del propósito de semáforos compartidos.

Limitación uno encima hace POSIX semáforos compartida utilizables en un sistema en el mundo real sin una garantía de que las señales Uncatchable nunca pueden ser enviadas. Limitación dos puede ser mitigado mediante la codificación cuidado, asumiendo el control sobre todo el código que va a utilizar un semáforo dado. Francamente, su más que un poco sorprendente que la convirtió en el estándar como son.

Sé que esto es viejo, sino para el beneficio de los que aún leyendo esto cortesía de Google, la razón # 1 que encuentro a usar semáforos System V sobre POSIX (a nivel de sistema) semáforos es la capacidad de adquirir el recurso de semáforos en de manera que se devuelve automáticamente por el núcleo no importa cómo el proceso sale.

Estoy de acuerdo que el múltiple (atómicas) operaciones de los semáforos se utilizan rara vez (aunque pueden ser útiles durante la puesta en escena), y que la interfaz del sistema V es extraño, pero simplemente no hay forma de conseguir de forma fiable la misma semántica de limpieza con semáforos POSIX.

Me pregunto lo que hace que la gente diseño malos API de System V como semáforos ! Uneless usted tiene razones muy fuertes para ir con los semáforos de System V (tales como operaciones atómicas con múltiples incremento-decremento en un solo paso), usted debe pegarse con semáforos POSIX con nombre.

El artículo enlazado analiza lo que está mal y no intuitiva con System V. Los semáforos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top