Gerenciamento e agendamento de tarefas

Este artigo é compartilhado da conta pública do China Mobile OneOS WeChat " Gerenciamento e agendamento de tarefas ".

Os sistemas operacionais de tempo real têm requisitos relativamente altos de desempenho e tempo de resposta. Para atender aos indicadores em tempo real, é necessário decompor um aplicativo complexo em várias unidades pequenas, escalonáveis ​​e serializadas e garantir que as unidades decompostas possam ser Corretamente a execução do projeto esperada.

<Estrutura de Objetos do Kernel>

<estrutura de lista vinculada de objetos do kernel>

Características da tarefa

No sistema operacional IoT, uma tarefa é a unidade de agendamento mais básica . As propriedades da tarefa incluem o ambiente de execução de execução (também chamado de contexto, incluindo várias variáveis ​​e dados, todos os valores de registro, pilha, informações de memória, etc.), a prioridade da tarefa, o tempo de execução, etc., real- tempo e tarefas importantes podem ser definidas com prioridade relativamente alta, outras tarefas podem ser definidas com prioridade mais baixa. Quando a tarefa é alternada, o agendador primeiro salvará o contexto da tarefa atual e, em seguida, restaurará as informações de contexto da tarefa ao retornar a essa tarefa, para garantir que uma única tarefa esteja sendo executada como se fosse exclusivamente CPU e não se perca.

Existem os seguintes quatro cenários comuns de troca de tarefas durante a operação do sistema:

(1) Entre tarefas de diferentes prioridades, o agendador de tarefas é preemptivo . Quando a tarefa de alta prioridade está pronta, ele sempre antecipa os direitos de uso da CPU da tarefa de baixa prioridade.
(2) Entre tarefas de mesma prioridade, o agendador de tarefas é round-robin. O número de fatias de tempo a serem executadas é especificado quando cada tarefa é inicializada. Após o tempo gasto, ele muda para outra tarefa de mesma prioridade.
(3) A tarefa atual é suspensa devido à espera de um recurso e o agendador de tarefas seleciona a tarefa de prioridade mais alta no estado pronto para execução.
(4) Se a rotina de serviço de interrupção faz com que uma tarefa de prioridade mais alta atenda às condições de execução, quando a interrupção é concluída, a tarefa interrompida é suspensa e a tarefa com prioridade mais alta começa a ser executada.

Como as tarefas funcionam

(1) Prioridade de tarefas

Indica se a tarefa está agendada para ser priorizada na lista de agendamento. O sistema suporta um máximo de 256 prioridades de tarefa (0~255). 0 é a prioridade mais alta e quanto menor o valor, maior a prioridade. Como a lista de agendamento precisa ocupar alguns recursos, se os recursos do sistema forem insuficientes, 8 ou 32 prioridades podem ser selecionadas na configuração do sistema. O sistema operacional é preventivo e a tarefa atual será trocada assim que uma tarefa de prioridade mais alta estiver pronta.

(2) Fatia de tempo

As tarefas com a mesma prioridade são agendadas de maneira round-robin. A fatia de tempo especificada quando a tarefa é criada limita o tempo máximo para uma única execução agendada da tarefa e sua unidade é um tique do sistema. Por exemplo, se houver 3 tarefas prontas A, B e C com a mesma prioridade, o intervalo de tempo da tarefa A é definido como 1, o intervalo de tempo da tarefa B é definido como 2 e o intervalo de tempo da tarefa C é definido a 3. A tarefa de estado pronto de alta prioridade alternará entre essas três tarefas, conforme mostrado na figura a seguir.

<Diagrama de fatia de tempo de execução da tarefa>

(3) Estrutura básica

O bloco de controle de tarefas é a estrutura de dados básica para gerenciamento de tarefas. Ele é representado pela estrutura struct os_task. Ele armazena algumas informações sobre a operação e agendamento de tarefas. As definições detalhadas são as seguintes:


