Академический Документы
Профессиональный Документы
Культура Документы
Novatec
Copyright 2014 by Brian Ward. Title of English-language original: How Linux Works, 2nd Edition,
ISBN 978-1-59327-567-9, published by No Starch Press. Portuguese-language edition copyright 2015
by Novatec Editora Ltda. All rights reserved.
Copyright 2014 por Brian Ward. Ttulo original em ingls: How Linux Works, 2nd Edition, ISBN 9781-59327-567-9, publicado pela No Starch Press. Edio em portugus copyright 2015 pela Novatec
Editora Ltda. Todos os direitos reservados.
Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998.
proibida a reproduo desta obra, mesmo parcial, por qualquer processo, sem prvia autorizao,
por escrito, do autor e da Editora.
Editor: Rubens Prates
Reviso gramatical: Marta Almeida de S
Editorao eletrnica: Carolina Kuwabata
Assistente editorial: Priscila A. Yoshimatsu
ISBN: 978-85-7522-419-9 VC20150212
Histrico de impresses:
Fevereiro/2015
Primeira edio
captulo 1
Quadro geral
primeira vista, um sistema operacional moderno como o Linux bem complicado, com uma quantidade enorme de partes que se comunicam e executam
simultaneamente. Por exemplo, um servidor web pode conversar com um servidor
de banco de dados que, por sua vez, pode usar uma biblioteca compartilhada
utilizada por vrios outros programas. Mas como tudo isso funciona?
A maneira mais eficiente de entender o funcionamento de um sistema operacional
por meio de abstrao um modo elegante de dizer que podemos ignorar a maior
parte dos detalhes. Por exemplo, ao andar de carro, normalmente no precisamos
pensar em detalhes como nos parafusos que mantm o motor preso dentro do
carro ou nas pessoas que constroem e mantm a estrada em que o carro trafega.
Se voc for um passageiro em um carro, tudo o que voc realmente dever saber
o que o carro faz (transporta voc para outro lugar) e alguns aspectos bsicos
de como us-lo (como manusear a porta e o cinto de segurana).
Entretanto, se voc estiver dirigindo um carro, ser preciso saber mais. Voc dever
aprender a operar os controles (por exemplo, o volante e o pedal do acelerador)
e o que fazer quando algo der errado.
Por exemplo, vamos supor que a viagem de carro seja difcil. A abstrao referente
a um carro que trafega por uma estrada pode ser dividida em trs partes: um
carro, uma estrada e a maneira como voc est dirigindo. Isso ajuda a isolar o
problema: se a estrada tiver muitos desnveis, no culpe o carro nem a maneira
como voc est dirigindo. Em vez disso, pode ser que voc queira descobrir por
que a estrada se deteriorou ou, se ela for nova, por que os trabalhadores que a
construram fizeram um trabalho ruim.
Os desenvolvedores de software usam a abstrao como uma ferramenta ao criar
um sistema operacional e suas aplicaes. H vrios termos para uma subdiviso
que use abstraes em softwares de computador, incluindo subsistema, mdulo
e pacote, porm usaremos o termo componente neste captulo por causa de sua
16
17
simplicidade. Ao criar um componente de software, os desenvolvedores geralmente no pensam muito na estrutura interna dos outros componentes, porm
se preocupam com quais outros componentes eles podem usar e como utiliz-los.
Este captulo oferece uma viso bem geral dos componentes que constituem um
sistema Linux. Embora cada um deles tenha uma quantidade enorme de detalhes
tcnicos em sua constituio interna, iremos ignorar esses detalhes e nos concentraremos no que os componentes fazem em relao ao sistema como um todo.
18
Em comparao, em modo usurio, o acesso restrito a um subconjunto (normalmente bem pequeno) de memria e de operaes seguras de CPU. O espao
de usurio refere-se s partes da memria principal que os processos de usurio
podem acessar. Se um processo cometer um erro e provocar falhas, as consequncias sero limitadas e podero ser limpas pelo kernel. Isso significa que se o
seu navegador web provocar uma falha, provavelmente ele no acabar com o
processamento cientfico que voc est executando em background h dias.
Teoricamente, um processo de usurio que perca o controle no poder causar
danos srios ao restante do sistema. Na verdade, isso depende do que voc considera danos srios bem como dos privilgios particulares do processo, pois
alguns processos tm permisso para fazer mais do que outros. Por exemplo,
um processo de usurio pode danificar completamente os dados em um disco?
Com as permisses corretas, sim e voc pode considerar isso como sendo bem
perigoso. Entretanto h medidas de segurana para evitar isso, e a maioria dos
processos simplesmente no ter permisso para provocar falhas dessa maneira.
19
1.3 Kernel
Por que estamos falando de memria principal e de estados? Praticamente tudo
que o kernel faz gira em torno da memria principal. Uma das tarefas do kernel
consiste em separar a memria em vrias subdivises, e ele deve manter determinadas informaes de estado sobre essas subdivises o tempo todo. Cada processo
obtm sua prpria quota de memria, e o kernel deve garantir que cada processo
atenha-se sua quota.
O kernel responsvel pelo gerenciamento das tarefas em quatro reas gerais do
sistema:
Processos o kernel responsvel por determinar quais processos tm permisso para usar a CPU.
20
Memria o kernel deve ajudar a monitorar toda a memria que parte est
alocada no momento para um processo em particular, que parte deve ser
compartilhada entre os processos e que parte est livre.
Device drivers o kernel atua como uma interface entre o hardware (por
exemplo, um disco) e os processos. Normalmente, operar o hardware uma
tarefa do kernel.
Chamadas de sistema e suporte os processos normalmente usam chamadas de
sistema para se comunicar com o kernel.
Iremos agora explorar rapidamente cada uma dessas reas.
Observao: se voc estiver interessado no funcionamento detalhado de um
&&
21
22
O kernel deve ter sua prpria rea privada na memria, qual os processos
de usurio no devero ter acesso.
Cada processo de usurio deve ter sua prpria seo de memria.
Um processo de usurio no poder ter acesso memria privada de outro
processo.
Os processos de usurio podem compartilhar memria.
Partes da memria dos processos de usurio podem ser somente para leitura.
O sistema pode usar mais memria do que est fisicamente presente ao
usar o espao em disco como auxiliar.
Felizmente para o kernel, existe ajuda. As CPUs modernas incluem uma MMU
(Memory Management Unit, ou Unidade de gerenciamento de memria) que
permite ter um esquema de acesso memria chamado memria virtual. Ao usar a
memria virtual, um processo no acessa diretamente a memria por meio de sua
localizao fsica no hardware. Em vez disso, o kernel configura cada processo para
que atue como se ele tivesse todo o computador para si mesmo. Quando o processo acessa alguma parte de sua memria, a MMU intercepta o acesso e utiliza um
mapeamento de endereos de memria para traduzir o endereo de memria do
processo para um endereo realmente fsico na memria do computador. O kernel
deve ainda inicializar alm de continuamente manter e alterar esse mapeamento
de endereos de memria. Por exemplo, durante uma alternncia de contexto, o
kernel deve alterar o mapeamento, do processo de sada para o processo de entrada.
Observao: a implementao de um mapeamento de endereos de memria
&&
chama-se tabela de pginas (page table).
23
24
25
somente seis componentes esto sendo mostrados; no entanto voc pode ver que
os componentes na parte superior esto mais prximos do usurio (a interface
de usurio e o navegador web); os componentes do nvel intermedirio contm
um servidor de emails utilizado pelo navegador web e h diversos componentes
menores na parte inferior.
26
1.5 Usurios
O kernel do Linux suporta o conceito tradicional de um usurio Unix. Um usurio
uma entidade que pode executar processos e ser dono de arquivos. Um usurio
est associado a um nome de usurio. Por exemplo, um sistema pode ter um usurio
chamado billyjoe. No entanto o kernel no administra os nomes de usurio; em
vez disso, ele identifica os usurios por meio de identificadores numricos simples
chamados de userids. (Voc aprender mais sobre a correspondncia entre nomes
de usurio e os userids no captulo 7.)
Os usurios existem principalmente para dar suporte a permisses e limitaes.
Todo processo no espao de usurio tem um usurio que o seu proprietrio
(owner), e dizemos que os processos executam como proprietrio. Um usurio
pode terminar ou modificar o comportamento de seus prprios processos (dentro
de determinados limites), porm no poder interferir nos processos de outros
usurios. Alm disso, os usurios podem ser proprietrios de arquivos e optar
por compartilh-los ou no com outros usurios.
Um sistema Linux normalmente tem diversos usurios, alm daqueles que correspondem a seres humanos de verdade que usem o sistema. Voc os ver com
mais detalhes no captulo 3, mas o usurio mais importante a se conhecer o root.
O usurio root uma exceo s regras anteriores, pois o root pode terminar e
alterar os processos de outros usurios, alm de ler qualquer arquivo do sistema
local. Por esse motivo, o root conhecido como superusurio (superuser). Dizemos
que uma pessoa que atue como root tem acesso de root e um administrador em
um sistema Unix tradicional.
Observao: atuar como root pode ser perigoso. Pode ser difcil identificar e
&&
corrigir erros, pois o sistema permitir que voc faa de tudo, mesmo que o que
voc fizer seja prejudicial ao sistema. Por esse motivo, os designers do sistema
tentam constantemente fazer com que o acesso de root seja to desnecessrio
quanto possvel, por exemplo, no exigindo esse tipo de acesso para alternar
entre redes wireless em um notebook. Alm disso, por mais poderoso que
seja o usurio root, ele continuar executando no modo usurio do sistema
operacional, e no em modo kernel.
27