Подтвердить что ты не робот

Различия между семафорами System V и Posix

Каковы компромиссы между использованием системы V и семафора Posix?

4b9b3361

Ответ 1

От O'Reilly:

  • Одна заметная разница между семафором System V и POSIX реализация заключается в том, что в системе V вы можете контролировать, насколько семафор счет может быть увеличен или уменьшен; тогда как в POSIX счет семафора увеличивается и уменьшается на 1.
  • Семафоры POSIX не позволяют манипулировать разрешениями семафора, тогда как семафоры System V позволяют вам изменить разрешения семафоры к подмножеству оригинала разрешение.
  • Инициализация и создание семафоров является атомарной (из пользовательской перспектива) в семафорах POSIX.
  • С точки зрения использования семафоры System V неуклюжи, а POSIX семафоры прямолинейны
  • Масштабируемость семафоров POSIX (с использованием неназванных семафоров) выше семафоров System V. В сценарий пользователя/клиента, где каждый пользователь создает свои собственные экземпляры сервера, было бы лучше использовать POSIX семафоры.
  • Семафоры System V при создании объекта семафора создают массив семафоры, тогда как семафоры POSIX создать только один. Из-за этого функция, создание семафора (память с точки зрения размера) в Системе V семафоров по сравнению с POSIX семафоры.
  • Было сказано, что производительность семафора POSIX лучше, чем Семафоры на основе System V.
  • Семафоры POSIX обеспечивают механизм для семафоров всей системы, а чем семафоры всей системы. Итак, если разработчик забывает закрыть семафор, при выходе из семафор очищается. В простом термины, семафоры POSIX обеспечивают механизм непостоянного семафоры.

Ответ 2

Две основные проблемы с POSIX разделяемыми/названными семафорами, используемыми в отдельных процессах (а не в потоках): Семафоры POSIX не обеспечивают никакого механизма для пробуждения процесса ожидания, когда другой процесс умирает, удерживая блокировку семафора. Это отсутствие очистки может привести к семафорам зомби, которые вызовут любой другой или последующий процесс, который пытается использовать их в тупике. Также нет способа POSIX перечислять семафоры в ОС, чтобы попытаться идентифицировать и очистить их. В разделе POSIX на SysV IPC указываются инструменты ipcs и ipcrm для отображения и управления глобальными ресурсами IPC SysV. Для POSIX IPC таких инструментов или даже механизмов не указано, хотя в Linux эти ресурсы часто можно найти в /shm. Это означает, что сигнал KILL неправильного процесса в неподходящее время может затормозить всю систему взаимодействующих процессов до перезагрузки.

Другим недостатком является использование семантики файлов для семафоров POSIX. Подразумевается, что может быть более одного семафора с одним и тем же именем, но в разных состояниях. Например, процесс вызывает sem_open, а затем sem_unlink до sem_close. Этот процесс все еще может использовать семафор так же, как отключение открытого файла перед его закрытием. Процесс 2 вызывает sem_open в том же семафоре между вызовами sem_unlink и sem_close процесса 1 и (согласно документации) получает новый семафор с тем же именем, но в другом состоянии, чем процесс 1. Два общих семафора с тем же именем независимо от того, работает ли он совместно с разделяемыми семафорами.

Ограничение, указанное выше, делает общие семафоры POSIX непригодными для использования в реальной системе без гарантии того, что неуправляемые сигналы никогда не будут отправлены. Ограничение два может быть смягчено путем тщательного кодирования, предполагая контроль над всем кодом, который будет использовать данный семафор. Честно говоря, его более чем удивительно, что они превратили его в стандарт, как есть.

Ответ 3

Я знаю, что это старо, но для тех, кто все еще читает эту любезность Google, причина №1, которую я нахожу использовать семафоры System V над семафорами POSIX (системного уровня), - это способность приобретать ресурс семафора в способ, который автоматически возвращается ядром NO MATTER КАК ПРОЦЕСС ВЫХОДИТ.

Я согласен, что многократные (атомные) операции семафоров редко используются (хотя они могут быть полезны во время стадии), и что интерфейс System V является странным, но просто нет надежного достижения одинаковой семантики очистки с помощью Семафоры POSIX.

Ответ 4

Интересно, что заставляет людей создавать плохие API, такие как System V Semaphores! Бесполезно, что у вас есть очень серьезные причины для использования семафоров System V (таких как атомарные операции с несколькими приращениями-декрементами за один шаг), вы должны придерживаться POSIX семафоров.

В связанной статье обсуждается, что неправильно и неинтуитивно с Семафорами System V.