Domanda

Quali sono i trade-off tra l'utilizzo di un sistema di V e un semaforo Posix?

È stato utile?

Soluzione

O 'Reilly :

  
      
  • Per una marcata differenza tra il Sistema V e POSIX semaforo   implementazioni è che in System V   si può controllare quanto il semaforo   conteggio può essere aumentata o diminuita;   mentre nel POSIX, il conteggio del semaforo   è aumentato e diminuito di 1.
  •   semafori
  • POSIX non consentono la manipolazione dei permessi semaforo,   considerando che il sistema V semafori consentono   per cambiare i permessi di   semafori per un sottoinsieme di quella originale   l'autorizzazione.
  •   
  • L'inizializzazione e la creazione di semafori è atomico (da parte dell'utente del   prospettiva) in semafori POSIX.
  •   
  • Dal punto di vista di utilizzo, System V semafori sono maldestro, mentre POSIX   semafori sono straight-forward
  •   
  • La scalabilità di semafori POSIX (usando semafori senza nome) è molto   superiore semafori System V. In un   Scenario utente / cliente, in cui ogni utente   crea le proprie istanze di un server,   sarebbe meglio usare POSIX   semafori.
  •   semafori
  • System V, quando si crea un oggetto semaforo, crea una matrice di   semafori, mentre i semafori POSIX   creare uno solo. A causa di ciò   caratteristica, la creazione del semaforo (memoria   impronta-saggio) è più costoso in System   V semafori quando rispetto a POSIX   semafori.
  •   
  • E 'stato detto che la performance POSIX semaforo è meglio di   semafori sistema V-based.
  •   
  • semafori POSIX forniscono un meccanismo per semafori lavorati larghezza piuttosto   di semafori a livello di sistema. Quindi, se un   sviluppatore dimentica di chiudere la   semaforo, all'uscita del processo   semaforo è ripulito. in semplice   termini, semafori POSIX prevedono la   meccanismo non persistente   semafori.
  •   

Altri suggerimenti

Due grossi problemi con POSIX condiviso / semafori denominati utilizzati nei processi separati (non thread): semafori POSIX forniscono alcun meccanismo per svegliare il processo di attesa quando un processo diverso muore mentre mantiene un blocco semaforo. Questa mancanza di pulizia può portare a semafori zombie che provocano alcun altro o successivo processo che cerca di usarli per deadlock. V'è anche un modo POSIX di elencare i semafori nel sistema operativo per tentare di identificare e alla loro pulizia. La sezione POSIX su SysV IPC fa precisare le ipcs e gli strumenti ipcrm per elencare e manipolare globali risorse SysV IPC. Nessuna di tali strumenti o anche meccanismi sono specificati per POSIX IPC, anche se su Linux queste risorse si trovano spesso sotto / shm. Ciò significa che un segnale KILL al processo sbagliato al momento sbagliato può deadlock un intero sistema di interazione processi fino al riavvio.

Un altro svantaggio è l'uso della semantica di file per i semafori POSIX. L'implicazione è che non ci può essere più di un condiviso semaforo con lo stesso nome, ma in diversi stati. Ad esempio un processo chiama sem_open, quindi sem_unlink prima sem_close. Questo processo può ancora utilizzare il semaforo, proprio come lo scollegamento di un file aperto prima di chiuderlo. Processo 2 chiamate sem_open sullo stesso semaforo tra le chiamate sem_unlink e sem_close di processo 1, e (secondo la documentazione) ottiene un nuovo semaforo con lo stesso nome, ma in uno stato diverso da quello di processo 1. Due semafori condivise con lo stesso nome funzionare in modo indipendente sconfigge lo scopo di semafori condivise.

Limitazione uno sopra rende POSIX semafori inutilizzabili in un sistema reale condiviso senza la garanzia che i segnali imprendibili non possono mai essere inviati. Limitazione due può essere mitigato da un'attenta codifica, assumendo il controllo su tutto il codice che utilizzerà un dato semaforo. Francamente, la sua più di un po 'sorprendente l'hanno fatta nello standard così come sono.

So che questo è vecchio, ma a beneficio di coloro che ancora leggendo questo gentile concessione di Google, il # 1 motivo trovo ad usare i semafori System V sopra POSIX (a livello di sistema) semafori è la capacità di acquisire la risorsa del semaforo in un modo che viene restituito automaticamente dal kernel non importa quanto il processo si chiude.

Sono d'accordo che il multiplo (atomiche) operazioni con i semafori sono raramente utilizzati (anche se può essere utile durante messa in scena), e che l'interfaccia System V è bizzarro, ma non c'è alcun modo di raggiungere in modo affidabile la stessa semantica clean-up con POSIX semafori.

Mi chiedo che cosa rende le persone disegno cattive API come System V semafori ! Uneless avete ragioni molto forti per andare con semafori System V (come ad esempio le operazioni atomiche con più di incremento-decremento in un unico passaggio), si dovrebbe attaccare con i semafori POSIX nome.

L'articolo collegato illustra ciò che è sbagliato e non intuitivo con System V semafori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top