RELATÓRIO - IMPLEMENTAÇÃO DE UM KERNEL
Monografias: RELATÓRIO - IMPLEMENTAÇÃO DE UM KERNEL. Pesquise 861.000+ trabalhos acadêmicosPor: adelinesharla • 7/11/2013 • 1.168 Palavras (5 Páginas) • 344 Visualizações
1. Introdução
O seguinte trabalho consistiu na implementação de um kernel básico, sendo este o componente central de um Sistema Operacional, responsável pelo gerenciamento dos recursos do hardware.
O que foi feito foi apenas o início do trabalho de implementação de um kernel, para melhor compreendimento de alguns itens envolvidos em sua criação.
2. Discussão da Implementação
As etapas citadas a seguir foram concluídas: criar seu ambiente de desenvolvimento, criar o estágio para o GRUB, juntar outros arquivos e chamar main(), escrever na tela (puts()), criar uma Global Descriptor Table (GDT) e uma Interrupt Descriptor Table (IDT), Rotinas para Serviço de Interrupções (ISRs) para suas interrupções e IRQs, Remapear o Controle de Interrupções Programável (PICs) para as novas entradas da IDT, instalar e servir IRQs, manipular o Tempo de Intervalo Programável / Relógio do Sistema (PIT)e manipular o IRQs do Teclado e os Dados do Teclado.
Foi utilizado o Sistema Operacional Xubuntu, com o GNU C Compiler, Netwide Assembler (NASM) e o VirtualBOX 4.1.18.
A maior adaptação feita no tutorial foi no arquivo "build.bat" que se transformou em MAKEFILE, mas a linhas de comando utilizadas foram análogas ao pedido no tutorial.
Na implementação dos arquivos foi feito o uso de TAD's para manipulação de cabeçalho com os protótipos das funções que são implementadas em *.c diferentes e depois chamadas pela main, uma arquivos nasm (em assembly) foi utilizado como ponto de entrada para o kernel, sendo o primeiro a ser executado quando o bootloader chama o kernel. Este arquivo serve basicamente para carregar uma pilha de 8KByte e entrar e loop, sendo a pilha utilizada para passar ou guardar argumentos para as funções em C.
3. Discussão dos Tópicos Aprendidos
Para escrever na tela foi implementado o código para o arquivo "scrn.c",
Foi criada uma via para controlar o rolamento da tela e diferentes cores na tela foram dadas pelo controlador VGA além de desenhar as atualizações feitas na tela.
A GDT foi implementada no arquivo "gdt.c"
A GDT define um base de privilégios de acesso para certas partes da memória. Foi utilizada uma entrada na GDT para gerar exceções por violação de segmento que dá ao kernel uma oportunidade para finalizar um processo que está fazendo alguma coisa que não deve, além de definir se uma seção na memória é executável ou se é de fato, dados.
Usando um arranjo de 3 entradas para definir a GDT. Para o ponteiro especial da GDT foi somente declarado um, chamado de 'gp'.
A GDT foi implementada no arquivo "idt.c"
A Tabela de Descrição de Interrupções (Interrupt Descriptor Table), ou IDT, usada para mostrar ao processador qual Rotina para Serviço de Interrupção (Interrupt Service Routine (ISR)) chamar para tratar qualquer uma exceção ou um opcode 'int' (em assembly)e também chamados por Interrupções de Requisições (Interrupt Requests) sempre que um dispositivo completou uma requisição e precisa ser servido, esta parte foi muito parecida com a implementação da gdt, salvo detalhes. O mais importante foi redirecionamento feito em "start.nasm" e o "tratamento de rotinas" colocado no "isrs.c" que se resumiu às mensagens de erro.
As IRQs foram implementadas no arquivo "irq.c"
Requisições de Interrupção são interrupções chamadas pelos dispositivos de hardware. Alguns dispositivos geram um IRQ quando eles têm dados prontos para serem lidos, ou quando eles terminaram um comando de escrever um buffer, por exemplo. Está é a chave para dizer que um dispositivo vai gerar um IRQ sempre que este deseja chamar a atenção do processador. IRQs são gerando por tudo que é cartão de rede e cartão de som até seu mouse, teclado e portas seriais.
Foi mapeado o IRQ0 até IRQ15 para as entradas IDT 32 até 47. Adicionando algumas ISRs para 'start.asm' para servir as interrupções.
Um PIT foi implementado no arquivo "timer.c"
O Tempo de Intervalo Programável (PIT, modelo 8253 ou 8254), também chamado Relógio do Sistema, é um chip muito útil para com exatidão gerar interrupções em intervalos de tempo regulares. O chip em si possui 3 canais: Canal 0 está restringido para o IRQ0, para interromper o CPU em tempos regulares e previstos, Canal 1 é especifico do sistema, e Canal 2 é conectado ao speaker do sistema. Como você pode ver, este simples chip oferece vários serviços muito importantes para o
...