DEV Community

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

Posted on

1

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)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up