Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
| Ambos lados da revisão anterior Revisão anterior | |||
| so:tarefas_dormindo [2023/03/29 16:11] – [Outras informações] maziero | so:tarefas_dormindo [2024/02/14 08: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]] | ||