Pergunta

Nós temos duas tarefas (T1 e T2) em nosso vxWorks sistema embarcado que têm a mesma prioridade (110).
Como regular o vxWorks programador de lidar com isso, se ambas as tarefas estão prontos para correr?
Qual tarefa executa primeiro?

Foi útil?

Solução

A tarefa que irá executar o primeiro é a tarefa, que é gerada em primeiro lugar como realizado pelo VxWorks agendador de tarefas.O VxWorks usa com base na prioridade de agendamento por predefinição.Então, no seu caso, uma vez que T1 e T2 têm a mesma prioridade, o que se obtém o CPU primeiro continuará a ser executado indefinidamente, até que seja explicitamente bloqueado (usando taskSuspend ou taskDelay), momento em que o outro PRONTO tarefa será executada até que ele é bloqueado, e assim por diante.Isso deve ser controlado por semáforos ou exclusões mútuas (mutices?)

O principal problema com a prioridade de agendamento é iluminada por esse exato problema.Como podemos determinar quanto tempo para deixar essas tarefas são executadas?O fato de que eles têm a mesma prioridade complica as coisas.Outra preocupação é que o VxWorks tarefas de alta prioridade (menor o número maior a prioridade) pode antecipar a sua aplicação com a qual você deve estar preparado para em seu código.Estes problemas podem ser resolvidos usando round-robin de agendamento.O adicional problemas colocados por round-robin de agendamento e as soluções são todas as descritas aqui.

Outras dicas

O VxWorks tem 256 níveis de prioridade (0 é a mais alta, 255 é o mais baixo).Em qualquer momento dado, a tarefa de prioridade mais alta é executado na CPU.Cada nível de prioridade, conceptualmente, tem uma fila onde várias tarefas em fila para execução.

Temos 3 tarefas com a mesma prioridade A, B, C.Suponha que Um está em execução.
Quando Um dos blocos (taskDelay, SemTake, msgQReceive), B irá iniciar a execução.
Quando Uma desbloqueia, ele é colocado no final da fila.Agora temos B, C, A.
Quando blocos B, C assume, etc...

Se o Round Robin de agendamento (divisão de Tempo) está activada, o mesmo conceito se aplica, mas a tarefa é colocada no final da fila quando a sua fatia de tempo é longo.

Observe que uma tarefa está sendo preterido por uma tarefa de prioridade mais alta NÃO afeta a ordem da fila.Se Um estava correndo e fica preterido, ele vai continuar a execução quando a tarefa de prioridade mais alta é feito.Não conseguir colocar no final da fila.

Por padrão, o qual é gerado a primeira será a execução e a menos que ele desiste de CPU que o outro nunca será executado.

Você pode ativar explicitamente o round-robin, que eles vão timeslice.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top