Buscar

Organização do código-fonte do MINIX 3

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 33 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 33 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 33 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Outros materiais