Inibição de interrupções
2027 palavras
9 páginas
Inibição de interrupçõesUma solução simples para a implementação das primitivas enter e leave consiste em impedir as trocas de contexto dentro da seção crítica. Ao entrar em uma seção crítica, a tarefa desativa (mascara) as interrupções que possam provocar trocas de contexto, e as reativa ao sair da seção crítica. Apesar de simples, essa solução raramente é usada para a construção de aplicações devido a vários problemas:
_ Ao desligar as interrupções, a preempção por tempo ou por recursos deixa de funcionar; caso a tarefa entre em um laço infinito dentro da seção crítica, o sistema inteiro será bloqueado. Uma tarefa mal-intencionada pode forçar essa situação e travar o sistema.
_ Enquanto as interrupções estão desativadas, os dispositivos de entrada/saída deixam de ser atendidos pelo núcleo, o que pode causar perdas de dados ou outros problemas. Por exemplo, uma placa de rede pode perder novos pacotes se seus bu_ers estiverem cheios e não forem tratados pelo núcleo em tempo hábil.
_ A tarefa que está na seção crítica não pode realizar operações de entrada/saída, pois os dispositivos não irão responder.
_ Esta solução só funciona em sistemas mono-processados; em uma máquina multi-processada ou multi-core, duas tarefas concorrentes podem executar simultaneamente em processadores separados, acessando a seção crítica ao mesmo tempo devido a esses problemas, a inibição de interrupções é uma operação privilegiada e somente utilizada em algumas seções críticas