Diferencias entre semáforos System V y Posix


¿Cuáles son las compensaciones entre el uso de un Sistema V y un semáforo Posix?

Author: corto, 2008-12-15

4 answers

De O'Reilly:

  • Una diferencia marcada entre el semáforo System V y POSIX implementaciones es que en el Sistema V usted puede controlar cuánto el semáforo el recuento puede aumentar o disminuir; mientras que en POSIX, el conteo de semáforos aumenta y disminuye en 1.
  • Los semáforos POSIX no permiten la manipulación de permisos de semáforos, mientras que los semáforos del Sistema V le permiten para cambiar los permisos de semáforos a un subconjunto de la original permiso.
  • La inicialización y creación de semáforos es atómica (del usuario perspectiva) en semáforos POSIX.
  • Desde una perspectiva de uso, los semáforos System V son torpes, mientras que POSIX los semáforos son simples
  • La escalabilidad de los semáforos POSIX (usando semáforos sin nombre) es mucho más alto que los semáforos del Sistema V. En un escenario usuario / cliente, donde cada usuario crea sus propias instancias de un servidor, sería mejor usar POSIX semáforos.
  • System V semáforos, al crear un objeto semáforo, crea una matriz de semáforos mientras que semáforos POSIX crea solo uno. Debido a esto característica, creación de semáforos (memoria huella-sabio) es más costoso en sistema V semáforos en comparación con POSIX semáforos.
  • Se ha dicho que el rendimiento del semáforo POSIX es mejor que Semáforos basados en el sistema V.
  • Los semáforos POSIX proporcionan un mecanismo para semáforos de todo el proceso que semáforos de todo el sistema. Por lo tanto, si un desarrollador se olvida de cerrar el semáforo, al salir del proceso el semáforo está limpio. En simple términos, semáforos POSIX proporcionan una mecanismo para no persistentes semáforos.
 48
Author: ezkl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-15 13:36:44

Dos problemas principales con los semáforos compartidos/nombrados POSIX utilizados en procesos separados (no subprocesos): Los semáforos POSIX no proporcionan ningún mecanismo para activar un proceso en espera cuando un proceso diferente muere mientras mantiene un bloqueo de semáforo. Esta falta de limpieza puede llevar a semáforos zombis que causarán cualquier otro proceso o posterior que intente usarlos para bloquearlos. Tampoco hay forma POSIX de listar los semáforos en el sistema operativo para intentar identificarlos y limpiarlos. La sección POSIX en SysV IPC especifica las herramientas ipcs e ipcrm para listar y manipular los recursos globales de SysV IPC. No se especifican tales herramientas o mecanismos para POSIX IPC, aunque en Linux estos recursos a menudo se pueden encontrar bajo / shm. Esto significa que una señal de apagado al proceso equivocado en el momento equivocado puede bloquear todo un sistema de procesos interactuantes hasta el reinicio.

Otra desventaja es el uso de la semántica de archivos para semáforos POSIX. La implicación es que puede haber más de uno compartido semáforo con el mismo nombre, pero en diferentes estados. Por ejemplo, un proceso llama a sem_open, luego a sem_unlink antes de sem_close. Este proceso todavía puede utilizar el semáforo al igual que desvincular un archivo abierto antes de cerrarlo. El proceso 2 llama a sem_open en el mismo semáforo entre las llamadas sem_unlink y sem_close del proceso 1, y (según la documentación) obtiene un semáforo nuevo con el mismo nombre, pero en un estado diferente al proceso 1. Dos semáforos compartidos con el mismo nombre operando independientemente derrota el propósito de los semáforos compartidos.

La limitación anterior hace que los semáforos compartidos POSIX sean inutilizables en un sistema del mundo real sin una garantía de que las señales no localizables nunca se puedan enviar. Limitación dos se puede mitigar mediante una codificación cuidadosa, asumiendo el control sobre todo el código que utilizará un semáforo dado. Francamente, es más que un poco sorprendente que lo hicieron en el estándar como son.

 22
Author: iggie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-24 07:41:50

Sé que esto es viejo, pero para el beneficio de aquellos que todavía leen esta cortesía de Google, la razón #1 que encuentro para usar semáforos System V sobre semáforos POSIX (a nivel de sistema) es la capacidad de adquirir el recurso semáforo de una manera que es devuelta automáticamente por el núcleo SIN IMPORTAR CÓMO SALGA EL PROCESO.

Estoy de acuerdo en que las operaciones de semáforos múltiples (atómicos) rara vez se utilizan (aunque pueden ser útiles durante la puesta en escena), y que la interfaz del Sistema V es extraña, pero simplemente no hay forma de lograr de manera confiable la misma semántica de limpieza con los semáforos POSIX.

 8
Author: Peter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-11 22:34:52

Me pregunto qué hace que la gente diseñe malas API como System V Semáforos! Uneless usted tiene razones muy fuertes para ir con semáforos System V (tales como operaciones atómicas con múltiples incrementos-decrementos en un solo paso), usted debe seguir con POSIX llamado semáforos.

El artículo enlazado discute lo que está mal y no es intuitivo con los semáforos System V.

 0
Author: Jaywalker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-08-04 06:49:48