Inversões de Prioridade Não
Limitadas em Sistemas de
Tempo Real e um Estudo das
Possíveis Soluções…
Paulo Felício
André Quinta
(Ufa !)
João Lopes
André Carvalho
Inversões de Prioridade



Uso frequente de algoritmos de escalonamento
por prioridade com preempção
Contenção no acesso a recursos partilhados por
tarefas de diferentes prioridades
Tarefas de elevada prioridade atrasadas pela
execução de tarefas de menor prioridade
Inversões de Prioridade

Na análise de escalonabilidade, cada tarefa tem
que acomodar, entre a activação e a deadline :
Tempo de execução
 Tempo de preempção
 Tempo de bloqueio


É necessário minimizar a duração da inversão de
prioridades, através do estudo da sua fonte,
melhorando a previsibilidade.
Fontes de Inversão de Prioridade
Semáforos e regiões críticas


Primitivas comuns de regulação do acesso a recursos a
recursos partilhados
Regiões críticas :




Segmentos de código que acedem a recursos partilhados
Executados de forma mutuamente exclusiva
Cada tarefa tem que obter o bloqueio do semáforo
pretendido antes de entrar na região crítica
É bloqueada caso não o consiga, ficando em fila de
espera
Será que é suficiente na limitação do atraso
máximo ?
Fontes de Inversão de Prioridade
Semáforos e regiões críticas
Prioridade
T1
T2
T3
Fontes de Inversão de Prioridade
Semáforos e regiões críticas
Prioridade
T1
T2
T3
Fontes de Inversão de Prioridade
Filas de espera
Q1
Q2
Q3
Primitivas de Sincronização
Inibição de Preempção
Como prevenir uma unbounded priority inversion ?

Inibir a preempção na execução de uma tarefa
Quando uma tarefa de prioridade inferior está dentro da sua região critica
não deixar que haja preempção por uma tarefa que tenha prioridade maior.
Isto pode ser feito desactivando a preempção durante a execução de todas as regiões
criticas.

Vantagens
 Implementação simples
 Eficaz desde que a duração da maior região crítica seja menor que a mais pequena
das deadlines
 Desvantagens
 Tarefas de prioridade alta podem ser bloqueadas pelas de prioridade baixa.

Primitivas de Sincronização
Inibição de Preempção
Quando existe preempção provocada por um dispositivo externo.

Podemos inibir a preempção através de Interrupts

O acesso com exclusão mútua será garantido se:
A inibição das interrupções for feita antes da execução da região critica.
Sendo activada, após execução da região critica.

Vantagens
 Não usa tempo de processador (ao desactivar e activar os interrupts).
 Pode ser usado por algoritmos de prioridades estáticas ou dinâmicas.
 Cada tarefa só pode bloquear uma vez, com a duração da maior das regiões
críticas das tarefas de menor prioridade.

Desvantagens
 Só deve ser usada com regiões criticas muito curtas.
 Corre-se o risco de perder interrupts quando a inibição dos interrupts não é curta.
Primitivas de Sincronização
Inibição de Preempção
Prioridade
T1
T2
T3
Primitivas de Sincronização
Inibição de Preempção
O Priority Ceiling Protocol Emulation
 A ideia é fazer um disable selectivo da preempção.

Inibe-se as possíveis preempções de tarefas com prioridade média, elevando-se
suficientemente a prioridade das tarefas de prioridade inferior.

A prioridade mais alta de todas as tarefas em contenção (que fechará o semáforo) será
copiada para um campo associado ao semáforo (esta prioridade designa-se Priority Ceiling)

Quando uma tarefa faz a chamada ao SO para abrir o semáforo fechado, o SO atribui à
tarefa a prioridade necessária para o abrir.

Apenas uma tarefa, de entre as que podem fechar o semáforo, pode estar na sua região critica
em qualquer momento.


Vantagens
 método mais eficaz na inibição das preempções
 Livre de Deadlock - só uma tarefa pode estar na região critica
