Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior | ||
so:tarefas_dormindo [2023/03/29 17:59] – maziero | so:tarefas_dormindo [2024/02/14 11:38] (atual) – maziero | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
+ | ====== Tarefas dormindo ====== | ||
+ | |||
+ | :!: alterações na interface em 03/2023 | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | A chamada de sistema '' | ||
+ | |||
+ | <code c> | ||
+ | void task_sleep (int t) | ||
+ | </ | ||
+ | |||
+ | <note important> | ||
+ | O tempo solicitado em '' | ||
+ | </ | ||
+ | |||
+ | Para implementar essa funcionalidade é necessário: | ||
+ | |||
+ | * Criar uma fila de " | ||
+ | * Escrever a função '' | ||
+ | * Periodicamente, | ||
+ | * Use o controle de preempção para evitar condições de disputa na manipulação da fila de tarefas adormecidas. | ||
+ | |||
+ | <note warning> | ||
+ | Um erro muito frequente é colocar a verificação da fila de tarefas adormecidas dentro do tratador de //ticks// de relógio. **Não faça isso**, pois esse tratador representa uma ISR - //Interrupt Service Routine//, que deve ser pequena e muito rápida. Implemente essa verificação como uma função ativada pelo **despachante**. | ||
+ | </ | ||
+ | |||
+ | Sua implementação deve funcionar com {{pingpong-sleep.c|este código}} e gerar uma saída **similar** a {{pingpong-sleep.txt|este exemplo}}. Na saída, observe que o campo "'' | ||
+ | |||
+ | ===== Outras informações ===== | ||
+ | |||
+ | * Duração estimada: 6 horas. | ||
+ | * Dependências: | ||
+ | * [[Gestão de Tarefas]] | ||
+ | * [[Dispatcher]] | ||
+ | * [[Preempção por Tempo]] | ||
+ | * [[Tarefas suspensas]] | ||