Baixe o app para aproveitar ainda mais
Prévia do material em texto
Sistemas Operacionais Organização do Código Fonte do MINIX 3 Prof. Sílvio Fernandes UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO DEPARTAMENTO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIA DA COMPUTAÇÃO Introdução Os termos procedimento, função e rotina serão usados indistintamente Os nomes de variáveis, procedimentos e arquivos serão escritos em itálico, como rw_flag Quando começarem uma frase serão usadas letra maiúscula no início, mas seus nomes reais são todo em minúsculo Tarefas que são compiladas no núcleo são identificadas com todas as letras maiúsculas, como CLOCK, SYSTEM e IDLE 2 Organização do código-fonte do MINIX 3 A implementação do MINIX 3 serve para uma máquina tipo IBM PC com processadores Intel de 32 bits O caminho completo para o código-fonte é /usr/src/ Um subdiretório importante da árvore do diretório fonte é src/include Está localizada a cópia-mestra dos arquivos de cabeçalho em C Cada diretório nesta árvore contém um arquivo chamado Makefile que controla a operação do utilitário make do UNIX 3 Organização do código-fonte do MINIX 3 Todo compilador C tem um diretório padrão onde os arquivos de cabeçalho para realizar sua inclusão (através de #include) nos arquivos a serem compilados Frequentemente, ele é /usr/include Quando o nome de um arquivo a ser incluído é posto entre “<“ e “>”, o compilador procura o arquivo no diretório padrão ou em um subdiretório especificado, por exemplo #include <nome de arquivo> 4 Organização do código-fonte do MINIX 3 Quando o nome é posto entre caracteres de aspas normais (“ ... ”), o arquivo é procurado primeiro no mesmo diretório que o arquivo fonte, se não for encontrado lá, no diretório padrão #include “nome de arquivo” 5 Organização do código-fonte do MINIX 3 No diretório include/ contém diversos arquivos de cabeçalho padrão do POSIX, além de subdiretórios sys/ : arquivos de cabeçalho do POSIX minix/ : arquivos de cabeçalho usados pelo MINIX3 ibm/ : arquivo de cabeçalho com definições específicas do IBM PC Outros subdiretórios para extensões do MINIX 3 include/arpa/ e o include/net/ e seu subdiretório include/net/gen suportam extensões de rede 6 Organização do código-fonte do MINIX 3 Além de src/include, o src/ contêm três outros subdiretórios importantes kernel/ : camada 1 (escalonador, mensagens, tarefas de relógio e de sistema) drivers/ : camada 2 (drivers de dispositivo para disco, console, impressora, etc) servers/ : camada 3 (gerenciador de processos, sistema de arquivos, outros servidores) 7 Organização do código-fonte do MINIX 3 Três outros diretórios de código-fonte fundamentais src/lib/ : código-fonte das funções de biblioteca (por exemplo, open, read) src/tools/ : Makefile e scripts para construir o sistema MINIX3 src/boot/ : código para inicializar e instalar o MINIX3 8 Organização do código-fonte do MINIX 3 No diretório src/servers/ contém o código-fonte do programa init e do servidor de reencarnação rs, ambos partes fundamentais de um sistema MINIX 3 funcional Como o MINIX3 é um SO experimental existe o src/test/ com programas projetados para testar completamente um sistema MINIX 3 recentemente compilado O src/commands possui o código-fonte dos programas utilitários (ex: cat, cp, date, ls, pwd e mais de 200 outros) 9 Compilando e Executando o MINIX 3 Para compilar o MINIX3, execute make em src/tools/ Existem várias opções para instalar, para ver as possibilidade execute make sem nenhum argumento O método mais simples é make image Uma nova cópia dos arquivos de cabeçalho em src/include é feita em /usr/include Os arquivos de código-fonte em src/kernel/ e em vários subdiretórios de src/servers/ e src/drivers/ são compilados gerando arquivos-objeto Todos os arquivos-objeto em src/kernel/ são ligados para formar um único programa executável, o núcleo 10 Compilando e Executando o MINIX 3 O método mais simples é make image Os programas adicionais listados como parte da imagem de boot também são compilados e ligados em seus próprios diretórios Outros drivers podem ser adicionados, mas a maioria não precisa ser compilada na imagem de boot 11 Compilando e Executando o MINIX 3 A partir do MINIX 3.2.1 Para reconstruir o sistema # make build # cd /usr/src # make build Para reconstruir apenas o Kernel # cd /usr/src/releasetools # make hdboot Em seguida reinicie #reboot 12 Compilando e Executando o MINIX 3 Para instalar um sistema MINIX 3 funcional, um programa chamado installboot (src/boot/) adiciona nomes nos programas kernel, pm, fs, init e nos outros componentes da imagem de boot ajusta cada um deles de modo que seu tamanho seja múltiplo do tamanho do setor de disco e os concatena em um único arquivo (boot) e pode ser copiado no diretório /boot/ no diretório /boot/image/ de um disquete ou disco rígido 13 Compilando e Executando o MINIX 3 14 Arquivo de Cabeçalho Comuns O diretório include/ e seus subdiretórios contêm uma coleção de arquivos definindo constantes, macros e tipos O padrão POSIX exige muitas dessas definições e especifica em quais arquivos do diretório principal include/ e seu subdiretório include/sys/ será encontrada cada definição Os arquivos desses diretórios são arquivos de cabeçalho ou de inclusão (include files), identificados pelo sufixo .h e utilizados por meio de diretivas #include da linguagem C 15 Arquivo de Cabeçalho Comuns Os arquivos de cabeçalho comumente necessários para compilar programas de usuário estão localizados principalmente em include/ Enquanto include/sys é tradicionalmente empregado para armazenar os arquivos usados para compilar programas e utilitários de sistema Cada componente importante do MINIX 3 tem um arquivo de cabeçalho mestre, como src/kernel/kernel.h, src/servers/pm/pm.h e src/servers/fs/fs.h 16 Arquivo de Cabeçalho Comuns Cada arquivo de cabeçalho mestre é personalizado de acordo com as necessidades da parte correspondente no MINIX 3, mas cada um começa com uma seção assim #include <minix/config.h> /*DEVE ser o primeiro*/ #include <ansi.h> /*DEVE ser o segundo*/ #include <limits.h> #include <errno.h> #include <sys/types.h> #include <minix/const.h> #include <minix/type.h> #include <minx/syslib.h> #include “const.h” 17 Arquivo de Cabeçalho Comuns Ansi.h tenta decidir se o compilador é suficientemente compatível com o Standard C para que o MINIX tire proveito dele Se for, a macro _ANSI será definido (como 31459) Caso contrário, _ANSI não será definido aqui, mas poderá ser definido pelos aplicativos que queiram se submeter às regras Limits.h define alguns tamanhos básicos, tanto dos tipos de linguagem como do SO. Ex: Número de bits em um valor inteiro Número de caracteres em um nome de arquivo 18 Arquivo de Cabeçalho Comuns Errno.h define os números dos vários erros que podem ocorrer durante a execução do programa. Os erros são retornados na variável global errno quando uma chamada de sistema falha Eles são visíveis para programas de usuário e devem ser valores inteiros positivos pequenos; Entretanto, eles também são usados dentro do MINIX, onde devem ser negativos Para resolver o problema, todas as definições são da forma #define EPERM (_SIGN 1) Se a macro _SYSTEM for definida,então _SIGN será configurada como “-”; caso contrário, será configurada como “” 19 Arquivo de Cabeçalho Comuns O próximo grupo de arquivos não é incluído em todos os arquivos de cabeçalho mestres, mas não obstante são usados em muitos arquivo-fonte unistd.h define muitas constantes, a maioria exigida pelo POSIX; contém protótipos para muitas funções da linguagem C string.h fornece protótipos para várias funções da linguagem C de manipulação de strings signal define os nomes de sinais padrão e específicos do MINIX 3; como as funções do MINIX 3 são tratadas por processos independentes (em vez de um núcleo monolítico), exige alguma comunicação de sinal especial entre os componentes do sistema 20 Arquivo de Cabeçalho Comuns O próximo grupo de arquivos não é incluído em todos os arquivos de cabeçalho mestres, mas não obstante são usados em muitos arquivo- fonte fcntl.h define simbolicamente muitos parâmetros utilizados em operações de controle de arquivo termios.h define constantes, macros e protótipos de função utilizados para controle de dispositivos de E/S tipo terminal timers.h incluído no arquivo de cabeçalho do núcleo para suportar temporizadores de alarmes denominados de cães de guarda (watchdogs) 21 Arquivo de Cabeçalho Comuns O próximo grupo de arquivos não é incluído em todos os arquivos de cabeçalho mestres, mas não obstante são usados em muitos arquivo-fonte stdlib.h define tipos, macros e protótipos de função que provavelmente serão necessários na compilação de todos os programas em C, menos os mais simples stdio.h é conhecido de todos que começam a aprender a programar em C a.out.h define o formato dos arquivos nos quais os programas executáveis são armazenados no disco; uma estrutura exec é definida aqui e as informações são usadas pelo gerenciador de processos para carregar 22 Arquivo de Cabeçalho Comuns Sys/types.h contém importantes definições de tipos de dados. É considerada um boa prática de programação utilizar essas definições, em vez do tipo de base subjacente. Por convenção, todos os nomes de tipo terminam com _t 23 Tipo MINIX de 16 bits MINIX de 32 bits gid_t 8 8 dev_t 16 16 pid_t 16 32 ino_t 16 32 Arquivo de Cabeçalho Comuns Sys/dir.h define a estrutura de uma entrada de diretório do MINX 3 24 Arquivo de Cabeçalho do MINIX Os subdiretórios include/minix/ e include/ibm/ contêm arquivos de cabeçalho específicos do MINIX 3 Minix/config.h define os parâmetros de configuração do núcleo do MINIX, FS e PM. Ele está dividido em duas seções principais A 1ª contém parâmetros configurados pelo usuário Na 2ª vários parâmetros internos do sistema são configurados com base nos parâmetros configurados pelo usuário É sugerido que modifique o comentário na linha 04 para ajudar a identificar o objetivo das modificações 25 Arquivo de Cabeçalho do MINIX No arquivo sys_config.h há definições que provavelmente serão necessárias para um programador de sistema, mas não precisará alterar muito, exceto _NR_PROCS que controla o tamanho da tabela de processos Minix/const.h define constantes É definida a macro EXTERN usada para definição de variáveis globais externas PRIVATE é definida como sinônimo de static Uma seção é dedicada às definições de máquina ou dependentes da configuração 26 Arquivo de Cabeçalho do MINIX Type.h é outro arquivo incluído em toda compilação, por meio dos cabeçalhos mestres Ele contém várias definições de tipo importantes, junto com os valores numéricos relacionados As 2 primeiras estruturas definem 2 tipos diferentes de mapa de memória, uma para regiões de memória local e outro para áreas de memória remota O click é a unidade básica de medida da memória; no MINIX3, para processadores Intel, um click vale 1024 bytes 27 Arquivo de Cabeçalho do MINIX As estruturas de dados e os protótipos de funções para comunicação entre processos são definidos em ipc.h Define message São definidos 7 formatos de mensagem, mess_1 a mess_8 (o tipo mess_6 é obsoleto) Define as primitivas de passagem de mensagem No arquivo callnr.h são definidos os números relativos a chamadas de sistema Devio.h define tipos e constantes que suportam acesso do espaço do usuário às portas de E/S 28 Arquivo de Cabeçalho do MINIX Partition.h define as informações necessárias para o MINIX 3 definir uma partição de disco, ou pelo seu deslocamento absoluto (em bytes) e tamanho no disco, ou por um endereço de cilindro, cabeçote e setor. 29 Arquivo de Cabeçalho include/ibm O diretório include/ibm contém arquivos que fornecem definições relacionadas à família IBM PC A biblioteca contém rotinas escritas em assembly para ler e escrever a partir de portas de E/S O arquivo interrupt.h define endereços de portas e posições de memória usadas pelo controlador de interrupção e pela BIOS em sistemas compatíveis com PC As portas são definidas em ports.h 30 Atividade Modifique o kernel para o Minix for iniciado aparecer, logo após o Copyright, uma mensagem simples como “Kernel Hacked!”. Entre no diretório do kernel cd /usr/src/kernel Faça uma cópia de segurança do main original cp main.c main.c.back Abra-o main.c no editor ele Procure a função “announce” e escreva no final dela sua mensagem Salve o arquivo e sai do editor 31 Atividade Modifique o kernel para o Minix for iniciado aparecer, logo após o Copyright, uma mensagem simples como “Kernel Hacked!”. Para compilar o kernel cd /usr/src make clean make install Outra opção para compilar o kernel: cd /usr/sr/tools make hdboot Após a compilação reinicie o Minix reboot 32 Referências TANENBAUM, Andrew S.; WOODHULL, Albert S. Sistemas Operacionais: Projeto e Implementação. 3ª Ed., Prentice Hall, 2008. 33
Compartilhar