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_suspensas [2023/03/29 17:55] – maziero | so:tarefas_suspensas [2024/02/14 11:37] (atual) – [Suspender e retomar] maziero | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
+ | ====== Tarefas suspensas ====== | ||
+ | |||
+ | :!: alterações na interface em 03/2023, nome mudou de '' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | O objetivo deste projeto é construir funções para suspender e acordar tarefas. A principal função a implementar é '' | ||
+ | |||
+ | <code c> | ||
+ | int task_wait (task_t *task) | ||
+ | </ | ||
+ | |||
+ | A chamada '' | ||
+ | |||
+ | Caso a tarefa '' | ||
+ | |||
+ | O valor de retorno da chamada '' | ||
+ | |||
+ | Sua implementação deverá funcionar com {{pingpong-wait.c|este código}} e gerar uma saída similar a {{pingpong-wait.txt|este exemplo}}. | ||
+ | |||
+ | Use o controle de preempção para evitar condições de disputa nas variáveis envolvidas. | ||
+ | |||
+ | ===== Suspender e retomar ===== | ||
+ | |||
+ | Para facilitar a construção deste e dos próximos projetos, deve-se implementar as funções '' | ||
+ | |||
+ | <code c> | ||
+ | void task_suspend (task_t **queue) ; | ||
+ | </ | ||
+ | |||
+ | Suspende a **tarefa atual** através das seguintes ações: | ||
+ | |||
+ | - retira a tarefa atual da fila de tarefas prontas (se estiver nela); | ||
+ | - ajusta o status da tarefa atual para " | ||
+ | - insere a tarefa atual na fila apontada por '' | ||
+ | - retorna ao // | ||
+ | |||
+ | <code c> | ||
+ | void task_awake (task_t * task, task_t **queue) ; | ||
+ | </ | ||
+ | |||
+ | Acorda uma tarefa que está suspensa em uma dada fila, através das seguintes ações: | ||
+ | |||
+ | - se a fila '' | ||
+ | - ajusta o status dessa tarefa para " | ||
+ | - insere a tarefa na fila de tarefas prontas; | ||
+ | - continua a tarefa atual (**não retorna** ao // | ||
+ | |||
+ | Juntas, essas duas funções simplificam suspender e reativar tarefas, sem precisar manipular diretamente a fila de tarefas prontas. | ||
+ | |||
+ | ===== Outras informações ===== | ||
+ | |||
+ | * Duração estimada: 4 horas. | ||
+ | * Dependências: | ||
+ | * [[Gestão de Tarefas]] | ||
+ | * [[Dispatcher]] | ||
+ | * [[Preempção por Tempo]] | ||