Desvantagens
 Uma tarefa pode ser bloqueada por uma tarefa de menor prioridade (quando ocorre
auto suspensão das tarefas de menor prioridade)
Priority Inheritance Protocol
Protocolo de Herança de Prioridades
Prioridade
T1
T2
T3
A tarefa T3 começa a executar,
usando um determinado recurso
partilhado.
A tarefa T1, após ter iniciado, precisa
de aceder à região crítica “ocupada”
por T3. É bloqueada e dá a T3
prioridade P1  HERANÇA de
PRIORIDADE
Enquanto T3 executa, T2 fica pronta
mas é bloqueada por T3.
 T3 sai da região crítica e volta logo a
ter prioridade P3.
 T1 executa até ao fim, não deixando
T2 executar (P1>P2).
 T2 executa (P2>P3), e por último T3
termina.
Priority Inheritance Protocol
Protocolo de Herança de Prioridades
Nao consigo
aceder ao recurso.
Estou a ser
bloqueado de
forma directa!!!
Prioridade
T1
T2
T3
Até queria executar
mas tenho duas tarefas
à minha frente!!!
Quando T1 quer aceder ao recurso,
esta é bloqueada de forma directa
(Direct Blocking)
Quando T2 quer executar, está
impedida devido a T1 que por sua vez
também o está devido a T3. Diz-se
que T2 bloqueia de forma indirecta
(Push Through Blocking).
É óbvio que a duração do “Push Through Blocking” depende da região crítica.
Priority Inheritance Protocol
Protocolo de Herança de Prioridades
Este protocolo é “bom”, porque torna-se fácil
de compreeder e concretizar.
Por outro lado (Há sempre outro lado!!! )
Este protocolo não resolve problemas de:
 “Chained blocking” (bloqueio em cadeia)
 “Deadlock”
Priority Ceiling Protocol
Protocolo de Tecto de Prioridade
Elimina a possibilidade de ocorrer chained blocking e deadlocks
O tecto de prioridade de um semáforo ( S ) é a prioridade mais alta
de entre as tarefas que o podem fechar
Regras do PCP:
• Uma tarefa pode interromper outra de menor prioridade;
• Uma tarefa não pode entrar numa região crítica a não ser
que a sua prioridade seja maior do que os tectos de
prioridades dos semáforos fechados por outras tarefas;
• Uma tarefa que bloqueie outra de maior prioridade, herda
a sua prioridade (herança de prioridades)
Priority Ceiling Protocol
Protocolo de Tecto de Prioridade
Uma tarefa apenas pode fechar um semáforo quando todos os
semáforos de que essa tarefa vai precisar estejam livres.
Uma tarefa pode ser bloqueada por outra de menor prioridade que
use um semáforo que tenha um tecto pelo menos igual à sua
prioridade.
Priority Ceiling Protocol
Protocolo de Tecto de Prioridade
S0 = P1
A seguir vou
usar um recurso
que está
fechado, vou dar
a minha
prioridade
S1 = P1
S1 = P2
Mais à frente vou usar um recurso que
está fechado, não posso continuar
Alguém com maior prioridade interrompeu-me
Esta tarefa
tem a
prioridade
superior aos
tectos dos
semáforos
fechados
Priority Ceiling Protocol
Protocolo de Tecto de Prioridade
Pros and cons:
• Ao contrário do PIP, não há chained blocking nem deadlocks
• De concretização mais difícil, uma vez que são necessários
novos campos tanto para o TCB como para os semáforos
• É necessária uma programação mais cuidada por parte do
programador
Frase do dia:
“Priority Ceiling means that while a thread owns the mutex it
runs at a priority higher than any other thread that may
acquire the mutex.”
Bibliografia:
Artigo de Sadegh Davari, Lui Sha
"Sources of Unbounded Priority Inversions in Real-Time Systems and a
Comparativ Study of Possible Solutions"
Operating Systems Review, 26(2):110-120. ACM Press. April 1992.
Download

Inversão de Prioridades