Escolar Documentos
Profissional Documentos
Cultura Documentos
Sistemas
operacionais
Série TECNOLOGIA DA INFORMAÇÃO - hardware
sistemas
operacionais
CONFEDERAÇÃO NACIONAL DA INDÚSTRIA – CNI
Conselho Nacional
sistemas
operacionais
© 2012. SENAI – Departamento Nacional
A reprodução total ou parcial desta publicação por quaisquer meios, seja eletrônico, mecâ-
nico, fotocópia, de gravação ou outros, somente será permitida com prévia autorização, por
escrito, do SENAI.
Esta publicação foi elaborada pela equipe do Núcleo Integrado de Educação a Distância do
SENAI de Goiás, em parceria com os Departamentos Regionais do Distrito Federal, Bahia e
Paraíba, com a coordenação do SENAI Departamento Nacional, para ser utilizada por todos
os Departamentos Regionais do SENAI nos cursos presenciais e a distância.
______________________________________________________________
S477s
SENAI-Departamento Regional de Goiás
Sistemas operacionais /SENAI – Departamento Regional de
Goiás – Goiânia, 2012.
234p.: il.
CDD – 004
______________________________________________________________
SENAI Sede
Índice................................................................................................................................................................................... 231
Introdução
Caro aluno, nesta unidade você entenderá qual a responsabilidade do sistema operacional
em gerenciar recursos de hardware, como o tipo de processador, a quantidade de memória, o
disco rígido e a placa de vídeo.
Nesta unidade você também aprenderá mais sobre as funções, requisitos e arquitetura de
sistemas operacionais, bem como os tipos existentes.
A seguir, são descritos na matriz curricular os módulos e as unidades curriculares do curso,
assim como suas cargas horárias.
Quadro 1 - Habilitação Profissional Técnica em Manutenção e Suporte em Informática
Bons estudos!
Conceitos de sistemas operacionais
O computador está presente para ajudar na solução de problemas e não ser um novo pro-
blema. Assim como profissional de TI é importante que você entenda também a metodologia
de operação destes sistemas e seus gerenciamentos.
Sistemas Operacionais
18
Organização Internacional
de Padronização. 2.1.1 CONCEITO DE SISTEMA OPERACIONAL - UMA VISÃO INICIAL
Dreamstime (2012)
Figura 4 - Interrogação
Neste momento, você deve estar pensando qual a relação entre a guerra, a ad-
ministração moderna e o processo fabril, não é mesmo? O que existe em comum
nas três?
Uma resposta possível seria a presença de um sistema que gerencia o conjun-
to de operações de cada uma das atividades citadas acima, gerencia o conjunto
de metas. No primeiro caso, um sistema operacional para a guerra; no segundo,
um sistema para gestão e, no terceiro, um sistema para o processo fabril.
Sistemas Operacionais
20
E o computador, quando entra nesse processo? Chegaremos lá! Mas antes, re-
finaremos mais um pouco a definição de sistema operacional.
O HARDWARE E O SOFTWARE
Dreamstime (2012)
Figura 6 - Alan Turing
Dreamstime (2012)
Figura 7 - Von Neumann
to de ações que esse hardware iria executar). Um hardware era capaz de executar
diferentes softwares, desde que devidamente ajustado. Podemos dizer que o pro-
jeto de software da época consistia em projeto mecânico e elétrico.
O uso de relés simplificou o equipamento (computador), mas somente com o
surgimento dos transistores baseados em semicondutores conseguimos progra-
mar de forma adequada os preceitos de portas lógicas, e seguir o trabalho usando
lógica matemática.
Vin VE
RLoad
+Vcc
B A OUT
0 0 1
0 1 0 R2
1 0 0
1 1 0 OUT
T1 Q = A+B
R
A
Transistor
Switches
R
B
Denis Pacher (2012)
T2
Este advento citado nos parágrafos anteriores nos leva à separação do har-
dware e do software. O hardware é o circuito combinacional eletrônico. O software
é o conjunto de números, 0 e 1. São instruções apresentadas ao hardware, como
se escritas em uma fita de dados, criando um autômato finito eletrônico.
O SISTEMA OPERACIONAL
Memória
entrada Saída
Processamento
Você verá que, ao longo do curso, nosso foco será trabalhar com os sis-
temas operacionais levando em conta o modelo acima e a gerência de suas
diversas partes.
Após conhecer um pouco da história da computação, você aprendeu sobre a
separação do que é hardware e do que é software. Assim, compreendeu melhor o
papel do sistema operacional.
Você teve a oportunidade de acompanhar a evolução dos computadores ele-
trônicos e o ponto crucial em que surge a separação do hardware (o físico) e do
software (a parte lógica). Também viu a relação disso com o uso de transistores e
o surgimento dos sistemas operacionais. Ao olhar para um circuito eletrônico ou
para um código fonte, talvez a visão seja diferente a partir de agora. Faça a ativi-
dade abaixo e vamos em frente!
também as partes do hardware, garantindo melhor uso das aplicações dos usuá-
2 FORTRAN rios. Outro objetivo é o histórico: portabilidade de aplicações.
É a primeira linguagem Na década de 50, cada fabricante de hardware tinha componentes únicos,
de alto nível lançada no
mercado. cada um desenvolvia seus periféricos de entrada e saída, organização de memó-
ria, CPU e linguagem de programação de baixo nível (linguagem de máquina).
Nesse contexto, em que cada componente realizava tarefas de modos diferen-
3 MIDDLEWARE tes, os sistemas operacionais tinham como objetivo isolar este mundo, digamos
hostil, do usuário final (programador de software). A ideia era que o usuário tives-
É um programa de
computador que faz a se sempre a visão de um mesmo hardware, sem se preocupar com detalhes de
mediação entre software e
as demais aplicações. implementação. Essa visão foi acentuada com a criação da linguagem Fortran2,
que permitiu o desenvolvimento de softwares independentes dos hardwares, por
ser uma linguagem de alto nível.
Os sistemas operacionais consistiam, talvez, na primeira versão do que cha-
mamos de middleware3 (ou mediador), uma camada entre dois mundos que faz a
mediação entre software e demais aplicações, isolando e provendo serviços uni-
formes entre eles. Outros exemplos de mediadores seriam os SAPs (Service Access
Point), visto em redes de computadores, e a JVM (Java Virtual Machine).
Vamos analisar agora a figura abaixo para descrevermos as funções de um sis-
tema operacional.
Memória
entrada Saída
Processamento
Denis Pacher (2012)
Arquivos
Figura 13 - Tempo
Durante esse tempo de I/O (entrada e saída) a CPU ficava parada, deixando o pe-
riférico (impressora) funcionar.
Uma questão que surgiu foi: se temos uma CPU que custou uma fortuna, como
deixá-la parada na maior parte do tempo, esperando a entrada dos dados para a
memória ou a saída de um relatório? O que fazer?
Essas questões levaram ao avanço no desenvolvimento dos sistemas opera-
cionais. O objetivo era permitir explorar o uso da CPU do computador, de forma
que os seus recursos fossem melhores aproveitados.
A resposta veio com o conceito de sistema multitarefa, que permitiu a um
programa em execução efetuar outra tarefa enquanto estivesse esperando uma
atividade de entrada e saída (como a listada no exemplo). Quando a nova tarefa
terminasse ou entrasse em I/O, a tarefa antiga poderia ser retomada. Dessa forma,
temos um sistema multitask ou multitarefa.
Com esses sistemas, o avanço em sistemas operacionais foi interessante, de-
vido à necessidade de implementar mecanismos de proteção às aplicações em
execução. A ideia era que uma não interferisse na outra, garantindo que os dados
que estavam no processador fossem salvos em algum lugar quando uma tarefa
fosse retirada da execução e encaminhada para uma atividade de I/O.
Os conceitos básicos e os módulos que compõem um sistema operacional
neste contexto são:
a) Gerente de I/O: cuidava dos diversos periféricos;
b) Gerente de memória: garantia o uso adequado e proteção das diversas ta-
refas executadas, por meio da gerência e da proteção de memória;
c) Gerente de arquivos: servia como um agrupador de arquivos, permitindo
gerenciar os dados armazenados nos I/O ou no disco rígido. Para entender
melhor o gerente de arquivos e para que as informações ficassem organiza-
das corretamente, eram utilizados termos comuns: armários (diretórios), que
possuem pastas (arquivos), que possuem registros;
d) Gerente da CPU: trocava as diversas tarefas em execução, iniciando e ter-
minando-as. A denominação dessa funcionalidade do módulo do sistema
operacional foi Gerente de processos. Já o ato de trocar processos em exe-
cução foi denominado de escalonamento.
O escalonamento de processos tem um incremento na sua complexidade
quando passamos a trabalhar com terminais conectados aos computadores no
lugar do deck de cartões, permitindo que diversos usuários acessem o computa-
dor ao mesmo tempo. Surge os chamados sistemas de tempo compartilhado, em
que a CPU tem seu tempo de uso dividido entre diversos usuários, minimizando
o tempo parada.
2 Conceitos de sistemas operacionais
31
Podemos, então, ajustar a figura anterior para a figura abaixo, em que sobre-
pomos as funções do sistema operacional ao hardware, permitindo-nos entender
o papel de cada parte (gerente) do sistema operacional no processo de gestão.
Gerente de
memória
Memória
Gerente de
processos
Arquivos
Você já percebeu que para muitas coisas que desejamos fazer, temos alguns re-
quisitos para cumprir antes de seguir em frente? Na escola, por exemplo, precisa-
mos passar em todas as disciplinas de uma série para avançarmos para a próxima.
Sistemas Operacionais
32
INTERRUPÇÃO
Barramento
CPU
dados
Con
br
IRQ
GERÊNCIA DE MEMÓRIA
a) MAINFRAME
FabriCO (2012)
b) DESKTOP
atributos de proteção. Como herança desse modelo, temos ainda o vírus compu-
tacional, devido à incapacidade de o sistema operacional se proteger de progra-
mas maliciosos.
C) REDE DE COMPUTADORES
d) SISTEMAS DISTRIBUÍDOS
Denis Pacher (2012)
f) SISTEMAS EMBARCADOS
6 I/O bound
Dreamstime (2012)
Figura 22 - Exemplo de Sistema embarcado
b) Sistema batch
Nos sistemas batch, ou de lote, a aplicação era colocada na memória e os da-
dos que alimentavam a aplicação eram postos de forma pré-gravada em um
dispositivo de entrada. No primeiro momento, os dados eram codificados
(da mesma forma que o programa) em cartões perfurados que eram lidos
no computador. No segundo momento, com o uso de armazenamento se-
cundário, os dados eram gravados em arquivos e o software, quando execu-
tado, lia esses arquivos. O resultado dessa execução também era gravado
em arquivos. Uma característica interessante é que o usuário do sistema não
precisa estar disponível para a execução da aplicação, permitindo que a exe-
cução seja feita no momento adequado para a empresa que cuida da parte
de informática. Esse tipo de processamento foi o modo primário de trabalho
dos chamados mainframes. Esse sistema ainda é bastante utilizado para con-
solidar réplicas de bancos de dados, dentre outras aplicações.
O PROGRAMA MONITOR
Você já deve ter se deparado com o termo “monitor” diversas vezes. Utilizare-
mos esse termo a um tipo de sistema operacional.
O sistema operacional, em sua versão mais simples, ficava residente no har-
dware desempenhando o papel de ler o deck de cartão na entrada, colocar em
execução, ler a nova tarefa, e assim repetitivamente – assumiu o nome de pro-
grama monitor.
Ele desempenhava basicamente tarefas de entrada e saída, pois os sistemas
computacionais da época eram muito simples e permitiam apenas uma execu-
ção por vez. Os periféricos eram essencialmente deck de cartões e impressoras.
Apenas uma tarefa era colocada em execução e a CPU só era liberada quando
essa tarefa era finalizada. Tínhamos um sistema monotarefa e monousuário, sem
suporte a escalonamento. A principal característica das aplicações dessa época
era I/O bound do tipo batch.
SISTEMAS MULTITAREFA
Percebendo que grande parte das aplicações tinha como característica o tipo
batch e I/O bound que passavam mais tempo fazendo entrada e saída do que
usando o processador (CPU), e que o custo da CPU era muito alto para ela ficar
parada, os cientistas da computação passaram a focar em uma solução para este
problema: como usar o hardware ao máximo?
2 Conceitos de sistemas operacionais
43
Figura 23 - Fila
Fonte: O Autor
DESEMPENHO E CUSTO
O QUE FAZER?
Antoine Lavoisier afirmava que “Na natureza nada se cria, nada se perde, tudo se
transforma”. Talvez você não concorde com essa lei e prefira uma visão de mundo
que foi cantada pelos Engenheiros do Hawaii, em Além dos Outdoors, “...As coisas
mudam de nome, mas continuam sendo religiões As coisas mudam de nome, mas
continuam sendo o que sempre são...”. Vamos considerar que tudo se transforma
e, se conhecer os fundamentos do que foi transformado, terá uma chance de rea-
proveitá-lo sem ter necessidade de criar algo novo.
Veremos uma ideia antiga: a multiplexação por tempo, normalmente discu-
tida na área de redes de computadores ou telecomunicações, mas que pode ser
exemplificada de forma simples.
Como usar uma sala de aula?
Denis Pacher (2012)
Imagine uma sala de aula em uma escola que possui aulas nos três turnos. O
7 Time slice que fazer com essa sala para utilizá-la melhor e acomodar as atividades requeri-
Constitui a unidade de
das? Você poderia pensar em algumas alternativas, acompanhe.
tempo alocada para cada
processo em execução. É a) Primeira opção - uso exclusivo: a escola decide que só uma turma pode
o elemento básico para o utilizar a sala de aula. Quando essa turma entrar, só sairá dela quando as ati-
escalonamento.
vidades terminarem. Várias turmas poderão usá-la desde que seja liberada
pela turma que a utiliza, liberando-a no final do turno ou enquanto a turma
estiver numa aula de educação física, por exemplo.
b) Segunda opção - janelas de aula: a escola decide que existem horários de
uma hora para cada aula. Cada turma pode usar essa sala por uma hora. Pas-
sando esse tempo e ninguém estiver esperando para usá-la, a turma pode
ficar mais uma hora. Se alguém chegar e a turma já estiver em aula, deverá
esperar na fila, fora da sala. Se a turma que estava lá não terminar as ativida-
des previstas dentro de uma hora, deverá retornar para a fila e esperar sua
próxima vez.
c) Terceira opção - dividir a sala em partes menores: se a sala for muito gran-
de, podemos dividi-la e acomodar mais de uma turma ao mesmo tempo. Em
cada subsala, programar a opção um ou dois, citada acima.
Na primeira opção, não existe compartilhamento do recurso: alguém pega e
usa até o final. Isso lembra o cenário dos sistemas operacionais monotarefa, não
é mesmo?
Na segunda opção, o tempo de uso da sala é dividido e usamos uma regra para
controlar o seu uso – no nosso caso, uma fila. Poderíamos ter outros mecanismos,
como algo que implementasse prioridade: se o diretor da escola chegasse com
uma turma de alunos, por exemplo, ele teria direito de utilizar a sala antes. Nesse
caso, criaríamos fatias de tempo (slices) que seriam alocadas – é o que chamamos
de multiplexação no tempo.
Na terceira opção, dividimos a sala em partes e vários usuários poderiam usu-
fruí-la ao mesmo tempo. Neste caso, aplicam-se as premissas 1 (ficar enquanto
quiser) ou 2 (dividir cada subsala em janelas de tempo para uso). Esse tipo de
multiplexação de recurso, em que dividimos o recurso em partes para atividades
específicas, é chamado de multiplexação em frequência.
Contexto da atividade:
Uma questão que surge se adotarmos a opção 2 é: se a janela de tempo de
uma turma é finalizada, ela deve desocupar a sala, mesmo que as tarefas ainda
não tenham sido finalizadas. Mas o que fazer com as anotações do quadro negro?
O que fazer com a organização das cadeiras?
Bom, a solução consiste em salvar uma cópia desse estado da sala, uma foto ou
snapshot, para que quando a turma voltar para a sala, isso seja restaurado –poderí-
2 Conceitos de sistemas operacionais
47
amos deixar o zelador da escola cuidando dessa atividade, por exemplo. Fica claro
que a ideia de dividir a sala em janelas de tempo de uso gera gasto de recursos.
Denominamos essas informações pertinentes a um estado de execução de
uma atividade de contexto.
Se voltarmos nossa atenção para a computação e pensarmos na implementa-
ção de multitarefa em sistemas operacionais, é essencial que lidem com o contex-
to de cada programa em execução.
Qual seria uma boa solução para a computação?
As três soluções são viáveis, tudo vai depender do seu objetivo. Se pensarmos
no problema de usar adequadamente o computador com vários programas em
execução, a opção 2, multiplexação no tempo, mostrou-se a mais adequada.
A ideia básica consiste em, empregando o relógio de tempo real da máquina,
marcar janelas de tempo, de n milissegundos, por exemplo, sendo que execu-
tamos o conceito de multitarefa, mas com a característica de que um programa
em execução fica usando da CPU apenas uma janela de tempo (time slice7). Um
módulo do sistema operacional, o escalonador, cuida dessas filas e implementa o
controle de tempo.
$$ $
$
$ $ $$ $$
$ $ $$
$ $ $ $
$ $ $
Denis Pacher (2012)
$$
$
$ $
Figura 25 - Time slice
Modo usuário
API do SO - Maq virtual
Modo kernel
Ger. Ger.
Arquivo Memória
Ger.
Processo
Escalonador
Ger.
I/O kernel
Denis Pacher (2012)
Hardware
a) No nível mais baixo está o hardware do computador, que só pode ser aces-
9 Modularização sado via sistema operacional, garantindo que, se o sistema for multitarefa/
Em tecnologia da
multiusuário, não haja interferência entre os processos em execução.
informação, é um conceito
onde o sistema ou software b) No nível acima do hardware tudo está em memória é software. A diferença é
é divido em partes distintas que parte será o sistema operacional e parte aplicações de usuários. A linha
verde indica essa separação: o que está abaixo dela é sistema operacional
e acima, aplicações do usuário. Programas que conseguem rodar nesse es-
paço baixo de memória do sistema operacional, chamamos de processos
em modo kernel e, quem está acima, chamamos de processos em modo
usuário ou espaço do usuário. A separação desse espaço é implementada
via mecanismo de paginação do processador.
c) Voltando ao diagrama, acima do hardware temos o kernel do sistema opera-
cional, onde estão presentes o suporte ao dispositivo de I/O (gerente de I/O)
e o acesso básico ao hardware de memória e escalonador. Podemos notar
os diversos gerentes (processo, memória e arquivo) que usam suas funções
entre si e fazem uso do kernel para acessar o hardware.
d) Após os gerentes, logo acima da linha verde, temos no espaço do usuário a
Application Program Interface (API) para uso das funções do sistema opera-
cional, que ocorre por meio do mecanismo de interrupção. O sistema ope-
racional altera o vetor de interrupções do hardware e coloca determinadas
interrupções apontando para dentro do código do sistema operacional.
Uma aplicação do usuário pode invocar uma interrupção do processo, por
exemplo, na arquitetura IA32, via instrução INT do processador.
Normalmente, acima dessa API, que funciona como o hardware que nossos
programas veem (uma máquina virtual), estão as aplicações dos usuários ou al-
gum mecanismo de acesso, denominado de shell (em analogia a uma concha, que
esconde e encapsula o que está dentro dela). Existem diferentes tipos de shell:
a) shell textual: como o Command.com no MS DOS, CMD no Windows ou
bash no Unix;
b) shell gráfica: como no Windows ou no Unix sendo sua interface denomina-
da Graphic User Interface (GUI).
Vamos recapitular o que vimos? Você aprendeu como os diversos blocos se
encaixam na ótica de prover e usar serviços. Viu que normalmente o acesso ao sis-
tema operacional é feito via uma API padronizada, implementada via mecanismo
de interrupção. Esse é um passo importante na compreensão do funcionamento
de sistemas operacionais. Continue atento e vamos em frente!
2 Conceitos de sistemas operacionais
51
COMO IMPLEMENTAR?
Dreamstime (2012)
nal para outro local no código do programa). Nesse caso, como as variáveis
que os diversos módulos empregarão são globais, não há necessidade de se
passar parâmetros entre os módulos, tornando a execução mais rápida. Se
pensarmos em usar apenas um grande bloco com gotos, não faz sentido a
passagem de parâmetros. Quando se aprende a programar computadores,
independente da linguagem, o que descrevemos é duramente criticado por
gerar um código totalmente dependente entre suas partes e por ser de difícil
manutenção, ainda que seja extremamente eficaz.
b) Você pode modularizar seu software em blocos. Assim, tudo que for passa-
do entre os blocos, sejam procedimentos, funções ou objetos em programa-
ção orientada a objetos, é explicitamente passado como parâmetro, fazendo
com que exista uma relativa independência entre os módulos, permitindo
a evolução de um módulo independente dos outros ou até a sua completa
substituição. Uma característica que normalmente é omitida é de que a mo-
dularização com passagem de parâmetros torna o código mais lento.
Observe abaixo a figura que representa a organização de um sistema opera-
cional:
Modo usuário
API do SO - Maq virtual
Modo kernel
Ger. Ger.
Arquivo Memória
Ger.
Processo
Escalonador
Ger.
I/O kernel
Acesso a memória física
Denis Pacher (2012)
Hardware
Como vimos, até a década de 70, os sistemas eram escritos em linguagem As-
sembly por questão de desempenho. O Assembly não permite implementar mo-
dularização com variáveis locais de forma muito simples. A opção foi natural. O
programa monitor foi crescendo, agregando funções, foi sendo dividido em ge-
rentes funcionais, mas o código era somente incrementado. Uma chamada do ge-
rente de arquivo ao gerente de memória, basicamente, colocava os valores dese-
jados em uma área de memória (variável) e era feito um goto para o outro gerente
e depois outro goto de volta. Simples, eficaz e fácil de perder – mudar uma linha
de código no sistema operacional poderia levar a efeitos colaterais em escala. A
figura abaixo representa como ficaria nosso sistema operacional nesse contexto.
Chamamos essa abordagem de desenvolvimento de Sistema operacional mo-
nolítico ou simplesmente kernel monolítico. Exemplos de sistemas operacionais
desse tipo são o Unix e o Windows.
Modo usuário
API do SO - Maq virtual
Escalonador
Ger.
I/O kernel
Acesso a memória física
Denis Pacher (2012)
Hardware
Você sabia que quando a informática começou, cada computador era dese-
nhado para uma atividade específica (seu hardware e seu sistema operacional)?
Havia máquina para o comércio, para a indústria, para a pesquisa científica etc.
Imagine o custo para manter esse desenvolvimento de ambientes diferentes para
uma empresa como a IBM, na década de 50.
Era necessário fazer algo! Discutiremos, neste tópico, que caminhos a informá-
tica tomou a partir da década de 50 e que, hoje, tornaram-se o padrão do merca-
do. Viajaremos, agora, na bela história do sistema operacional Unix – o “pai” dos
sistemas operacionais atuais.
MULTICS
Figura 30 - Multics
Fonte: http://www.multicians.org/mulimg/kl-cisl-multics-rug.jpg
2 Conceitos de sistemas operacionais
55
UNIX
UNIX EM IBM PC
Você deve estar se perguntando por que o sistema operacional Unix não foi
implementado como primeira opção IBM PC, já que era multiplataforma e de có-
digo aberto em sua versão BSD Unix. Qual a razão de se usar o MS DOS?
Tem algumas questões sobre a história dos sistemas operacionais que você
deve saber!
a) O MS DOS, primeiro sistema operacional para microcomputadores IBM PC,
não foi desenvolvido pela Microsoft, mas comprado no mercado por 50 mil
dólares. Ele era uma variante de um sistema operacional chamado CP/M, do
Unix.
b) Os sistemas de janela foi desenvolvido na Xerox e implementado depois
nos computadores da Apple, e somente muito mais tarde implementado
nos PCs.
c) O Windows não era a primeira opção para interface gráfica no PC. A IBM
apostava em outro produto: o OS/2.
Conheceremos um pouco da história de um homem visionário, o Steve Jobs,
e de um homem de negócios, o Bill Gates, e de duas empresas sem percepção da
evolução da informática: a Xerox e a IBM. Essas histórias nos ajudarão a entender
que caminhos nos levaram a produtos como o Windows Me ou ao Windows Seven.
DA ORIGEM DA MICROINFORMÁTICA
MICROSOFT WINDOWS
Application Programming
Interface (ou Interface
de Programação de
Aplicativos) é um conjunto
de rotinas e padrões
estabelecidos por um
software para a utilização
das suas funcionalidades
por aplicativos que não
pretendem envolver-se em
detalhes da implementação
do software, mas apenas
usar seus serviços.
Figura 32 - Linux
UM POUCO DE HISTÓRIA
O INÍCIO
Em 1992, a internet foi aberta à comunidade não científica. A ideia era cola-
borar em nível de uma grande “aldeia global”. Tornava-se realidade a descrição
feita por Mashall McLuhan na década de 60, na qual afirmava que “a nova interde-
pendência eletrônica recria o mundo à imagem de uma aldeia global” (00080). As
possibilidades de colaboração em escala mundial nunca tinham sido tão presen-
tes, a introdução do acesso hipermídia a ela via navegadores e web, tornou isso
realidade para pessoas que não tinham experiência em informática.
Na Finlândia, em 1989, um estudante de graduação chamado Linus Torvalds se
deparava com um problema: gostaria de ter um sistema operacional melhor em
seu computador do que os da Microsoft, mas não vislumbrava nenhum (se tivesse
pesquisado um pouco mais, teria encontrado uma vasta lista de sistemas Unix BSD
que resolveriam seu problema). Teve, então, a ideia de pegar o código fonte Minix
que tinha usado em uma disciplina de graduação e melhorá-lo para que pudesse
usar em seu computador. Começou a tarefa de voltar às coisas que haviam sido
removidas do Unix no Minix e logo postou uma versão do núcleo do sistema na
internet, pedindo colaboração no seu desenvolvimento, como prática da época.
Outros acharam interessante e começaram a colaborar e divulgar a ideia.
Marcio Pessoa
O GNU LINUX
Denis Pacher
Figura 34 - Logo GNU
Fonte: gnu.org
AS DISTRIBUIÇÕES
A partir dessa união, surgiu a ideia de juntar todos os componentes que eram
necessários para que o sistema operacional executasse em um único lugar e de-
pois distribuí-los já agrupados.
Uma distribuição Linux consistia, e consiste, em um conjunto de ferramentas
selecionadas para fazer o kernel Linux funcionar em um sistema completo. A pri-
meira distribuição Linux foi a SLS e depois vieram as distribuições Slackware, De-
bian e Red Hat, nas quais quase todas as demais são baseadas.
Uma distribuição se difere da outra por uma série de razões:
a) Uso: se é para um servidor, para um desktop, para um embarcado;
2 Conceitos de sistemas operacionais
65
AS RAZÕES DO SUCESSO
Dreamstime
Figura 35 - Sucesso
Sistemas Operacionais
66
Dreamstime
Figura 36 - Tendências
De outro lado, o simples. A mesa, IBM PC, simples, por sua arquitetura aberta,
cresceu. Hoje possui processadores com vários núcleos e/ou com várias linhas de
execução (threads). Tanto poder de processamento em uma mesa que a usamos
de forma mais adequada, via virtualização ou paralelismo.
Sistemas Operacionais
68
Juntando a isso veio a internet ligando a tudo e a todos. A mobilidade via Wifi
ou 3G/4G. O Ipod da Apple foi um passo. Sempre presente, sempre conectado. As
aplicações cresceram, os usuários mudaram também.
Surge um espantoso mundo. A computação em nuvem e como serviço. Nada
muda, na verdade voltamos ao paradigma do mainframe, a diferença é que esta-
mos em uma plataforma aberta de hardware e Unix.
O sistema operacional, diante do novo modelo de computação, tende a mu-
dar constantemente com estas e outras novidades na informática. Estamos na era
pós-PC, onde frequentemente usamos dispositivos embarcados, como celulares,
TV digital ou tablets.
Curiosamente, do outro lado, quando pensamos no IBM PC, vimos que alcan-
çou um nível de maturidade muito alto em sua arquitetura, suportando múltiplos
processadores e múltiplos núcleos em cada CPU.
Os sistemas operacionais têm que atender os dois mundos. Do ponto de vista
de embarcados, a necessidade é cada vez mais fazer o simples: hardware simples
e diminuto. Aqui temos o IOS da Apple como referência, junto ao Android da
Google, duas variantes Unix. Para que os principais sejam citados, temos ainda
o Microsoft Windows Mobile. Se a tendência é termos embarcados, esses são os
sistemas operacionais.
No caso da computação em nuvem, o sistema operacional na máquina pode
ser simples, sendo basicamente o núcleo, um mecanismo de autenticação e um
browser para acessar os serviços. É uma tendência na forma de netbooks e tablets,
com destaque ao Chrome OS e ao Android.
Se pensarmos no desktop e no servidor, os processadores têm mais núcleos e
capacidade de processamento. Sistemas operacionais que suportem essas carac-
terísticas, bem como o suporte à virtualização de hardware em ambiente multi-
core (multinúcleo), são a tendência. O Unix, em suas variantes Linux, OpenBSD e
FreeBSD, e MAC OS X tem destaque aqui.
Do ponto de vista interno dos sistemas operacionais, a presença de diversos
núcleos tem levado ao uso massivo de virtualização de hardware, com suporte
pelos principais fornecedores de processadores de mercado – Intel e AMD. A mu-
dança do sistema operacional para suportar muitos núcleos de forma mais ade-
quada, com alteração do módulo de gerência de processos e memória, tem sido
muito interessante.
O aparecimento de novos hardwares, como de armazenamento em estado só-
lido em discos SSD (Solid State Disk), tem levado à nova forma de tratar sistemas
de arquivos, em que o paradigma passa a ser endereçar partes de memória física,
formando arquivos no lugar de setores em discos rígidos.
2 Conceitos de sistemas operacionais
69
2.2 VIRTUALIZAÇÃO
cional. Como forma de simplificar a escrita deste código, passou-se a usar cono-
tação binária (cada bit podia representar um estado lógico), octal (suficiente para
exprimir dados de 7 bits) e posteriormente em hexadecimal (0 a 255 podem ser
representados por duas letras 00 a FF).
Dada a dificuldade de se escrever uma ideia utilizando apenas números, seja
binários ou hexadecimais, foi desenvolvida a linguagem Assembly (ou linguagem
de montagem). No Assembly o programa é escrito em mnemônicos, sendo que
cada mnemônicos tem uma tradução direta para o código de máquina do har-
dware. Um exemplo: se queremos guardar o valor 10, poderíamos ter os códigos
mostrados na tabela.
Instruções Linguagem
A <- 10 pseudocódigo
A=10; linguagem C
Mov AX,10 usar o registrador AX para armazenar o valor 10
10E200A código de máquina em hexadecimal (código hipotético a título de exemplo)
Fonte: Autor
O MONTADOR OU ASSEMBLER
Código C Assembly
mov ax,[a]
mov bx,[b]
cmp ax,bx
if (a > b) jg then
a=10; mov [a],20
else a=20; jmp cont
then:
mov [a],10
cont:
Fonte: Autor
A INTERPRETAÇÃO
Processamento
Interpretador
Figura 37 - Interpretador
Figura 38 - Java
PRIMÓRDIOS DE JAVA
CARACTERÍSTICAS
Sistema Operacional
Denis Pacher
Hardware
Figura 39 - Java
Denis Pacher
Hardware Hardware Hardware
Podemos notar que para a aplicação o hardware não muda. Podemos trocar
o hardware, o sistema operacional e a aplicação continuarão a executar sem pro-
blemas, garantido sua portabilidade desde que tenhamos uma máquina virtual
Java (JVM).
Um ponto chave em relação à Java consiste no desempenho. Por ser uma lin-
guagem interpretada, cada comando tem de ser traduzido em tempo de execu-
ção do byte code Java para o código de máquina real e executado, uma forma de
minimizar isto foi a Sun introduzir o JIT (just in time compiler) que traduz ao car-
regar o objeto para memória, os trechos chaves para o código de máquina local.
É uma tentativa de melhorar o desempenho, mas dificilmente conseguiremos a
velocidade e uso de recursos de uma linguagem compilada, contudo, estamos
abrindo mão de velocidade em nome de portabilidade.
O uso deste hardware “abstrato” da JVM nos permite separar o sistema ope-
racional e o hardware real, trabalhando em um mudo virtual. Você deve estar se
questionando: portabilidade não era o que desejávamos com um sistema opera-
cional desde a década de 50? Sim! Do ponto de vista prático não necessitamos
mais um programador especializado em cada sistema, basta saber desenvolver
para o ambiente Java e deixar o pessoal de suporte instalar as máquinas Java e
pronto. A popularização foi tal que temos JVMs para quase tudo, desde computa-
dores a celulares, videogames e mesmo para computação embarcada.
Vimos que a solução Java da Sun permitiu a realização de um antigo sonho em
computação: o desenvolvimento de código portável. Mas tudo tem seu preço,
neste caso a queda de desempenho.
HISTÓRICO
Do Intel 8086 original, passado pelo 8088 incorporado no IBM PC original, até
os processadores atuais existiu uma longa evolução. Com o tempo o desenvol-
vimento de processadores mais rápidos e eficazes levou a um problema inte-
ressante, que se consolidou no processador Pentium 4 da Intel: a velocidade do
processador era tal (acima de 3 GHz= 3000Mhz) que as memórias (em torno de
266 MHz) e dispositivos de armazenamento (em torno de 100 Mbps) que a Intel
resolveu implementar o conceito de Hyper Threading (existia apenas um proces-
sador, mas ele era mostrado ao usuário como se fosse mais de um, visto seu alto
desempenho, muito maior que os demais componentes do mercado presentes
no microcomputador). Internamente na CPU se via um mecanismo parecido com
o adotado para múltiplos processadores e os programas viam duas CPUs.
Quando o processador Pentium 4 teve que ser removido do mercado devido
à instabilidade, a Intel, que tinha uma CPU de 3,6 GHz, resolveu adotar um produ-
to interno voltado a notebooks como solução, o Pentium M que trabalhava a 1,6
GHz. A solução para não impactar o desempenho foi colocar em um mesmo blo-
co de silício dois processadores Pentium M e programar um circuito de distribui-
ção de carga entre eles. Para o usuário final, quando usava Hyper Thearding exis-
tiam dois processadores de 1,8 GHz lógicos (no Pentium 4 de 3,6 GHz), agora na
solução adotada, chamada de arquitetura Core Duo, existiam dois processadores
físicos de 1,6 GHz que juntos tinham um desempenho bruto próximo ao Pentium
Sistemas Operacionais
78
NOSSAS APLICAÇÕES
VIRTUALIZAR
dos estão executando ao mesmo tempo, mas já sabemos que estão sendo escalo-
nados no tempo. Cada aplicação pega um pouco dos recursos das máquinas, por
exemplo, tempo de CPU. Interessante é podermos usar isso a nosso favor quando
temos excesso de recursos, como no caso de processadores com vários núcleos.
A ideia de virtualizacão de hardware consiste na instalação de uma aplicação
sobre o hardware, a mesma o particiona, alocando partes dos recursos a tarefas
em execução, sendo que cada tarefa é um sistema operacional. O sistema opera-
cional “pensa” que está executando no hardware, mas na verdade está executan-
do sobre outro software. Podemos observar isto na figura abaixo, onde o que é
interessante é a similaridade com a ideia de Java que também esta na figura.
SO SO
Hardware
Em comum temos que, quem usa uma aplicação de virtualização, tem a visão
apenas da aplicação abaixo (seja a JVM ou software de virtualização), e não tem
noção do hardware como o todo, apenas da parte que foi alocada à máquina vir-
tual. E o que tem isso a ver com processos em sistemas operacionais?
PROCESSO
O processo, durante cada fatia de tempo, é dono da CPU e das áreas de memó-
ria alocadas aos mesmos. Você pode notar a semelhança entre uma máquina vir-
tual que particiona e isola o hardware e um processo que particiona e isola partes
dele num computador em uma janela de tempo. Podemos pensar nos processos
como máquinas virtuais multiplexadas no tempo, enquanto as máquinas virtuais
reais se aproximam do conceito de multiplexação de frequência.
Uma máquina com suporte a diversos processos se comporta como um har-
dware particionado em diversas máquinas virtuais temporalmente. Enquanto que
em uma máquina virtual alocamos partes do hardware durante todo o tempo de
uso, no sistema operacional alocamos ao processo partes dele somente na sua
fatia de tempo de execução (time slice).
Vimos, neste tópico, que um processo se comporta como uma máquina virtual
particionando o hardware em partes durante um intervalo de tempo.
2 Conceitos de sistemas operacionais
81
max
Pilha
estrutura
de dados
dados
Denis Pacher (2012)
texto
0
Figura 42 - Áreas de um processo
Fonte: http://dc146.4shared.com/doc/fu5idfwp/preview004.png
Sistemas Operacionais
82
Ready Running
O PCB
process state
process number
program counter
Registers
memory limits
list of open files
Denis Pacher (2012)
...
Figura 44 - Program Control Block (PCB)
Fonte: http://dc146.4shared.com/doc/fu5idfwp/preview008.png
Vimos que processos são programas em execução e que podem variar seu es-
tado ao longo do seu ciclo de vida.
O ESCALONAMENTO
DEADLOCK
O problema consiste em uma adaptação livre: cinco filósofos com voto de si-
lêncio resolvem sentar para jantar. O prato está servido, macarrão, e são dispostos
cinco hashis12 na mesa. Um filósofo só pode comer se tiver em mãos dois hashis;
caso contrário, deve esperar.
Observando a figura anterior, tudo pode dar certo. Com cinco hashis, dois fi-
lósofos podem jantar ao mesmo tempo. Ao terminar, eles liberam os talheres e
mais dois podem jantar, e então finalmente o último. Perfeito, os recursos são
suficientes; porém, por uma questão cultural, todos os filósofos ao mesmo tempo
levantam sua mão esquerda e buscam seu hashi à esquerda, e depois, com a mão
direita, buscam o hashi à direita. O que vai acontecer?
Ao pegar o hashi da esquerda, cada um dos filósofos conseguirá um; mas, ao
tentar pegar o da direita, não conseguirá e ficará esperando. Na verdade, todos os
cinco têm um hashi, e ficarão esperando eternamente pelo o outro recurso para
jantar, morrendo todos de fome. Daí o nome bloqueio mortal, deadlock. Tínha-
mos os recursos para resolver o problema, mas sistematizamos para uma solução
que levou a problemas.
Você sabe como um processo é criado e agora como o mesmo pode ser esca-
lonado. Levando em conta diversas estratégias e alguns problemas que podem
surgir, ficam algumas perguntas: quanto custa criar um novo programa? Quanto
custa o escalonamento?
Por questão de segurança, quem pode mexer em recursos do sistema opera-
cional é apenas o sistema operacional. Logo, dividimos a memória do computa-
dor em um bloco que vai de zero a n, onde armazenaremos o sistema operacional
e fixaremos um registrador no sistema de paginação do hardware de memória
para assinalar a atividade. Para acessar esta área de memória, devemos estar no
chamado modo sistema, isto é, no sistema operacional. Acima deste endereço, os
programas podem acessar: chamamos de modo usuário.
Aplicações executam sempre em modo usuário e sistema operacional em modo
sistema. Existe um custo para chavear entre esses modos: toda vez que escalona-
mos um processo ou criamos um novo processo, temos este custo de mudança
de modo. O que fazer se precisarmos ter um escalonamento e também criação de
forma mais ágil, como um servidor web que precisa atender simultaneamente di-
versas chamadas? Podemos criar um novo processo para cada chamada, ou, para
Sistemas Operacionais
88
Stack Stack
heap heap
data data
c) Pipes
Pipes são abordagens criativas de comunicação. Considere uma aplicação
que liste os arquivos em um diretório, um ls do Unix, por exemplo. A lista
é gerada de forma não ordenada. Se quisermos, podemos usar o aplicativo
sort para ordenar a saída e mostrar na tela de forma ordenada. Essa solução
seria a indicada a seguir, onde jogamos a saída do ls em um arquivo temp1 e
usamos o sort para ordenar.
ls > temp1
sort temp1
A questão é que estamos gerando um arquivo temporário inútil e este tipo
de problema é comum entre processos. Uma solução seria jogar a saída do
ls para o sort direto, mas como? A solução são os pipes, ou dutos, se preferir.
Um processo possui, associado a ele, arquivos padrões de entrada (stin), sa-
ída (stout) e erros (sterr) no Unix. Toda entrada interativa vem do stin e saída
vai para stout. A solução de pipe permite ligar a saída de um processo A à
entrada do processo B. Podemos expressar isto com o |. No caso, o comando
para representar a situação vista acima seria:
ls | sort
O CONCEITO FÍSICO
A VISÃO DO USUÁRIO
O HARDWARE
A SEGMENTAÇÃO
1400
stack Segment 0
subroutine
2400
segment 3
segment 0
symbol
table limit base 3200
0 1000 1400
1 400 6300
segment 4
Sqrt 2 400 4300 Segment 3
3 1100 3200
4 1000 4700
4300
main Segment 2
Segment table
segment 1 program 4700
segment 2 Segment 4
A PAGINAÇÃO
Virtual Address: T Z Y X
16 6 6
PPN DATA
verif
Figura 48 - MMU
Fonte: https://www-soc.lip6.fr/trac/tsar/raw-attachment/wiki/VirtualMemory/cache_tlb.png
Então, qual é a novidade? Cada processo possui uma tabela de páginas aloca-
das. Esta tabela é carregada na MMU quando o processo é escalonado.
Digamos que os processos A, B e C são os das seguintes tabelas de página:
Processo A
5
6
7
-
Processo B
10
Processo C
A MEMÓRIA VIRTUAL
operacional, podendo interagir com este apenas via API (normalmente via
mecanismo de interrupção).
O DIRETÓRIO
O Unix propôs a ideia de termos o diretório raiz (o/) como ponto de acesso ao
sistema e demais arquivos nele. A Microsoft, com o MS DOS, propôs a visão de um
Sistemas Operacionais
98
sistema de arquivos diferentes com cada unidade física de disco ou lógica (parti-
ção) complicando a localização de um arquivo. Assim, se mudarmos o nome de
uma unidade de J para H, por exemplo, um arquivo que sabíamos onde estava,
ficaria inacessível para quem desconhece a mudança. Nas versões mais novas do
Windows, temos uma visão semelhante a do Unix, com um ponto de montagem
onde todos os arquivos são acessados.
Conhecemos esta abstração de acesso ao armazenamento secundário como
VFS (Virtual File System - Sistema De Arquivo Virtual).
A SEGURANÇA
O ARMAZENAMENTO
A visão de alto nível provida pelo VFS é uma abstração muito importante, mas
devemos lembrar que os arquivos são armazenados em discos, DVDs, fitas e ou-
tras mídias. Dada a diversidade de formas como armazenamos os dados, deve-
mos ter um tratamento especializado para cada mídia.
A ideia básica no armazenamento de baixo nível é de termos, associado aos
metadados do arquivo/diretório presentes no VFS, algum mecanismo de lista de
blocos de armazenamento da mídia. Encontramos diversos formatos e o Unix tra-
balha com a tabela de inodes, em que temos ponteiros em um descritor para
diversos blocos do disco, e se o inode do arquivo não suportar a quantidade de
blocos necessária, podemos ter um ponteiro, um novo descritor com índices ape-
nas. Veja a figura abaixo:
Directory Entry
Name
Size
Direct block pointers
0
1
2
3
4
5
6
7
8
indir_ptr 0
9
indir_ptr 1
indirect block
doubly indirect block
indir_ptr 0 indir_ptr 0
indir_ptr 1 indir_ptr 1
Denis Pacher (2012)
indir_ptr 0
indir_ptr 1
OS SISTEMAS DE ARQUIVOS
Cada sistema operacional opta, na maioria das vezes, por criar um sistema de
arquivos para que se apresente um gerenciamento eficaz do armazenamento fí-
sico, sendo que em alguns momentos temos apenas a mudança do nível de VFS
(um exemplo é o Linux com a alocação de disco baseado em inodes do Unix e
podendo apresentar visões ao usuário como o EXT2, EXT3, JFS e outros).
Vimos, neste tópico, que diversos sistemas de arquivos existem no mercado,
sendo que os mais comuns, utilizados no dia a dia, são os do Linux e Windows NT.
Pense como seria se a internet ou as redes locais não existissem. Como com-
partilharíamos arquivos?
Antes da década de 1980, não tínhamos o problema, já que todos os arqui-
vos residiam no mainframe. Nem faria sentido falar em compartilhar arquivos via
rede. Com a introdução dos microcomputadores, a solução para o problema foi
compartilhar arquivos por meio de disquetes. Nada eficaz, mas atendia. Com seu
uso frequente nas empresas, surgiu a necessidade de interligar os computadores
e garantir algum mecanismo de compartilhamento de arquivos, hoje uma regra.
Do ponto de vista de sistema operacional, a Sun resolveu o problema no siste-
ma operacional Sunos (antecessor do Solaris,1985): utilizando a abstração de que
no sistema de arquivos temos o VFS (Virtual File System), uma camada que permi-
te separar como tratamos os arquivos em diretório, por exemplo, ou atributos da
parte de controle de armazenamento em disco dos arquivos (no Unix, tabela de
inodes), a Sun propôs o modelo em que o sistema de arquivo remoto fosse visto
como mais um dispositivo para armazenamento, de modo que as aplicações não
percebessem a diferença (esse fato é denominado de transparência de acesso).
A partir daí, foi desenvolvida uma série de tecnologias que são base de nossos
sistemas de arquivos em rede atuais.
2 Conceitos de sistemas operacionais
101
A NECESSIDADE DE AUTENTICAÇÃO
Em um ambiente sem rede, cada usuário é responsável por sua máquina, man-
tendo senha de acesso local, muitas das vezes via BIOS. Quando pensamos na
conexão dos computadores em rede, e a possibilidade de termos os arquivos re-
motos, qualquer um acessaria os mesmos, quebrando o requisito de confidenciali-
dade deles. Como garantir que só a pessoa autorizada tivesse acesso aos arquivos?
A Sun, da mesma forma que elaborou o RPC, viu que o caminho não era ter
contas de usuários locais em cada máquina, mas ter um serviço de rede integran-
do toda a base de informações da empresa, incluindo os nomes de usuários e
senha, bem como informações de nomes de máquinas, dentre outros, e que pu-
desse ser acessível a todas as máquinas. Criou então o NIS, que, integrado ao NFS
e RPC, são os pilares do compartilhamento de arquivos em rede.
Sistemas Operacionais
102
Contudo, a solução NFS, RPC e NIS estava restrita ao Unix em um primeiro mo-
mento e ao Sunos da Sun, mas por ter especificação aberta, foi adotada pelos
demais fornecedores do mercado Unix.
NO MUNDO PC E ATUALMENTE
O mercado IBM PC, que surgia na década de 1980, adotou a solução de com-
partilhamento de Novell, o de netware e, posteriormente, a solução de comparti-
lhamento de arquivos da Microsoft (CIFS), padrão hoje no Windows. A solução da
Microsoft, introduzida com o Windows NT, apresenta grande similaridade com o
NFS da Sun. Até por ter surgido bem depois, podemos dizer que é quase idêntica.
Hoje, os conceitos introduzidos pelo NIS são implementados pelo Serviço de
Diretório, tendo como padrão de referência o X.500, e como principais produtos o
LDAP e o Active Directory (AD da Microsoft), ambos baseados no padrão.
Vimos os conceitos básicos de sistema de arquivo em rede e um pouco do his-
tórico de como surgiram. Atualmente, esses serviços alcançaram uma dimensão
global com a internet e a adoção dos serviços em nuvem computacional.
DEVICE DRIVER
Kernel
software
ATAPI
floppy devices
SCSI
Denis Pacher (2012)
Existem periféricos que permitem ler ou escrever para o mesmo byte a byte.
Um exemplo é o teclado. Há outros também que enviamos ou recebemos blocos
de dados, como, por exemplo, o disco rígido (HD), onde trabalhamos com a no-
ção de setor de 512 bytes.
Na implementação do driver de dispositivo, levamos em conta a possibilidade
de um dispositivo suportar apenas escrita ou leitura. Um monitor, por exemplo,
suporta apenas escrita.
O Unix e suas variantes (Linux, BSD, Mac OS X e Android, dentre outros) man-
têm os drivers mapeados em arquivos no diretório /dev. No Unix, se você copiar
algo para o /dev/lpt0, estará mandando o arquivo para a impressora. No MS-DOS/
Windows, se copiar algo para o PRN, mandará o arquivo para impressora.
Hoje, com a popularização dos hardwares que o usuário pode montar e des-
montar, em especial USB, surge a necessidade de instalação de softwares para
usar o dispositivo, sendo que somente o administrador pode instalar este driver
de dispositivo. Surgiu como solução a ideia de colocar o driver de dispositivo em
espaço de usuário (user space), permitindo uma maior flexibilidade de uso do har-
dware pelo usuário final.
Neste tópico, vimos como os dispositivos são suportados pelo sistema opera-
cional, realizando um casamento harmônico entre hardware e software, via drivers
de dispositivos que implementa uma semântica13 de arquivos.
Ambiente Multiprocessado
Ambiente Paralelo
Ambiente Distribuído
Dreamstime
Figura 53 - Segurança
O sistema operacional, por executar todas as aplicações e por ter acesso a todo
o hardware, acaba sendo o ponto ideal para centralizar os logs de atividades. En-
contramos a possibilidade de registrar desde as chamadas de sistema para recur-
sos do sistema operacional que cada aplicação realizou, como registrar potenciais
tentativas de acesso indevidas a recursos, como arquivos ou áreas de memória,
bem como fornecer as aplicações de facilidades de coleta de logs, o mesmo para o
hardware. Um exemplo é armazenar informações de temperatura do processador
ou dados do smart de HD.
O sistema operacional armazena cada log em local devido, permitindo acesso
via aplicativos, como o visualizador de logs do Windows (acesso a partir do painel
de controle) ou mesmo lendo diretamente os arquivos, no caso do Linux (disponí-
veis em /var/log). A presença dos logs, que podem ser recolhidos e centralizados
em um loghost ou em uma aplicação SIEM (Security Information Event Manage-
ment), é essencial para o sistema de gerência de segurança de uma empresa.
FALHAS E VÍRUS
O sistema operacional, como todo software, pode apresentar falhas no seu de-
senvolvimento. Logo, uma falha (vulnerabilidade) pode ser usada para se obter
acesso indevido. Para evitar este problema, devemos estar atentos a como man-
ter o sistema operacional atualizado e às correções. Outro cuidado importante é
segregar14 contas de usuário, não concedendo permissão de adminstrador de for-
ma indevida e sem necessidade. Lembramos que, quando o administrador está
logado, para ele o sistema operacional se comporta como um sistema monousu-
ário, dando acesso a tudo.
Imagine um administrador, logado ao Windows e acessando a internet, sendo
vítima de um código malicioso que comprometa seu computador. Vai compro-
meter quaisquer recursos. Assim, a conta de administrador deve ser protegida e
usada apenas para princípios específicos.
Outros elementos de problemas são os vírus computacionais. Estes são centra-
dos em sistemas operacionais monousuários. Em sistemas multiusuários, como
Linux e baseados em Windows NT (XP, vista, 7), um vírus pode contaminar apenas
o perfil do usuário, não representado problemas para o sistema como um todo.
É claro que se você logar como administrador e acessar recursos com vírus ou
worm15, como programas ou sites na internet, podem acontecer problemas.
Sistemas Operacionais
112
Anotações:
Administração de sistemas operacionais
Pode-se dizer que os sistemas operacionais são softwares que gerenciam toda a atividade do
hardware de um computador visando tornar a utilização do computador mais eficiente e mais
conveniente.
Consistem em um conjunto de regras e funções bem estabelecidas, formalizadas e empre-
gadas para se obter um resultado em uma determinada área. São as regras de como se trabalha
e como se faz algo, deixando claro o que se faz com cada coisa.
Os sistemas operacionais vieram sendo aperfeiçoados longo do tempo. Atualmente estão
cada vez mais fáceis de usar, possuindo interfaces muito simples e bonitas.
Alguns sistemas são responsáveis pela gerência de muitos usuários, outros controlam dis-
positivos de hardware.
Após o estudo deste capítulo, você poderá ser capaz de:
a) definir o conceito de sistema operacional e conhecer sua evolução;
b) compreender separação de hardware/software e sua associação com máquina de Von
neumann;
c) conhecer as funções exercidas pelo sistema operacional assim como os tipos existentes;
d) definir os requisitos de hardware para sistemas operacionais;
e) conhecer o histórico e como se organizam os Sistemas Operacionais;
f) definir o sistema operacional multiplataforma: Unix;
g) conhecer o IBM PC e seus sistemas operacionais: do MS DOS ao WIN 7;
h) compreender o advento do Linux;
i) compreender a definição, compilação e interpretação de virtualização;
j) conhecer a arquitetura de sistemas operacionais.
Função do gerenciador
de memória que 3.1.1 IMPACTO DO SISTEMA OPERACIONAL NO DESEMPENHO
permite implementar
memória virtual com o
uso de armazenamento Quando pensamos na questão de desempenho em um sistema computacional,
secundário. normalmente nos lembramos do tipo de processador, da quantidade de memória,
do disco rígido, da placa de vídeo, ou seja, do hardware. Um aspecto que não é
lembrado de imediato é de que forma esses diversos recursos são gerenciados.
A gestão dos recursos de hardware cabe ao sistema operacional. Vamos a um
exercício prático que mostra a importância de uma parametrização adequada do
sistema operacional.
Imagine os seguintes desafios a serem realizados:
a) Levar 1000 folhas de papel de uma cidade a outra: para isso, você dispõe
de um envelope com capacidade para 500. Ao colocar apenas uma folha
por envelope, desperdiçaremos recursos, contudo, colocar 1000 folhas no
envelope não é possível;
b) Levar sacos de 100 kg de um prédio a outro, em uma distância de 50 m: para
isso, você dispõe de um carrinho de mão e de um guindaste. Se a quantida-
de de sacos for pequena, podemos usar o carrinho de mão, e, se for grande,
o guindaste será a melhor opção.
Em ambos, temos o problema e os recursos para resolvê-los. A forma que ge-
renciamos os recursos influencia muito no desempenho, em termos de tempo e
esforço na realização das tarefas. Não é diferente em computação. Se pensarmos
em ter um sistema computacional, focamos em ter não o hardware ou o software,
mas um sistema de informações gerenciais.
Em um SIG (Sistema de Informações Gerenciais), temos o foco no que faremos
com o produto dos sistemas computadorizados e quais são os resultados e pro-
blemas que o computador resolve. A informática deve ser tratada como instru-
mento de solução de problemas e não a computação como fim, em que somente
nos maravilhamos com a tecnologia que nos cerca. Se pensarmos na computa-
ção, devemos tê-la como um círculo virtuoso, em que aliamos tecnologia para
gerar novos produtos e soluções úteis, e não somente tecnologia, o que seria um
círculo vicioso.
Nesta abordagem, o foco dos profissionais das diversas áreas da computação
deve ser de aproveitar o máximo de recursos colocados à disposição para a so-
lução de problemas. Na maioria das vezes, temos o hardware, o computador e
a aplicação, que solucionará nosso problema, seja um mero editor de texto, um
navegador de internet ou um sistema de suporte vital em um centro médico. Se
3 Administração de sistemas operacionais
117
O AMBIENTE Desktop
O AMBIENTE SERVIDOR
O AMBIENTE EMBARCADO
gado, tem apenas sua customização realizada para ter um kernel diminuto que
execute no hardware embarcado.
para cada um? São questões que causam aflição aos usuários atualmente. Procu-
raremos respondê-las.
Um processador é organizado internamente em ULA (Unidade de Lógica e
Aritmética), UC (Unidade de Controle) e possui áreas de trabalho denominadas
de registradores. Usamos em quase todos os processadores a arquitetura de Von
Neumman, que, para executarmos um programa, ele deve estar na memória prin-
cipal (memória de trabalho). A unidade de controle do processador busca ins-
truções e dados na memória principal e leva para a ULA da CPU, armazenando
valores nos diversos registradores. Para conectar a memória física ao processador,
usamos diversos barramentos (dados, controle, endereço). E então surge uma dú-
vida: quantos dados posso buscar ou colocar em memória por vez?
Essencialmente, o tamanho dos dados está relacionado à capacidade de onde
nós os tiramos e colocamos e à capacidade de onde armazenamos a informação
(os registradores da CPU).
Em uma máquina de 8 bits, os registradores são de 8 bits, e podemos, então,
a cada ciclo de transferência de dados da memória para a CPU, trazermos 8 bits,
ou um byte. Em uma máquina de 16 bits, temos registradores de 16 bits; em uma
máquina de 32 bits, registradores de 32 bits, e assim por diante. Qual o problema
que surge nisso? Nenhum a princípio.
Vamos compreender como é feita a busca e o envio de dados para memória.
Consideraremos, como exemplo, um processador de 8 bits. Para buscar uma
informação na memória e trazer para a CPU, o processador enviará no barra-
mento de endereço o endereço de memória e no barramento de controle o
comando READ (leitura) e obterá no barramento de dados 1 byte armazenado
na posição. Se desejarmos buscar 20 bytes, devemos repetir o ciclo 20 vezes. O
mesmo acontece se desejarmos escrever 20 bytes na memória que estão na CPU.
Vamos supor que temos um processador de 16 bits. Os ciclos são semelhantes ao
de 8 bits, mas, a cada vez, são transferidos 16 bits ou o dobro da informação. Logo,
se desejarmos transferir 20 bytes, teremos de repetir o processo 10 vezes. Para
um processador de 64 bits, o processo é o mesmo, mas transferimos 64 bits, ou 8
bytes por vez, e para transferirmos os 20 bytes propostos originalmente gastare-
mos apenas 3 ciclos.
Você pode notar que a ocupação dos barramentos é bem menor, assim como
o processo envolvido é mais rápido em processadores com maior capacidade de
armazenamento em registradores. Algo que você deve perceber é que, sempre
que usamos um processador de 64 bits, teremos transferências de dados nessa
taxa, somente se o software tiver sido escrito levando em conta a capacidade do
processador.
3 Administração de sistemas operacionais
123
Imagine que você comprou um novo conjunto de som estéreo com quatro
caixas de som e, por alguma razão, resolve usar apenas uma. Não é estranho? É
sistemas operacionais
124
VIRTUALIZAÇÃO
SMP
habilitemos quando não for preciso, evitando índices muito grandes no sistema
operacional.
O Software
O primeiro cuidado pode parecer óbvio, mas ter a cópia do sistema opera-
cional que vamos instalar – seja em CD, DVD ou outra mídia de armazenamen-
to – sem defeitos é importante. Lembramos que, se o sistema operacional for
comercial, temos de ter a licença do software. O ato de instalar uma versão de
software pirata em uma máquina de empresa equivale a entregar um produto
furtado a ela, sendo isso crime, passível de prisão e multa (para a empresa). Se for
um funcionário da empresa, normalmente pode ser dispensado por justa causa;
se for um terceiro, cabe a ação na justiça, bem como cancelamento do contrato
de prestação de serviços. Se a opção for software livre, como Linux ou BSD Unix,
não temos esse problema.
3 Administração de sistemas operacionais
127
O DISCO
O PARTICIONAMENTO
Escolhido o HD, devemos definir como ele será particionado e ficar atento à
organização de swapping. Na medida do possível, é interessante manter a parti-
ção de swap em discos físicos diferentes, para maximizar o uso do HD, deixando o
sistema em um disco físico e o swap em outro ou tendo mais de uma partição de
swap, uma em cada HD.
Se o sistema operacional suportar swap via arquivo (Windows), devemos, em
uma ação pós-instalação, ajustá-lo para ter o arquivo de swap presente em mais
de um HD ou partição. O uso de partição de swap colabora com o desempenho
por termos uma partição com organização especializada e sem fragmentação.
Feito o planejamento do uso de HDs e do particionamento, vamos executá-lo.
No Windows, essa atividade é feita pelo instalador (acesse o site <http://www.tec-
mundo.com.br/windows-7/3985-dicas-do-windows-7-como-particionar-o-disco-
-rigido-do-computador.htm> para entender melhor). Em algumas distribuições
Linux devemos usar o comando fdisk (o Windows também permite essa aborda-
gem). É importante que os dados do usuário estejam em uma partição criada para
manter o mínimo de organização e facilitar reinstalações de sistema operacional
sem perda dos dados do usuário.
Como ilustração do particionamento de disco, vamos utilizar o comando fdisk
em um Linux:
a) em primeiro lugar, devemos escolher o disco. Nesse caso, usaremos o disco
sda que, no nosso exemplo, já possui o Linux instalado. Primeiramente, exe-
cutamos o comando fdisk /dev/sda;
b) agora, podemos mostrar as partições correntes com o comando p. A seguir,
temos duas partições. Execute o comando d 1 e p e você verá que a primeira
partição foi apagada;
sistemas operacionais
128
2 Journaling
Capacidade do sistema de
arquivos de manter um
registro (como um jornal)
de todas as alterações
as alterações feitas em
arquivos do disco de forma
a se recuperar de uma falha.
d) como nosso HD é de 17,2 GB, criaremos no seu início uma partição para
swap de 3 GB e depois uma de 6 GB para o Linux. Digite n. Ao ser questiona-
do sobre o tipo, informe partição primária, número de partição 1, início no
setor 1 e com 3 GB de espaço. Digite p e verá a partição criada com o tipo
83, que é Linux. Contudo, queremos uma partição de swap, então devemos
alterar o seu tipo;
e) para alterar o tipo da partição, digite t e informe 82 (tipo swap – a lista de
opções é mostrada com L). Se você digitar p, verá a tela a seguir em que o
tipo foi alterado;
3 Administração de sistemas operacionais
129
f) você pode fazer o mesmo para criar outra partição. No final, ao sair, digite w
para gravar as alterações. Se tiver dúvidas, digite m para acessar o comando
help (ajuda).
OUTRAS INFORMAÇÕES
WINDOWS
LINUX
3 Boot loader
No Linux, dada sua característica de software aberto e livre, são muito maiores
Módulo responsável por
realizar a carga do sistema as possibilidades de ajustes e otimização em comparação ao Windows. Vamos
operacional em memória a discutir algumas possibilidades pós-instalação.
partir do disco.
O primeiro cuidado que devemos estar atentos é na configuração do boot
loader3, seja o LILO ou o GRUB, dependendo da distribuição, de forma a solicitar
senha se desejarmos “bootar” em modo monousuário ou usar outra imagem de
boot. Tal precaução nos permite tentar manter a premissa de confidencialidade
dos dados, evitando que um usuário mal intencionado faça o boot do sistema em
modo monousuário, por exemplo, e altere ou copie os arquivos da máquina.
O Linux pode ser inicializado em diversos modos:
a) em modo monousuário, sem suporte à rede;
b) em modo de rede multiusuário em texto;
c) em modo gráfico, com suporte a multiusuário e rede.
A escolha de qual modo desejamos usar pode ser informada no arquivo /etc/
inittab, sendo que a sintaxe e numeração dos modos podem variar em cada dis-
tribuição Linux. A figura a seguir mostra um exemplo do Slackware Linux. O ar-
quivo inittab é lido pelo programa init do Linux, primeira aplicação a executar
depois do kernel do sistema operacional ser carregado.
Thiago Rocha (2012)
Um cuidado que devemos ter é garantir que todos os periféricos foram devi-
damente detectados e configurados pelo kernel. Os comandos dmesg mostram
as últimas mensagens do sistema. No caso, as de boot estão entre elas; /var/log/
3 Administração de sistemas operacionais
133
boot também apresenta tais mensagens. Se preferir, digite dmesg | more e terá
uma pausa em cada tela cheia de mensagens.
Assim observamos nas mensagens a detecção do processador, a quantidade
de memória e os periféricos, bem como características configuradas no kernel.
kernel, compilado e carregado junto a este; ou binário (ou compilado como mó-
4 Clusterização dulo), e para tal se usa o insmod e lsmod para trabalhar estes.
Conjunto de máquinas
atuando como uma só, seja
para melhor desempenho
(HPC) ou segurança (HA). VOCÊ Com o advento do kernel 2.6 de suporte a versões, po-
demos usar drivers compilados para versões diferentes
SABIA? de kernel.
5 Scripts
Outro passo importante consiste em escolher um kernel otimizado para o pro-
Programa para
automatização de uma cessador de nossa máquina. Não existindo o mesmo disponível na distribuição
tarefa. que usamos, realizamos a compilação do kernel de forma a tirar vantagem das
características, em especial do processador em uso.
Precisamos, a seguir, proceder com a criação das contas locais no Linux para
os usuários e bloquear o login do administrador, root, seja via console ou via ssh
(neste caso, editamos o arquivo de configuracao /etc/ssh/sshd_config, retirando
permissão de login do root), e associar a máquina ao domínio da empresa com o
auxílio do administrador da rede.
O Linux possui o mito de ser difícil de usar por ser textual; entretanto, o Windo-
ws e outros sistemas operacionais também são textuais, trazendo uma GUI (gra-
phic user interface). O passo seguinte é configurar o X11 de modo que tenhamos a
resolução e o uso adequado da placa de vídeo, tirando o seu melhor desempenho.
Diferente do Windows, que foi criado para o usuário final e a facilidade de uso
(e ao longo do tempo tentou transformar-se em um servidor de rede), o Linux
nasceu como um servidor de rede, como uma variante do Unix.
Temos de remover todos os serviços que não estejam sendo usados ou que
não queremos utilizá-los no dia a dia. No Linux, essa atividade envolve desabilitar
os scripts de inicialização de serviço em /etc/init.d ou /etc/rc.d, dependendo da
distribuição e também das aplicações carregadas, como Daemons via TCP Wra-
ppers ou TCP, em /etc/inetd.conf ou /etc/xinetd.conf .
Entendemos, neste tópico, que, após o término da instalação de um sistema
operacional, devemos terminar os ajustes nele de modo a ter maior produtivida-
de, funcionalidade e uso racional de recursos.
vação de novos serviços. Afinal, o sistema operacional é apenas a base sobre a qual
instalaremos nossas aplicações e algumas necessitam ser instaladas de imediato.
Para cada tipo de serviço que for instalar, tenha em mente que este deve ser
escolhido de forma minuciosa, sempre adequado ao sistema operacional instala-
do, hardware disponível e na segurança.
A segurança, algumas vezes, é deixada de lado, mas é muito importante. Em
algumas situações, é melhor não ter o serviço se ele não for seguro. Imagine um
sistema de internet banking sem segurança. Alguém vai querer usar um sistema
desses? Certamente que não.
Analisaremos alguns casos que, infelizmente, ocorrem muito: se colocarmos
um servidor de banco de dados no ar com senha padrão, podemos ter um proble-
ma com a confidencialidade dos dados lá colocados. Se não definirmos uma polí-
tica de backup da base de dados, teremos possíveis problemas com a integridade,
e se não pensarmos em uma política de espelhamento ou clusterização4 do servi-
dor de banco de dados, possuiremos problemas também com a disponibilidade.
Se pensarmos não em um, mas em dezenas de serviços instalados e executa-
dos em um computador, teremos um problema bem maior. Pequenos erros na
configuração de um ou outro serviço se somam e podem levar a uma instabilida-
de bem maior do que se houvesse a execução de apenas um serviço na máquina.
Tendo isso em mente, vamos pensar no que fazer.
No Windows é essencial que tenhamos antivírus e firewall ativados após a ins-
talação. O próprio sistema lembra ao usuário dessas pendências na barra de tare-
fas, como é visto na figura a seguir. Novos serviços podem ser controlados via o
comando services.msc ou no painel de controle após sua instalação.
Thiago Rocha (2012)
No Linux, novos serviços podem ser ativados via scripts5 em /etc/rc.d e /etc/
init.d, dependendo da distribuição. Esses scripts podem ser criados automati-
camente pelo instalador do software ou algumas vezes devemos construí-los
manualmente.
sistemas operacionais
136
7 Otimização
Diversas formas podem ser usadas para realizarmos uma tarefa, mas certa-
mente nenhuma é mais eficiente do que escolher a ferramenta correta para re-
solver um problema.
Imagine você que tem como desafio realizar uma tarefa, como limpar o quintal
de sua casa. Você possui uma patrola, um alicate de unha, uma faca e uma enxada
para escolher. Sua escolha óbvia é a enxada, mas há um pequeno detalhe: a enxa-
da tem 1 metro de largura. Talvez ela seja muito grande. Se você possuísse uma
ferramenta de corte, poderia diminuir o tamanho dessa enxada. Isso certamente
permitiria empregar o instrumento de forma mais adequada à tarefa, se seu quin-
tal for pequeno. Em computação, no âmbito de sistemas operacionais, a escolha
do instrumento correto para realizar uma tarefa será fator de sucesso no uso e ge-
renciamento dos recursos. Algumas vezes, precisamos ajustar esse instrumento
que é nosso sistema operacional.
Se o sistema operacional for de código fechado, não temos muito o que fa-
zer, mas se ele for de código aberto, podemos mexer nesse código ou ao menos
compilá-lo6 de forma mais adequada. Vamos discutir, neste tópico, a otimiza-
ção7 do sistema operacional através de ajustes no seu código-fonte, algo que em
um primeiro momento pode assustar, pode parecer difícil, mas, como você verá,
consiste numa atividade simples e sem grandes riscos se executada com paciên-
sistemas operacionais
138
VERSÕES DO KERNEL
quitetura IA32 da Intel da época, notavelmente o Intel 386 e depois o Intel 486.
Vamos discutir um pouco as características das diversas versões do kernel, que
podem ser encontradas em <http://www.kernel.org/pub/linux/kernel/ >.
a) Versão 0.x: embrião do que passamos a chamar de Linux. Essencialmente
temos o Minix ajustado e complementado com demais módulos do núcleo
do sistema operacional para ser usável e bibliotecas de apoio.
Começa, aqui, o uso de software do projeto GNU como elemento de suporte.
Exemplo: a GNU C Library (GLIBC).
Ao longo do tempo, essa prática levou ao emprego do termo GNU Linux
para denominar o Linux.
b) Versão 1.0: surge em um momento de popularização dos servidores web
na internet. Leva o Linux a virar, praticamente, padrão dos servidores web e
muito usado em outros serviços como e-mail e ftp.
Essa versão, contudo, era muito deficitária. Suportava apenas 256 processos
executando, tinha pouca memória e possuía um sistema de gerenciamento
de memória não muito eficiente. Entretanto, foi elemento-chave para po-
pularização do Linux. Essa versão começou a prática de nomes do kernel:
o primeiro dígito indica a versão; o segundo, se for par, uma versão de
produção, se ímpar, de desenvolvimento; os demais números níveis de
correção. Exemplo:
a) Linux 1.2.3 – versão 1.2 de produção nível de correção 3;
b) Linux 2.3.5.13 – versão 2.3 do kernel nível de correção 5.13.
Essa prática perdurou até o kernel 2.6, onde a árvore de desenvolvimento
e produção foram unificadas.
c) Versão 2.0: apresentou avanços marcantes como adoção de novos siste-
mas de arquivos, um sistema de gerenciamento de memória totalmente
novo, o suporte a vários processadores e processos em escala.
Marcou a consolidação do Linux como servidor confiável na internet e re-
cebe apoio de grandes fabricantes como IBM, HP, Oracle.
d) Versão 3.0: versão atual. Diferente das demais versões, a migração da ver-
são 2 para 3 não atendeu a mudanças de características técnicas no kernel,
somente a uma mudança de nomenclatura.
Torvalds observou que os nomes das versões estavam muito extensos, e
então foi feita a opção de migrar da versão 2.6.39 para 3.0. Essa modifica-
ção coincide com uma data histórica: 20 anos de existência do Linux (lan-
çado em 25/08/1991).
sistemas operacionais
140
Qual versão de kernel usar? Bom, as versões 0.x e 1.x estão fora de uso, e as
versões 2.x e 3.x são as versões de produção. Para escolher uma versão, temos de
ficar atentos aos requisitos do software e hardware que usamos para decidir qual
deles usar.
Por que usarmos um kernel 2.4.x se o 2.6.x e o 3.x estão disponíveis em seu
ambiente?
A questão passa além da garantia que as aplicações que utilizamos sejam
compatíveis com esse kernel. Um exemplo é um software como Java Machine, que
precisa ser compatível, ou o sistema gerenciado de banco de dados (SGBD) ou a
presença de drivers de dispositivo para o hardware que temos disponível. Existe
também a questão de certificação de software.
Determinados fornecedores certificam seu software para uso em uma versão
de kernel. Exemplos disso são a IBM e a Oracle. Nesses casos, se não usarmos uma
versão de kernel, e muitas das vezes a distribuição Linux certificada, a empresa
fornecedora do software não dará suporte à sua aplicação.
Vimos, neste tópico, como é o modelo de desenvolvimento do Linux e as ca-
racterísticas das diversas versões do kernel, bem como os cuidados na escolha
dessas versões que utilizaremos em nosso ambiente de trabalho.
Podemos notar na figura que o Lastest Stable Kernel é 3.2.9 (na data da pesquisa)
e 3.3-rc6 (conhecido como release candidate: se não apresentar falhas, será o 3.3,
neste caso a sexta tentativa). Temos também as versões do 2.6. Em cada linha, você
pode baixar as fontes completas da versão ou um patch. Um patch consiste em
um arquivo com as alterações feitas em uma versão anterior. Se a versão que você
deseja não estiver nesse site, acesse <http://www.kernel.org/pub/linux/kernel/>.
Ao acessar o site do kernel, você pode obter preciosidades, como suas ver-
sões iniciais (<http://www.kernel.org/pub/linux/kernel/Historic/>) e um link para
a mensagem de Torvalds ao lançar o Linux (<http://groups.google.com/group/
comp.os.minix/msg/b813d52cbc5a044b>).
Os arquivos que fazemos o download estão empacotados for formato .tar e
comprimidos em bz2. Devemos descomprimi-los e desempacotá-los para uso.
DESCOMPRIMINDO O ARQUIVO
bunzip2 linux-3.2.9.tar.bz2
Ao fazer isso, você obterá o arquivo linux-3.2.9.tar (veja isso com um ls – l).
Atualmente, empregamos o formato bz2, mas anteriormente foi usado o gz.
Nada impede de no futuro termos um compressor mais eficaz e o formato mudar;
caso isso ocorra, estará informado na página.
sistemas operacionais
142
DESCOMPACTANDO O KERNEL
Thiago Rocha
Figura 65 - Arquivos em /usr/src
Na figura anterior, você notará que o diretório Linux é um link simbólico para
o diretório linux-2.6.33.4.
Você pode mudar esse link simbólico para o kernel que instalamos, com o co-
mando:
rm linux
ln –s linux-3.2.9 linux
O rm remove o link atual, o ln cria um novo. Ao executar ls novamente, verá
que o diretório Linux está apontando para o nosso kernel desempacotado. Tente
repetir esse passo e terá algo semelhante à figura a seguir.
Thiago Rocha
PATCH
Se você preferir, pode baixar apenas um arquivo com as diferenças que foram
incorporadas ao kernel que já possui. Chamamos isso de arquivo de patch, ou de
correção. O formato do arquivo é bz2 da mesma forma, mas não está empacota-
do, consistindo em um arquivo para ser usado pelo aplicativo patch do Unix.
Assumindo a figura anterior, em que temos nosso kernel recém-instalado, po-
demos aplicar as correções para a próxima release candidate (no caso, seria o 3.3-
rc6, conforme a figura 9). Vamos aplicar um patch para ele. Para tanto:
a) se tiver saído do diretório /usr/src, volte para lá com o comando cd;
b) acesse o site do kernel em <http://www.kernel.org> e busque o arquivo da
nova versão (linux-3.3-rc6.tar). Você pode baixar esse código ou o arquivo de
patch. Clique na página principal no link patch em frente à versão 3.3-rc6. O
arquivo patch-3.3-rc6.bz2 será baixado;
c) agora descomprima-o com o comando bunzip2 patch-3.3-rc6.bz2;
sistemas operacionais
144
Um amigo seu resolveu pescar. Acordou cedo, pegou todos os seus apetre-
chos e foi ao seu local de pesca preferido. Chegando lá descobre que esqueceu a
vara de pescar. Provavelmente, será possível pescar usando um método que não
precise da vara, mas não será tão eficaz.
Para a tarefa de compilar e ajustar nosso kernel é preciso também de uma série
de ferramentas, como o compilador e as ferramentas de geração de scripts. Va-
mos, neste tópico, abordar como fazer isso.
Um passo inicial para alterar e customizar de forma otimizada sua instalação
Linux consiste em baixar o código completo do kernel ou patch e aplicá-lo. Como
você já sabe, após essa atividade, devemos proceder com a parametrização do
kernel, mas antes devemos definir os requisitos mínimos de compilação do kernel.
3 Administração de sistemas operacionais
145
O AMBIENTE DE COMPILAÇÃO
root@slvm:/usr/src/linux# ls
COPYING Documentation/ Kconfig Makefile REPORTING-BUGS block/ drivers/ fs/
Você poderá usar o comando ‘more README’ para ler esse arquivo. Ao lê-lo,
vai se deparar com a informação de que a listagem de software necessária está
no arquivo Changes, dentro de Documentation. Visualize esse arquivo com more
Documentation/Changes e encontrará a seguinte listagem:
Para saber mais sobre o kernel que está usando, leia a documentação encon-
trada no diretório Documentation que pode lhe ser muito útil.
Na frente de cada ferramenta, está listada a versão do software necessária para
a compilação (mínima) e o comando para descobrir qual versão você está usan-
do. O restante do arquivo informa como a aplicação será usada e onde pode ser
obtida se não tiver ela instalada em seu Linux.
Vamos realizar um teste. Verifique a versão do GCC que você possui.
root@slvm:/usr/src/linux/Documentation#
Thiago Rocha
root@slvm:/usr/src/linux/Documentation# gcc -- version
-bash: gcc: command not found
Neste caso, o GCC não está instalado na máquina ou não temos um caminho
para ele e devemos solucionar o problema antes de prosseguir com a compilação
do kernel.
Além do GCC e do MAKE, outro elemento muito importante é o montador
Assembly, visto que uma pequena parcela do código do kernel está escrita em
Assembly. O GLIBC (GNC LibC) é outro elemento determinante, já que essas bi-
bliotecas da linguagem C serão usadas em escala. As demais ferramentas da lista-
gem tem caráter acessório, sendo que talvez consiga compilar o kernel sem elas.
Contudo, o ideal é ter o ambiente propício para evitar falhas.
Normalmente, essas aplicações estão inclusas no pacote de desenvolvimento
da distribuição, sendo que algumas vezes sua instalação é opcional, estando dis-
ponível no DVD de instalação. Em algumas distribuições você terá de baixar tanto
o código-fonte como todo o ambiente de problema. No momento que está se
habituando ao sistema operacional Linux, escolha uma distribuição que já tenha
o ambiente de desenvolvimento.
3 Administração de sistemas operacionais
147
Um ponto não citado e que necessita ser lembrado é que precisamos de es-
paço em disco livre se queremos compilar nosso kernel. O comando df mostra o
espaço ocupado e livre na partição. Se não tivermos espaço livre, não poderemos
desempacotar nosso fonte nem compilar o kernel. Fique atento a isso.
Note que todas as observações sobre versão de software necessárias para a
compilação, bem como a própria lista de software, consiste em um requisito da
versão de kernel que lidamos. O compilador C (GCC) e as LIB C (GLIBC) são os
elementos primordiais no processo. Se estiverem compatíveis, provavelmente o
processo de compilação funcionará, mas você pode ter um código instável no
final.
Aprendemos neste tópico que, ao compilar e ajustar nosso kernel, além baixá-
-lo da internet, devemos ter certeza de que temos o ambiente de desenvolvimen-
to e compilação adequados.
O SISTEMA OPERACIONAL
Gerente de
memória
Memória
Processamento Gerente de
Processos
O LINUX
A ÁRVORE DE CÓDIGOS
Linux-3.2.9
|-- COPYING
|-- CREDITS
|-- Documentation
|-- Kbuild
|-- Kconfig
|-- MAINTAINERS
|-- Makefile
|-- README
|-- REPORTING-BUGS
|-- arch
|-- block
|-- crypto
|-- drivers
|-- firmware
|-- fs
|-- include
|-- init
|-- ipc
|-- kernel
|-- lib
|-- mm
|-- net
|-- samples
|-- scripts
Odirlei Batista (2012)
|-- security
|-- sound
|-- tools
|-- usr
`--virt
arch/
|-- Kconfig
|-- alpha
|-- arm
|-- avr32
|-- blackfin
|-- cris
|-- frv
|-- h8300
|-- hexagon
|-- ia64
|-- m32r
|-- m68k
|-- microblaze
|-- mips
|-- mn10300
|-- openrisc
|-- parisc
|-- powerpc
|-- s390
|-- score
|-- sh
|-- sparc
|-- tile
Esses arquivos estão presentes, divididos por diretório, o software para cada
13 Inode arquitetura suportada pelo Linux.
Índice de descritores de Neste tópico, compreendemos a organização dos arquivos em primeiro nível
blocos usados em disco
empregado no Unix do kernel: o diretório arch, vimos um exemplo visitando onde encontramos o boo-
compilado - transformado tloader do Linux para IBM PC. Da próxima vez que ver o computador bootando,
de código-fonte (linguagem
de alto nível) para você saberá que é aquele código executando. Aprendemos também onde se en-
executável pelo hardware
(linguagem de baixo nível).
contra a documentação do kernel.
Linux-3.2.9
|-- COPYING
|-- CREDITS
|-- Documentation
|-- Kbuild
|-- Kconfig
|-- MAINTAINERS
|-- Makefile
|-- README
|-- REPORTING-BUGS
|-- arch
|-- block
|-- crypto
|-- drivers
|-- firmware
|-- fs
|-- include
|-- init
|-- ipc
|-- kernel
|-- lib
|-- mm
|-- net
|-- samples
|-- scripts
|-- security
Odirlei Batista (2012)
|-- sound
|-- tools
|-- usr
`--virt
Figura 76 - Diretórios
3 Administração de sistemas operacionais
153
}
14 Linkado run_init_process(”/sbin/init”);
run_init_process(”/etc/init”);
Código compilado que foi run_init_process(”/bin/init”);
KERNEL
Como o nome diz, essa é a parte central do kernel do Linux, onde encontramos,
por exemplo, a parte de escalonamento.
3 Administração de sistemas operacionais
155
Neste caso, usaremos o comando make config, que executará um script que
para cada item do kernel. Perguntando ao usuário se deseja usar a função (Y), não
usar (N) e usar como módulo (M), é uma forma demorada e sujeita a erros, contudo
foi a única que existiu durante muito tempo. Temos um exemplo na figura a seguir.
MODO GRÁFICO
Se você é daqueles usuários que não sobrevivem sem um mouse e uma inter-
face gráfica, esta opção vai lhe agradar. Empregando o comando make xconfig,
você terá uma interface gráfica em que poderá trabalhar com mouse e de forma
flexível, um exemplo está na figura a seguir.
Thiago Rocha (2012)
.config
Odirlei Batista
[*] Prompt for development and/or incomplete code/drivers
Temos muitas outras opções que você pode visitar e ler a documentação, mas
vamos voltar à tela anterior, selecionando exit na base da tela. Nessa tela, encon-
tramos algumas opções importantes.
Odirlei Batista
[*] Enable loadable module support
Odirlei Batista
-*- Enable the block layer
Odirlei Batista
Bus options (PCI etc.)
É uma opção muito importante, pois permite parametrizarmos como será re-
alizado o tratamento de barramentos de expansão. Podemos parametrizar como
o tratamento do pci será realizado, bem como o suporte a outros barramentos.
Lembre-se que nem todas as opções devem estar habilitadas, se sua máquina não
possui MCA ou ISA, por que habilitar essa opção? É removendo pequenas porções
de software não utilizados que conseguimos um kernel menor e por consequência
maior otimização de recursos.
Note itens-chave como PCI Access mode, o suporte a PCI express e o suporte a
PCCARD. Este último suporta os barramentos de expansão PCMCIA e CardBus nos
notebooks. Voltemos ao menu principal.
Odirlei Batista
Permite dizer como será o formato dos arquivos que o kernel (sistema opera-
cional) poderá executar - o ELF e a.out.
O suporte à emulação também é provido aqui.
Você aprendeu, neste tópico, que existem diversas formas de realizar a para-
metrização do kernel. Vimos que existem muitas opções-chave, onde encontra-
mos no menu principal de configuração. Entendemos que a escolha de opções
tem efeito sobre todo o restante do processo de parametrização/compilação.
Imagine que sua máquina possui um processador, top de linha, com recursos
fantásticos, seja em quantidade de núcleos ou suportes à multimídia. Certamente
você gostaria que esses recursos fossem todos usados. Vamos aprender neste tó-
pico como habilitar o suporte a processadores específicos.
Os processadores atuais possuem, a cada dia, recursos de alto desempenho
em capacidade de processamento bruta, em indexação de memória ou suporte
a multimídia.
Cada novo processador que surge possui características que lhe são únicas no
desempenho, nas capacidades nativas ou no gerenciamento de energia.
Se desejarmos uma máquina para usar como servidor, certamente o I/O otimi-
zado é chave, temos como exemplo os AMD Opteron e Intel Xeon. Se pensarmos
em uma máquina portátil baseada em bateria, soluções que maximizem o de-
sempenho versus gasto de energia são o foco. Como exemplo, citamos o Atom, o
Neo e o Via c7.
O suporte a 16, 32 ou 64 bits é outra característica importante, que se suporta-
das devem ser habilitadas no kernel.
Em outro extremo, temos o sistema operacional que faz uso dessa arquitetura
da máquina e dos recursos do processador. A parametrização do sistema opera-
cional para suportar toda a potencialidade do processador é a chave.
O Linux pode ser compilado pensando em um hardware minimalista e antigo
como o Pentium clássico de 1985, mas é de se imaginar que vamos tirar o máximo
de proveito do nosso processador habilitando e usando as características únicas
e principais de cada um. Em especial o recurso de gerenciamento de energia, su-
porte a vários núcleos, linhas de execução (HT no P4) ou vários processadores por
cada máquina nós são principais.
No menu principal de configuração do kernel (usando make menuconfig),
você notará a opção:
sistemas operacionais
162
Odirlei Batista
Processor type and features
Nosso trabalho estará centrado nela. Entre na opção e lhe será mostrada uma
figura semelhante à seguinte (que apresenta apenas um corte parcial), onde ob-
servarmos campos-chave (principais) que logo descreveremos:
Este submenu permite escolher o processador que você possui. Note que no
texto está escrito Pentium-Pro, que é a opção default do kernel 3.2.9. Se você tem
outro processador, deverá ajustar de um modo a obter o desempenho devido.
3 Administração de sistemas operacionais
163
Odirlei Batista
[*] Generic x86 support
Odirlei Batista
[ ] Support for big SMP systems with more than 8 CPUs
Odirlei Batista
High Memory Support (4GB) --->
Essa opção indica ao kernel a quantidade máxima de memória física que ele
pode endereçar.
No exemplo, temos 4 GB, se tivermos mais que isso de memória, ela não será
usada.
Lembre-se que a quantidade máxima de memória endereçável em uma máquina
depende da capacidade do processador. E dentro do sistema operacional, do tama-
nho do index. Um exemplo com 8 bits (1 byte) endereçamos 256 bytes, com 32 bits
endereçamos 4 GB, com 64 bits teríamos bem mais memória endereçável, mas o ta-
manho das tabelas cresce. O kernel atualmente suporta endereçar até 64 GB de RAM.
Odirlei Batista
[ ] Paravirtualized guest support --->
APM E ACPI
Odirlei Batista
Power management and ACPI options --->
O comando lspci pode ser nosso aliado novamente, por permitir listar as con-
troladoras de periféricos presentes no barramento de expansão.
A figura a seguir apresenta uma saída do comando lspci executado em uma
placa Abit de mercado.
Notamos o device IDE interface que foi marcado em vermelho. Se você desejar
detalhes, pode usar o lspci –v. Para obter mais opções do comando lspci, execute
o comando man lspci.
Podemos notar também diversos outros dispositivos na listagem.
root@aldeia:~# lspci
00:00.0 RAM memory: nVidia Corporation MCP55 Memory Controller
(rev a1)
00:01.0 ISA bridge: nVidia Corporation MCP55 LPC Bridge (rev
a2)
00:01.1 SMBus: nVidia Corporation MCP55 SMBus (rev a2)
00:01.2 RAM memory: nVidia Corporation MCP55 Memory Controller
(rev a2)
00:02.0 USB Controller: nVidia Corporation MCP55 USB Controller
(rev a1)
00:02.1 USB Controller: nVidia Corporation MCP55 USB Controller
(rev a2)
00:04.0 IDE interface: nVidia Corporation MCP55 IDE (rev a1)
00:05.0 RAID bus controller: nVidia Corporation MCP55 SATA
Controller (rev a2)
00:05.1 RAID bus controller: nVidia Corporation MCP55 SATA
Controller (rev a2)
00:05.2 RAID bus controller: nVidia Corporation MCP55 SATA
Controller (rev a2)
00:06.0 PCI bridge: nVidia Corporation MCP55 PCI bridge (rev
a2)
00:06.1 Audio device: nVidia Corporation MCP55 High Definition
Audio (rev a2)
00:08.0 Bridge: nVidia Corporation MCP55 Ethernet (rev a2)
00:09.0 Bridge: nVidia Corporation MCP55 Ethernet (rev a2)
00:0a.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge
(rev a2)
00:0c.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge
(rev a2)
00:0d.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge
(rev a2)
00:0e.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge
(rev a2)
00:0f.0 PCI bridge: nVidia Corporation MCP55 PCI Express bridge
(rev a2)
00:18.0 Host bridge: Advanced Micro Devices [AMD] K8
[Athlon64/Opteron] HyperTransport Technology Configuration
00:18.1 Host bridge: Advanced Micro Devices [AMD] K8
[Athlon64/Opteron] Address Map
00:18.2 Host bridge: Advanced Micro Devices [AMD] K8
[Athlon64/Opteron] DRAM Controller
00:18.3 Host bridge: Advanced Micro Devices [AMD] K8
[Athlon64/Opteron] Miscellaneous Control
Thiago Rocha (2012)
Vamos observar a listagem, pois seu uso pode ser útil no futuro.
Além da controladora de HD que procuramos, estão todos os outros
dispositivos.
Foi marcada em vermelho também a parte de RAID em que podemos ligar
um HD.
Conhecendo o hardware, vamos entrar no menu principal em Device drivers e
depois em uma das opções a seguir.
Odirlei Batista
< > ATA/ATAPI/MFM/RLL support (DEPRECATED) --->
SCSI device support --->
<*> Serial ATA and Parallel ATA drivers --->
Você já pensou se a internet não existisse? Provavelmente, sem ela seu com-
putador teria pouca utilidade. O suporte à rede é um elemento importante em
um sistema operacional. Vamos aprender, neste tópico, como ajustar o suporte
no Linux.
Atualmente, um computador, notebook, tablet ou um celular que não esteja
conectado à rede internet é difícil de imaginar e teria pouca utilidade. Sabemos
que existem diversas opções de conectividade à rede internet, sendo as princi-
pais: rede cabeada, via ethernet, rede sem fio (WiFi, bluetooth), rede discada via
modem e acesso via rede UTMS celular (3G).
Além das tecnologias de rede em nível de camada de enlace citadas, temos
ainda elementos-chave a serem considerados:
a) interface de rede: é a chave para a conectividade a uma determinada tec-
nologia de enlace e física. A interface de rede apresenta-se como uma placa
de expansão PCI/PCI-E onboard ou não, uma placa USB (Universal Serial Bus)
ou PCMCIA (Personal Computer Memory Card International Association), den-
tre outros formatos. A placa de rede necessita de um driver de dispositivo
para funcionar no sistema operacional;
b) suporte a TCP/IP: sejam IPV4 ou IPV6 e todos os protocolos relacionados
a ele. Por uma questão de desempenho ao longo do tempo, o TCP/IP foi
implementado no kernel do sistema operacional. A primeira implementação
de TCP/IP realizada foi feita em ambiente Unix e passa pelos demais sistemas
operacionais. Se desejarmos ter TCP/IP, devemos habilitá-lo e configurá-lo;
c) suporte a firewall com filtragem de pacotes: cada vez mais é necessário se
filtrar conteúdos da internet, a implementação de filtros de pacotes em nível
de kernel junto ao TCP/IP tem sido a prática.
3 Administração de sistemas operacionais
169
O SUPORTE À INTERFACE
Odirlei Batista
[ ] Wan interfaces support --->
< > VMware VMXNET3 ethernet driver
Essa opção nos permite configurar interfaces virtuais que serão usadas na
construção de VPN (Virtual Private Network – Rede privada Virtual).
Odirlei Batista
Habilita o protocolo PPP que permite ligação ponto a ponto. É muito usado
para acesso à banda larga e juntamente com TUN/TAP para construir VPNs (Virtu-
al Private Network- Rede privada Virtual).
Odirlei Batista
USB Network Adapters --->
Odirlei Batista
[*] Wireless LAN --->
Habilita o suporte à rede sem fio via IEEE 802.11 em termos de controladoras.
Existem muitos outros itens no submenu, mas você pode se aventurar neles
posteriormente.
Vamos voltar ao suporte a protocolos e elementos que fazem uso das interfaces.
Odirlei Batista
[*] Networking support --->
Odirlei Batista
< > Bluetooth subsystem support --->
NETWORKING OPTIONS
Odirlei Batista
[*] TCP/IP networking
Odirlei Batista
[*] Network packet filtering framework (Netfilter) --->
Vamos entrar nesta opção e visualizar o que fazer. O seguinte menu será apre-
sentado:
Você já pensou que toda porta tem uma fechadura que pode ser igual, mas a
chave é diferente?
Em cada lugar que os recursos forem usados, as características podem mudar.
Em computação da mesma forma, os dispositivos periféricos podem mudar suas
características básicas de IRQ, I/O e DMA dependendo de onde estiverem.
Todo hardware periférico suportado pelo sistema operacional deve ter um De-
vice driver associado a ele e o driver deve estar funcional.
Para colocar um dispositivo no computador, precisamos da controladora,
meio de comunicação e dispositivo. A controladora como elemento de expansão
de nossa máquina necessita ser inserida em um barramento de expansão (hoje
tipicamente PCI e PCI-E) e ter seus endereços de I/O, IRQ, se for o caso DMA ajus-
tados, levando em conta o que já existe instalado na máquina.
Atualmente, com o emprego de barramentos de expansão PCI e com o uso de
USB, esse processo é feito de forma quase automática pela BIOS, a partir do con-
ceito de PnP, e negociado de forma a evitar conflitos e garantir a funcionalidade
devida do hardware. Contudo, existem situações que temos de ajustar os parâ-
metros básicos dos periféricos. No entanto, nos primeiros computadores, com o
barramento ISA, era feito de forma manual. Também pode ser feito tanto para
ISA como outros barramentos. Tente acessar sua BIOS e encontrará o local para
parametrizar o periférico.
Um exemplo clássico de conflito que existia era o uso de uma placa de expan-
são ISA que não permite negociação de configuração e tem seu dados básicos
setados via jumpers, seja IRQ, endereçamento de I/O, portas. Outra situação é que
precisamos ajustar por alguma razão de desempenho ou compatibilidade com
um software que estamos usando esses dados.
No ambiente Windows, o ajuste pode ser realizado no painel de controle com
relativa facilidade.
sistemas operacionais
174
# dma=0,3,5,6,7
# drive_type=noisp16,Sanyo,
Panasonic,Sony,Mitsumi
Note que se você setar dois dispositivos com parâmetros iguais pode haver
um conflito de IRQ ou de I/O e nenhum dos dois funcionarem de forma correta
ou, pior, funcionarem de forma intermitente.
Entendemos que, por mais que seja fácil lidar com dispositivos, em alguns mo-
mentos teremos de fazer ajustes de baixo nível, dizendo ao sistema operacional
das características do hardware.
O Linux começou como um projeto sem grandes pretensões, mas hoje ocupa
um papel principal na indústria da tecnologia da informação. Se avaliarmos, mais
importante do que termos algo funcionando, em informática, é ter algo seguro.
Como projeto baseado no Unix, o Linux implementa ideias importantes de
controle de acesso aos seus recursos e tem facilidades de log e auditoria.
Ao longo do tempo, novas demandas têm surgido, visando um sistema ope-
racional mais seguro para ser usado em rede. O ato de tentar fechar e eliminar
falhas de seguranças, em especial as conceituais, é chamado de hardening.
Uma segunda questão importante tem sido suportar cada vez mais criptogra-
fia em computação e novos usos tem surgido, como exemplo a manutenção dos
dados em disco rígidos criptografados.
Vejamos, então, como habilitar todas as funcionalidades que estão presentes
no kernel do Linux. Antes de tudo, devemos estar atentos à opção (entre em Ge-
neral Setup no menu principal),
Odirlei Batista
A opção permite habilitar log de acesso ao I/O e chamadas ao sistema que po-
dem ser muito úteis na política de segurança e auditoria de sistemas.
No menu principal, encontraremos a opção Security options, que permite
configurar comportamentos seguros do kernel Linux. Examine a documentação
de cada uma das opções, clicando em help. Você notará itens que podem ser bas-
tante úteis.
Aprender mais sobre ajustar a segurança no kernel (hardening linux), pois é
muito importante. Visite o site do SELinux , <http://selinuxproject.org/>, lá exis-
tem muitas informações sobre essa segurança.
sistemas operacionais
176
SUPORTE À CRIPTOGRAFIA
mos de escolher um sistema de arquivo para a partição, para depois formatar ela
(isso quer dizer organizar os blocos físicos e criar as estruturas básicas do sistema
de arquivo na partição). No ambiente Microsoft Windows, os sistemas de arquivos
comuns são o FAT e FAT32 vindos dos MS DOS e o NTFS (New Technology File Sys-
tem), o Linux emprega os sistemas de arquivos ext, ext2, ext3 e ext4. Além destes,
existem diversos que são suportados e podem ser usados.
Um fator impactante independentemente do tipo de sistema de arquivos é
a quantidade de blocos de disco (setores do disco), o sistema operacional alo-
cado por vez. Se muito pequeno, será ineficiente, se muito grande pode existir
fragmentação.
No menu principal, você encontrará a opção File systems. Vamos entrar nela,
pois é lá que está o suporte a sistemas de arquivos. Destacaremos os elementos-
-chave presentes. A regra básica é: se você deseja lidar com uma partição com o
tipo de sistema de arquivo ou criar uma e usar deve habilitar a característica.
Odirlei Batista
O chamado ext2 foi a opção primária usado no Linux até o kernel 2.4. Atual-
mente está sendo deixada de lado visto a existência de soluções melhores.
Aqui temos o suporte ao ext3 usado em grande parte das distribuições Linux
no mercado, bem como ao ext4 seu sucessor. No ext3 que está habilitado, pode-
mos notar opções, em especial, o suporte a ACL (Ext3 POSIX Access Control Lists),
recurso importante para implementação de segurança hoje em dia.
Odirlei Batista
Odirlei Batista
DOS/FAT/NT Filesystems --->
Odirlei Batista
CD-ROM/DVD Filesystems --->
Odirlei Batista
<*> Quota format vfsv0 and vfsv1 support
Pseudo filesystems
Thiago Rocha
-*- Native language support --->
COMPILANDO
Odirlei Batista
19 Executável
Make
Software ou aplicação que
pode ser executada pelo Figura 127 - Comando que desencadeia o processo de compilação
sistema operacional.
Odirlei Batista
make modules
Após esses dois passos, podemos finalmente instalar nosso novo kernel.
Mas antes é interessante que realizemos um backup do kernel que estamos
usando, para qualquer eventualidade de falha. Assim, teremos como continuar
usando a máquina. Isso pode ser feito de forma simples. Entre no diretório /boot
e liste os arquivos, a saída será algo como:
3 Administração de sistemas operacionais
181
root@slvm:/boot# ls
README.initrd@ System.map-huge-smp-2.6.33.4-smp config-generic-
smp-2.6.33.4-smp slack.bmp vmlinuz-huge-smp-2.6.33.4-smp
System.map@ boot.0800 config-huge-
2.6.33.4 vmlinuz@
System.map-generic-2.6.33.4 boot_message.txt config-huge-smp-
2.6.33.4-smp vmlinuz-generic-2.6.33.4
System.map-generic-smp-2.6.33.4-
smp config@ diag1.img vmlinuz-generic-smp-2.6.33.4-
smp
System.map-huge-2.6.33.4 config-generic-
2.6.33.4 map vmlinuz-huge-2.6.33.4
Você pode notar diversos arquivos, em especial o vmlinuz, que é um link sim-
bólico para o arquivo vmlinuz-huge-smp-2.6.33.4-smp, como pode ser visto pelo
ls -l logo a seguir (em vermelho).
Devemos realizar um cópia do arquivo vmlinuz em uso para vmlinuz.backup,
por exemplo, empregue o comando: Odirlei Batista
cp vmlinuz vmlinuz.backup
make install
Odirlei Batista
make modules_install
21 Setarmos
Figura 132 - Comando para a instalação dos módulos compilados
Mudarmos ou ajustarmos.
Esse comando realiza a cópia dos módulos compilados para o diretório /lib/
modules/xxx, onde xxx é o nome da versão do sistema. Por exemplo, se instala-
mos o kernel 3.2.9, o diretório será /lib/modules/3.2.9 .
Fique atento, já que, se não setarmos21 o nome de nossa instalação nas opções
gerais do kernel e já estivermos usando a versão 3.2.9 e compilarmos os fontes da
mesma versão, os módulos que estavam no diretório serão subescritos. Se pre-
tendemos ter um ponto de restauração, faça backup dos diretórios de módulos
ou set um nome de versão para seu novo kernel diferente.
TESTANDO
Tudo funciona desde que não dê errado. Contudo, para algo funcionar, de-
vemos ter procedimentos claros do que e como fazer, além de todas as partes
envolvidas no processo concordarem.
Ao compilar um novo kernel, existe uma gama razoável de problemas que po-
dem acontecer. Em especial, podemos:
3 Administração de sistemas operacionais
183
RECUPERAÇÃO DE BACKUP
Quando planejamos, as coisas ficam mais fáceis. Vamos supor que, por não ter
feito o backup devido antes da instalação do novo kernel ou pela sua perda, não
temos outro a não ser o novo que não funciona. O que fazer?
De posse do CD/DVD de sua distribuição, coloque-o no leitor e deixe bootar
como se fosse instalar o sistema, mas no menu principal use a opção:
Odirlei Batista
vmlinuz root=/dev/sdaxxx ro
Vamos a um cenário interessante. Digamos que você precisa levar uma caixa de
uma cidade a outra. Dispõe de um carro, uma bicicleta e um avião ou pode ir andan-
do. Qual a melhor alternativa? Pensou? Um dado que não foi informado: a cidade
que você está e a outra são separadas apenas por uma rua e seu destino fica do ou-
tro lado desta, a 3 metros, e nela não é permitido estacionar carros, o mais próximo
fica 100m. A escolha agora parece óbvia, não? Esse pequeno exemplo nos ensina
que nem sempre a “melhor alternativa” é a melhor opção. Em informática também.
3 Administração de sistemas operacionais
185
O INÍCIO
CASOS E RELATOS
SCRIPTS
CRONTAB
root@aldeia3:~# crontab -l
47 * * * * /usr/bin/run-parts /etc/cron.hourly 1> /dev/null
40 4 * * * /usr/bin/run-parts /etc/cron.daily 1> /dev/null
Thiago Rocha
30 4 * * 0 /usr/bin/run-parts /etc/cron.weekly 1> /dev/null
20 4 1 * * /usr/bin/run-parts /etc/cron.monthly 1> /dev/null
Imagine que, ao andar em um carro, você tivesse que entender tudo sobre mo-
tores e ser um expert em química, para lidar com combustíveis. Não que isso fosse
ruim, mas certamente poucas pessoas estariam aptas a dirigir um carro. Agora
pense que se todo usuário de computador tivesse de saber tudo de hardware
e sistema operacional. É melhor que o sistema operacional envolva o hardware
e nos forneça uma interface amigável de acesso a seus recursos. Assim, surge a
ideia de shell que discutiremos neste tópico.
A SHELL
Unix Users
Unix Shell
x Kernel
Uni
Computer
Hardware
Application
Programs
bash more
ksh pg
csh which
sh env
Hardware Mail
cpp cut
comp Kern el ed
as vi
DBMS S h e ll
Thiago Rocha (2012)
FTP
Se quiser conhecer mais sobre o Unix em sua fase inicial, visite a página de De-
nis Ritichie, um dos projetista dele junto com Ken Thompson, em <http://cm.bell-
-labs.com/who/dmr/>.
Uma shell consiste no que chamamos atualmente de interpretador de
comandos.
Um software que nos apresenta uma linha de comando onde digitamos coman-
dos e eles são implementados internamente na shell ou são aplicativos em disco.
sistemas operacionais
190
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/
Odirlei Batista
bin:/usr/games:/usr/lib/java/bin:/usr/lib/kde4/libexec:/usr/
lib/qt/bin:/usr/share/texmf/bin
#!/bin/sh
# Descricao: script para saudação
# Autor: Garcia@computacao.net
# Versao: 0.1
echo "----------------------------------------------"
#mensagens de saudação a serem usadas
Dia="Bom dia, prezado usuário(a)!\n"
Tarde="Boa tarde, prezado usuário(a) !\n"
Noite="Boa noite, prezado usuário(a) !\n"
#define a mensagem
#se <12 dia, se > 18 noite senão tarde
if [ "$horaa" -lt 12 ]; then
Msg=$Dia
else if [ "$horaa" -gt 18 ]; then
Msg=$Noite
else
Msg=$Tarde
fi
fi
Ele tornará o script executável para todos. Teste, agora, digitando ./teste (o ./ é
para informar que o arquivo está no diretório corrente, se você estiver como root
o diretório corrente não está no seu PATH).
Vamos entendê-lo.
O arquivo começa com:
Odirlei Batista
#!/bin/ssh
A linha informa que deve ser executada a shell que vem depois do #!, neste
caso o sh.
Odirlei Batista
# Autor: Garcia@computacao.net
# Versao: 0.1
Msg=$Dia
horaf=`date`
#!/bin/sh
# Descrição: script para fazer backup do /etc
# Autor: garcia@computacao.net
#versao: 1.0
Data=`date`
Nome=backup-etc-$Data.tar
Echo “Realizando Backup de /etc em “ $Nome
Odirlei Batista (2012)
ls –l $Nome
Neste caso, usamos o date para gerar a string e os comandos tar e ls para rea-
lizar ações.
O if presente na tomada de decisão é um exemplo de comando interno, da
mesma forma que o echo.
Ao terminar o script, ele encerra o processo sh (no nosso caso) e volta para o
aplicativo que invocou nosso script.
VARIÁVEIS DE AMBIENTES
Você deve ter notado que não setamos as variáveis PATH e outras importan-
tes. Se elas não foram alteradas, o valor que está setado no aplicativo que exe-
cutou nosso script é empregado. Mudança em variáveis do sistema só têm valor
dentro do script.
Vamos verificar o contexto local de variáveis.
sistemas operacionais
196
Digite:
Odirlei Batista
Cd /
root@slvm:/# ls
bin/ boot/ dev/ etc/ home/ lib/ lost+found/ media/ mnt/
Odirlei Batista
opt/ proc/ root/ sbin/ srv/ sys/ tmp/ usr/ var/
root@slvm:/#
Agora abra uma nova shell digitando sh e digite set PATH=/etc e verifique se
foi modificado como a seguir.
Sh
Echo $PATH
Odirlei Batista
PATH=/etc
Echo $PATH
Digite ls.
O que conseguiu?
root@slvm:/# ls
Odirlei Batista
root@slvm:/# exit
exit
Odirlei Batista
root@slvm:/# ls
bin/ boot/ dev/ etc/ home/ lib/ lost+found/ media/ mnt/
opt/ proc/ root/ sbin/ srv/ sys/ tmp/ usr/ var/
Ambos os scripts apresentados são muito simples, mas ilustram bem a lógica
de desenvolvimento.
Neste tópico, você aprendeu como desenvolver um script analisando exem-
plos e comparando com sua atividade em seu computador.
Se você coordenar uma determinada tarefa, a primeira vez que for realizada
certamente será interessante que acompanhe sua execução. Contudo, se toda
vez que a atividade for realizada, depois de padronizada, e não fizer parte da exe-
cução, apenas da supervisão, isso será repetitivo e sua participação poderia ser
apenas verificar o resultado final.
Em informática da mesma forma, tarefas corriqueiras podem ser automatiza-
das mediante o uso de scripts, ou shell scripts, como os chamamos. Diversos scripts
já existem em uma instalação Linux, vamos conhecê-los neste tópico.
O PRIMEIRO SCRIPT
O sistema operacional Linux, após seu boot, tendo o kernel colocado em me-
mória, executa o programa init, que verifica as setagens em /etc/inittab e inicializa
o sistema operacional carregando os demais aplicativos. Ele pode inicializar em
modo com suporte à rede, mono ou multiusuário. Então, apresenta ao usuário
final uma tela de login que pode ser gráfica ou a linha de comando do prompt via
comando login.
É importante que o passo a seguir iniciado pelo init seja definir qual script será
executado a seguir.
Vamos a um exemplo pegando a distribuição CentOS muito utilizada em ser-
vidores e Linux appliances (Linux customatizado para uma determinada função).
Vejamos o arquivo inittab:
sistemas operacionais
198
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
su:1S:wait:/etc/rc.d/rc.K
Neste, podemos ver que o modo default é o 3, sendo que o script evocado22 é
o /etc/rc.d/rc.M, diferente do que aconteceu no CentOS.
As mudanças nas diversas distribuições, mesmo executado a mesma versão de
kernel, começa no init. Se você visitar, no caso do exemplo anterior, o /etc/rc.d,
encontrará os outros scripts padrões do Slackware.
Os principais scripts se referem à carga de módulos, setagem de rede e sistema
de arquivo em rede, bem como interface gráfica. Para conhecê-los, leia a docu-
mentação de sua distribuição.
Aprendemos que existem diversos scripts padrões e como o processo de carga
começa com o init, bem como existim diferenças entre distribuições.
O SCRIPT
Uma alternativa mais interessante que ler o nome do arquivo é passá-lo como
um parâmetro para o script. O seja o script será invocado como:
Odirlei Batista
backup.sh nome_arquivo
Antes de gerar o arquivo tar do diretório, devemos ver se ele existe. Podemos
usar o test para testar se existe o arquivo e se não existir, imprimir uma mensa-
gem e sair.
if test -f $1
Odirlei Batista
echo “ diretório não existe !”
exit 1
Aqui podemos usar o date para gerar o nome do arquivo, lembrado que o $1
tem o nome do arquivo.
Odirlei Batista
Data=`date`
Nome=$1$Data.tar
Atividade simples, basta usar tar. Um cuidado é gerar esse arquivo em /tmp
e trabalhar lá só colocando no diretório corrente quando terminarmos a tarefa.
Odirlei Batista
tar -cvf /tmp/$Nome $1
PASSO 5: COMPRIMIR
Odirlei Batista
gzip2 /tmp/$Nome
mv /tmp/$Nome.bz2 .
echo “backup com sucesso no arquivo: “ $Nome.bz2
#!/bin/sh
# Descrição: script para fazer backup de diretório
# uso backup.sh nome-diretório-a-realizar-backup
# Autor: garcia@computacao.net
#versao: 1.0
# ve se diretório existe
if test -f $1; then
echo “ diretório não existe !”
exit 1
fi
#comprime
bzip2 /tmp/$Nome
#termina
mv /tmp/$Nome.bz2 .
# msg ok
exit 0
Teste o script com seus arquivos para ver se funciona. De que adianta um script
de backup se não conseguimos voltar a ele? A seguir, você encontra o script res-
tore.sh que tem dois parâmetros, o primeiro o arquivo tar.bz2 e o segundo o di-
retório onde será colocado, use com cuidado para evitar sobreposição de dados.
A ideia básica é a mesma:
a) validade os parâmetros se o nome e diretório existem;
b) descomprima o arquivo;
c) desempacote o arquivo;
d) avise o usuário.
3 Administração de sistemas operacionais
203
#!/bin/sh
# Descrição: script para fazer restauração de backup de diretório
# uso restore.sh nome_arq_backup diretório_destino
# Autor: garcia@computacao.net
#versao: 1.0
#descomprime e desempacota
cp $1 $2
cd $2
exit 0
No site <http://www.csie.ntu.edu.tw/~r92092/ref/win32/
SAIBA win32scripting.html >, há um bom tutorial com exemplos de
MAIS como trabalhar com MS DOS e <http://www.mvps.org/scrip-
ting/> para Windows scripts.
CONTAS NO WINDOWS
Após clicar em criar a conta, você estará de volta ao menu Iniciar. Clique sobre
a conta que acabou de criar. Você pode escolher a senha da conta e uma imagem
para identificá-la.
Fique atento e utilize uma senha forte.
Vamos testar. Crie uma conta chamada teste e logue com ela.
Agora, selecione em conta de usuário, adicionar ou remover contas de usuário
e terá a tela a seguir, onde estão listadas as contas existentes e a possibilidade de
criar uma nova conta. Clique em criar nova conta.
3 Administração de sistemas operacionais
207
Clique em Criar uma nova conta. Você pode escolher nome de usuário e perfil
da conta padrão ou administrador. Escolha com cuidado, já que uma conta ad-
ministrador pode acessar qualquer recurso da máquina e alterá-los, o que não
desejamos algumas vezes.
Thiago Rocha (2012)
CONTAS NO LINUX
root@slvm:~# adduser
Login name for new user []: teste
User ID ('UID') [ defaults to next available ]:
Initial group [ users ]:
Additional UNIX groups:
Users can < … recortado …> groups:
Home directory [ /home/teste ]
Shell [ /bin/bash ]
Expiry date (YYYY-MM-DD) []: 2012-12-31
New account will be created as follows:
---------------------------------------
Login name.......: teste
UID..............: [ Next available ]
Initial group....: users
Additional groups: [ None ]
Home directory...: /home/teste
Shell............: /bin/bash
Expiry date......: 2012-12-31
This is it... if you want to bail out, hit Control-C.
Otherwise, press ENTER to go ahead and make the account.
New password:
Re-enter new password:
passwd: password changed.
Account setup complete.
O item senha deve ser redigitado para garantir que não erramos na primeira
digitação, e não é mostrado por questões de segurança.
Para trocar a senha da conta, você pode usar o comando passwd, teste após a
criação da nossa conta de teste.
Vamos agora apagar a conta. Podemos usar o Kuser para isso ou na linha de
comando o userdel, o caso:
Odirlei Batista
userdel –r teste
como setar um arquivo com permissão de leitura, escrita e execução para o dono,
leitura e execução para o grupo e nenhuma permissão para os demais usuários,
neste caso não poderão acessar o arquivo.
ACL
PLANEJAMENTO E MANUTENÇÃO
Pela conhecida lei de Murphy, se algo vai dar errado, sempre dará errado no
pior momento possível.
A nos depararmos com a necessidade de manutenção do sistema computa-
cional, temos as duas possibilidades:
a) a planejada, na manutenção preventiva: temos a oportunidade de plane-
jar para a realização da tarefa de manutenção no melhor momento e com os
recursos adequados;
b) a não planejada, no tratamento de falhas: devemos nos limitar à volta do
sistema ao ar o mais rápido possível com estabilidade e segurança, para isso
ações diárias ajudam muito no momento de crise.
3 Administração de sistemas operacionais
213
BACKUP
GERENCIAMENTO DE CONFIGURAÇÃO
SIEM
FERRAMENTAS NATIVAS
REGEDIT
Não descreveremos os itens do register pela extensão, mas você pode obter
um tutorial detalhado em <http://www.j79zlr.com/reg_tutorial.php> e em
<http://www.techsupportalert.com/pdf/e1209.pdf>.
Lembramos que, se fizermos alterações erradas no register, podemos ter pro-
blemas com a funcionalidade de parte ou de todo o Windows e de aplicações.
Logo, após quaisquer alterações e antes de salvá-las, devemos realizar um backup
que servirá como ponto de restauração.
Além das ferramentas nativas, existem diversos softwares no mercado que
complementam as funcionalidades de administração de uma estação Windows,
sendo alguns de licença livre e alguns comerciais.
Vamos discutir alguns.
sistemas operacionais
218
AIDA64
SANDRA
CCLEANER
FERRAMENTAS NATIVAS
Existem diversas distribuições Linux no mercado, cada uma opta por organizar
seu sistema de arquivo de uma forma. Um exemplo: algumas colocam os arquivos
de configuração no diretório /etc (padrão do Unix), outras em /usr/local/etc, /var/
etc e tantos outros lugares. Os arquivos de configuração estarão lá, mas você terá
de consultar a documentação para encontrá-los.
sistemas operacionais
220
HARDWARE
root@aldeia:/home/garcia# lspci
00:00.0 RAM memory: nVidia Corporation MCP55 Memory Controller
(rev a1)
00:01.0 ISA bridge: nVidia Corporation MCP55 LPC Bridge (rev a2)
00:01.1 SMBus: nVidia Corporation MCP55 SMBus (rev a2)
00:01.2 RAM memory: nVidia Corporation MCP55 Memory Controller
(rev a2)
00:02.0 USB Controller: nVidia Corporation MCP55 USB Controller
(rev a1)
00:02.1 USB Controller: nVidia Corporation MCP55 USB Controller
(rev a2)
00:04.0 IDE interface: nVidia Corporation MCP55 IDE (rev a1)
00:05.0 RAID bus controller: nVidia Corporation MCP55 SATA
Controller (rev a2)
00:05.1 RAID bus controller: nVidia Corporation MCP55 SATA
Controller (rev a2)
00:05.2 RAID bus controller: nVidia Corporation MCP55 SATA
Controller (rev a2)
… <recortado>
#processor : 0
vendor_id : AuthenticAMD
cpu family : 15
model : 75
SHELLS
AWK
KDE e GNOME
WEBMIN
Você aprendeu, neste tópico, que o Linux já traz diversas ferramentas adminis-
trativas instaladas e que podem mudar de distribuição para distribuição. Também
falamos das principais ferramentas e do Webmin.
Pense em uma casa que vive com lixo espalhado pelos cantos, objetos soltos.
Talvez não seja o local mais adequado para se encontrar algo, como uma carteira
de identidade que acabou de cair.
Pense num computador com o sistema operacional instalado e com os arqui-
vos sem qualquer organização, encontrar algo será difícil, usar esse ambiente
também. Temos, então, como tarefa manter a organização do sistema operacio-
nal e mantê-lo sempre atualizado.
Independentemente de lidarmos com Windows ou Linux, os procedimentos e
comportamentos são muito parecidos. Vamos discuti-los neste tópico.
A MANUTENÇÃO
UPGRADE
O upgrade significa atualizar para uma versão mais nova. Novas versões de
software surgem para prover duas facilidades em especial:
a) correção de falhas, o que pode significar correção de um erro que não per-
mite a aplicação cumprir o que devia ou uma correção de uma falha de se-
gurança;
b) implementar novas funcionalidades para o usuário.
Devemos estar atentos tanto às correções e atualizações que existam quanto
ao sistema operacional e demais aplicativos. De nada adiantará termos um siste-
ma operacional atualizado se seu servidor de banco de dados ou suas ferramen-
tas de Office Suite estão desatualizadas e com falhas.
O WINDOWS
LINUX
O Linux por ser um sistema operacional de código aberto que nos permite
realizar atualizações nele, baixando correções em seus diferentes aplicativos e
atualizar o kernel do sistema operacional com uma customização mais adequada
para nosso hardware.
Devemos estar atentos tanto a novas versões do kernel, como a novas versões
de aplicativos-chave no Linux como as bibliotecas, exemplo glibc e na parte de
servidores. Os demais cuidados são comuns ao Windows. Ter backup de tudo que
vamos substituir de forma tal que possamos voltar para a versão anterior do sof-
tware se for necessário.
Discutimos, neste tópico, que da mesma forma que uma casa bagunçada fica
difícil trabalhar, fica num sistema computacional, sendo essencial a manutenção
de nossos softwares, em especial do sistema operacional, permitindo a instalação
de correções e novas funções via upgrade.
3 ADMINISTRAÇÃO DE SISTEMAS OPERACIONAIS
227
Anotações:
MINICURRÍCULO Do AUTOR
Cláudio Martins Garcia possui graduação em Ciências da Computação pela Universidade Federal
de Goiás, mestrado em Ciência da Computação pela Universidade de Campinas (UNICAMP) na
área de Sistemas de Computação. Atualmente é professor da Pontifícia Universidade Católica de
Goiás (PUC - GOIAS) e SENAI - Departamento Regional de Goiás (EAD). Atua em especial na área
de Sistemas da Computação e Ciência da Informação, como foco em uso de tecnologias no pro-
cesso de comunicação de forma segura e imersiva.
Índice
A
Advanced netfilter configuration 171, 172
API 50, 62, 96, 110
Applet 110
B
Bootável 181
Boot loader 131, 132, 181, 182, 183
BSD Unix 117, 120, 126, 137, 138, 159, 172
C
Clusterização 133, 135
Compilar 119, 123, 135, 144, 145, 146, 147, 149, 150, 155, 156, 159, 163, 179, 180, 182, 183, 184
E
Escalonamento 30, 32, 33, 42, 69, 80, 84, 85, 87, 96, 110
Evocado 195, 197, 199
Executável 124, 135, 138, 149, 153, 154, 155, 179, 180, 182, 193, 194, 203
F
Fortran 28
G
GIT 137, 138
GLIBC 137, 138, 139, 146, 147, 226
GNU 137, 138, 139, 150, 181
GPL 137, 138, 150
H
Hashi 86, 87
I
Inode 151, 153
Instanciação 78, 80
I/O bound 40, 41, 42
IP virtual server support 171, 172
ISO 18, 19, 74
J
Journaling 127, 129
K
Kernel do sistema operacional 48, 49, 50, 53
L
Linkado 153, 155
M
Middleware 28, 38
Modularização 50, 51, 52, 53
O
Otimização 130, 132, 135, 137, 160
P
Parametrizar 155, 160, 173, 174
Partição 127, 128, 129, 147, 155, 175, 176, 177, 184
Polling 32
Premissas 203, 204
S
Scripts 133, 134, 135, 144, 184, 186, 187, 190, 191, 192, 197, 198, 199, 203, 221
Segregar 110
Semântica 70, 96, 104, 105
Setarmos 181, 182
Swapping 115, 117, 127, 131
T
Time slice 46, 47, 48, 80
W
Worm 110
SENAI – Departamento Nacional
Unidade de Educação Profissional e Tecnológica – UNIEP
Diana Neri
Coordenação Geral do Desenvolvimento dos Livros
Wânia Pereira
Design Educacional
Bárbara da Silveira
Jaqueline Tartari
Revisão Ortográfica e Gramatical
FabriCO
Denis Pacher
Thiago Rocha
Victor Américo Cardoso
Ilustrações
Denis Pacher
Thiago Rocha
Tratamento de Imagens
Karina Silveira
Diagramação
i-Comunicação
Projeto Gráfico