Sistema operacional de tempo real: faça você mesmo (VII)

Para finalizar, uma breve discussão sobre a inicialização do sistema, através da função main(), listada a seguir:

int main(void)
{    /* Saving the current stack pointer. It will be used by the scheduler. */
    SaveSchedStackPointer();
    EnterCriticalSection();
    /* initialize control structures and create all user tasks */
    BRTOS_Initialize();
    /* call user initialization: you must create at least one thread */
    BRTOS_Application_Initialize();
    /* the stack pointer should point to the first available task stack,
      and the context should be subtracted. This way, the calling of
      GoToScheduler will not fail
    */
    asBrtosTasks[ucCurrentTask].pusStackPtr += NUM_REGS_IN_CONTEXT;
    RestoreStackPointer();
    LeaveCriticalSection();
    /* go to to scheduler routine*/
    GoToScheduler();
}

Várias tarefas são esperadas e não requerem explicações. Percebam que o escalonador vai compartilhar a pilha desta função, já que o SP dele é salvo a partir dela. O que tem de estranho aqui é a manipulação feita no ponteiro da pilha da tarefa corrente e no SP. No fundo, estamos recriando a situação de pilha que acontece no caso de uma interrupção, por isso removemos os registros de R3 a R15, restauramos o SP da tarefa e realizamos um salto para o escalonador, como se esta fosse realmente a tarefa corrente. Depois deste ponto, o processamento segue normalmente.

Os pontos de entrada dentro do escalonador (save_context_entry e dont_save_context_entry) foram inicialmente criados para permitir entrada no escalonador com ou sem salvamento de contexto mas no final eu optei por entrar da forma explicada, mesmo que perdendo algum tempo fazendo e desfazendo a pilha.

Bom, este post encerra esta série. Eu aprendi muito fazendo este sistema em 2005 e ele está longe de ser perfeito ou de ser qualquer referência absoluta no assunto mas ele deixa claro os problemas que enfrentamos ao construir um RTOS.

Espero que tenham gostado.!

  1. #1 by jeroavf on agosto 11, 2010 - 4:08 am

    Muito bom Marcelo. A serie e a disponibilidade do codigo vão despertar o interesse de muitas pessoas em sistemas operacionais. Por que “faço voce mesmo” ?
    Jeronimo
    http://www.blogdoje.com.br

  2. #2 by jedizone on agosto 11, 2010 - 12:22 pm

    Erro de digitação só visto depois do último post por um amigo … troquei o título mas não os links, que vão continuar errados.

  1. Ajude a divulgar a série « Jedizone
  2. Blog do Je » Sistema operacional de tempo real: faça você mesmo
  3. BRTOS « Rot-13

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Join 417 other followers