Compartilhar via


Priority Inversion

Windows Mobile SupportedWindows Embedded CE Supported

9/8/2008

Prioridade inversion ocorre quando um mutex ou crítico seção mantidas por um inferior - prioridade segmento atrasa a execução de um maior - prioridade segmento quando ambos estão disputando para o mesmo recurso.

Para exclusões mútuas e crítico seções, para corrigir essa situação e livre de maior - prioridade segmento, com prioridade herança, Windows Embedded CE permite inferior - prioridade segmento para Herdar de mais crítico prioridade do segmento e executar na prioridade mais alta até que ele libera seu uso do recurso. Herança de prioridade não aplicar a semáforos, que não tem um proprietário específico associado com eles.

Como uma quantidade desvinculada do tempo é necessário para abandone o segmento invertido e é out of o controle de kernel, o OEM perde controle do processo de agendamento. Para garantir desempenho em tempo real, os OEMs devem garantir que uma condição inversion prioridade não ocorrer.

Considere um exemplo que mostra como um sistema sem herança prioridade pode levar a agendamento segmento ruim.

Suponha que um aplicativo tem três segmentos:

  • Segmento 1 tem prioridade alta.
  • Segmento 2 tem prioridade Média.
  • Segmento 3 tem baixa prioridade.

Segmento 1 e 2 segmento são adormecido ou bloqueado no início de exemplo. Segmento 3 é executado e insere um crítico seção.

Nesse momento, segmento 2 inicia execução, preempting segmento 3 porque segmento 2 tem uma prioridade mais alta. Assim, segmento 3 continua a ter um crítico seção.

Posteriormente, segmento 1 Inicia execução, preempting segmento 2. Segmento 1 tenta inserir o crítico seção que é proprietária segmento 3, mas porque ele é de propriedade outro segmento, segmento 1 blocos, aguardando o crítico seção.

No que apontar, segmento 2 inicia execução porque ele tem uma prioridade mais alta que segmento 3 e segmento 1 não execução. Versão nevers Segmento 3 o crítico seção que segmento 1 está aguardando para porque segmento 2 continua a executar.

Portanto, a maior-segmento prioridade no sistema, segmento 1, fica bloqueado aguardando inferior - prioridade segmentos para executar.

Para resolver este emitir, Windows Embedded CE permite herança prioridade a uma profundidade de um nível.

Na acima exemplo, quando segmento 1 for bloqueado conforme ele aguarda segmento 3 Para completo, Windows Embedded CE aumenta a prioridade do segmento 3. Portanto, segmento 3 é executado e eventualmente libera o recurso compartilhado para segmento 1.

Após o recurso compartilhado é lançado pelo segmento 3, Windows Embedded CE restaura segmento 3 para seu original prioridade e executa segmento 1.

No entanto, se segmento 3 está bloqueado e aguardando outro segmento, X, a versão um objeto, Windows Embedded CE não Aumentar a prioridade do segmento X, que pode ser o segmento prioridade mais baixa.

Se a prioridade de um segmento é invertida, o segmento recebe um atualizado quantum, ou fatia, do tempo de execução quando sua prioridade é invertida no longer.

Observação

Abandonar aguardando para mutex faz com que segmentos bloqueio de mutex para manter a prioridade herdada.Quando um segmento prioridade inferior contém um mutex e um segmento prioridade mais alto que está aguardando o mutex pára de espera porque ele possui tempo limite atingido fora ou outro objeto sinalizado usando o WaitForMultipleObjects função, Inferior - prioridade segmento herda a prioridade da maior - prioridade segmento até que ele começa execução novamente.Isso não é geralmente um problema, a menos que o segmento prioridade inferior também será bloqueado por outro objeto quando a espera será abandonada.Evite inversion prioridade Mantendo todos os segmentos que estão aguardando o mutex na mesma prioridade, ou por configuração o tempo limite para INFINITE para segmentos que estão aguardando o mutex.

Segmentos executar para uma quantidade específica de tempo chamado um quantum, ou fatia, do tempo de execução. Isso tem um valor usar como padrão de 100 milissegundos.

See Also

Concepts

Processes and Threads
Setting the Thread Quantum