DEV Community

Cover image for Dia 24~26 - Gestão de Tarefas (Sistema Operacional)
Matheus Gomes
Matheus Gomes

Posted on

Dia 24~26 - Gestão de Tarefas (Sistema Operacional)

Esses dias estive quebrando a cabeça para implementar gestão de tarefas utilizando contexto. Código aqui.

Como tudo nesse projeto, essa foi mais uma "task" do conteúdo do professor Maziero.

Sobre a implementação:

Foi implementado um sistema de gerenciamento de tarefas usando contextos do sistema. Ele gerencia tarefas cooperativas executando uma tarefa até passar explicitamente para outra.

Estrutura task_t: Representa uma tarefa, armazenando o contexto de execução, um identificador (ID), e ponteiros para facilitar a construção de uma fila duplamente encadeada de tarefas.

typedef struct task_t
{
  struct task_t *prev, *next; // ponteiros para usar em filas
  int id;                     // identificador da tarefa
  ucontext_t context;         // contexto armazenado da tarefa
  short status;               // pronta, rodando, suspensa, ...
  // ... (outros campos serão adicionados mais tarde)
} task_t;
Enter fullscreen mode Exit fullscreen mode

Inicialização: A função ppos_init() é chamada para configurar o contexto principal do programa. Isso prepara o sistema para gerenciar múltiplas tarefas.

Criação de tarefas: Novas tarefas são criadas com task_init(), onde você passa uma função e argumentos para ser executada dentro da nova tarefa. Essas tarefas recebem um novo contexto e pilha, e o ID da tarefa é atualizado.

Mudança de contexto: A função task_switch() permite alternar entre tarefas, trocando o contexto atual pelo de uma tarefa especificada.

Finalização de tarefa: Uma tarefa pode encerrar sua execução e retornar ao contexto principal com task_exit().

Top comments (0)