struct os_task
{
    os_object_t      parent                       /* object父结构体 */
    os_list_node_t   task_list;                  /* 任务链表 */
    void             *sp;                         /* 栈指针 */
    void             *entry;                      /* 任务入口函数 */
    void             *parameter;                  /* 入口函数参数 */
    void             *stack_addr;                 /* 栈地址 */
    os_uint32_t      stack_size;                  /* 栈大小 */
    os_err_t        error;                        /* 错误码 */
    os_uint8_t      stat;                         /* 任务状态 */
    os_uint8_t      current_priority;            /* 当前优先级 */
    os_uint8_t      init_priority;               /* 初始化优先级 */
    os_uint32_t      number_mask;
    . . . . . .
    os_ubase_t      init_tick;                   /* 初始化占用系统tick数 */
    os_ubase_t      remaining_tick;              /* 剩余系统tick数 */
    os_timer_t       task_timer;                  /* 任务定时器 */
    void (*cleanup)(os_task_handle_t *handle);  /* 任务退出清理函数 */
    os_uint32_t      user_data;                   /* 用户自定义数据 */
};

task_list é o ponteiro da lista de tarefas, que é usado para conectar tarefas à lista de tarefas de mesma prioridade;

stack_addr é o espaço da pilha de tarefas, que é passado quando a tarefa é criada ou alocada pelo sistema;

init_priority é a prioridade da tarefa especificada quando a tarefa é criada e não será alterada durante o processo de execução da tarefa;

current_priority é a prioridade do processo de execução da tarefa, que geralmente é igual a init_priority e mudará quando a prioridade for revertida;

cleanup é uma função de limpeza de tarefa que é chamada por tarefas ociosas quando a tarefa é encerrada.

(4) Transição de estado

Durante a operação do sistema, a tarefa tem uma variedade de estados de execução diferentes, incluindo estado inicial, estado de prontidão, estado de execução, estado suspenso e estado fechado. O agendador de tarefas ajustará o estado da tarefa de acordo com o status de execução da tarefa e o estado atual do sistema. , conforme mostrado na tabela.

status da tarefa

Descrição detalhada

Estado inicial

A tarefa está no estado inicial quando a tarefa é criada, mas não foi chamada para iniciar a execução da função de interface.Neste momento, a tarefa não participa do agendamento.

estado pronto

Neste momento, as tarefas são enfileiradas de acordo com a prioridade, aguardando para serem agendadas; uma vez que a tarefa em estado de execução precisa ser trocada, o agendador encontrará a tarefa em estado de prontidão com maior prioridade para execução.

Status operacional

Executando na CPU .

Estado suspenso

Como os recursos necessários estão indisponíveis ou a tarefa está ativamente atrasada por um período de tempo e entra no estado suspenso, a tarefa não participa do agendamento neste momento.

Desativado

Quando a execução da tarefa terminar, ela entrará no estado fechado e não participará do agendamento.

A transição entre os estados é mostrada na figura abaixo.

<Diagrama de transição do estado da tarefa>

Design de interface de gerenciamento de tarefas

(1) Criar uma tarefa

(2) Tarefa de destruição

(3) Inicie a tarefa

(4) Obter a tarefa atual

(5) Trocar tarefas

(6) Tarefas de sono

(7) Suspender a tarefa

(8) Tarefas de recuperação

(9) Tarefas de controle

(10) Defina a função de retorno de chamada inativa da tarefa

(11) Excluir função de retorno de chamada inativa de tarefa

(12) Defina a função de retorno de chamada de agendamento de tarefas

O OneOS é um sistema operacional leve lançado pela China Mobile para a Internet das Coisas. Ele é adaptável, multiplataforma, baixo consumo de energia e alta segurança. Ele suporta CPUs convencionais, como ARM Cortex-M/R/A, MIPS e RISC-V. A arquitetura é compatível com POSIX, CMSIS e outras interfaces padrão, suporta o desenvolvimento da linguagem Micropython e fornece ferramentas de desenvolvimento gráfico, que podem efetivamente melhorar a eficiência do desenvolvimento e reduzir os custos de desenvolvimento, ajudando os clientes a desenvolver aplicativos de IoT para uso. Endereço do site oficial: https://os.iot.10086.cn/
Endereço do software OneOS: http://www.oschina.net/p/cmcc-oneos
Endereço do projeto OneOS: https://gitee.com/cmcc-oneos / Grupo
de intercâmbio técnico OneOS OneOS: 158631242

{{o.name}}
{{m.name}}

Acho que você gosta

Origin my.oschina.net/u/5443273/blog/5448510
Recomendado
Clasificación