Perché devo usare SEM_PRIORITY_Q quando utilizzo un mutex sicuro di inversione VxWorks?

StackOverflow https://stackoverflow.com/questions/106540

  •  01-07-2019
  •  | 
  •  

Domanda

In VxWorks, sto creando un mutex con l'opzione SEM_INVERSION_SAFE, per proteggere dal problema dell'inversione di priorità.
Il manuale dice che devo utilizzare anche l'opzione SEM_PRIORITY_Q. Perché?

È stato utile?

Soluzione

Quando si crea un semaforo mutex in VxWroks, sono disponibili due opzioni per gestire più attività in coda (in attesa) per il semaforo: FIFO o Attività con priorità più alta.

Quando si utilizza l'opzione SEM_INVERSION_SAFE, l'attività che contiene il mutex verrà assegnata alla stessa priorità dell'attività con la priorità più alta in attesa del semaforo.

Se dovessi usare una coda FIFO per il semaforo, il kernel dovrebbe attraversare la coda dei compiti in attesa che il mutex trovi quello con la massima priorità. Questa operazione non è deterministica, poiché il tempo di attraversamento della coda cambia al variare del numero di attività in coda.

Quando si utilizza un'opzione SEM_PRIORITY_Q, il kernel deve semplicemente guardare l'attività in testa alla coda, poiché è la priorità più alta. Questa è un'operazione a tempo costante.

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