Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
h>
#include <semaphore.h>
#define NUM_THREADS 100
#define NUM_STEPS 100000
int sum = 0, lock = 0 ;
void enter_cs (int *l)
{
// busy waiting
using atomic
add
Sistemas
Operacionais:
Conceitos
e
while (__sync_fetch_and_add (l, 1)) ;
Mecanismos
}
void leave_cs (int *l)
Prof. Carlos A. Maziero, Dr.
{
(*l) = 0 ; DAINF UTFPR
}
2 de maio de 2014
void *threadBody(void *id)
{
int i ;
for (i=0; i< NUM_STEPS; i++)
{
enter_cs (&lock) ;
soma += 1 ;
leave_cs (&lock) ;
}
Este texto est licenciado sob a Licena AttributionNonCommercial-ShareAlike 3.0 Unported da Creative
Commons (CC). Em resumo, voc deve creditar a
obra da forma especificada pelo autor ou licenciante
(mas no de maneira que sugira que estes concedem qualquer aval a
voc ou ao seu uso da obra). Voc no pode usar esta obra para fins
comerciais. Se voc alterar, transformar ou criar com base nesta obra, voc
poder distribuir a obra resultante apenas sob a mesma licena, ou sob
uma licena similar presente. Para ver uma cpia desta licena, visite
http://creativecommons.org/licenses/by-nc-sa/3.0/.
Este texto foi produzido usando exclusivamente software livre: Sistema
Operacional GNU/Linux (distribuies Fedora e Ubuntu), compilador de texto
LATEX 2 , gerenciador de referncias BibTeX, editor grfico Inkscape, criadores
de grficos GNUPlot e GraphViz e processador PS/PDF GhostScript, entre
outros.
Prefcio
Os sistemas operacionais so elementos fundamentais para o funcionamento de praticamente qualquer sistema de computao, dos minsculos
sistemas embarcados e telefones celulares aos gigantescos centros de processamento de dados das grandes empresas. Apesar da imensa diversidade
de sistemas operacionais existentes, eles tentam resolvem problemas de
mesma natureza e seguem basicamente os mesmos princpios.
Conhecer Sistemas Operacionais a fundo no algo reservado a hackers,
mas importante para todo profissional de computao, pois os mecanismos
implementados pelo sistema operacional afetam diretamente o comportamento e o desempenho das aplicaes. Alm disso, o sistema operacional
uma pea chave na configurao de servios de rede e na segurana do
sistema.
Existem muitos livros de sistemas operacionais disponveis no mercado,
quase todos excelentes, escritos por profissionais reconhecidos mundialmente. Entretanto, bons livros de Sistemas Operacionais podem custar
centenas de reais, o que os torna inacessveis a uma parcela significativa
da populao. Este livro seria apenas mais uma opo nas livrarias, no
fosse por um pequeno detalhe: foi concebido como um Livro Aberto, desde
seu incio. Um Livro Aberto (do ingls Open Book) um livro amplamente
disponvel na Internet em formato digital, sem custo. No exterior, muitos
open books esto tambm disponveis nas livrarias, para aquisio em formato
impresso.
Eu acredito que incluso digital no significa somente permitir o
acesso a computadores parcela mais pobre da populao, mas tambm
desmistificar o funcionamento dessa tecnologia e incentivar seu estudo,
para fomentar as prximas geraes de tcnicos, engenheiros e cientistas da
computao, vindas de todas as classes sociais. Nosso pas no pode mais
se dar ao luxo de desperdiar pessoas inteligentes s porque so pobres.
c Carlos Maziero
iv
0:
Agradecimentos
Este texto fruto de alguns anos de trabalho. Embora eu o tenha redigido
sozinho, ele nunca teria se tornado uma realidade sem a ajuda e o apoio
de muitas pessoas, de vrias formas. Em primeiro lugar, agradeo minha
famlia, pelas incontveis horas em que me subtra de seu convvio para me
dedicar a este trabalho.
Agradeo tambm a todos os docentes e estudantes que utilizaram este
material, pelas inmeras correes e sugestes de melhoria. Em particular,
meus agradecimentos a Alexandre Koutton, Altair Santin, Carlos Silla,
Diogo Olsen, Douglas da Costa, Fabiano Beraldo, Jeferson Amend, Marcos
Pchek Laureano, Paulo Resende, Rafael Hamasaki, Richard Reichardt,
Tadeu Ribeiro Reis, Thayse Solis, Thiago Ferreira, Urlan de Barros e Vagner
Sacramento.
Desejo expressar meu mais profundo respeito pelos autores dos grandes
clssicos de Sistemas Operacionais, como Andrew Tanenbaum e Abraham
Silberschatz, que iluminaram meus primeiros passos nesta rea e que
seguem como referncias inequvocas e incontornveis.
Agradeo Pontifcia Universidade Catlica do Paran, onde fui professor de Sistemas Operacionais por 13 anos, pelas condies de trabalho
que me permitiram dedicar-me a esta empreitada. Tambm Universidade
Tecnolgica Federal do Paran, onde atuo desde julho de 2011, pelas mesmas
razes.
Dedico o Captulo 8 deste livro aos colegas docentes e pesquisadores
do Departamento de Tecnologias da Informao da Universidade de Milo em Crema, onde estive em um ps-doutorado no ano de 2009, com
uma bolsa CAPES/MEC1 . O Captulo 9 deste livro dedicado equipe
1
c Carlos Maziero
vi
0:
ADEPT IRISA/INRIA, Universit de Rennes 1 - Frana, na qual pude passar trs meses agradveis e produtivos durante o inverno 2007-08, como
professor/pesquisador convidado2 .
Carlos Maziero
Curitiba PR, Outubro de 2011
Sumrio
1
Conceitos bsicos
1.1 Objetivos . . . . . . . . . . . . . . . . . . . . .
1.1.1 Abstrao de recursos . . . . . . . . .
1.1.2 Gerncia de recursos . . . . . . . . . .
1.2 Tipos de sistemas operacionais . . . . . . . .
1.3 Funcionalidades . . . . . . . . . . . . . . . . .
1.4 Estrutura de um sistema operacional . . . . .
1.5 Conceitos de hardware . . . . . . . . . . . . .
1.5.1 Interrupes . . . . . . . . . . . . . . .
1.5.2 Proteo do ncleo . . . . . . . . . . .
1.5.3 Chamadas de sistema . . . . . . . . .
1.6 Arquiteturas de Sistemas Operacionais . . . .
1.6.1 Sistemas monolticos . . . . . . . . . .
1.6.2 Sistemas em camadas . . . . . . . . .
1.6.3 Sistemas micro-ncleo . . . . . . . . .
1.6.4 Mquinas virtuais . . . . . . . . . . .
1.7 Um breve histrico dos sistemas operacionais
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
1
3
4
5
8
11
12
14
17
19
22
23
24
25
27
31
Gerncia de atividades
2.1 Objetivos . . . . . . . . . . . . . . . . . . .
2.2 O conceito de tarefa . . . . . . . . . . . . .
2.3 A gerncia de tarefas . . . . . . . . . . . .
2.3.1 Sistemas mono-tarefa . . . . . . .
2.3.2 Sistemas multi-tarefa . . . . . . . .
2.3.3 Sistemas de tempo compartilhado
2.3.4 Ciclo de vida das tarefas . . . . . .
2.4 Implementao de tarefas . . . . . . . . .
2.4.1 Contextos . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
34
34
35
38
38
40
40
42
45
45
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
c Carlos Maziero
viii
2.5
0: SUMRIO
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
46
48
54
60
62
63
64
67
69
80
80
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
82
82
83
85
85
85
87
89
90
92
93
93
97
98
.
.
.
.
.
.
.
.
.
.
102
102
102
106
108
108
109
109
111
111
113
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
c Carlos Maziero
ix
0: SUMRIO
4.6
4.7
4.8
4.9
Semforos . . . . . . . . . . . . . . . . . . . . . . .
Variveis de condio . . . . . . . . . . . . . . . . .
Monitores . . . . . . . . . . . . . . . . . . . . . . .
Problemas clssicos de coordenao . . . . . . . .
4.9.1 O problema dos produtores/consumidores
4.9.2 O problema dos leitores/escritores . . . . .
4.9.3 O jantar dos filsofos . . . . . . . . . . . . .
4.10 Impasses . . . . . . . . . . . . . . . . . . . . . . . .
4.10.1 Caracterizao de impasses . . . . . . . . .
4.10.2 Grafos de alocao de recursos . . . . . . .
4.10.3 Tcnicas de tratamento de impasses . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
114
118
120
122
123
125
128
130
132
133
135
Gerncia de memria
5.1 Estruturas de memria . . . . . . . . . . . . . .
5.2 Endereos, variveis e funes . . . . . . . . .
5.2.1 Endereos lgicos e fsicos . . . . . . . .
5.2.2 Modelo de memria dos processos . . .
5.3 Estratgias de alocao . . . . . . . . . . . . . .
5.3.1 Parties fixas . . . . . . . . . . . . . . .
5.3.2 Alocao contgua . . . . . . . . . . . .
5.3.3 Alocao por segmentos . . . . . . . . .
5.3.4 Alocao paginada . . . . . . . . . . . .
5.3.5 Alocao segmentada paginada . . . .
5.4 Localidade de referncias . . . . . . . . . . . .
5.5 Fragmentao . . . . . . . . . . . . . . . . . . .
5.6 Compartilhamento de memria . . . . . . . . .
5.7 Memria virtual . . . . . . . . . . . . . . . . . .
5.7.1 Mecanismo bsico . . . . . . . . . . . .
5.7.2 Eficincia de uso . . . . . . . . . . . . .
5.7.3 Algoritmos de substituio de pginas
5.7.4 Conjunto de trabalho . . . . . . . . . . .
5.7.5 A anomalia de Belady . . . . . . . . . .
5.7.6 Thrashing . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
141
141
143
147
148
150
151
152
154
157
168
169
173
177
180
181
184
186
195
198
199
Gerncia de arquivos
6.1 Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.1.1 O conceito de arquivo . . . . . . . . . . . . . . . . . .
6.1.2 Atributos . . . . . . . . . . . . . . . . . . . . . . . . . .
202
202
203
204
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
c Carlos Maziero
x
6.2
6.3
6.4
6.5
7
6.1.3 Operaes . . . . . . . . . . . .
6.1.4 Formatos . . . . . . . . . . . . .
6.1.5 Arquivos especiais . . . . . . .
Uso de arquivos . . . . . . . . . . . . .
6.2.1 Abertura de um arquivo . . . .
6.2.2 Formas de acesso . . . . . . . .
6.2.3 Controle de acesso . . . . . . .
6.2.4 Compartilhamento de arquivos
6.2.5 Exemplo de interface . . . . . .
Organizao de volumes . . . . . . . .
6.3.1 Diretrios . . . . . . . . . . . .
6.3.2 Caminhos de acesso . . . . . .
6.3.3 Atalhos . . . . . . . . . . . . . .
6.3.4 Montagem de volumes . . . . .
Sistemas de arquivos . . . . . . . . . .
6.4.1 Arquitetura geral . . . . . . . .
6.4.2 Blocos fsicos e lgicos . . . . .
6.4.3 Alocao fsica de arquivos . .
6.4.4 O sistema de arquivos virtual .
Tpicos avanados . . . . . . . . . . .
0: SUMRIO
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Gerncia de entrada/sada
7.1 Introduo . . . . . . . . . . . . . . . . .
7.2 Dispositivos de entrada/sada . . . . . .
7.2.1 Componentes de um dispositivo
7.2.2 Barramentos . . . . . . . . . . . .
7.2.3 Interface de acesso . . . . . . . .
7.2.4 Endereamento . . . . . . . . . .
7.2.5 Interrupes . . . . . . . . . . . .
7.3 Software de entrada/sada . . . . . . . .
7.3.1 Classes de dispositivos . . . . . .
7.3.2 Estratgias de interao . . . . .
7.4 Discos rgidos . . . . . . . . . . . . . . .
7.4.1 Estrutura fsica . . . . . . . . . .
7.4.2 Interface de hardware . . . . . .
7.4.3 Escalonamento de acessos . . . .
7.4.4 Caching de blocos . . . . . . . . .
7.4.5 Sistemas RAID . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
205
206
211
213
213
215
217
219
222
224
225
227
231
233
234
235
237
238
252
254
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
255
255
257
257
258
260
264
266
271
272
274
284
285
286
287
291
292
c Carlos Maziero
xi
7.5
7.6
7.7
7.8
7.9
7.10
8
Interfaces de rede .
Dispositivos USB .
Interfaces de udio
Interface grfica . .
Mouse e teclado . .
Outros tpicos . . .
0: SUMRIO
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
299
299
299
299
299
299
Segurana de sistemas
300
8.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
8.2 Conceitos bsicos . . . . . . . . . . . . . . . . . . . . . . . . . 301
8.2.1 Propriedades e princpios de segurana . . . . . . . . 301
8.2.2 Ameaas . . . . . . . . . . . . . . . . . . . . . . . . . . 304
8.2.3 Vulnerabilidades . . . . . . . . . . . . . . . . . . . . . 305
8.2.4 Ataques . . . . . . . . . . . . . . . . . . . . . . . . . . 307
8.2.5 Malwares . . . . . . . . . . . . . . . . . . . . . . . . . 310
8.2.6 Infraestrutura de segurana . . . . . . . . . . . . . . . 312
8.3 Fundamentos de criptografia . . . . . . . . . . . . . . . . . . 314
8.3.1 Cifragem e decifragem . . . . . . . . . . . . . . . . . . 314
8.3.2 Criptografia simtrica e assimtrica . . . . . . . . . . 315
8.3.3 Resumo criptogrfico . . . . . . . . . . . . . . . . . . 319
8.3.4 Assinatura digital . . . . . . . . . . . . . . . . . . . . . 320
8.3.5 Certificado de chave pblica . . . . . . . . . . . . . . 321
8.4 Autenticao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
8.4.1 Usurios e grupos . . . . . . . . . . . . . . . . . . . . 324
8.4.2 Tcnicas de autenticao . . . . . . . . . . . . . . . . . 325
8.4.3 Senhas . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
8.4.4 Senhas descartveis . . . . . . . . . . . . . . . . . . . 327
8.4.5 Tcnicas biomtricas . . . . . . . . . . . . . . . . . . . 328
8.4.6 Desafio-resposta . . . . . . . . . . . . . . . . . . . . . 330
8.4.7 Certificados de autenticao . . . . . . . . . . . . . . . 331
8.4.8 Kerberos . . . . . . . . . . . . . . . . . . . . . . . . . . 332
8.4.9 Infra-estruturas de autenticao . . . . . . . . . . . . 335
8.5 Controle de acesso . . . . . . . . . . . . . . . . . . . . . . . . 337
8.5.1 Polticas, modelos e mecanismos de controle de acesso 338
8.5.2 Polticas discricionrias . . . . . . . . . . . . . . . . . 340
8.5.3 Polticas obrigatrias . . . . . . . . . . . . . . . . . . . 345
8.5.4 Polticas baseadas em domnios e tipos . . . . . . . . 349
8.5.5 Polticas baseadas em papis . . . . . . . . . . . . . . 351
c Carlos Maziero
xii
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
352
360
364
364
368
369
Virtualizao de sistemas
9.1 Conceitos bsicos . . . . . . . . . . . . . . . . . .
9.1.1 Um breve histrico . . . . . . . . . . . . .
9.1.2 Interfaces de sistema . . . . . . . . . . . .
9.1.3 Compatibilidade entre interfaces . . . . .
9.1.4 Virtualizao de interfaces . . . . . . . . .
9.1.5 Virtualizao versus abstrao . . . . . .
9.2 A construo de mquinas virtuais . . . . . . . .
9.2.1 Definio formal . . . . . . . . . . . . . .
9.2.2 Suporte de hardware . . . . . . . . . . . .
9.2.3 Formas de virtualizao . . . . . . . . . .
9.3 Tipos de mquinas virtuais . . . . . . . . . . . .
9.3.1 Mquinas virtuais de processo . . . . . .
9.3.2 Mquinas virtuais de sistema operacional
9.3.3 Mquinas virtuais de sistema . . . . . . .
9.4 Tcnicas de virtualizao . . . . . . . . . . . . . .
9.4.1 Emulao completa . . . . . . . . . . . . .
9.4.2 Virtualizao da interface de sistema . . .
9.4.3 Traduo dinmica . . . . . . . . . . . . .
9.4.4 Paravirtualizao . . . . . . . . . . . . . .
9.4.5 Aspectos de desempenho . . . . . . . . .
9.5 Aplicaes da virtualizao . . . . . . . . . . . .
9.6 Ambientes de mquinas virtuais . . . . . . . . .
9.6.1 VMware . . . . . . . . . . . . . . . . . . .
9.6.2 FreeBSD Jails . . . . . . . . . . . . . . . .
9.6.3 Xen . . . . . . . . . . . . . . . . . . . . . .
9.6.4 User-Mode Linux . . . . . . . . . . . . . .
9.6.5 QEMU . . . . . . . . . . . . . . . . . . . .
9.6.6 Valgrind . . . . . . . . . . . . . . . . . . .
9.6.7 JVM . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
371
371
372
373
374
377
379
381
382
385
388
390
391
394
398
400
400
402
402
404
405
408
411
411
412
413
414
416
417
418
8.6
0: SUMRIO
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
c Carlos Maziero
xiii
0: SUMRIO
Referncias Bibliogrficas
419
432
Captulo 1
Conceitos bsicos
Um sistema de computao constitudo basicamente por hardware e software. O hardware composto por circuitos eletrnicos
(processador, memria, portas de entrada/sada, etc.) e perifricos
eletro-ptico-mecnicos (teclados, mouses, discos rgidos, unidades
de disquete, CD ou DVD, dispositivos USB, etc.). Por sua vez, o
software de aplicao representado por programas destinados ao
usurio do sistema, que constituem a razo final de seu uso, como
editores de texto, navegadores Internet ou jogos. Entre os aplicativos
e o hardware reside uma camada de software multi-facetada e complexa, denominada genericamente de Sistema Operacional. Neste
captulo veremos quais os objetivos bsicos do sistema operacional,
quais desafios ele deve resolver e como ele estruturado para alcanar
seus objetivos.
1.1
Objetivos
c Carlos Maziero
2
1: Objetivos
aplicativos
Ad augusta per
angusta.
De omni re scibili, et
quibusdam aliis.
Felix qui potuit rerum
cognoscere causas.
In medio stat virtus.
Labor omnia vincit
improbus.
Non nova, sed nove.
Qui scribit bis legit.
reprodutor
de mdia
editor
grco
sistema operacional
hardware
discos
memria
portas
USB
rede
c Carlos Maziero
3
1.1.1
1: Abstrao de recursos
Abstrao de recursos
c Carlos Maziero
4
1: Gerncia de recursos
1.1.2
Gerncia de recursos
c Carlos Maziero
5
1.2
c Carlos Maziero
6
c Carlos Maziero
7
Embarcado : um sistema operacional dito embarcado (embutido ou embedded) quando construdo para operar sobre um hardware com poucos
recursos de processamento, armazenamento e energia. Aplicaes
tpicas desse tipo de sistema aparecem em telefones celulares, sistemas
de automao industrial e controladores automotivos, equipamentos
eletrnicos de uso domstico (leitores de DVD, TVs, fornos-microondas, centrais de alarme, etc.). Muitas vezes um sistema operacional
embarcado se apresenta na forma de uma biblioteca a ser ligada ao
programa da aplicao (que fixa). LynxOS, C/OS, Xylinx e VxWorks
so exemplos de sistemas operacionais embarcados para controle e
automao. Sistemas operacionais para telefones celulares inteligentes
(smartphones) incluem o Symbian e o Android, entre outros.
Tempo real : ao contrrio da concepo usual, um sistema operacional
de tempo real no precisa ser necessariamente ultra-rpido; sua
caracterstica essencial ter um comportamento temporal previsvel
(ou seja, seu tempo de resposta deve ser conhecido no melhor e pior
caso de operao). A estrutura interna de um sistema operacional
de tempo real deve ser construda de forma a minimizar esperas e
latncias imprevisveis, como tempos de acesso a disco e sincronizaes
excessivas.
Existem duas classificaes de sistemas de tempo real: soft real-time
systems, nos quais a perda de prazos implica na degradao do servio
prestado. Um exemplo seria o suporte gravao de CDs ou
reproduo de msicas. Caso o sistema se atrase, pode ocorrer a perda
da mdia em gravao ou falhas na msica que est sendo tocada.
Por outro lado, nos hard real-time systems a perda de prazos pelo
sistema pode perturbar o objeto controlado, com graves consequncias
humanas, econmicas ou ambientais. Exemplos desse tipo de sistema
seriam o controle de funcionamento de uma turbina de avio a jato ou
de uma caldeira industrial.
Exemplos de sistemas de tempo real incluem o QNX, RT-Linux e
VxWorks. Muitos sistemas embarcados tm caractersticas de tempo
real, e vice-versa.
c Carlos Maziero
8
1.3
1: Funcionalidades
Funcionalidades
c Carlos Maziero
9
1: Funcionalidades
c Carlos Maziero
10
1: Funcionalidades
gerncia de
memria
suporte
de rede
gerncia de
dispositivos
ncleo
gerncia de
proteo
gerncia de
arquivos
interface
grca
etc
Na verdade essa regra to importante que deveria ser levada em conta na construo
de qualquer sistema computacional complexo.
c Carlos Maziero
11
1.4
c Carlos Maziero
12
1: Conceitos de hardware
programas
utilitrios
nvel de usurio
nvel de sistema
ncleo
software
cdigo de
inicializao
drivers de
dispositivos
controladoras de dispositivos
hardware
dispositivos fsicos
1.5
Conceitos de hardware
O sistema operacional interage diretamente com o hardware para fornecer servios s aplicaes. Para a compreenso dos conceitos implementados
pelos sistemas operacionais, necessrio ter uma viso clara dos recursos
fornecidos pelo hardware e a forma de acess-los. Esta seo apresenta uma
reviso dos principais aspectos do hardware de um computador pessoal
convencional.
Um sistema de computao tpico constitudo de um ou mais processadores, responsveis pela execuo das instrues das aplicaes, uma
rea de memria que armazena as aplicaes em execuo (seus cdigos e
dados) e dispositivos perifricos que permitem o armazenamento de dados
e a comunicao com o mundo exterior, como discos rgidos, terminais e
c Carlos Maziero
13
1: Conceitos de hardware
processador
MMU
mouse
teclado
controladora
USB
monitor
unidade
de disco
conexo
de rede
control.
de vdeo
control.
de disco
control.
de rede
dados
endereos
controle
c Carlos Maziero
14
1: Interrupes
1.5.1
Interrupes
c Carlos Maziero
15
1: Interrupes
programa
em execuo
Memria
1
rotina de
tratamento de
interrupo
5
6
rede
2
MMU
processador
dados
endereos
controladora
de rede
controle
c Carlos Maziero
16
1: Interrupes
c Carlos Maziero
17
1: Proteo do ncleo
1.5.2
Proteo do ncleo
c Carlos Maziero
18
1: Proteo do ncleo
Tabela 1.2:
Vetor de Interrupes
[Patterson and Henessy, 2005]
IRQ
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19-31
32-255
do
processador
Pentium
Descrio
divide error
debug exception
null interrupt
breakpoint
INTO-detected overflow
bound range exception
invalid opcode
device not available
double fault
coprocessor segment overrun
invalid task state segment
segment not present
stack fault
general protection
page fault
Intel reserved
floating point error
alignment check
machine check
Intel reserved
maskable interrupts (devices & exceptions)
c Carlos Maziero
19
1: Chamadas de sistema
1.5.3
Chamadas de sistema
c Carlos Maziero
20
nvel
usurio
nvel
ncleo
aplicao
1: Chamadas de sistema
aplicao
aplicao
aplicao
ncleo
hardware
c Carlos Maziero
21
1: Chamadas de sistema
c Carlos Maziero
22
9. Na sequncia, a gerncia de atividades devolve o controle do processador a outra aplicao que tambm esteja aguardando o retorno de
uma interrupo de software, e cuja operao solicitada j tenha sido
concluda.
aplicao
read(...)
2
nvel usurio
nvel ncleo
chamada 5
de sistema
gerncia de
atividades
vetor de interrupes
79h
80h
81h
82h
1.6
Embora a definio de nveis de privilgio (Seo 1.5.3) imponha uma estruturao mnima a um sistema operacional, as vrias partes que compem
c Carlos Maziero
23
1: Sistemas monolticos
o sistema podem ser organizadas de diversas formas, separando suas funcionalidades e modularizando seu projeto. Nesta seo sero apresentadas as
arquiteturas mais populares para a organizao de sistemas operacionais.
1.6.1
Sistemas monolticos
aplicao
aplicao
memory
operations
le
operations
aplicao
process
manager
CPU
scheduler
aplicao
network
operations
memory
manager
access
control
nvel
ncleo
network
protocols
kernel data structures
NTFS
le system
MMU
control
block I/O
operations
USB
driver
VFAT
le system
SATA
driver
Bluetooth
driver
network
driver
hardware
c Carlos Maziero
24
1: Sistemas em camadas
1.6.2
Sistemas em camadas
c Carlos Maziero
25
1: Sistemas micro-ncleo
Em decorrncia desses inconvenientes, a estruturao em camadas apenas parcialmente adotada hoje em dia. Muitos sistemas implementam uma
camada inferior de abstrao do hardware para interagir com os dispositivos
(a camada HAL Hardware Abstraction Layer, implementada no Windows NT
e seus sucessores), e tambm organizam em camadas alguns sub-sistemas
como a gerncia de arquivos e o suporte de rede (seguindo o modelo OSI).
Como exemplos de sistemas fortemente estruturados em camadas podem
ser citados o IBM OS/2 e o MULTICS [Corbat and Vyssotsky, 1965].
1.6.3
Sistemas micro-ncleo
c Carlos Maziero
26
1: Sistemas micro-ncleo
user
application
user
application
user
application
aplicaes
sistema operacional
process
manager
memory
manager
MMU
control
le
system
protection
manager
network
protocols
block IO
operations
network
driver
disk
driver
nvel usurio
nvel ncleo
micro-kernel
hardware
c Carlos Maziero
27
1.6.4
1: Mquinas virtuais
Mquinas virtuais
Para que programas e bibliotecas possam executar sobre uma determinada plataforma computacional, necessrio que tenham sido compilados
para ela, respeitando o conjunto de instrues do processador e o conjunto de chamadas do sistema operacional. Da mesma forma, um sistema
operacional s poder executar sobre uma plataforma de hardware se for
compatvel com ela. Nos sistemas atuais, as interfaces de baixo nvel so
pouco flexveis: geralmente no possvel criar novas instrues de processador ou novas chamadas de sistema, ou mudar sua semntica. Por isso, um
sistema operacional s funciona sobre o hardware para o qual foi construdo,
uma biblioteca s funciona sobre o hardware e sistema operacional para
os quais foi projetada e as aplicaes tambm tm de obedecer a interfaces
pr-definidas.
Todavia, possvel contornar os problemas de compatibilidade entre os
componentes de um sistema atravs de tcnicas de virtualizao. Usando os
servios oferecidos por um determinado componente do sistema, possvel
construir uma camada de software que oferea aos demais componentes
servios com outra interface. Essa camada permitir assim o acoplamento
entre interfaces distintas, de forma que um programa desenvolvido para
uma plataforma A possa executar sobre uma plataforma distinta B. O
sistema computacional visto atravs dessa camada denominado mquina
virtual.
A Figura 1.10, extrada de [Smith and Nair, 2004], mostra um exemplo
de mquina virtual, onde uma camada de virtualizao permite executar
um sistema operacional Windows e suas aplicaes sobre uma plataforma
de hardware Sparc, distinta daquela para a qual foi projetado (Intel/AMD).
sistema
convidado
monitor
sistema
hospedeiro
Aplics Windows
Aplics Windows
Windows
Windows
camada de
virtualizao
Sparc
x86
Mquina
Virtual
c Carlos Maziero
28
1: Mquinas virtuais
c Carlos Maziero
29
1: Mquinas virtuais
Aplic
Java
Aplics Linux
Aplics Windows
ncleo Linux
ncleo Windows
JVM
ncleo Linux
hipervisor
hardware x86
hardware x86
VM de aplicao
VM de sistema
c Carlos Maziero
30
1: Mquinas virtuais
aplics
OS 1
aplics
aplics
aplics
guest OS
OS 2
hipervisor
host OS
hipervisor
hardware
hardware
hipervisor nativo
hipervisor convidado
c Carlos Maziero
31
1.7
c Carlos Maziero
32
Anos 40 : cada programa executava sozinho e tinha total controle do computador. A carga do programa em memria, a varredura dos perifricos
de entrada para busca de dados, a computao propriamente dita e o
envio dos resultados para os perifrico de sada, byte a byte, tudo devia
ser programado detalhadamente pelo desenvolvedor da aplicao.
Anos 50 : os sistemas de computao fornecem bibliotecas de sistema
(system libraries) que encapsulam o acesso aos perifricos, para facilitar
a programao de aplicaes. Algumas vezes um programa monitor
(system monitor) auxilia a carga e descarga de aplicaes e/ou dados
entre a memria e perifricos (geralmente leitoras de carto perfurado,
fitas magnticas e impressoras de caracteres).
1961 : o grupo do pesquisador Fernando Corbat, do MIT, anuncia o desenvolvimento do CTSS Compatible Time-Sharing System
[Corbat et al., 1962], o primeiro sistema operacional com compartilhamento de tempo.
1965 : a IBM lana o OS/360, um sistema operacional avanado, com
compartilhamento de tempo e excelente suporte a discos.
1965 : um projeto conjunto entre MIT, GE e Bell Labs define o sistema
operacional Multics, cujas ideias inovadoras iro influenciar novos
sistemas durante dcadas.
1969 : Ken Thompson e Dennis Ritchie, pesquisadores dos Bell Labs, criam
a primeira verso do UNIX.
1981 : a Microsoft lana o MS-DOS, um sistema operacional comprado da
empresa Seattle Computer Products em 1980.
1984 : a Apple lana o sistema operacional Macintosh OS 1.0, o primeiro a
ter uma interface grfica totalmente incorporada ao sistema.
1985 : primeira tentativa da Microsoft no campo dos sistemas operacionais
com interface grfica, atravs do MS-Windows 1.0.
1987 : Andrew Tanenbaum, um professor de computao holands, desenvolve um sistema operacional didtico simplificado, mas respeitando
a API do UNIX, que foi batizado como Minix.
c Carlos Maziero
33
Captulo 2
Gerncia de atividades
Um sistema de computao quase sempre tem mais atividades
a executar que o nmero de processadores disponveis. Assim,
necessrio criar mtodos para multiplexar o(s) processador(es)
da mquina entre as atividades presentes. Alm disso, como as
diferentes tarefas tm necessidades distintas de processamento, e
nem sempre a capacidade de processamento existente suficiente
para atender a todos, estratgias precisam ser definidas para que
cada tarefa receba uma quantidade de processamento que atenda
suas necessidades. Este mdulo apresenta os principais conceitos,
estratgias e mecanismos empregados na gesto do processador e das
atividades em execuo em um sistema de computao.
2.1
Objetivos
c Carlos Maziero
35
2: O conceito de tarefa
2.2
O conceito de tarefa
c Carlos Maziero
36
2: O conceito de tarefa
c Carlos Maziero
37
2: O conceito de tarefa
4
2
1
3
c Carlos Maziero
38
2.3
2: A gerncia de tarefas
A gerncia de tarefas
2.3.1
Sistemas mono-tarefa
3
processador
disco
Memria
tarefa
resultados
control.
de disco
1
barramentos
c Carlos Maziero
39
2: Sistemas mono-tarefa
inicia a
execuo
executando
termina a
execuo
terminada
c Carlos Maziero
40
2.3.2
2: Sistemas multi-tarefa
Sistemas multi-tarefa
2.3.3
Essa diferena de velocidades permanece imensa nos sistemas atuais. Por exemplo, em
um computador atual a velocidade de acesso memria de cerca de 10 nanossegundos
(10 109 s), enquanto a velocidade de acesso a dados em um disco rgido IDE de cerca
de 10 milissegundos (10 103 s), ou seja, um milho de vezes mais lento!
c Carlos Maziero
41
nova
terminou de
ser carregada
em memria
pronta
dado disponvel ou
evento ocorreu
inicia a
execuo
suspensa
executando
termina a
execuo
terminada
1
2
3
4
5
6
7
c Carlos Maziero
42
ncleo
tarefa
c=20
tarefa
c=19
...
c=18
tarefa
c=2
tarefa
c=1
ncleo
c=0
2.3.4
c Carlos Maziero
43
nova
terminou de
ser carregada
em memria
recebe o
processador
pronta
dado disponvel ou
evento ocorreu
suspensa
executando
termina a
execuo
terminada
c Carlos Maziero
44
c Carlos Maziero
45
2: Implementao de tarefas
2.4
Implementao de tarefas
2.4.1
Contextos
Na Seo 2.2 vimos que uma tarefa possui um estado interno bem
definido, que representa sua situao atual: a posio de cdigo que ela est
executando, os valores de suas variveis e os arquivos que ela utiliza, por
exemplo. Esse estado se modifica conforme a execuo da tarefa evolui. O
estado de uma tarefa em um determinado instante denominado contexto.
Uma parte importante do contexto de uma tarefa diz respeito ao estado
interno do processador durante sua execuo, como o valor do contador de
programa (PC - Program Counter), do apontador de pilha (SP - Stack Pointer)
e demais registradores. Alm do estado interno do processador, o contexto
de uma tarefa tambm inclui informaes sobre os recursos usados por ela,
como arquivos abertos, conexes de rede e semforos.
Cada tarefa presente no sistema possui um descritor associado, ou seja,
uma estrutura de dados que a representa no ncleo. Nessa estrutura so
armazenadas as informaes relativas ao seu contexto e os demais dados
necessrios sua gerncia. Essa estrutura de dados geralmente chamada
de TCB (do ingls Task Control Block) ou PCB (Process Control Block). Um
TCB tipicamente contm as seguintes informaes:
Identificador da tarefa (pode ser um nmero inteiro, um apontador,
uma referncia de objeto ou um identificador opaco);
Estado da tarefa (nova, pronta, executando, suspensa, terminada, ...);
c Carlos Maziero
46
2: Trocas de contexto
2.4.2
Trocas de contexto
c Carlos Maziero
47
2: Trocas de contexto
Tarefa t1
tratador
de
interrupo
dispatcher
scheduler
Tarefa t2
dispatcher
t
salva contexto
TCB(t1)
restaura contexto
TCB(t2)
c Carlos Maziero
48
2.4.3
2: Processos
Processos
c Carlos Maziero
49
2: Processos
Processo pa
tarefas
arqs abertos
Processo pb
tarefas
memria
arqs abertos
conexes
memria
conexes
ncleo
c Carlos Maziero
50
Processo pai
2: Processos
Processo pai
Processo lho
tarefas
memria
tarefas
memria
tarefas
memria
arqs abertos
conexes
arqs abertos
conexes
arqs abertos
conexes
fork
ncleo
return
return
ncleo
Figura 2.9: A chamada de sistema fork: antes (esq) e depois (dir) de sua
execuo pelo ncleo do sistema UNIX.
tm os mesmos recursos associados, embora em reas de memria distintas.
Caso o processo filho deseje abandonar o fluxo de execuo herdado do
processo pai e executar outro cdigo, poder faz-lo atravs da chamada de
sistema execve. Essa chamada substitui o cdigo do processo que a invoca
pelo cdigo executvel contido em um arquivo informado como parmetro.
A listagem a seguir apresenta um exemplo de uso dessas duas chamadas de
sistema:
c Carlos Maziero
51
1
2
3
4
5
#include
#include
#include
#include
#include
2: Processos
<unistd.h>
<sys/types.h>
<sys/wait.h>
<stdio.h>
<stdlib.h>
6
7
8
9
10
pid = fork () ;
11
/* replicao do processo */
12
if ( pid < 0 )
/* fork no funcionou */
{
perror ("Erro: ") ;
exit (-1) ;
/* encerra o processo */
}
else if ( pid > 0 ) /* sou o processo pai */
{
wait (0) ;
/* vou esperar meu filho concluir */
}
else
/* sou o processo filho*/
{
/* carrega outro cdigo binrio para executar */
execve ("/bin/date", argv, envp) ;
perror ("Erro: ") ; /* execve no funcionou */
}
printf ("Tchau !\n") ;
exit(0) ;
/* encerra o processo */
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
c Carlos Maziero
52
2: Processos
c Carlos Maziero
53
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2: Processos
init-+-aacraid
|-ahc_dv_0
|-atd
|-avaliacao_horac
|-bdflush
|-crond
|-gpm
|-kdm-+-X
|
-kdm---kdm_greet
|-keventd
|-khubd
|-2*[kjournald]
|-klogd
|-ksoftirqd_CPU0
|-ksoftirqd_CPU1
|-kswapd
|-kupdated
|-lockd
|-login---bash
|-lpd---lpd---lpd
|-5*[mingetty]
|-8*[nfsd]
|-nmbd
|-nrpe
|-oafd
|-portmap
|-rhnsd
|-rpc.mountd
|-rpc.statd
|-rpciod
|-scsi_eh_0
|-scsi_eh_1
|-smbd
|-sshd-+-sshd---tcsh---top
|
|-sshd---bash
|
-sshd---tcsh---pstree
|-syslogd
|-xfs
|-xinetd
-ypbind---ypbind---2*[ypbind]
c Carlos Maziero
54
2: Threads
2.4.4
Threads
Conforme visto na Seo 2.4.3, os primeiros sistemas operacionais suportavam apenas uma tarefa por processo. medida em que as aplicaes se
tornavam mais complexas, essa limitao se tornou um claro inconveniente.
Por exemplo, um editor de textos geralmente executa tarefas simultneas
de edio, formatao, paginao e verificao ortogrfica sobre a mesma
massa de dados (o texto sob edio). Da mesma forma, processos que
implementam servidores de rede (de arquivos, bancos de dados, etc.) devem gerenciar as conexes de vrios usurios simultaneamente, que muitas
vezes requisitam as mesmas informaes. Essas demandas evidenciaram a
necessidade de suportar mais de uma tarefa operando no mesmo contexto,
ou seja, dentro do mesmo processo.
De forma geral, cada fluxo de execuo do sistema, seja associado a
um processo ou no interior do ncleo, denominado thread. Threads
executando dentro de um processo so chamados de threads de usurio
(user-level threads ou simplesmente user threads). Cada thread de usurio
corresponde a uma tarefa a ser executada dentro de um processo. Por
sua vez, os fluxos de execuo reconhecidos e gerenciados pelo ncleo do
sistema operacional so chamados de threads de ncleo (kernel-level threads
ou kernel threads). Os threads de ncleo representam tarefas que o ncleo
deve realizar. Essas tarefas podem corresponder execuo dos processos
no espao de usurio, ou a atividades internas do prprio ncleo, como
drivers de dispositivos ou tarefas de gerncia.
Os sistemas operacionais mais antigos no ofereciam suporte a threads
para a construo de aplicaes. Sem poder contar com o sistema operacional,
os desenvolvedores de aplicaes contornaram o problema construindo
bibliotecas que permitiam criar e gerenciar threads dentro de cada processo,
sem o envolvimento do ncleo do sistema. Usando essas bibliotecas, uma
aplicao pode lanar vrios threads conforme sua necessidade, mas o ncleo
do sistema ir sempre perceber (e gerenciar) apenas um fluxo de execuo
dentro de cada processo. Por essa razo, esta forma de implementao
de threads nomeada Modelo de Threads N:1: N threads no processo,
mapeados em um nico thread de ncleo. A Figura 2.10 ilustra esse modelo.
c Carlos Maziero
55
2: Threads
Processo pb
Processo pa
threads
memria
memria
biblioteca
biblioteca
thread de
ncleo
threads
ncleo
thread de
ncleo
c Carlos Maziero
56
2: Threads
Processo pa
threads
memria
threads
memria
ncleo
threads
de ncleo
c Carlos Maziero
57
2: Threads
Processo pa
threads
memria
memria
biblioteca
biblioteca
thread de
ncleo
threads
ncleo
threads
de ncleo
c Carlos Maziero
58
Modelo
Resumo
Local da implementao
Complexidade
Custo de gerncia para o ncleo
Escalabilidade
Suporte a vrios
processadores
Velocidade das
trocas de contexto entre threads
Diviso de recursos entre tarefas
Exemplos
2: Threads
N:1
1:1
Todos os N threads do Cada thread do proprocesso so mapea- cesso tem um thdos em um nico th- read correspondente
read de ncleo
no ncleo
bibliotecas no nvel dentro do ncleo
usurio
baixa
mdia
nulo
mdio
N:M
Os N threads do processo so mapeados
em um conjunto de
M threads de ncleo
em ambos
alta
no
baixa
sim
alta
sim
rpida
lenta
injusta
justa
alta
alto
c Carlos Maziero
59
2: Threads
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
4
5
#define NUM_THREADS 5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
c Carlos Maziero
60
2: Escalonamento de tarefas
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
t1.start ();
t2.start ();
t3.start ();
20
21
22
23
24
2.5
Escalonamento de tarefas
c Carlos Maziero
61
2: Escalonamento de tarefas
c Carlos Maziero
62
2: Objetivos e mtricas
2.5.1
Objetivos e mtricas
c Carlos Maziero
63
2.5.2
c Carlos Maziero
64
Em um sistema preemptivo, normalmente as tarefas s so interrompidas quando o processador est no modo usurio; a thread de ncleo
correspondente a cada tarefa no sofre interrupes. Entretanto, os sistemas
mais sofisticados implementam a preempo de tarefas tambm no modo
ncleo. Essa funcionalidade importante para sistemas de tempo real, pois
permite que uma tarefa de alta prioridade chegue mais rapidamente ao
processador quando for reativada. Ncleos de sistema que oferecem essa
possibilidade so denominados ncleos preemptivos; Solaris, Linux 2.6 e
Windows NT so exemplos de ncleos preemptivos.
2.5.3
t1
0
5
t2
0
2
t3
1
4
t4
3
3
Tt =
c Carlos Maziero
65
t4
t3
t2
t1
t
0
11
14
Tw =
t
0
10
11
12
13
14
c Carlos Maziero
66
t=0
t=2
t=3
t4
t=4
t=5
t=6
t=7
t2
t1
t3
t2
t1
t1
t3
t2
t1
t3
t2
t4
t1
t3
t4
t1
t3
t3
t4
t1
t=0
t=1
t1
t=8
t=9
t=10
t=11
t2
t=12
t3
t4
t1
t1
t3
t4
t1
t3
t4
t4
t1
t3
t4
t1
t3
t4
t1
t3
t4
t1
t=13
t=14
t4
Tt =
Tw =
c Carlos Maziero
67
tq
tq + ttc
2.5.4
c Carlos Maziero
68
t4
t3
t2
t1
t
0
14
Tt =
Tw =
Deve-se observar que o comportamento expresso na Figura 2.16 corresponde verso cooperativa do algoritmo SJF: o escalonador aguarda a
concluso de cada tarefa para decidir quem ir receber o processador. No
caso preemptivo, o escalonador deve comparar a durao prevista de cada
nova tarefa que ingressa no sistema com o tempo restante de processamento
das demais tarefas presentes, inclusive aquela que est executando no momento. Essa abordagem denominada por alguns autores de menor tempo
restante primeiro (SRTF Short Remaining Time First) [Tanenbaum, 2003].
A maior dificuldade no uso do algoritmo SJF consiste em estimar a priori
a durao de cada tarefa, ou seja, antes de sua execuo. Com exceo
de algumas tarefas em lote ou de tempo real, essa estimativa invivel;
por exemplo, como estimar por quanto tempo um editor de textos ir ser
utilizado? Por causa desse problema, o algoritmo SJF puro pouco utilizado.
No entanto, ao associarmos o algoritmo SJF preempo por tempo, esse
algoritmo pode ser de grande valia, sobretudo para tarefas orientadas a
entrada/sada.
c Carlos Maziero
69
2.5.5
Vrios critrios podem ser usados para ordenar a fila de tarefas prontas e
escolher a prxima tarefa a executar; a data de ingresso da tarefa (usada no
FCFS) e sua durao prevista (usada no SJF) so apenas dois deles. Inmeros
outros critrios podem ser especificados, como o comportamento da tarefa
(em lote, interativa ou de tempo-real), seu proprietrio (administrador,
gerente, estagirio), seu grau de interatividade, etc.
No escalonamento por prioridades, a cada tarefa associada uma
prioridade, geralmente na forma de um nmero inteiro. Os valores de
prioridade so ento usados para escolher a prxima tarefa a receber o
processador, a cada troca de contexto. O algoritmo de escalonamento por
prioridades define um modelo genrico de escalonamento, que permite
modelar vrias abordagens, entre as quais o FCFS e o SJF.
c Carlos Maziero
70
t1
0
5
2
t2
0
2
3
t3
1
4
1
t4
3
3
4
t
0
10
14
Tt =
Tw =
Quando uma tarefa de maior prioridade se torna disponvel para execuo, o escalonador pode decidir entregar o processador a ela, trazendo
c Carlos Maziero
71
a tarefa atual de volta para a fila de prontas. Nesse caso, temos um escalonamento por prioridades preemptivo, cujo comportamento apresentado
na Figura 2.18 (observe que, quando t4 ingressa no sistema, ela recebe o
processador e t1 volta a esperar na fila de prontas).
t4
t3
t2
t1
t
0
10
14
Tt =
Tw =
Definio de prioridades
A definio da prioridade de uma tarefa influenciada por diversos
fatores, que podem ser classificados em dois grandes grupos:
Fatores externos : so informaes providas pelo usurio ou o administrador do sistema, que o escalonador no conseguiria estimar sozinho. Os
fatores externos mais comuns so a classe do usurio (administrador,
diretor, estagirio) o valor pago pelo uso do sistema (servio bsico,
servio premium) e a importncia da tarefa em si (um detector de
intruso, um script de reconfigurao emergencial, etc.).
c Carlos Maziero
72
fatores externos
...
prioridade
esttica
prioridade
dinmica
idade da tarefa
durao estimada
grau de interatividade
fatores internos
c Carlos Maziero
73
4: baixa ou ociosa
6: abaixo do normal
8: normal
10: acima do normal
13: alta
24: tempo-real
Geralmente a prioridade da tarefa responsvel pela janela ativa recebe
um incremento de prioridade (+1 ou +2, conforme a configurao do
sistema).
No Linux (ncleo 2.4 e sucessores) h duas escalas de prioridades:
Tarefas interativas: a escala de prioridades negativa: a prioridade de cada tarefa vai de -20 (mais importante) a +19 (menos
importante) e pode ser ajustada atravs dos comandos nice e
renice. Esta escala padronizada em todos os sistemas UNIX.
Tarefas de tempo-real: a prioridade de cada tarefa vai de 1 (mais
importante) a 99 (menos importante). As tarefas de tempo-real
tm precedncia sobre as tarefas interativas e so escalonadas
usando polticas distintas. Somente o administrador pode criar
tarefas de tempo-real.
Inanio e envelhecimento de tarefas
No escalonamento por prioridades bsico, as tarefas de baixa prioridade
s recebem o processador na ausncia de tarefas de maior prioridade. Caso
existam tarefas de maior prioridade frequentemente ativas, as de baixa
prioridade podem sofrer de inanio (starvation), ou seja, nunca ter acesso
ao processador.
Alm disso, em sistemas de tempo compartilhado, as prioridades estticas definidas pelo usurio esto intuitivamente relacionadas proporcionalidade na diviso do tempo de processamento. Por exemplo, se um sistema
recebe duas tarefas iguais com a mesma prioridade, espera-se que cada uma
receba 50% do processador e que ambas concluam ao mesmo tempo. Caso
o sistema receba trs tarefas: t1 com prioridade 1, t2 com prioridade 2 e t3
com prioridade 3, espera-se que t3 receba mais o processador que t2 , e esta
c Carlos Maziero
74
t
0
c Carlos Maziero
75
Definies:
ti
: tarefa i
pei : prioridade esttica de ti
pdi : prioridade dinmica de ti
N : nmero de tarefas no sistema
Quando uma tarefa nova tn ingressa no sistema:
pen prioridade inicial default
pdn pen
Para escolher a prxima tarefa a executar tp :
escolher tp | pdp = maxN
(pdi )
i=1
pdp pep
i , p : pdi pdi +
Em outras palavras, a cada turno o escalonador escolhe como prxima
tarefa (tp ) aquela com a maior prioridade dinmica (pdp ). A prioridade
dinmica dessa tarefa igualada sua prioridade esttica (pdp pep ) e
ento ela recebe o processador. A prioridade dinmica das demais tarefas
aumentada de , ou seja, elas envelhecem e no prximo turno tero
mais chances de ser escolhidas. A constante conhecida como fator de
envelhecimento.
Usando o algoritmo de envelhecimento, a diviso do processador entre as
tarefas se torna proporcional s suas prioridades. A Figura 2.21 ilustra essa
proporcionalidade na execuo das trs tarefas t1 , t2 e t3 com p(t1 ) < p(t2 ) <
p(t3 ), usando a estratgia de envelhecimento. Nessa figura, percebe-se que
todas as trs tarefas recebem o processador periodicamente, mas que t3
recebe mais tempo de processador que t2 , e que t2 recebe mais que t1 .
Inverso e herana de prioridades
Outro problema relevante que pode ocorrer em sistemas baseados em
prioridades a inverso de prioridades [Sha et al., 1990]. Este tipo de problema
mais complexo que o anterior, pois envolve o conceito de excluso mtua:
alguns recursos do sistema devem ser usados por um processo de cada
vez, para evitar problemas de consistncia de seu estado interno. Isso pode
ocorrer com arquivos, portas de entrada sada e conexes de rede, por
c Carlos Maziero
76
t3
t2
t1
t
0
c Carlos Maziero
77
inverso de prioridades!
Pa recebe o recurso
e o processador
Pm recebe o processador
Pa
R
Pm
Pb aloca um
recurso para si
Pb libera o recurso
bloqueado e
perde o processador
Pb
t
0
Pm libera o processador
c Carlos Maziero
78
Pa
R
Pm
Pb aloca um
recurso para si
Pb libera o recurso
bloqueado e
perde o processador
Pb
t
0
c Carlos Maziero
79
tarefa
funo
prioridade durao
tg
gerncia da rea de transferncia
alta
curta
coleta de dados meteorolgicos
baixa
curta
tm
tc
comunicao com a Terra
mdia
longa
Tabela 2.2: Algumas tarefas do software da sonda Mars Pathfinder.
thread tg
watchdog
thread tm
sensores
meteorolgicos
e ambientais
thread tc
rea de
transferncia
rdio e
antena
outra
threads
c Carlos Maziero
80
2.5.6
Alm dos algoritmos de escalonamento vistos nesta seo, diversos outros podem ser encontrados na literatura e em sistemas de mercado, como os escalonadores de tempo-real [Farines et al., 2000], os escalonadores multimdia [Nieh and Lam, 1997], os escalonadores justos
[Kay and Lauder, 1988, Ford and Susarla, 1996], os escalonadores multiprocessador [Black, 1990] e multi-core [Boyd-Wickizer et al., 2009].
2.5.7
Um escalonador real
c Carlos Maziero
81
2: Um escalonador real
sched_yield
SCHED_FIFO
SCHED_RR
sched_yield / m de quantum
executando
sched_yield / m de quantum
SCHED_OTHER
suspensa
Captulo 3
Comunicao entre tarefas
Muitas implementaes de sistemas complexos so estruturadas
como vrias tarefas inter-dependentes, que cooperam entre si para
atingir os objetivos da aplicao, como por exemplo em um navegador
Web. Para que as vrias tarefas que compem uma aplicao possam
cooperar, elas precisam comunicar informaes umas s outras e
coordenar suas atividades, para garantir que os resultados obtidos
sejam coerentes. Este mdulo apresenta os principais conceitos,
problemas e solues referentes comunicao entre tarefas.
3.1
Objetivos
c Carlos Maziero
83
3: Escopo da comunicao
3.2
Escopo da comunicao
c Carlos Maziero
84
3: Escopo da comunicao
Computador 2
Processo pa
tarefa i
Processo pb
tarefa j
send
Processo pc
tarefa k
tarefa l
recv
rea
comum
send recv
send
recv
rea no ncleo
ncleo
ncleo
rea no ncleo
rede
c Carlos Maziero
85
3.3
3.3.1
De forma mais abstrata, a comunicao entre tarefas pode ser implementada por duas primitivas bsicas: enviar (dados, destino), que envia os dados
relacionados ao destino indicado, e receber (dados, origem), que recebe os
dados previamente enviados pela origem indicada. Essa abordagem, na
qual o emissor identifica claramente o receptor e vice-versa, denominada
comunicao direta.
Poucos sistemas empregam a comunicao direta; na prtica so utilizados mecanismos de comunicao indireta, por serem mais flexveis. Na
comunicao indireta, emissor e receptor no precisam se conhecer, pois no
interagem diretamente entre si. Eles se relacionam atravs de um canal de
comunicao, que criado pelo sistema operacional, geralmente a pedido
de uma das partes. Neste caso, as primitivas de comunicao no designam
diretamente tarefas, mas canais de comunicao aos quais as tarefas esto
associadas: enviar (dados, canal) e receber (dados, canal). A Figura 3.2 ilustra
essas duas formas de comunicao.
3.3.2
Sincronismo
c Carlos Maziero
86
3: Sincronismo
receptor
emissor
receptor
emissor
canal
dados
enviar
receber
dados
enviar
dados
emissor
receptor
emissor
enviar
receber
espera
espera
dados
receber
dados
enviar
c Carlos Maziero
87
3: Formato de envio
emissor
enviar
erro !
(ningum para receber)
receber
erro !
(nada a receber)
dados
enviar
receber
3.3.3
Formato de envio
A informao enviada pelo emissor ao receptor pode ser vista basicamente de duas formas: como uma sequncia de mensagens independentes,
cada uma com seu prprio contedo, ou como um fluxo sequencial e
contnuo de dados, imitando o comportamento de um arquivo com acesso
sequencial.
c Carlos Maziero
88
3: Formato de envio
receptor
emissor
receptor
emissor
enviar
receber
prazo
prazo
erro !
(ningum para receber)
erro !
(nada a receber)
enviar
receber
dados
enviar
receber
dados
ab
enviar
1234
enviar
xyz
enviar
buer
receptor
ab
1234
ab
receber
ab
receber
1234
receber
xyz
xyz 1234
xyz
c Carlos Maziero
89
buer
ab
enviar
ab
1234
enviar
ab1234
xyz
enviar
receptor
receber
ab12
receber
34xy
34xyz
receber
3.3.4
O comportamento sncrono ou assncrono de um canal de comunicao pode ser afetado pela presena de buffers que permitam armazenar
temporariamente os dados em trnsito, ou seja, as informaes enviadas
pelo emissor e que ainda no foram recebidas pelo receptor. Em relao
capacidade de buffering do canal de comunicao, trs situaes devem ser
analisadas:
Capacidade nula (n = 0) : neste caso, o canal no pode armazenar dados;
a comunicao feita por transferncia direta dos dados do emissor
c Carlos Maziero
90
3.3.5
c Carlos Maziero
91
m1
enviar
m2
enviar
m3
enviar
buer
m1
m2
receptor
m1
m2 m1
no h espao
m2
m3
m1
receber
m1
m3 m2
c Carlos Maziero
92
3.3.6
3: Nmero de participantes
Nmero de participantes
c Carlos Maziero
93
r1
m1
e1
m3
m4
m1
m2
mailbox
r2
m2
m4
e2
m3
r3
e1
e2
m3
m3
m2
m1
m3
m2
m1
m3
m2
m1
m1
r1
r2
m2
r3
3.4
Nesta seo sero apresentados alguns mecanismos de comunicao usados com frequncia em sistemas UNIX. Mais detalhes sobre estes e outros mecanismos podem ser obtidos em [Stevens, 1998, Robbins and Robbins, 2003].
Mecanismos de comunicao implementados nos sistemas Windows so
apresentados em [Petzold, 1998, Hart, 2004].
3.4.1
c Carlos Maziero
94
c Carlos Maziero
95
1
2
3
4
5
6
7
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<mqueue.h>
<sys/stat.h>
8
9
10
11
12
13
14
15
16
17
18
19
20
21
umask (0) ;
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
c Carlos Maziero
96
1
2
3
4
5
6
7
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<mqueue.h>
<unistd.h>
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
for (;;)
{
msg = random() % 100 ; // valor entre 0 e 99
23
24
25
26
// envia a mensagem
if (mq_send (queue, (void*) &msg, sizeof(msg), 0) < 0)
{
perror ("mq_send");
exit (1);
}
printf ("Sent message with value %d\n", msg);
sleep (1) ;
27
28
29
30
31
32
33
34
35
36
c Carlos Maziero
97
3: Pipes
3.4.2
Pipes
stdin
stdout
pipe
grep
stdout
stdin
sort
stdout
pipe
ncleo
arquivo
c Carlos Maziero
98
3: Memria compartilhada
3.4.3
Memria compartilhada
c Carlos Maziero
99
3: Memria compartilhada
pa
pb
nova rea de
memria
passo 1)
criar
alocar
id
ncleo
reas alocadas
pa
pb
passos 2 e 3)
anexar
ptr
obter
id
ncleo
pa
passos 4 e 5)
pb
usar
usar
ptr
anexar
ncleo
c Carlos Maziero
100
3: Memria compartilhada
Deve-se observar que, ao solicitar a criao da rea de memria compartilhada, pa define as permisses de acesso mesma; por isso, o pedido de
anexao da rea de memria feito por pb pode ser recusado pelo ncleo, se
violar as permisses definidas por pa . A Listagem 3.1 exemplifica a criao
e uso de uma rea de memria compartilhada, usando o padro POSIX
(exemplos de implementao no padro System V podem ser encontrados
em [Robbins and Robbins, 2003]). Para compil-lo em Linux necessrio
efetuar a ligao com a biblioteca de tempo-real POSIX, usando a opo
-lrt. Para melhor observar seu funcionamento, devem ser lanados dois ou
mais processos executando esse cdigo simultaneamente.
c Carlos Maziero
101
3: Memria compartilhada
3
4
5
6
7
8
#include
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<fcntl.h>
<sys/stat.h>
<sys/mman.h>
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
for (;;) {
// Passo 5: escreve um valor aleatorio na area compartilhada
value = random () % 1000 ;
(*ptr) = value ;
printf ("Wrote value %i\n", value) ;
sleep (1);
40
41
42
43
44
Captulo 4
Coordenao entre tarefas
Muitas implementaes de sistemas complexos so estruturadas
como vrias tarefas inter-dependentes, que cooperam entre si para
atingir os objetivos da aplicao, como por exemplo em um navegador
Web. Para que as vrias tarefas que compem uma aplicao possam
cooperar, elas precisam comunicar informaes umas s outras e
coordenar suas atividades, para garantir que os resultados obtidos
sejam coerentes. Este mdulo apresenta os principais conceitos,
problemas e solues referentes coordenao entre tarefas.
4.1
Objetivos
Em um sistema multi-tarefas, vrias tarefas podem executar simultaneamente, acessando recursos compartilhados como reas de memria,
arquivos, conexes de rede, etc. Neste captulo sero estudados os problemas que podem ocorrer quando duas ou mais tarefas acessam os mesmos
recursos de forma concorrente; tambm sero apresentadas as principais
tcnicas usadas para coordenar de forma eficiente os acessos das tarefas aos
recursos compartilhados.
4.2
Condies de disputa
c Carlos Maziero
103
4: Condies de disputa
6
7
8
9
10
0x8(%ebp),%ecx
0x8(%ebp),%edx
0xc(%ebp),%eax
(%edx),%eax
%eax,(%ecx)
leave
ret
#
#
#
#
#
mem(saldo)
mem(saldo)
mem(valor)
[reg1 , reg2 ]
[reg1 , reg2 ]
reg1
reg2
reg3
+ reg3 [reg1 , reg2 ]
mem(saldo)
c Carlos Maziero
104
4: Condies de disputa
tarefa 1
tarefa 2
depositar
depositar
depositar
R$1000
conta
terminal 1
terminal 2
saldo inicial
R$0
t1
t2
t1
saldo: R$ 0
saldo: R$ 0
reg1 = mem(saldo)
reg1 = mem(saldo)
reg2 = mem(valor)
reg2 = mem(valor)
mem(saldo) = reg1
saldo: R$ 1000
saldo: R$ 50
reg1 = mem(saldo)
reg1 = mem(saldo)
reg2 = mem(valor)
reg2 = mem(valor)
mem(saldo) = reg1
mem(saldo) = reg1
saldo: R$ 1050
t
saldo: R$ 1050
t
c Carlos Maziero
105
4: Condies de disputa
trocas de contexto durante a execuo do depsito. Em sistemas multiprocessados a situao ainda mais complexa, pois cada tarefa poder estar
executando em um processador distinto.
Os diagramas de tempo apresentados na Figura 4.3 mostram execues
onde houve entrelaamento das operaes de depsito de t1 e de t2 . Em
ambas as execues o saldo final no corresponde ao resultado esperado,
pois um dos depsitos perdido. No caso, apenas concretizado o depsito
da tarefa que realizou a operao mem(saldo) reg1 por ltimo1 .
t2
t1
t2
t1
saldo: R$ 0
saldo: R$ 0
reg1 = mem(saldo)
reg1 = mem(saldo)
reg1 = mem(saldo)
reg1 = mem(saldo)
reg2 = mem(valor)
reg2 = mem(valor)
reg2 = mem(valor)
reg2 = mem(valor)
reg1 = reg1 + reg2
mem(saldo) = reg1
mem(saldo) = reg1
saldo: R$ 50
saldo: R$ 1000
mem(saldo) = reg1
mem(saldo) = reg1
saldo: R$ 1000
t
saldo: R$ 50
t
c Carlos Maziero
106
4: Sees crticas
4.3
Sees crticas
conta.saldo += valor ;
De modo geral, sees crticas so todos os trechos de cdigo que manipulam dados compartilhados onde podem ocorrer condies de disputa.
Um programa pode ter vrias sees crticas, relacionadas entre si ou no
(caso manipulem dados compartilhados distintos). Para assegurar a correo de uma implementao, deve-se impedir o entrelaamento de sees
crticas: apenas uma tarefa pode estar na seo crtica a cada instante. Essa
propriedade conhecida como excluso mtua.
Diversos mecanismos podem ser definidos para impedir o entrelaamento de sees crticas e assim prover a excluso mtua. Todos eles exigem
que o programador defina os limites (incio e o final) de cada seo crtica.
Genericamente, cada seo crtica i pode ser associada a um identificador
csi e so definidas as primitivas enter(ta , csi ), para que a tarefa ta indique que
deseja entrar na seo crtica csi , e leave(ta , csi ), para que ta informe que est
saindo da seo crtica csi . A primitiva enter(csi ) bloqueante: caso uma
tarefa j esteja ocupando a seo crtica csi , as demais tarefas que tentarem
c Carlos Maziero
107
4: Sees crticas
7
8
9
10
11
12
13
Nas prximas sees sero estudadas vrias solues para a implementao das primitivas enter e leave, bem como abordagens alternativas.
As solues propostas devem atender a alguns critrios bsicos que so
enumerados a seguir:
Excluso mtua : somente uma tarefa pode estar dentro da seo crtica
em cada instante.
Espera limitada : uma tarefa que aguarda acesso a uma seo crtica deve
ter esse acesso garantido em um tempo finito.
Independncia de outras tarefas : a deciso sobre o uso de uma seo
crtica deve depender somente das tarefas que esto tentando entrar
na mesma. Outras tarefas do sistema, que no momento no estejam
interessadas em entrar na regio crtica, no podem ter influncia
sobre essa deciso.
Independncia de fatores fsicos : a soluo deve ser puramente lgica e
no depender da velocidade de execuo das tarefas, de temporizaes,
do nmero de processadores no sistema ou de outros fatores fsicos.
c Carlos Maziero
108
4.4
4: Inibio de interrupes
Inibio de interrupes
4.5
c Carlos Maziero
109
4.5.1
4: A soluo bvia
A soluo bvia
int busy = 0 ;
2
3
4
5
6
7
8
9
10
11
12
4.5.2
Alternncia de uso
c Carlos Maziero
110
4: Alternncia de uso
t2
t1
busy: 0
while(busy) { };
while(busy) { };
busy: 0
busy = 1
busy: 1
busy = 1
acesso
seo crtica
busy: 1
acesso
seo crtica
violao da
excluso
mtua !
t
int turn = 0 ;
int num_tasks ;
3
4
5
6
7
8
9
10
11
12
13
14
15
Nessa soluo, cada tarefa aguarda seu turno de usar a seo crtica, em
uma sequncia circular: t0 t1 t2 tn1 t0 . Essa abordagem
garante a excluso mtua entre as tarefas e independe de fatores externos,
mas no atende os demais critrios: caso uma tarefa ti no deseje usar a
seo crtica, todas as tarefas t j com j > i ficaro impedidas de faz-lo, pois
a varivel turno no ir evoluir.
c Carlos Maziero
111
4.5.3
4: O algoritmo de Peterson
O algoritmo de Peterson
Uma soluo correta para a excluso mtua no acesso a uma seo crtica
por duas tarefas foi proposta inicialmente por Dekker em 1965. Em 1981,
Gary Peterson props uma soluo mais simples e elegante para o mesmo
problema [Raynal, 1986]. O algoritmo de Peterson pode ser resumido no
cdigo a seguir:
int turn = 0 ;
// indica de quem a vez
int wants[2] = {0, 0} ; // indica se a tarefa i quer acessar a seo crtic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
4.5.4
Instrues Test-and-Set
c Carlos Maziero
112
4: Instrues Test-and-Set
TSL(x) :
old x
x1
return(old)
int lock = 0 ;
// varivel de trava
2
3
4
5
6
7
8
9
10
11
c Carlos Maziero
113
1
int lock ;
4: Problemas
// varivel de trava
2
3
4
5
6
7
8
9
10
11
12
13
4.5.5
Problemas
Apesar das solues para o problema de acesso seo crtica usando espera ocupada garantirem a excluso mtua, elas sofrem de alguns problemas
que impedem seu uso em larga escala nas aplicaes de usurio:
Ineficincia : as tarefas que aguardam o acesso a uma seo crtica ficam
testando continuamente uma condio, consumindo tempo de processador sem necessidade. O procedimento adequado seria suspender
essas tarefas at que a seo crtica solicitada seja liberada.
Injustia : no h garantia de ordem no acesso seo crtica; dependendo
da durao de quantum e da poltica de escalonamento, uma tarefa
pode entrar e sair da seo crtica vrias vezes, antes que outras tarefas
consigam acess-la.
Por estas razes, as solues com espera ocupada so pouco usadas
na construo de aplicaes. Seu maior uso se encontra na programao
de estruturas de controle de concorrncia dentro do ncleo do sistema
c Carlos Maziero
114
4: Semforos
4.6
Semforos
Alguns sistemas implementam tambm a chamada TryDown(s), cuja semntica nobloqueante: caso o semforo solicitado esteja ocupado, a chamada retorna imediatamente,
com um cdigo de erro.
c Carlos Maziero
115
4: Semforos
7
8
9
10
11
12
13
c Carlos Maziero
116
4: Semforos
1
2
void carro_entra ()
{
down (vagas) ;
...
}
3
4
5
6
7
void carro_sai ()
{
up (vagas) ;
...
}
9
10
11
12
13
c Carlos Maziero
117
4: Semforos
#include <semaphore.h>
2
3
4
5
6
7
// Operao Up(s)
int sem_post(sem_t *sem);
8
9
10
// Operao Down(s)
int sem_wait(sem_t *sem);
11
12
13
c Carlos Maziero
118
1
4: Variveis de condio
#include <pthread.h>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
4.7
Variveis de condio
Alm dos semforos, outro mecanismo de sincronizao de uso frequente so as variveis de condio, ou variveis condicionais. Uma varivel
de condio no representa um valor, mas uma condio, que pode ser
aguardada por uma tarefa. Quando uma tarefa aguarda uma condio, ela
colocada para dormir at que a condio seja verdadeira. Assim, a tarefa
no precisa testar continuamente aquela condio, evitando uma espera
ocupada.
Uma tarefa aguardando uma condio representada pela varivel de
condio c pode ficar suspensa atravs do operador wait(c), para ser notificada mais tarde, quando a condio se tornar verdadeira. Essa notificao
ocorre quando outra tarefa chamar o operador notify(c) (tambm chamado
signal(c)). Por definio, uma varivel de condio c est sempre associada
a um semforo binrio c.mutex e a uma fila c.queue. O mutex garante a
excluso mtua sobre a condio representada pela varivel de condio,
enquanto a fila serve para armazenar em ordem as tarefas que aguardam
aquela condio.
c Carlos Maziero
119
4: Variveis de condio
1
2
3
4
5
//
//
//
//
notify (c):
awake (first (c.queue)) // acorda a primeira tarefa da fila c.queue
7
8
9
broadcast (c):
awake (c.queue)
10
11
1
2
3
4
5
6
7
8
9
10
11
Task B ()
{
...
lock (c.mutex)
condition = true
notify (c)
unlock (c.mutex)
...
}
12
13
14
15
16
17
18
19
20
c Carlos Maziero
120
4: Monitores
4.8
Monitores
c Carlos Maziero
121
4: Monitores
um mutex ou semforo para controle de excluso mtua; cada procedimento de acesso ao recurso deve obter o semforo antes de iniciar e
liberar o semforo ao concluir;
um invariante sobre o estado interno do recurso.
O pseudo-cdigo a seguir define um monitor para operaes sobre uma
conta bancria (observe sua semelhana com a definio de uma classe em
programao orientada a objetos):
1
2
3
monitor conta
{
float saldo = 0.0 ;
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
c Carlos Maziero
122
class Conta
{
private float saldo = 0;
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Em Java, a clusula synchronized faz com que um semforo seja associado aos mtodos indicados, para cada objeto (ou para cada classe, se forem
mtodos de classe). No exemplo anterior, apenas um depsito ou retirada
de cada vez poder ser feito sobre cada objeto da classe Conta.
Variveis de condio podem ser usadas no interior de monitores (na
verdade, os dois conceitos nasceram juntos). Todavia, devido s restries
da semntica Mesa, um procedimento que executa a operao notify em
uma varivel de condio deve concluir e sair imediatamente do monitor,
para garantir que o invariante associado ao estado interno do monitor seja
respeitado [Birrell, 2004].
4.9
c Carlos Maziero
123
4.9.1
c Carlos Maziero
124
c1
C
p1
buer
L
p2
c2
A
c3
c Carlos Maziero
125
1
2
3
4
5
6
7
8
9
10
11
12
13
14
produtor () {
while (1) {
...
sem_down(&vaga) ;
sem_down(&mutex) ;
...
sem_up(&mutex) ;
sem_up(&item) ;
}
}
//
//
//
//
//
//
produz um item
aguarda uma vaga no buffer
aguarda acesso exclusivo ao buffer
deposita o item no buffer
libera o acesso ao buffer
indica a presena de um novo item no buffer
consumidor () {
while (1) {
sem_down(&item) ;
sem_down(&mutex) ;
...
sem_up(&mutex) ;
sem_up(&vaga) ;
...
}
}
//
//
//
//
//
//
15
16
17
18
19
20
21
22
23
24
25
4.9.2
c Carlos Maziero
126
l1
M[3]?
e1
M[3]=2
M
3
e2
M=[2,1,0,6]
M?
1
l2
M[1]?
l3
escritores
leitores
sem_t mutex_area ;
2
3
4
5
6
7
8
9
10
leitor () {
while (1) {
sem_down (&mutex_area) ;
...
sem_up (&mutex_area) ;
...
}
}
11
12
13
14
15
16
17
18
19
escritor () {
while (1) {
sem_down (&mutex_area) ;
...
sem_up (&mutex_area) ;
...
}
}
c Carlos Maziero
127
sem_t mutex_area ;
int conta_leitores = 0 ;
sem_t mutex_conta ;
4
5
6
7
8
9
10
11
leitor () {
while (1) {
sem_down (&mutex_conta) ;
conta_leitores++ ;
if (conta_leitores == 1)
sem_down (&mutex_area) ;
sem_up (&mutex_conta) ;
//
//
//
//
//
12
13
...
sem_down (&mutex_conta) ;
conta_leitores-- ;
if (conta_leitores == 0)
sem_up (&mutex_area) ;
sem_up (&mutex_conta) ;
...
//
//
//
//
//
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
escritor () {
while (1) {
sem_down(&mutex_area) ;
...
sem_up(&mutex_area) ;
...
}
}
c Carlos Maziero
128
4.9.3
Um dos problemas clssicos de coordenao mais conhecidos o jantar dos filsofos, que foi inicialmente proposto por Dijkstra [Raynal, 1986,
Ben-Ari, 1990]. Neste problema, um grupo de cinco filsofos chineses alterna suas vidas entre meditar e comer. Na mesa h um lugar fixo para cada
filsofo, com um prato, cinco palitos (hashis ou chopsticks) compartilhados
e um grande prato de comida ao meio (na verso inicial de Dijkstra, os
filsofos compartilhavam garfos e comiam spaguetti). A Figura 4.7 ilustra
essa situao.
Para comer, um filsofo fi precisa pegar os palitos sua direita (pi ) e
sua esquerda (pi+1 ), um de cada vez. Como os palitos so compartilhados,
dois filsofos vizinhos nunca podem comer ao mesmo tempo. Os filsofos
no conversam entre si nem podem observar os estados uns dos outros.
O problema do jantar dos filsofos representativo de uma grande classe
de problemas de sincronizao entre vrios processos e vrios recursos
sem usar um coordenador central. A listagem a seguir representa uma
implementao do comportamento bsico dos filsofos, na qual cada palito
representado por um semforo:
c Carlos Maziero
129
f4
p4
f3
p0
f0
p1
p3
f2
p2
f1
#define NUMFILO 5
sem_t hashi [NUMFILO] ; // um semforo para cada palito (iniciam em 1)
3
4
5
6
7
8
9
10
11
12
13
filosofo (int i) {
while (1) {
medita () ;
sem_down (&hashi [i]) ;
sem_down (&hashi [(i+1) % NUMFILO]) ;
come () ;
sem_up (&hashi [i]) ;
sem_up (&hashi [(i+1) % NUMFILO]) ;
}
}
// obtem palito i
// obtem palito i+1
// devolve palito i
// devolve palito i+1
c Carlos Maziero
130
4: Impasses
f4
p4
p0
f3
f0
p3
p1
f2
p2
f1
4.10
Impasses
O controle de concorrncia entre tarefas acessando recursos compartilhados implica em suspender algumas tarefas enquanto outras acessam os
recursos, de forma a garantir a consistncia dos mesmos. Para isso, a cada
c Carlos Maziero
131
4: Impasses
7
8
9
10
11
12
13
14
15
16
17
18
19
20
c Carlos Maziero
132
4: Caracterizao de impasses
t2
t1
sem_down (c1->lock)
(semforo obtido)
sem_down (c2->lock)
(semforo obtido)
sem_down (c2->lock)
sem_down (c1->lock)
impasse
t
4.10.1
Caracterizao de impasses
Em um impasse, duas ou mais tarefas se encontram bloqueadas, aguardando eventos que dependem somente delas, como a liberao de semforos.
Em outras palavras, no existe influncia de entidades externas em uma
situao de impasse. Alm disso, como as tarefas envolvidas detm alguns
recursos compartilhados (representados por semforos), outras tarefas que
vierem a requisit-los tambm ficaro bloqueadas, aumentando gradativamente o impasse, o que pode levar o sistema inteiro a parar de funcionar.
Formalmente, um conjunto de N tarefas se encontra em um impasse
se cada uma das tarefas aguarda um evento que somente outra tarefa do
conjunto poder produzir. Quatro condies fundamentais so necessrias
para que os impasses possam ocorrer [Coffman et al., 1971, Ben-Ari, 1990]:
c Carlos Maziero
133
C1 Excluso mtua : o acesso aos recursos deve ser feito de forma mutuamente exclusiva, controlada por semforos ou mecanismos equivalentes. No exemplo da conta corrente, apenas uma tarefa por vez
pode acessar cada conta.
C2 Posse e espera : uma tarefa pode solicitar o acesso a outros recursos
sem ter de liberar os recursos que j detm. No exemplo da conta
corrente, cada tarefa detm o semforo de uma conta e solicita o
semforo da outra conta para poder prosseguir.
C3 No-preempo : uma tarefa somente libera os recursos que detm
quando assim o decidir, e no pode perd-los contra a sua vontade (ou
seja, o sistema operacional no retira os recursos j alocados s tarefas).
No exemplo da conta corrente, cada tarefa detm indefinidamente os
semforos que j obteve.
C4 Espera circular : existe um ciclo de esperas pela liberao de recursos
entre as tarefas envolvidas: a tarefa t1 aguarda um recurso retido pela
tarefa t2 (formalmente, t1 t2 ), que aguarda um recurso retido pela
tarefa t3 , e assim por diante, sendo que a tarefa tn aguarda um recurso
retido por t1 . Essa dependncia circular pode ser expressa formalmente
da seguinte forma: t1 t2 t3 tn t1 . No exemplo da
conta corrente, pode-se observar claramente que t1 t2 t1 .
Deve-se observar que essas quatro condies so necessrias para a
formao de impasses; se uma delas no for verificada, no existiro
impasses no sistema. Por outro lado, no so condies suficientes para a
existncia de impasses, ou seja, a verificao dessas quatro condies no
garante a presena de um impasse no sistema. Essas condies somente so
suficientes se existir apenas uma instncia de cada tipo de recurso, como
ser discutido na prxima seo.
4.10.2
c Carlos Maziero
134
c1
t2
t1
t1 requer c2
t2 requer c1
c2
t2 detm c2
c Carlos Maziero
135
t1
r3
r4
t2
r2
t3
t4
4.10.3
c Carlos Maziero
136
c Carlos Maziero
137
c Carlos Maziero
138
c Carlos Maziero
139
E0
E1
E2
E3
E4
E5
E6
E7
E20
E8
E21
E16
E22
E17
E9
E14
E10
Estados
inseguros
E23
E19
E18
E15
E12
E13
E11
impasse
c Carlos Maziero
140
Essa tcnica conhecida como checkpointing e os estados anteriores salvos so denominados checkpoints.
Captulo 5
Gerncia de memria
A memria principal um componente fundamental em qualquer
sistema de computao. Ela constitui o espao de trabalho do
sistema, no qual so mantidos os processos, threads, bibliotecas
compartilhadas e canais de comunicao, alm do prprio ncleo
do sistema operacional, com seu cdigo e suas estruturas de dados.
O hardware de memria pode ser bastante complexo, envolvendo
diversas estruturas, como caches, unidade de gerncia, etc, o que
exige um esforo de gerncia significativo por parte do sistema
operacional.
Uma gerncia adequada da memria essencial para o bom
desempenho de um computador. Neste captulo sero estudados
os elementos de hardware que compe a memria de um sistema
computacional e os mecanismos implementados ou controlados pelo
sistema operacional para a gerncia da memria.
5.1
Estruturas de memria
c Carlos Maziero
142
5: Estruturas de memria
cache L1
velocidade,
custo e
consumo
de energia
cache L2
memria RAM
voltil
no-voltil
memria Flash
disco rgido
capacidade
c Carlos Maziero
143
DVD-ROM
Tempo de acesso
1 ns
60 ns
2 ms
10 ms (tempo necessrio para o
deslocamento da cabea de leitura e rotao do disco at o setor
desejado)
de 100 ms a vrios minutos (caso
a gaveta do leitor esteja aberta ou
o disco no esteja no leitor)
Taxa de transferncia
1 GB/s (1 ns/byte)
1 GB/s (1 ns/byte)
10 MB/s (100 ns/byte)
80 MB/s (12 ns/byte)
Tabela 5.1:
Tempos de acesso e taxas de transferncia tpicas
[Patterson and Henessy, 2005].
Neste captulo sero estudados os mecanismos envolvidos na gerncia
da memria principal do computador, que geralmente constituda por
um grande espao de memria do tipo RAM (Random Access Memory ou
memria de leitura/escrita). Tambm ser estudado o uso do disco rgido
como extenso da memria principal, atravs de mecanismos de memria
virtual (Seo 5.7). A gerncia dos espaos de armazenamento em disco
rgido abordada no Captulo 6. Os mecanismos de gerncia dos caches L1
e L2 geralmente so implementados em hardware e so independentes do
sistema operacional. Detalhes sobre seu funcionamento podem ser obtidos
em [Patterson and Henessy, 2005].
5.2
c Carlos Maziero
144
1
2
#include <stdlib.h>
#include <stdio.h>
3
4
5
6
int main ()
{
int i, soma = 0 ;
8
9
10
11
12
13
14
c Carlos Maziero
145
00000000
0: 8d
4: 83
7: ff
a: 55
b: 89
d: 51
e: 83
11: c7
18: c7
1f: eb
21: 8b
24: 01
27: 83
2a: ff
2d: ff
30: 68
35: e8
3a: 83
3d: ff
40: 83
44: 7e
46: 83
49: 6a
4b: e8
<main>:
4c 24 04
e4 f0
71 fc
e5
ec
45
45
1f
45
45
ec
75
75
00
fc
c4
45
7d
db
ec
00
fc
14
f4 00 00 00 00
f8 00 00 00 00
f8
f4
04
f4
f8
00 00 00
ff ff ff
10
f8
f8 04
0c
ff ff ff
lea
and
pushl
push
mov
push
sub
movl
movl
jmp
mov
add
sub
pushl
pushl
push
call
add
incl
cmpl
jle
sub
push
call
0x4(%esp),%ecx
$0xfffffff0,%esp
-0x4(%ecx)
%ebp
%esp,%ebp
%ecx
$0x14,%esp
$0x0,-0xc(%ebp)
$0x0,-0x8(%ebp)
40 <main+0x40>
-0x8(%ebp),%eax
%eax,-0xc(%ebp)
$0x4,%esp
-0xc(%ebp)
-0x8(%ebp)
$0x0
36 <main+0x36>
$0x10,%esp
-0x8(%ebp)
$0x4,-0x8(%ebp)
21 <main+0x21>
$0xc,%esp
$0x0
4c <main+0x4c>
c Carlos Maziero
146
c Carlos Maziero
147
cdigo
fonte
arq.c
lib.c
biblioteca
fonte
compilao
cdigo
objeto
arq.o
lib.a
biblioteca
esttica
ligao
cdigo
executvel
lib.so
lib.dll
arq.exe
biblioteca
dinmica
carga
execuo
processo
5.2.1
Ao executar uma sequncia de instrues, o processador escreve endereos no barramento de endereos do computador, que servem para buscar
instrues e operandos, mas tambm para ler e escrever valores em posies
de memria e portas de entrada/sada. Os endereos de memria gerados
pelo processador medida em que executa algum cdigo so chamados de
endereos lgicos, porque correspondem lgica do programa, mas no so
necessariamente iguais aos endereos reais das instrues e variveis na
memria real do computador, que so chamados de endereos fsicos.
Os endereos lgicos emitidos pelo processador so interceptados por
um hardware especial denominado Unidade de Gerncia de Memria (MMU
- Memory Management Unit), que pode fazer parte do prprio processador
(como ocorre nos sistemas atuais) ou constituir um dispositivo separado
(como ocorria na mquinas mais antigas). A MMU faz a anlise dos
endereos lgicos emitidos pelo processador e determina os endereos fsicos
correspondentes na memria da mquina, permitindo ento seu acesso
c Carlos Maziero
148
memria
processador
endereo
lgico
interrupo
MMU
endereo
fsico
endereo
fsico
dados
barramentos
endereos
5.2.2
c Carlos Maziero
149
c Carlos Maziero
150
5: Estratgias de alocao
rea no alocada
max
TEXT
DATA
STACK
HEAP
variveis dinmicas
(malloc/free)
programa principal
funes
bibliotecas estticas
variveis globais
variveis locais estticas
buers internos
5.3
Estratgias de alocao
max
vetor de interrupes
c Carlos Maziero
151
5: Parties fixas
5.3.1
Parties fixas
20.000
30.000
60.000
110.000
200.000
partio
ativa
registrador
de relocao
110.000
MMU
124.257 (endereo fsico)
ncleo
0
part 0
part 1
part 2
part 3
part 4
max
c Carlos Maziero
152
5: Alocao contgua
5.3.2
Alocao contgua
A estratgia anterior, com parties fixas, pode ser tornar bem mais
flexvel caso o tamanho de cada partio possa ser ajustado para se adequar
demanda especfica de cada processo. Nesse caso, a MMU deve ser
projetada para trabalhar com dois registradores prprios: um registrador
base, que define o endereo inicial da partio ativa, e um registrador limite,
que define o tamanho em bytes dessa partio. O algoritmo de traduo de
endereos lgicos em fsicos bem simples: cada endereo lgico gerado
pelo processo em execuo comparado ao valor do registrador limite; caso
seja maior ou igual a este, uma interrupo gerada pela MMU de volta
para o processador, indicando um endereo invlido. Caso contrrio, o
endereo lgico somado ao valor do registrador base, para a obteno do
endereo fsico correspondente. A Figura 5.7 apresenta uma viso geral
dessa estratgia. Na Figura, o processo p3 tenta acessar o endereo lgico
14.257.
Os valores dos registradores base e limite da MMU devem ser ajustados
pelo despachante (dispatcher) a cada troca de contexto, ou seja, cada vez que
o processo ativo substitudo. Os valores de base e limite para cada processo
do sistema devem estar armazenados no respectivo TCB (Task Control Block,
vide Seo 2.4.1). Obviamente, quando o ncleo estiver executando, os
c Carlos Maziero
153
5: Alocao contgua
TCB(P3)
processo P3
base
limite
limite
45.000
registradores
atualizados na
troca de contexto
que ativou P3
el<lim
no
Erro: endereo
invlido (IRQ)
sim
base
110.000
MMU
124.257 (endereo fsico)
Memria RAM
ncleo
P1
P2
P3
P4
P5
rea acessvel a P3
110.000
(base)
max
154.999
(base+limite-1)
c Carlos Maziero
154
5.3.3
S5
S1
S4
S2
S6
S4
S3
S3
S2
P2
Memria RAM
ncleo
0
P1.S5
P2.S4
P2.S2
P1.S6
P1.S1
P2.S1
P1.S3
P1.S2
P1.S4
P2.S3
max
c Carlos Maziero
155
S3
[3:1204]
[1:5317]
[2:5799]
6000 0
4000
S2
10000
c Carlos Maziero
156
TCB(P3)
processo P3
Segment
Table
address
S4
registrador atualizado
na troca de contexto
que ativou P3
ST reg
Tabela de segmentos
(em memria RAM)
base
limite
1.200
5.500
8.000
4.200
15.000
10.500
27.500
1.500
32.300
8.750
45.000
12.000
87.000
7.600
...
...
segmento
offset
6.914
no
o<lim
8.750
Erro: violao de
segmento (IRQ)
sim
32.300
MMU
39.214 (endereo fsico)
Memria RAM
ncleo
P3.S4
max
32.300
(base)
41.049
(base+limite-1)
c Carlos Maziero
157
5: Alocao paginada
5.3.4
Alocao paginada
c Carlos Maziero
158
5: Alocao paginada
c Carlos Maziero
159
5: Alocao paginada
pginas
processo P1
processo P2
Memria RAM
ncleo
rea no-paginada
quadros
c Carlos Maziero
160
5: Alocao paginada
TCB(P3)
registrador atualizado
na troca de contexto
que ativou P3
PTBR
PTBR
pgina
Pginas no-mapeadas
Tabela de pginas
(em memria RAM)
13
A7
2F
4B
offset
0000 5
E9A
Erro: falta de
pgina (IRQ)
0002 F
quadro
offset
...
7 1A
MMU
0002 FE9A (endereo fsico)
Memria RAM
ncleo
rea no-paginada
47
c Carlos Maziero
161
5: Alocao paginada
Flags de controle
Como o espao de endereamento lgico de um processo pode ser
extremamente grande (por exemplo, o espao de endereos lgicos de
cada processo em uma arquitetura de 32 bits pode ir at 232 bytes), uma
parte significativa das pginas de um processo pode no estar mapeada em
quadros de memria fsica. reas de memria no usadas por um processo
no precisam estar mapeadas na memria fsica, o que permite um uso
mais eficiente da memria. Assim, a tabela de pginas de cada processo
indica as reas no mapeadas com um flag adequado (vlido/invlido). Cada
entrada da tabela de pginas de um processo contm o nmero do quadro
correspondente e um conjunto de flags (bits) de controle, com diversas
finalidades:
Presena: indica se a pgina est presente (mapeada) no espao de
endereamento daquele processo;
Proteo: bits indicando os direitos de acesso do processo pgina
(basicamente leitura, escrita e/ou execuo);
Referncia: indica se a pgina foi referenciada (acessada) recentemente,
sendo ajustado para 1 pelo prprio hardware a cada acesso pgina.
Este bit usado pelos algoritmos de memria virtual (apresentados
na Seo 5.7);
Modificao: tambm chamado de dirty bit, ajustado para 1 pelo
hardware a cada escrita na pgina, indicando se a pgina foi modificada
aps ser carregada na memria; usado pelos algoritmos de memria
virtual.
Alm destes, podem ser definidos outros bits, indicando a poltica de
caching da pgina, se uma pgina de usurio ou de sistema, se a pgina
pode ser movida para disco, o tamanho da pgina (no caso de sistemas
que permitam mais de um tamanho de pgina), etc. O contedo exato de
cada entrada da tabela de pginas depende da arquitetura do hardware
considerado.
Tabelas multi-nveis
Em uma arquitetura de 32 bits com pginas de 4 Kbytes, cada entrada na
tabela de pginas ocupa cerca de 32 bits, ou 4 bytes (20 bits para o nmero de
c Carlos Maziero
162
5: Alocao paginada
PTBR
100 pginas mapeadas
(CODE, DATA, HEAP)
1.048.456 pginas
no-mapeadas
20 pginas mapeadas
(STACK)
c Carlos Maziero
163
5: Alocao paginada
c Carlos Maziero
164
5: Alocao paginada
processo P3
TCB(P3)
registrador atualizado
na troca de contexto
que ativou P3
PTBR
pg2
offset
2B
22
31
3 1A 3B
E9A
...
1 14
005
6C 21
4 17 13
4E
5 8E A4
2F
6 10
19
71 9A
7F
12
16
2C
0002F
quadro
offset
MMU
...
...
...
...
006
0 5C
pg 1
Tabela de pginas
(em memria RAM)
1
PTBR
Memria RAM
ncleo
rea no-paginada
47
c Carlos Maziero
165
5: Alocao paginada
Nvel 1
...
Nvel 2
RAM (quadros)
Nvel 1
...
Nvel 2
...
...
...
RAM (quadros)
Esse fenmeno conhecido como localidade de referncias e ser detalhado na Seo 5.4.
c Carlos Maziero
166
5: Alocao paginada
resultar nos mesmos quadros de memria fsica. Por isso, consultas recentes
tabela de pginas so armazenadas em um cache dentro da prpria MMU,
evitando ter de repeti-las constantemente e assim diminuindo o tempo de
acesso memria fsica.
O cache de tabela de pginas na MMU, denominado TLB (Translation
Lookaside Buffer) ou cache associativo, armazena pares [pgina, quadro] obtidos
em consultas recentes s tabelas de pginas do processo ativo. Esse cache
funciona como uma tabela de hash: dado um nmero de pgina p em sua
entrada, ele apresenta em sua sada o nmero de quadro q correspondente,
ou um flag de erro chamado erro de cache (cache miss). Por ser implementado
em um hardware especial rpido e caro, geralmente esse cache pequeno:
TLBs de processadores tpicos tm entre 16 e 256 entradas. Seu tempo
de acesso pequeno: um acerto custa cerca de 1 ciclo de relgio da CPU,
enquanto um erro pode custar entre 10 e 30 ciclos.
A traduo de endereos lgicos em fsicos usando TLBs se torna mais
rpida, mas tambm mais complexa. Ao receber um endereo lgico, a
MMU consulta o TLB; caso o nmero do quadro correspondente esteja em
cache, ele usado para compor o endereo fsico e o acesso memria
efetuado. Caso contrrio, uma busca normal (completa) na tabela de pginas
deve ser realizada. O quadro obtido nessa busca usado para compor o
endereo fsico e tambm adicionado ao TLB para agilizar as consultas
futuras. A Figura 5.16 apresenta os detalhes desse procedimento.
fcil perceber que, quanto maior a taxa de acertos do TLB (cache hit
ratio), melhor o desempenho dos acessos memria fsica. O tempo mdio
de acesso memria pode ento ser determinado pela mdia ponderada
entre o tempo de acesso com acerto de cache e o tempo de acesso no caso de
erro. Por exemplo, considerando um sistema operando a 2 GHz (relgio
de 0,5 ns) com tempo de acesso RAM de 50 ns, tabelas de pginas com 3
nveis e um TLB com custo de acerto de 0,5 ns (um ciclo de relgio), custo de
erro de 10 ns (20 ciclos de relgio) e taxa de acerto de 95%, o tempo mdio
de acesso memria pode ser estimado como segue:
tmdio = 95% 0, 5ns
+ 5% (10ns + 3 50ns)
+ 50ns
tmdio = 58, 475ns
// em caso de acerto
// em caso de erro, consultar as tabel
// acesso ao quadro desejado
c Carlos Maziero
167
5: Alocao paginada
processo P3
TCB(P3)
pg 1
Tabela de pginas
(em memria RAM)
2
PTBR
registrador atualizado
na troca de contexto
que ativou P3
PTBR
pg2
offset
006
E9A
...
01805
TLB
p1,p2
0 5C
2B
1 14
22
31
3 1A 3B
2F
6 10
0002F
4E
5 8E A4
19
71 9A
7F
12
16
2C
0002F
quadro
offset
MMU
...
...
...
...
update
6C 21
4 17 13
005
Memria RAM
ncleo
rea no-paginada
47
c Carlos Maziero
168
5.3.5
c Carlos Maziero
169
5: Localidade de referncias
Nessa abordagem, os processos vem a memria estruturada em segmentos, conforme indicado na Figura 5.9. O hardware da MMU converte os
endereos lgicos na forma [segmento:offset] para endereos lgicos lineares
(unidimensionais), usando as tabelas de descritores de segmentos (Seo
5.3.3). Em seguida, esse endereos lgicos lineares so convertidos nos endereos fsicos correspondentes atravs do hardware de paginao (tabelas
de pginas e TLB), visando obter o endereo fsico correspondente.
Apesar do processador Intel i386 oferece as duas formas de alocao de
memria, a maioria dos sistemas operacionais que o suportam no fazem
uso de todas as suas possibilidades: os sistemas da famlia Windows NT
(2000, XP, Vista) e tambm os da famlia UNIX (Linux, FreeBSD) usam
somente a alocao por pginas. O antigo DOS e o Windows 3.* usavam
somente a alocao por segmentos. O OS/2 da IBM foi um dos poucos
sistemas operacionais comerciais a fazer uso pleno das possibilidades de
alocao de memria nessa arquitetura, combinando segmentos e pginas.
5.4
Localidade de referncias
c Carlos Maziero
170
5: Localidade de referncias
2
3
4
5
int main ()
{
int i, j ;
7
8
9
10
2
3
4
5
int main ()
{
int i, j ;
7
8
9
10
c Carlos Maziero
171
5: Localidade de referncias
cada clula acessada, pois o cache TLB no tem tamanho suficiente para
armazenar as 4.096 entradas referentes s pginas usadas pela matriz.
A diferena de desempenho entre as duas implementaes pode ser
grande: em processadores Intel e AMD, verses 32 e 64 bits, o primeiro
cdigo executa cerca de 10 vezes mais rapidamente que o segundo! Alm
disso, caso o sistema no tenha memria suficiente para manter as 4.096
pginas em memria, o mecanismo de memria virtual ser ativado, fazendo
com que a diferena de desempenho seja muito maior.
i
pginas
4095
1
2
3
4
4095
Como a execuo total de cada cdigo gera mais de 500 milhes de referncias
memria, foi feita uma amostragem da execuo para construir os grficos.
c Carlos Maziero
172
5: Localidade de referncias
c Carlos Maziero
173
5: Fragmentao
A qualidade do compilador: cabe ao compilador analisar quais variveis e trechos de cdigo so usadas com frequncia juntos e coloc-los
nas mesmas pginas de memria, para aumentar a localidade de
referncias do cdigo gerado.
A localidade de referncias uma propriedade importante para a construo de programas eficientes. Ela tambm til em outras reas da
computao, como a gerncia das pginas armazenadas nos caches de
navegadores web e servidores proxy, nos mecanismos de otimizao de
leituras/escritas em sistemas de arquivos, na construo da lista arquivos
recentes dos menus de muitas aplicaes interativas, etc.
5.5
Fragmentao
c Carlos Maziero
174
5: Fragmentao
A1: 20M
ncleo
A2: 8M
P1
24M
P3
P2
40M
60M
A3: 12M
72M
80M
88M
A4: 28M
P4
100M
116M
144M
c Carlos Maziero
175
5: Fragmentao
alocao de 10M
rst-t
best-t
A1: 20M
ncleo
A2: 8M
P1
24M
40M
60M
A3: 12M
P3
P2
72M
worst-t
80M
88M
A4: 28M
P4
100M
116M
144M
ncleo
P1
P3
P2
30M
40M
20M
30M
40M
20M
ncleo
P1
P3
P2
ncleo
P1
P3
P2
ncleo
P1
P3
P2
c Carlos Maziero
176
5: Fragmentao
sos. A Figura 5.23 apresenta uma situao onde ocorre esse problema: um
novo processo requisita uma rea de memria com 4.900 Kbytes. Todavia, a
rea livre disponvel tem 5.000 Kbytes. Se for alocada exatamente a rea
solicitada pelo processo (situao A), sobrar um fragmento residual com
100 Kbytes, que praticamente intil para o sistema, pois muito pequeno
para acomodar novos processos. Alm disso, essa rea residual de 100
Kbytes deve ser includa na lista de reas livres, o que representa um custo
de gerncia desnecessrio. Outra possibilidade consiste em arredondar
o tamanho da rea solicitada pelo processo para 5.000 Kbytes, ocupando
totalmente aquela rea livre (situao B). Assim, haver uma pequena rea
de 100 Kbytes no final da memria do processo, que provavelmente no
ser usada por ele.
situao inicial
5.000 Kbytes
Soluo 1:
aloca 4.900 Kbytes
4.900 Kbytes
fragmentao externa
Soluo 2:
aloca 5.000 Kbytes
5.000 Kbytes
fragmentao interna
c Carlos Maziero
177
5: Compartilhamento de memria
5.6
Compartilhamento de memria
cliente 1
code
code
code
code
cliente 3
cliente 5
cliente 2
cliente 4
code
code
...
servidor de e-mail
cliente n
c Carlos Maziero
178
5: Compartilhamento de memria
S4
S3
S2
S4
S3
S2
S1
S3
S2
P2
S1
S1
P1
P3
Memria RAM
ncleo
0
P1.S2
P2.S4
P1.S3
P3.S4
P*.S1
P3.S3
P1.S3
P3.S2
P2.S3
P1.S4
max
c Carlos Maziero
179
5: Compartilhamento de memria
processo P1
processo P2
Memria RAM
ncleo
rea no-paginada
c Carlos Maziero
180
5: Memria virtual
5.7
Memria virtual
Um problema constante nos computadores a disponibilidade de memria fsica: os programas se tornam cada vez maiores e cada vez mais
processos executam simultaneamente, ocupando a memria disponvel.
Alm disso, a crescente manipulao de informaes multimdia (imagens,
c Carlos Maziero
181
5: Mecanismo bsico
udio, vdeo) contribui para esse problema, uma vez que essas informaes
so geralmente volumosas e seu tratamento exige grandes quantidades
de memria livre. Como a memria RAM um recurso caro (cerca de
U$50/GByte no mercado americano, em 2007) e que consome uma quantidade significativa de energia, aumentar sua capacidade nem sempre uma
opo factvel.
Observando o comportamento de um sistema computacional, constata-se
que nem todos os processos esto constantemente ativos, e que nem todas as
reas de memria esto constantemente sendo usadas. Por isso, as reas de
memria pouco acessadas poderiam ser transferidas para um meio de armazenamento mais barato e abundante, como um disco rgido (U$0,50/GByte)
ou um banco de memria flash (U$10/GByte)5 , liberando a memria RAM
para outros usos. Quando um processo proprietrio de uma dessas reas
precisar acess-la, ela deve ser transferida de volta para a memria RAM.
O uso de um armazenamento externo como extenso da memria RAM
se chama memria virtual; essa estratgia pode ser implementada de forma
eficiente e transparente para processos, usurios e programadores.
5.7.1
Mecanismo bsico
c Carlos Maziero
182
5: Mecanismo bsico
processo P1
0
rea de troca
Memria RAM
ncleo
rea no-paginada
c Carlos Maziero
183
5: Mecanismo bsico
As pginas que foram transferidas da memria para o disco provavelmente sero necessrias no futuro, pois seus processos proprietrios
provavelmente continuam vivos. Quando um processo tentar acessar uma
pgina ausente, esta deve ser transferida de volta para a memria para
permitir seu acesso, de forma transparente ao processo. Conforme exposto
na Seo 5.3.4, quando um processo acessa uma pgina, a MMU verifica
se a mesma est mapeada na memria RAM e, em caso positivo, faz o
acesso ao endereo fsico correspondente. Caso contrrio, a MMU gera uma
interrupo de falta de pgina (page fault) que fora o desvio da execuo
para o sistema operacional. Nesse instante, o sistema deve verificar se
a pgina solicitada no existe ou se foi transferida para o disco, usando
os flags de controle da respectiva entrada da tabela de pginas. Caso a
pgina no exista, o processo tentou acessar um endereo invlido e deve
ser abortado. Por outro lado, caso a pgina solicitada tenha sido transferida
para o disco, o processo deve ser suspenso enquanto o sistema transfere
a pgina de volta para a memria RAM e faz os ajustes necessrios na
tabela de pginas. Uma vez a pgina carregada em memria, o processo
pode continuar sua execuo. O fluxograma da Figura 5.28 apresenta as
principais aes desenvolvidas pelo mecanismo de memria virtual.
Nesse procedimento aparentemente simples h duas questes importantes. Primeiro, caso a memria principal j esteja cheia, uma ou mais pginas
devero ser removidas para o disco antes de trazer de volta a pgina faltante.
Isso implica em mais operaes de leitura e escrita no disco e portanto em
mais demora para atender o pedido do processo. Muitos sistemas, como o
Linux e o Solaris, mantm um processo daemon com a finalidade de escolher
e transferir pginas para o disco, ativado sempre que a quantidade de
memria livre estiver abaixo de um limite mnimo.
Segundo, retomar a execuo do processo que gerou a falta de pgina
pode ser uma tarefa complexa. Como a instruo que gerou a falta de
pgina no foi completada, ela deve ser re-executada. No caso de instrues
simples, envolvendo apenas um endereo de memria sua re-execuo
trivial. Todavia, no caso de instrues que envolvam vrias aes e vrios
endereos de memria, deve-se descobrir qual dos endereos gerou a falta de
pgina, que aes da instruo foram executadas e ento executar somente o
que estiver faltando. A maioria dos processadores atuais prov registradores
especiais que auxiliam nessa tarefa.
c Carlos Maziero
184
5: Eficincia de uso
sim
a pgina X
est presente?
no
MMU gera interrupo (falta de pgina)
a pgina X
existe?
no
sim
suspende o processo P
h espao
na memria?
no
sim
carrega a pgina X na memria,
ajusta a tabela de pginas de P,
acorda o processo P
P acessa a pgina X
5.7.2
Eficincia de uso
c Carlos Maziero
185
5: Eficincia de uso
tmdio =
tmdio = 66ns
Caso a memria esteja saturada, o tempo mdio ser maior:
(999.999 60ns) + 2 6ms + 60ns
1.000.000
6
10 60 109 + 2 6 103
=
106
tmdio =
tmdio = 72ns
Caso a frequncia de falta de pginas aumente para uma falta a cada
100.000 acessos (105 acessos), o tempo mdio de acesso memria subir
para 180 ns, ou seja, trs vezes mais lento. A frequncia de faltas de pgina
depende de vrios fatores, como:
O tamanho da memria RAM, em relao demanda dos processos em
execuo: sistemas com memria insuficiente, ou muito carregados,
podem gerar muitas faltas de pgina, prejudicando o seu desempenho
e podendo ocasionar o fenmeno conhecido como thrashing (Seo
5.7.6).
c Carlos Maziero
186
o comportamento dos processos em relao ao uso da memria: processos que agrupem seus acessos a poucas pginas em cada momento,
respeitando a localidade de referncias (Seo 5.4), necessitam usar
menos pginas simultaneamente e geram menos faltas de pgina.
A escolha das pginas a remover da memria: caso sejam removidas
pginas usadas com muita frequncia, estas sero provavelmente
acessadas pouco tempo aps sua remoo, gerando mais faltas de
pgina. A escolha das pginas a remover tarefa dos algoritmos
apresentados na Seo 5.7.3.
5.7.3
c Carlos Maziero
187
c Carlos Maziero
188
em uma fila de nmeros de pginas com poltica FIFO (First In, First Out).
Os nmeros das pginas recm carregadas na memria so registrados no
final da lista, enquanto os nmeros das prximas pginas a substituir na
memria so obtidos no incio da lista.
A aplicao do algoritmo FIFO cadeia de referncias apresentada
na Seo anterior, considerando uma memria fsica com 3 quadros,
apresentada na Tabela 5.2. Nesse caso, o algoritmo gera no total 15 faltas de
pgina.
t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
qo
0
0
0
3
3
3
6
6
6
4
4
4
4
4
4
4
1
1
1
1
1
1
1
antes
q1
2
2
2
5
5
5
3
3
3
3
3
3
5
5
5
5
5
5
7
7
7
7
q2
1
1
1
4
4
4
7
7
7
7
7
7
7
3
3
3
3
3
3
3
4
pgina
0
2
1
3
5
4
6
3
7
4
7
3
3
5
5
3
1
1
1
7
1
3
4
1
qo
0
0
0
3
3
3
6
6
6
4
4
4
4
4
4
4
1
1
1
1
1
1
1
1
depois
q1
2
2
2
5
5
5
3
3
3
3
3
3
5
5
5
5
5
5
7
7
7
7
7
q2
1
1
1
4
4
4
7
7
7
7
7
7
7
3
3
3
3
3
3
3
4
4
faltas
?
?
?
?
?
?
?
?
?
?
?
?
?
ao realizada
p0 carregada no quadro vazio q0
p2 carregada em q1
p1 carregada em q2
p3 substitui p0 (a mais antiga na mem
p5 substitui p2 (idem)
p4 substitui p1
p6 substitui p3
p3 substitui p5
p7 substitui p4
p4 substitui p6
p7 est na memria
p3 est na memria
p3 est na memria
p5 substitui p3
p5 est na memria
p3 substitui p7
p1 substitui p4
p1 est na memria
p1 est na memria
p7 substitui p5
p1 est na memria
p3 est na memria
p4 substitui p3
p1 est na memria
c Carlos Maziero
189
c Carlos Maziero
190
t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
qo
0
0
0
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
4
antes
q1
2
2
2
5
5
6
6
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
q2
1
1
1
4
4
4
4
4
4
4
4
5
5
5
1
1
1
1
1
1
1
pgina
0
2
1
3
5
4
6
3
7
4
7
3
3
5
5
3
1
1
1
7
1
3
4
1
qo
0
0
0
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
4
4
depois
q1
2
2
2
5
5
6
6
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
q2
1
1
1
4
4
4
4
4
4
4
4
5
5
5
1
1
1
1
1
1
1
1
faltas
?
?
?
?
?
?
?
?
ao realizada
p0 carregada no quadro vazio q0
p2 carregada em q1
p1 carregada em q2
p3 substitui p0 (no ser mais acessada
p5 substitui p2 (no ser mais acessada
p4 substitui p1 (s ser acessada em t =
p6 substitui p5 (s ser acessada em t =
p3 est na memria
p7 substitui p6 (no ser mais acessada
p4 est na memria
p7 est na memria
p3 est na memria
p3 est na memria
p5 substitui p4 (s ser acessada em t =
p5 est na memria
p3 est na memria
p1 substitui p5 (no ser mais acessada
p1 est na memria
p1 est na memria
p7 est na memria
p1 est na memria
p3 est na memria
p4 substitui p3 (no ser mais acessada
p1 est na memria
c Carlos Maziero
191
t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
qo
0
0
0
3
3
3
6
6
6
4
4
4
4
5
5
5
5
5
5
7
7
7
4
antes
q1
2
2
2
5
5
5
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
q2
1
1
1
4
4
4
7
7
7
7
7
7
7
7
1
1
1
1
1
1
1
pgina
0
2
1
3
5
4
6
3
7
4
7
3
3
5
5
3
1
1
1
7
1
3
4
1
qo
0
0
0
3
3
3
6
6
6
4
4
4
4
5
5
5
5
5
5
7
7
7
4
4
depois
q1
2
2
2
5
5
5
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
q2
1
1
1
4
4
4
7
7
7
7
7
7
7
7
1
1
1
1
1
1
1
1
faltas
?
?
?
?
?
?
?
?
?
?
ao realizada
p0 carregada no quadro vazio q0
p2 carregada em q1
p1 carregada em q2
p3 substitui p0 (h mais tempo sem ace
p5 substitui p2 (idem)
p4 substitui p1 (...)
p6 substitui p3
p3 substitui p5
p7 substitui p4
p4 substitui p6
p7 est na memria
p3 est na memria
p3 est na memria
p5 substitui p4
p5 est na memria
p3 est na memria
p1 substitui p7
p1 est na memria
p1 est na memria
p7 substitui p5
p1 est na memria
p3 est na memria
p4 substitui p7
p1 est na memria
c Carlos Maziero
192
20
OPT
FIFO
LRU
Faltas de pgina
15
10
0
1
4
Nmero de quadros de RAM
c Carlos Maziero
193
12
2
11
26
prxima
vtima
42
18
14
33
nmeros
de pgina
17
0
26
nova
pgina
23
11
bits de
referncia
12
ajustados
para zero
2
0
21
17
18
14
33
Algoritmo NRU
O algoritmo da segunda chance leva em conta somente o bit de referncia
de cada pgina ao escolher as vtimas para substituio. O algoritmo NRU
(Not Recently Used, ou no usada recentemente) melhora essa escolha, ao
considerar tambm o bit de modificao (dirty bit, vide Seo 5.3.4), que
indica se o contedo de uma pgina foi modificado aps ela ter sido
carregada na memria.
Usando os bits R (referncia) e M (modificao), possvel classificar as
pginas em memria em quatro nveis de importncia:
00 (R = 0, M = 0): pginas que no foram referenciadas recentemente
e cujo contedo no foi modificado. So as melhores candidatas
substituio, pois podem ser simplesmente retiradas da memria.
c Carlos Maziero
194
c Carlos Maziero
195
5: Conjunto de trabalho
p1
p2
p3
p4
R
0
1
0
1
contadores
0000 0011
1010 1000
1110 0011
(3)
(61) =
(168)
(227)
R
0
0
0
0
contadores
0000 0001
e 1001 1110
0101 0100
1111 0001
(1)
(158)
(84)
(241)
O contador construdo por este algoritmo constitui uma aproximao razovel do algoritmo LRU: pginas menos acessadas envelhecero, ficando
com contadores menores, enquanto pginas mais acessadas permanecero
jovens, com contadores maiores. Por essa razo, esta estratgia conhecida
como algoritmo do envelhecimento [Tanenbaum, 2003], ou algoritmo dos bits de
referncia adicionais [Silberschatz et al., 2001].
5.7.4
Conjunto de trabalho
c Carlos Maziero
196
t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
5: Conjunto de trabalho
pgina
0
2
1
3
5
4
6
3
7
4
7
3
3
5
5
3
1
1
1
7
1
3
4
1
ws(n = 3)
{0}
{0, 2}
{0, 2, 1}
{2, 1, 3}
{1, 3, 5}
{3, 5, 4}
{5, 4, 6}
{4, 6, 3}
{6, 3, 7}
{3, 7, 4}
{4, 7}
{4, 7, 3}
{7, 3}
{3, 5}
{3, 5}
{5, 3}
{5, 3, 1}
{3, 1}
{1}
{1, 7}
{7, 1}
{7, 1, 3}
{1, 3, 4}
{3, 4, 1}
ws(n = 4)
{0}
{0, 2}
{0, 2, 1}
{0, 2, 1, 3}
{2, 1, 3, 5}
{1, 3, 5, 4}
{3, 5, 4, 6}
{5, 4, 6, 3}
{4, 6, 3, 7}
{6, 3, 7, 4}
{3, 4, 7}
{4, 7, 3}
{4, 7, 3}
{7, 3, 5}
{3, 5}
{5, 3}
{5, 3, 1}
{5, 3, 1}
{3, 1}
{1, 7}
{7, 1}
{7, 1, 3}
{7, 1, 3, 4}
{3, 4, 1}
ws(n = 5)
{0}
{0, 2}
{0, 2, 1}
{0, 2, 1, 3}
{0, 2, 1, 3, 5}
{2, 1, 3, 5, 4}
{1, 3, 5, 4, 6}
{5, 4, 6, 3}
{5, 4, 6, 3, 7}
{6, 3, 7, 4}
{6, 3, 4, 7}
{4, 7, 3}
{4, 7, 3}
{4, 7, 3, 5}
{7, 3, 5}
{5, 3}
{5, 3, 1}
{5, 3, 1}
{5, 3, 1}
{3, 1, 7}
{3, 7, 1}
{7, 1, 3}
{7, 1, 3, 4}
{7, 3, 4, 1}
c Carlos Maziero
197
5: Conjunto de trabalho
350
300
250
200
150
100
50
0
0
1000
2000
3000
4000
5000
6000
Tamanho da histria recente (pginas)
7000
8000
9000
c Carlos Maziero
198
5: A anomalia de Belady
5.7.5
A anomalia de Belady
c Carlos Maziero
199
5: Thrashing
pode ser visto na Figura 5.32, que exibe o nmero de faltas de pgina
em funo do nmero de quadros de memria disponveis no sistema. A
anomalia pode ser observada no algoritmo FIFO: ao aumentar a memria
de 4 para 5 quadros, esse algoritmo passa de 22 para 24 faltas de pgina.
0, 1, 2, 3, 4, 0, 1, 2, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 0, 1, 2, 5, 0, 1, 2, 3, 4, 5
30
OPT
FIFO
LRU
25
Faltas de pgina
20
15
10
0
1
4
Nmero de quadros de RAM
5.7.6
Thrashing
c Carlos Maziero
200
5: Thrashing
c Carlos Maziero
201
5: Thrashing
sistema ideal
sistema real
situao normal
thrashing
Captulo 6
Gerncia de arquivos
Um sistema operacional tem por finalidade permitir que o usurios do computador executem aplicaes, como editores de texto,
jogos, reprodutores de udio e vdeo, etc. Essas aplicaes processam
informaes como textos, msicas e filmes, armazenados sob a forma
de arquivos em um disco rgido ou outro meio. Este mdulo apresenta
a noo de arquivo, suas principais caractersticas e formas de acesso,
a organizao de arquivos em diretrios e as tcnicas usadas para
criar e gerenciar arquivos nos dispositivos de armazenamento.
6.1
Arquivos
c Carlos Maziero
203
6.1.1
6: O conceito de arquivo
O conceito de arquivo
bin
home
ls
usr
bin
daniel
henrique
gcc
cp
arq1.txt
relat.pdf
firefox
mv
play.mp3
foto.jpg
perl
diretrios
ooffice
arquivos
c Carlos Maziero
204
6.1.2
6: Atributos
Atributos
c Carlos Maziero
205
6: Operaes
6.1.3
Operaes
c Carlos Maziero
206
6: Formatos
6.1.4
Formatos
c Carlos Maziero
207
6: Formatos
struct
char
char
int
int
int
}
{
nome[40];
CPF[10];
idade;
peso;
altura;
nome (chave)
telefone (valor)
daniel
marina
henrique
gabriel
renata
andressa
guilherme
9977-1173
9876-5432
8781-9750
8858-8286
9663-9293
8779-5538
9979-4166
int main()
{
printf("Hello, world\n");
exit(0);
c Carlos Maziero
208
6: Formatos
0000
2
3
0010
4
5
0020
6
7
0030
69
i
72
r
72
r
30
0
6e
n
69
i
6c
l
29
)
74
t
6e
n
64
d
3b
;
20 6d
m
74 66
t f
5c 6e
\ n
0a 7d
\n }
61 69 6e 28 29 0a 7b 0a 20 20 70
a i n ( ) \n { \n
p
28 22 48 65 6c 6c 6f 2c 20 77 6f
( " H e l l o ,
w o
22 29 3b 0a 20 20 65 78 69 74 28
" ) ; \n
e x i t (
0a
\n
0000
2
3
0010
4
5
0020
6
7
0030
69 6e 74
i n t
20 70 72
p r
77 6f 72
w o r
69 74 28
i t (
20 6d
m
69 6e
i n
6c 64
l d
30 29
0 )
61
a
74
t
5c
\
3b
;
69
i
66
f
6e
n
0d
\r
6e
n
28
(
22
"
0a
\n
28
(
22
"
29
)
7d
}
29
)
48
H
3b
;
0d
\r
0d
\r
65
e
0d
\r
0a
\n
0a 7b 0d 0a 20
\n { \r \n
6c 6c 6f 2c 20
l l o ,
0a 20 20 65 78
\n
e x
c Carlos Maziero
209
6: Formatos
Sections
Program
header table
Segments
Section
header table
c Carlos Maziero
210
6: Formatos
Identificao de contedo
Um problema importante relacionado aos formatos de arquivos a
correta identificao de seu contedo pelos usurios e aplicaes. J
que um arquivo de dados pode ser visto como uma simples sequncia
de bytes, como possvel saber que tipo de informao essa sequncia
representa? Uma soluo simples para esse problema consiste em indicar o
tipo do contedo como parte do nome do arquivo: um arquivo praia.jpg
provavelmente contm uma imagem em formato JPEG, enquanto um
arquivo entrevista.mp3 contm udio em formato MP3. Essa estratgia,
amplamente utilizada em muitos sistemas operacionais, foi introduzida
nos anos 1980 pelo sistema operacional DOS. Naquele sistema, os arquivos
eram nomeados segundo uma abordagem denominada 8.3, ou seja, 8
caracteres seguidos de um ponto (.) e mais 3 caracteres de extenso, para
definir o tipo do arquivo.
Outra abordagem, frequentemente usada em sistemas UNIX, o uso de
alguns bytes no incio de cada arquivo para a definio de seu tipo. Esses
bytes iniciais so denominados nmeros mgicos (magic numbers), e so
usados em muitos tipos de arquivos, como exemplificado na Tabela 6.1:
Tabela 6.1: Nmeros mgicos de alguns tipos de arquivos
Tipo de arquivo
Documento PostScript
Imagem GIF
Msica MIDI
bytes iniciais
%!
GIF89a
MThd
Tipo de arquivo
Documento PDF
Imagem JPEG
Classes Java (JAR)
bytes iniciais
%PDF
0xFFD8
0xCAFEBABE
c Carlos Maziero
211
6: Arquivos especiais
Significado
Arquivo de classes Java (JAR)
Documento do Microsoft Word
Documento do OpenOffice
udio em formato MIDI
udio em formato MP3
Imagem em formato JPEG
Imagem em formato PNG
Texto em formato CSV (Comma-separated V
Texto HTML
Texto puro
Texto em formato RTF (Rich Text Format)
Cdigo-fonte em C
Vdeo no formato Quicktime
6.1.5
Arquivos especiais
c Carlos Maziero
212
6: Arquivos especiais
c Carlos Maziero
213
6: Uso de arquivos
dos conceitos aqui expostos so igualmente aplicveis aos arquivos noconvencionais descritos nesta seo.
6.2
Uso de arquivos
Arquivos so usados por processos para ler e escrever dados de forma novoltil. Para usar arquivos, um processo tem sua disposio uma interface
de acesso, que depende da linguagem utilizada e do sistema operacional
subjacente. Essa interface normalmente composta por uma representao
lgica de cada arquivo usado pelo processo (uma referncia ao arquivo) e por
um conjunto de funes (ou mtodos) para realizar operaes sobre esses
arquivos. Atravs dessa interface, os processos podem localizar arquivos
no disco, ler e modificar seu contedo, entre outras operaes.
Na sequncia desta seo sero discutidos aspectos relativos ao uso de
arquivos, como a abertura do arquivo, as formas de acesso aos seus dados, o
controle de acesso e problemas associados ao compartilhamento de arquivos
entre vrios processos.
6.2.1
Abertura de um arquivo
c Carlos Maziero
214
6: Abertura de um arquivo
c Carlos Maziero
215
6.2.2
6: Formas de acesso
Formas de acesso
15
23
35
45
60
leituras
Qui scribit bis legit. Non nova, sed nove. Felix qui potuit rerum...
c Carlos Maziero
216
6: Formas de acesso
vetor de bytes
pginas
lidas
pginas
escritas
arquivo em disco
c Carlos Maziero
217
6: Controle de acesso
Finalmente, alguns sistemas operacionais oferecem tambm a possibilidade de acesso indexado aos dados de um arquivo, como o caso do
OpenVMS [Rice, 2000]. Esse sistema implementa arquivos cuja estrutura
interna pode ser vista como um conjunto de pares chave/valor. Os dados do
arquivo so armazenados e recuperados de acordo com suas chaves correspondentes, como em um banco de dados relacional. Como o prprio ncleo
do sistema implementa os mecanismos de acesso e indexao do arquivo, o
armazenamento e busca de dados nesse tipo de arquivo costuma ser muito
rpido, dispensando bancos de dados para a construo de aplicaes mais
simples.
6.2.3
Controle de acesso
c Carlos Maziero
218
6: Controle de acesso
host:~> ls -l
d rwx --- --- rwx r-x --- rw- r-- r-- rw- --- --- rw- r-- r-- rw- --- ---
2
1
1
1
1
1
maziero
maziero
maziero
maziero
maziero
maziero
prof
prof
prof
prof
prof
prof
4096
7248
54
59
195780
40494
2008-09-27
2008-08-23
2008-08-23
2008-08-23
2008-09-26
2008-09-27
08:43
09:54
09:54
09:49
22:08
08:44
figuras
hello-unix
hello-unix.c
hello-windows.c
main.pdf
main.tex
c Carlos Maziero
219
6: Compartilhamento de arquivos
6.2.4
Compartilhamento de arquivos
c Carlos Maziero
220
6: Compartilhamento de arquivos
trava do arquivo para si, outros processos que solicitarem acesso ao arquivo
sero suspensos at que a respectiva trava seja liberada. Por outro lado, as
travas recomendadas no so impostas pelo ncleo do sistema operacional.
Neste caso, um processo pode acessar um arquivo mesmo sem ter sua trava.
Caso sejam usadas travas recomendadas, cabe ao programador implementar
os controles de trava necessrios em suas aplicaes, para impedir acessos
conflitantes aos arquivos.
As travas sobre arquivos tambm podem ser exclusivas ou compartilhadas. Uma trava exclusiva, tambm chamada trava de escrita, garante acesso
exclusivo ao arquivo: enquanto uma trava exclusiva estiver ativa, nenhum
outro processo poder obter uma trava sobre aquele arquivo. J uma trava
compartilhada (ou trava de leitura) impede outros processos de criar travas
exclusivas sobre aquele arquivo, mas permite a existncia de outras travas
compartilhadas. Em conjunto, as travas exclusivas e compartilhadas implementam um modelo de sincronizao leitores/escritores (descrito na Seo
4.9.2), no qual os leitores acessam o arquivo usando travas compartilhadas
e os escritores o fazem usando travas exclusivas.
importante observar que normalmente as travas de arquivos so atribudas a processos, portanto um processo s pode ter um tipo de trava sobre
um mesmo arquivo. Alm disso, todas as suas travas so liberadas quando o
processo fecha o arquivo ou encerra sua execuo. No UNIX, a manipulao
de travas em arquivos feita atravs das chamadas de sistema flock e
fcntl. Esse sistema oferece por default travas recomendadas exclusivas ou
compartilhadas sobre arquivos ou trechos de arquivos. Sistemas Windows
oferecem por default travas obrigatrias sobre arquivos, que podem ser
exclusivas ou compartilhadas, ou travas recomendadas sobre trechos de
arquivos.
Semntica de acesso
Quando um arquivo aberto e usado por um nico processo, o funcionamento das operaes de leitura e escrita simples e inequvoco: quando um
dado escrito no arquivo, ele est prontamente disponvel para leitura se o
processo desejar l-lo novamente. No entanto, arquivos podem ser abertos
por vrios processos simultaneamente, e os dados escritos por um processo
podem no estar prontamente disponveis aos demais processos que lem
aquele arquivo. Isso ocorre porque os discos rgidos so normalmente
lentos, o que leva os sistemas operacionais a usar buffers intermedirios
c Carlos Maziero
221
6: Compartilhamento de arquivos
c Carlos Maziero
222
6: Exemplo de interface
71
p4
close
read
39
close
read
23
23
open
p2
39
write
71
close
read
23
write
open
p3
p1
12
open
read
write
39
open
close
read
write
read
6.2.5
Exemplo de interface
c Carlos Maziero
223
6: Exemplo de interface
c Carlos Maziero
224
1
2
6: Organizao de volumes
#include <stdio.h>
#include <stdlib.h>
3
4
5
6
7
9
10
11
12
13
14
15
16
while (1)
{
c = getc (arq) ; /* le um caractere do arquivo */
if (feof (arq)) /* chegou ao final do arquivo? */
break ;
putchar(c) ;
/* imprime o caractere na tela */
}
17
18
19
20
21
22
23
24
fclose (arq) ;
exit (0) ;
25
26
27
/* fecha o arquivo */
6.3
Organizao de volumes
c Carlos Maziero
225
6: Diretrios
partio 2
partio 3
6.3.1
Diretrios
c Carlos Maziero
226
6: Diretrios
c Carlos Maziero
227
bin
etc
home
lib
proc
root
tmp
usr
var
6: Caminhos de acesso
bin
lib
include
opt
sgml
skel
X11
X11
X11
asm
linux
g++
X11R6
bin
include
lib
local
man
share
src
tmp
adm
cache
cron
lib
local
log
mail
run
spool
X11
gcc-lib
groff
uucp
bin
doc
etc
include
lib
man
share
at
cron
lpd
mail
news
smail
doc
games
info
locale
man
zoneinfo
6.3.2
Caminhos de acesso
c Carlos Maziero
228
VBR
/
.
..
bin
etc
home
lib
usr
var
0101011
110000110
001101011
101110100
110000010
100011111
010110100
6: Caminhos de acesso
Volume (disco ou partio)
D
D
D
D
D
D
D
D
0101011
110000110
001101011
101110100
110000010
100011111
010110100
bin
.
..
cp
ls
mv
D
D
A
A
A
home
.
..
daniel
ike
D
D
D
D
lib
.
..
X11
lib.a
lib.so
D
D
D
A
A
0101011
110000110
001101011
101110100
110000010
100011111
010110100
daniel
.
..
arq1
arq2
1111010
101010101
011010101
111110100
000100111
010101010
111100000
D
D
A
A
1100110
110011001
100110011
111110011
111110011
111111111
000000000
0000000
000000000
111100000
111111111
111111111
111000011
000010101
1100110
110011001
100110011
111110011
111110011
111111111
000000000
X11
.
D
..
D
libX.a A
0101011
110000110
001101011
101110100
110000010
100011111
010110100
c Carlos Maziero
229
6: Caminhos de acesso
prova1.doc
materiais.pdf
uma-bela-foto.jpg
\Windows\system32\drivers\etc\hosts.lm
/usr/local/share/fortunes/brasil.dat
\Documents and Settings\Carlos Maziero\..\All Users\notas.xls
/home/maziero/bin/scripts/../../docs/proj1.pdf
imagens\satelite\brasil\geral.jpg
..\users\maziero\documentos\prova-2.doc
public_html/static/fotografias/rennes.jpg
../../../share/icons/128x128/calculator.svg
c Carlos Maziero
230
6: Caminhos de acesso
c Carlos Maziero
231
6: Atalhos
pode ser muito elevado, pois discos rgidos so dispositivos lentos. Para
evitar esse custo e melhorar o desempenho do mecanismo de localizao
de arquivos, mantido em memria um cache de entradas de diretrio
localizadas recentemente, gerenciado de acordo com uma poltica LRU
(Least Recently Used). Cada entrada desse cache contm um nome de arquivo
ou diretrio e sua localizao no dispositivo fsico. Esse cache geralmente
organizado na forma de uma tabela hash, o que permite localizar rapidamente
os arquivos ou diretrios recentemente utilizados.
6.3.3
Atalhos
c Carlos Maziero
232
6: Atalhos
/
.
..
bin
etc
home
lib
usr
D
D
D
D
D
L
D
bin
.
..
cp
ls
rm
shell
D
D
A
A
A
L
link to:
/usr/lib
usr
.
..
bin
lib
D
D
D
D
0101011
110000110
001101011
101110100
110000010
100011111
010110100
link to:
/usr/bin/sh
bin
.
..
copy
cut
dir
sh
D
D
L
A
A
A
lib
.
..
X11
lib.a
lib.so
D
D
D
A
A
0101011
110000110
001101011
101110100
110000010
100011111
010110100
link to:
/bin/cp
0101011
110000110
001101011
101110100
110000010
100011111
010110100
c Carlos Maziero
233
6: Montagem de volumes
6.3.4
Montagem de volumes
c Carlos Maziero
234
6: Sistemas de arquivos
home
dout
Disco rgido 2
espec
grad
alcides
mest
maziero
prof
santin
/
apagar
lib
media
usr
Disco rgido 1
var
backup
fotos
Pendrive USB
livro
cdrom
CD-ROM
bin
html
docs
extras
txt
install
6.4
Sistemas de arquivos
c Carlos Maziero
235
6: Arquitetura geral
6.4.1
Arquitetura geral
c Carlos Maziero
236
6: Arquitetura geral
processo
biblioteca de E/S
espao de usurio
chamadas de sistema
ncleo
sistema de arquivos virtual
alocao de arquivos
alocao de arquivos
gerncia de blocos
driver de dispositivo
driver de dispositivo
controlador
controlador
dispositivo
dispositivo
software
hardware
c Carlos Maziero
237
6.4.2
c Carlos Maziero
238
do sistema. Por outro lado, blocos lgicos muito grandes podem levar
fragmentao interna: um arquivo com 200 bytes armazenado em um sistema
de arquivos com blocos lgicos de 32.768 bytes (32K) ocupar um bloco
lgico, do qual 32.568 bytes sero desperdiados, pois ficaro alocados ao
arquivo sem serem usados. A fragmentao interna diminui o espao til
do disco rgido, por isso deve ser evitada. Uma forma de evit-la escolher
um tamanho de bloco lgico adequado ao tamanho mdio dos arquivos a
armazenar no disco, ao format-lo. Alm disso, alguns sistemas de arquivos
(como o UFS do Solaris e o ReiserFS do Linux) permitem a alocao de
partes de blocos lgicos, atravs de tcnicas denominadas fragmentos de
blocos ou alocao de sub-blocos [Vahalia, 1996].
6.4.3
c Carlos Maziero
239
foto1.jpg
0
relat.pdf
blocos do dispositivo
instruc.txt
6
sinfonia.mp3
0
7 ...
c Carlos Maziero
240
Tabela de diretrio
01
nome
02
03
foto1.jpg
10417
relat.pdf
28211
13
6214
20
06
19116
24
07
instruc.txt
sinfonia.mp3
04
05
08
09
10
11
12
13
14
15
bloco em uso
16
17
bloco livre
18
19
20
21
22
23
24
25
26
27
28
29
c Carlos Maziero
241
c Carlos Maziero
242
Tabela de diretrio
01
02
foto1.jpg
10417
03
relat.pdf
28211
13
6214
20
06
19116
24
07
nome
instruc.txt
sinfonia.mp3
04
05
08
09
10
11
12
13
14
15
bloco em uso
16
17
bloco livre
18
19
20
21
22
23
24
25
26
27
28
29
c Carlos Maziero
243
c Carlos Maziero
244
c Carlos Maziero
245
00
01
02
foto1.jpg
10417
03
relat.pdf
28211
13
04
02
05
6214
20
06
19116
24
07
04
08
Tabela de diretrio
nome
instruc.txt
sinfonia.mp3
bloco em uso
bloco livre
09
10
12
11
12
13
16
14
15
16
17
17
19
18
19
22
20
21
21
22
10
23
24
26
25
26
27
27
28
28
29
c Carlos Maziero
246
Tabela de diretrio
nome
i-node
foto1.jpg
relat.pdf
instruc.txt
10
sinfonia.mp3
31
10417
...
i-node 5
bloco em uso
bloco livre
19
ponteiros
de dados
22
10
12
null
null
null
c Carlos Maziero
247
4096 12
4096 1024
4096 1024 1024
4096 1024 1024 1024
4.402.345.721.856 bytes
4T bytes
(ponteiros diretos)
(ponteiro indireto)
(ponteiro indireto duplo)
(ponteiro indireto triplo)
c Carlos Maziero
248
i-node
12
meta-dados
do arquivo
13
blocos de dados
0
1
1035
2
12 ponteiros
diretos
1036
1037
10
2059
11
ponteiro 1-indireto
ponteiro 2-indireto
ponteiro 3-indireto
blocos com
1024 ponteiros
de 4 bytes
c Carlos Maziero
249
oi = i mod B
baux = i B
if baux < 12 then // ponteiros diretos
// o endereo do bloco bi o prprio valor do ponteiro
bi = ptr[baux ]
else
baux = baux 12
if baux < 1024 then // ponteiro indireto simples
// ler bloco de ponteiros de nvel 1
block1 = read_block (ptr[12])
// encontrar o endereo do bloco bi
bi = block1 [baux ]
else
baux = baux 1024
if baux < 1024 1024 then // ponteiro indireto duplo
// ler bloco de ponteiros de nvel 1
block1 = read_block (ptr[13])
// ler bloco de ponteiros de nvel 2
block2 = read_block (block1 [baux 1024])
// encontrar o endereo do bloco bi
bi = block2 [baux mod 1024]
else // ponteiro indireto triplo
baux = baux (1024 1024)
// ler bloco de ponteiros de nvel 1
block1 = read_block (ptr[14])
// ler bloco de ponteiros de nvel 2
block2 = read_block (block1 [baux (1024 1024)])
// ler bloco de ponteiros de nvel 3
block3 = read_block (block2 [(baux 1024) mod 1024])
// encontrar o endereo do bloco bi
bi = block3 [baux mod 1024]
c Carlos Maziero
250
i-node
disco
blocos de disco
efetivamente alocados
c Carlos Maziero
251
Anlise comparativa
A Tabela 6.3 traz um comparativo entre as principais formas de alocao
estudadas aqui, sob a tica de suas caractersticas de rapidez, robustez e
flexibilidade de uso.
Estratgia
Contgua
Rapidez
Robustez
Alta, pois acessos se- Alta, pois blocos defeiquencial e direto r- tuosos no impedem o
pidos, pois os blocos acesso aos demais blodo arquivo esto pr- cos do arquivo.
ximos no disco.
Encadeada
FAT
Indexada
Flexibilidade
Baixa, pois o tamanho
mximo dos arquivos
deve ser conhecido a
priori; nem sempre
possvel aumentar o tamanho de um arquivo
existente.
Baixa, pois um bloco Alta, pois arquivos podefeituoso leva perda dem ser criados em
dos dados daquele qualquer local do disco,
bloco e de todos os blo- sem risco de fragmencos subsequentes, at o tao externa.
fim do arquivo.
c Carlos Maziero
252
6.4.4
c Carlos Maziero
253
c Carlos Maziero
254
6: Tpicos avanados
referncias de arquivos abertos
P1
P2
P3
nvel usurio
ncleo
tabelas locais de
arquivos abertos
tabela global de
arquivos abertos
sistemas
de arquivos
especcos
Sistema de
Arquivos Virtual
alocao
de arquivos
alocao
de arquivos
driver
driver
dispositivo
dispositivo
6.5
Tpicos avanados
Journaling FS
Extents
Log-structured Fyle Systems
Captulo 7
Gerncia de entrada/sada
Este contedo est em elaborao. Ainda h muito o que escrever aqui...
7.1
Introduo
c Carlos Maziero
256
7: Introduo
c Carlos Maziero
257
7: Dispositivos de entrada/sada
7.2
Dispositivos de entrada/sada
7.2.1
Componentes de um dispositivo
c Carlos Maziero
258
7: Barramentos
7.2.2
Barramentos
c Carlos Maziero
259
7: Barramentos
CPU
dados
controlador de barramento
01001010
11011001
01101010
dados
buer
01001010
11011001
01101010
buer
sinal
digital
conversor
digitalanalgico
conversor
analgicodigital
sinal
analgico
sensor
amplicador
atuador
amplicador
c Carlos Maziero
260
7: Interface de acesso
padro, o USB e o SATA. Alm disso, a south bridge costuma integrar outros
componentes importantes do computador, como controladores de udio e
rede on-board, controlador de interrupes, controlador DMA (Direct Memory
Access), relgio de tempo real (responsvel pelas interrupes de tempo
usadas pelo escalonador de processos), controle de energia e o acesso
memria BIOS. O processador se comunica com a south bridge indiretamente,
atravs da north bridge.
A Figura 7.3 traz uma viso da arquitetura tpica de um computador pessoal moderno. A estrutura detalhada e o funcionamento dos barramentos e
seus respectivos controladores esto fora do escopo deste texto; informaes
mais detalhadas podem ser encontradas em [Patterson and Henessy, 2005].
7.2.3
Interface de acesso
c Carlos Maziero
261
7: Interface de acesso
processor
North bridge
(memory
controller hub)
AGP port
LPC bus
RAM
onboard ethernet
BIOS
RAM
South bridge
(I/O controller
hub)
onboard audio
power management
real-time clock
SATA
PCI
USB
standard buses
c Carlos Maziero
262
7: Interface de acesso
CPU
data-in
data-out
status
control
device controller
c Carlos Maziero
263
7: Interface de acesso
c Carlos Maziero
264
aguarda um
novo dado
7: Endereamento
P2.strobe?
informa que
o controlador
est ocupado
P1.busy = 1
l e trata o
dado recebido
l P0
informa que
o dado foi
processado
gera pulso
em P1.ack
gera
interrupo?
P2.nIRQ?
ack
gera IRQ
1
informa que
o controlador
est livre
P1.busy = 0
7.2.4
Endereamento
c Carlos Maziero
265
7: Endereamento
c Carlos Maziero
266
7: Interrupes
Finalmente, uma abordagem mais sofisticada para o controle de dispositivos de entrada/sada o uso de um hardware independente, com
processador dedicado, que comunica com o processador principal atravs
de algum tipo de barramento. Em sistemas de grande porte (mainframes)
essa abordagem denominada canais de entrada/sada (IO channels); em
computadores pessoais, essa abordagem costuma ser usada em interfaces
para vdeo ou udio de alto desempenho, como o caso das placas grficas
com acelerao, nas quais um processador grfico (GPU Graphics Processing Unit) realiza a parte mais pesada do processamento da sada de vdeo,
como a renderizao de imagens em 3 dimenses e texturas, deixando o
processador principal livre para outras tarefas.
7.2.5
Interrupes
c Carlos Maziero
267
7: Interrupes
Dispositivo
Interrupo
teclado
1
mouse PS/2
12
barramento IDE primrio
14
barramento IDE secundrio
15
relgio de tempo real
8
porta serial COM1
4
porta serial COM2
3
porta paralela LPT1
7
Tabela 7.3: Interrupes geradas por alguns dispositivos.
1: processamento normal
4: a execuo desviada
rotina de
tratamento de
interrupo
6: retorno ao
fluxo anterior
programa
em
execuo
buer
CPU
3: o controlador gera
uma interrupo
5: dados do controlador
transferidos para a memria
registers
keyboard controller
buer
c Carlos Maziero
268
7: Interrupes
c Carlos Maziero
269
7: Interrupes
Descrio
divide error
breakpoint
bound range exception
invalid opcode
coprocessor segment overrun
segment not present
stack fault
general protection
page fault
floating point error
Nas arquiteturas de hardware atuais, as interrupes geradas pelos dispositivos de entrada/sada no so transmitidas diretamente ao processador,
mas a um controlador de interrupes programvel (PIC - Programmable
Interrupt Controller, ou APIC - Advanced Programmable Interrupt Controller), que faz parte do chipset do computador. As linhas de interrupo
dos controladores de perifricos so conectadas aos pinos desse controlador de interrupes, enquanto suas sadas so conectadas s entradas de
interrupo do processador.
O controlador de interrupes recebe as interrupes dos dispositivos e
as encaminha ao processador em sequncia, uma a uma. Ao receber uma
interrupo, o processador deve acessar a interface do PIC para identificar
a origem da interrupo e depois reconhec-la, ou seja, indicar ao PIC
que aquela interrupo foi tratada e pode ser descartada pelo controlador.
c Carlos Maziero
270
7: Interrupes
registers
interrupt
controller
IRQ
disk
controller
control
status
data
registers
IRQ
...
network
controller
registers
IRQ
USB
controller
registers
IRQ
touchscreen
controller
c Carlos Maziero
271
7.3
7: Software de entrada/sada
Software de entrada/sada
c Carlos Maziero
272
7: Classes de dispositivos
processos de aplicao
nvel de usurio
data
control
nvel de ncleo
Input/output API
data
control
IRQ
interrupt
handler
device driver
software
hardware
control
IRQ
interrupt
controller
data/control
IRQ
device
controller
DMA
controller
IRQ
data/control
I/O device
7.3.1
Classes de dispositivos
Para simplificar a construo de aplicaes (e do prprio sistema operacional), os dispositivos de entrada/sada so agrupados em classes ...
Os dispositivos orientados a blocos so aqueles em que as operaes
de entrada ou sada de dados so feitas usando blocos de bytes e nunca
bytes isolados. Discos rgidos, fitas magnticas e outros dispositivos de
armazenamento so exemplos tpicos desta categoria.
c Carlos Maziero
273
7: Classes de dispositivos
exemplos:
acesso
exemplos:
persistncia:
exemplos:
entrada
sada
caractere: os dados so envia- bloco: os dados so enviados/dos ou recebidos byte por byte recebidos em blocos de tamanho fixo
terminais, portas paralelas e discos rgidos, interfaces de
seriais, mouses, teclados
rede (pacotes), fitas magnticas
sequencial: os dados so envi- direto: a cada dado enviado
ados ou recebidos em sequn- ou recebido associado um
cia, um aps o outro
endereo (respectivamente de
destino ou de origem)
porta paralela/serial, mouse, disco rgido, interface de rede
teclado, fita magntica
persistente, se o dado envi- voltil, se o dado enviado
ado pode ser resgatado dire- consumido pelo dispositivo,
tamente (ou, em outras pala- ou se o dado recebido do disvras, se os dados lidos do dis- positivo foi produzido por
positivo foram anteriormente ele e no anteriormente depoescritos nele por aquele com- sitado nele.
putador ou algum outro)
fita magntica, disco rgido
interface de rede, porta serial/paralela
c Carlos Maziero
274
7: Estratgias de interao
7.3.2
Estratgias de interao
O sistema operacional deve interagir com cada dispositivo de entrada/sada para realizar as operaes desejadas, atravs das portas de seu
controlador. Esta seo aborda as trs estratgias de interao mais frequentemente usadas pelo sistema operacional, que so a entrada/sada
controlada por programa, a controlada por eventos e o acesso direto
memria, detalhados a seguir.
Interao controlada por programa
A estratgia de entrada/sada mais simples, usada com alguns tipos
de dispositivos, a interao controlada por programa, tambm chamada
varredura ou polling. Nesta abordagem, o sistema operacional solicita
uma operao ao controlador do dispositivo, usando as portas control e
data-out (ou data-in) de sua interface, e aguarda a concluso da operao
solicitada, monitorando continuamente os bits da respectiva porta de status.
c Carlos Maziero
275
7: Estratgias de interao
1
2
3
4
6
7
8
9
10
11
12
13
polling_output ()
{
for (i = 0 ; i < BUFSIZE ; i++)
{
// espera o controlador ficar livre (bit BUSY deve ser zero).
while (in (P1) & BUSY) ;
14
15
16
17
18
19
20
21
22
23
// gera pulso de 1
// para indicar ao
out (P2, in (P2) |
usleep (1) ;
out (P2, in (P2) &
24
25
26
27
28
29
30
31
32
33
Como o bit BUSY da porta P1 deve retornar ao valor zero (0) aps o pulso no bit ACK, o
pseudo-cdigo poderia ser simplificado, eliminando o lao de espera sobre ACK; contudo,
esse lao foi mantido para maior clareza didtica.
c Carlos Maziero
276
7: Estratgias de interao
controlador
wait (!busy)
busy=0
wait (!strobe)
prepara e
envia byte
interface
data=byte
espera
novo byte
strobe=0
busy=1
espera
byte ser
recebido
wait (!ack)
recebe e
processa
novo byte
ack=0
busy=0
c Carlos Maziero
277
7: Estratgias de interao
c Carlos Maziero
278
1
2
3
4
7: Estratgias de interao
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Nesse pseudo-cdigo, percebe-se que o processador inicia a transferncia de dados para a interface paralela e suspende o processo solicitante
(chamada schedule), liberando o processador para outras atividades. A cada
c Carlos Maziero
279
7: Estratgias de interao
c Carlos Maziero
280
7: Estratgias de interao
processador
espera
controlador
ficar livre
controlador
wait (!busy)
busy=0
wait (!strobe)
prepara e
envia byte
interface
data=byte
strobe=0
schedule()
tratador de
interrupo
raise IRQ
wait (!strobe)
data=byte
espera
novo
byte
recebe e
processa
byte
espera
novo
byte
strobe=0
processo
suspenso
raise IRQ
wait (!strobe)
data=byte
recebe e
processa
byte
espera
novo
byte
strobe=0
raise IRQ
recebe e
processa
byte
resume()
t
c Carlos Maziero
281
7: Estratgias de interao
interrupo atravs de um procedimento postergado (DPC - Deferred Procedure Call) [Russinovich and Solomon, 2004]. O sistema Symbian usa uma
abordagem similar a esta.
Por outro lado, os sistemas Solaris, FreeBSD e MacOS X usam uma
abordagem denominada interrupt threads [Mauro and McDougall, 2006].
Cada interrupo provoca o lanamento de uma thread de ncleo, que
escalonada e compete pelo uso do processador de acordo com sua prioridade.
As interrupes tm prioridades que podem estar acima da prioridade do
escalonador ou abaixo dela. Como o prprio escalonador tambm uma
thread, interrupes de baixa prioridade podem ser interrompidas pelo
escalonador ou por outras interrupes. Por outro lado, interrupes de
alta prioridade no so interrompidas pelo escalonador, por isso devem
executar rapidamente.
Acesso direto memria
Na maioria das vezes, o tratamento de operaes de entrada/sada uma
operao lenta, pois os dispositivos so mais lentos que o processador. Alm
disso, o uso do processador principal para intermediar essas operaes
ineficiente, pois implica em transferncias adicionais (e desnecessrias) de
dados: por exemplo, para transportar um byte de um buffer da memria
para a interface paralela, esse byte precisa antes ser carregado em um
registrador do processador, para em seguida ser enviado ao controlador
da interface. Para resolver esse problema, a maioria dos computadores
atuais, com exceo de pequenos sistemas embarcados dedicados, oferece
mecanismos de acesso direto memria (DMA - Direct Memory Access), que
permitem transferncias diretas entre a memria principal e os controladores
de entrada/sada.
O funcionamento do mecanismo de acesso direto memria em si
relativamente simples. Como exemplo, a seguinte sequncia de passos seria
executada para a escrita de dados de um buffer em memria RAM para o
controlador de um disco rgido:
1. o processador acessa os registradores do canal DMA associado ao
dispositivo desejado, para informar o endereo inicial e o tamanho da
rea de memria RAM contendo os dados a serem escritos no disco.
O tamanho da rea de memria deve ser um mltiplo de 512 bytes,
que o tamanho padro dos setores do disco rgido;
c Carlos Maziero
282
7: Estratgias de interao
processador
memria RAM
5: interrupt request
barramento
1: DMA request
2: transfer request
controlador
de DMA
3: data transfer
controlador
de disco rgido
hardware do dispositivo
c Carlos Maziero
283
7: Estratgias de interao
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
c Carlos Maziero
284
7: Discos rgidos
7.4
Discos rgidos
c Carlos Maziero
285
7: Estrutura fsica
7.4.1
Estrutura fsica
trilhas
blocos
faces
cabeas
c Carlos Maziero
286
7: Interface de hardware
7.4.2
Interface de hardware
c Carlos Maziero
287
7: Escalonamento de acessos
7.4.3
Escalonamento de acessos
c Carlos Maziero
288
7: Escalonamento de acessos
524
189
335
324
659
498
161
286
447
376
71
843
914
636
278
bloco
222
500
200
400
600
800
c Carlos Maziero
289
7: Escalonamento de acessos
914
255
659
588
90
117
161
57
278
335
200
112
bloco
77
447
524
500
24
400
600
800
914
255
135
659
524
453
71
90
161
117
278
57
335
112
200
400
bloco
53
447
500
600
800
c Carlos Maziero
290
7: Escalonamento de acessos
524
135
659
255
914
843
161
117
278
57
335
112
200
400
bloco
53
447
500
600
800
c Carlos Maziero
291
7: Caching de blocos
7.4.4
Caching de blocos
c Carlos Maziero
292
7: Sistemas RAID
alm disso, leituras de dados ainda no solicitados podem ser agendadas em momentos de ociosidade dos discos. Dessa forma, futuras
requisies podem ser beneficiadas pela leitura antecipada dos dados.
Essa poltica pode melhorar muito o desempenho de acesso sequencial
a arquivos;
Write-through: nesta poltica, ao atender uma requisio de escrita,
uma cpia dos dados a escrever no disco mantida em cache, para
beneficiar possveis leituras futuras desses dados;
Write-back: nesta poltica, alm de copiar os dados em cache, sua
escrita efetiva no disco adiada; esta estratgia melhora o desempenho
de escrita de duas formas: por liberar mais cedo os processos que
solicitam escritas (eles no precisam esperar pela escrita real no disco)
e por concentrar as operaes de escrita, gerando menos acessos a
disco. Todavia, pode ocasionar perda de dados, caso ocorram erros de
hardware ou falta de energia antes que os dados sejam efetivamente
escritos no disco.
7.4.5
Sistemas RAID
c Carlos Maziero
293
7: Sistemas RAID
read-behind
t1
read-ahead
t2
cache
cache
t2
cache
cache
t1
dispositivo
dispositivo
write-through
t1
write-back
t2
cache
cache
t1
cache
cache
t2
dispositivo
dispositivo
c Carlos Maziero
294
7: Sistemas RAID
c Carlos Maziero
295
7: Sistemas RAID
bloco 0
bloco 1
bloco 2
bloco 3
bloco 4
bloco 5
bloco 6
bloco 7
bloco 8
bloco 9
bloco 10
bloco 11
bloco 12
bloco 13
bloco 14
bloco 15
bloco 16
bloco 17
Controladora RAID
faixa
bloco 0
bloco 1
bloco 4
bloco 5
bloco 8
bloco 9
bloco 2
bloco 3
bloco 6
bloco 7
bloco 10
bloco 11
bloco 18
bloco 19
bloco 20
bloco 21
bloco 12
bloco 13
bloco 16
bloco 17
bloco 20
bloco 21
bloco 22
bloco 23
bloco 14
bloco 15
bloco 18
bloco 19
bloco 22
bloco 23
disco lgico
c Carlos Maziero
296
bloco 0
7: Sistemas RAID
bloco 1
bloco 2
bloco 3
bloco 4
bloco 5
bloco 6
bloco 7
bloco 8
bloco 9
bloco 10
bloco 11
bloco 12
bloco 13
Controladora RAID
bloco 14
bloco 15
bloco 0
bloco 1
bloco 10
bloco 11
bloco 20
bloco 21
bloco 16
bloco 17
bloco 2
bloco 3
bloco 12
bloco 13
bloco 22
bloco 23
bloco 18
bloco 19
bloco 4
bloco 5
bloco 14
bloco 15
bloco 20
bloco 21
bloco 6
bloco 7
bloco 16
bloco 17
bloco 22
bloco 23
bloco 8
bloco 9
bloco 18
bloco 19
disco lgico
bloco 0
bloco 1
bloco 2
bloco 3
bloco 4
bloco 5
bloco 6
bloco 7
bloco 8
bloco 9
Controladora RAID
disco lgico
bloco 0
bloco 1
bloco 0
bloco 1
bloco 2
bloco 3
bloco 2
bloco 3
bloco 4
bloco 5
bloco 4
bloco 5
bloco 6
bloco 7
bloco 6
bloco 7
bloco 8
bloco 9
bloco 8
bloco 9
c Carlos Maziero
297
7: Sistemas RAID
bloco 0
bloco 1
bloco 2
bloco 3
bloco 4
bloco 5
bloco 6
bloco 7
bloco 8
bloco 9
bloco 10
bloco 11
bloco 12
bloco 13
bloco 14
bloco 15
bloco 16
bloco 17
bloco 18
bloco 19
bloco 20
bloco 21
bloco 22
bloco 23
disco lgico
Controladora RAID
byte 0
byte 3
byte 1
byte 4
byte 2
byte 5
par 0-2
par 3-5
byte 6
byte 9
byte 7
byte 10
byte 8
byte 11
par 6-8
par 9-11
byte 12
byte 15
byte 13
byte 16
byte 14
byte 17
byte 18
byte 21
byte 19
byte 22
byte 20
byte 23
byte 24
byte 27
byte 25
byte 28
byte 26
byte 29
bloco 0
bloco 1
bloco 2
bloco 3
bloco 4
bloco 5
bloco 6
bloco 7
bloco 8
bloco 9
bloco 10
bloco 11
bloco 12
bloco 13
bloco 14
bloco 15
bloco 16
bloco 17
bloco 18
bloco 19
bloco 20
bloco 21
bloco 22
bloco 23
disco lgico
Controladora RAID
bloco 0
bloco 3
bloco 1
bloco 4
bloco 2
bloco 5
par 0-2
par 3-5
bloco 6
bloco 9
bloco 7
bloco 10
bloco 8
bloco 11
par 6-8
par 9-11
bloco 12
bloco 15
bloco 13
bloco 16
bloco 14
bloco 17
bloco 18
bloco 21
bloco 19
bloco 22
bloco 20
bloco 23
c Carlos Maziero
298
7: Sistemas RAID
bloco 0
bloco 1
bloco 2
bloco 3
bloco 4
bloco 5
bloco 6
bloco 7
bloco 8
bloco 9
bloco 10
bloco 11
bloco 12
bloco 13
bloco 14
bloco 15
bloco 16
bloco 17
bloco 18
bloco 19
Controladora RAID
faixa
bloco 0
bloco 1
bloco 4
bloco 5
bloco 8
bloco 9
par (0,4,8)
par (1,5,9)
bloco 2
bloco 3
bloco 6
bloco 7
bloco 10
bloco 11
par (2,6,10)
par (3,7,11)
bloco 20
bloco 21
bloco 12
bloco 13
bloco 16
bloco 17
bloco 20
bloco 21
bloco 22
bloco 23
bloco 14
bloco 15
bloco 18
bloco 19
bloco 22
bloco 23
bloco 24
bloco 25
bloco 24
bloco 25
bloco 28
bloco 29
bloco 32
bloco 33
bloco 26
bloco 27
bloco 30
bloco 31
bloco 34
bloco 35
bloco 26
bloco 27
bloco 28
bloco 29
bloco 30
bloco 31
bloco 32
bloco 33
...
disco lgico
bloco 36
bloco 37
bloco 40
bloco 41
bloco 44
bloco 45
bloco 38
bloco 39
bloco 42
bloco 43
bloco 46
bloco 47
disco fsico 0
disco fsico 1
disco fsico 2
disco fsico 3
c Carlos Maziero
299
7.5
7: Interfaces de rede
Interfaces de rede
7.6
Dispositivos USB
7.7
Interfaces de udio
7.8
Interface grfica
7.9
Mouse e teclado
7.10
Outros tpicos
Captulo 8
Segurana de sistemas
Este mdulo trata dos principais aspectos de segurana envolvidos na construo e utilizao de um sistema operacional.
Inicialmente so apresentados conceitos bsicos de segurana e criptografia; em seguida, so descritos aspectos conceituais e mecanismos
relacionados autenticao de usurios, controle de acesso a recursos
e servios, integridade e privacidade do sistema operacional, das
aplicaes e dos dados armazenados. Grande parte dos tpicos de
segurana apresentados neste captulo no so exclusivos de sistemas
operacionais, mas se aplicam a sistemas de computao em geral.
8.1
Introduo
c Carlos Maziero
301
8: Conceitos bsicos
8.2
Conceitos bsicos
Nesta seo so apresentados alguns conceitos fundamentais, importantes para o estudo da segurana de sistemas computacionais. Em particular,
so enumeradas as propriedades que caracterizam a segurana de um sistema, so definidos os principais termos em uso na rea, e so apresentados
os principais elementos que compe a arquitetura de segurana de um
sistema.
8.2.1
c Carlos Maziero
302
Integridade : os recursos do sistema s podem ser modificados ou destrudos pelos usurios autorizados a efetuar tais operaes;
Disponibilidade : os recursos devem estar disponveis para os usurios
que tiverem direito de us-los, a qualquer momento.
Alm destas, outras propriedades importantes esto geralmente associadas segurana de um sistema:
Autenticidade : todas as entidades do sistema so autnticas ou genunas; em outras palavras, os dados associados a essas entidades so
verdadeiros e correspondem s informaes do mundo real que elas
representam, como as identidades dos usurios, a origem dos dados
de um arquivo, etc.;
Irretratabilidade : Todas as aes realizadas no sistema so conhecidas e
no podem ser escondidas ou negadas por seus autores; esta propriedade tambm conhecida como irrefutabilidade ou no-repudiao.
funo do sistema operacional garantir a manuteno das propriedades
de segurana para todos os recursos sob sua responsabilidade. Essas propriedades podem estar sujeitas a violaes decorrentes de erros de software
ou humanos, praticadas por indivduos mal-intencionados (maliciosos),
internos ou externos ao sistema.
Alm das tcnicas usuais de engenharia de software para a produo de sistemas corretos, a construo de sistemas computacionais seguros pautada por uma srie de princpios especficos, relativos tanto construo do sistema quanto ao comportamento dos
usurios e dos atacantes.
Alguns dos princpios mais relevantes,
compilados a partir de [Saltzer and Schroeder, 1975, Lichtenstein, 1997,
Pfleeger and Pfleeger, 2006], so indicados a seguir:
Privilgio mnimo : todos os usurios e programas devem operar com o
mnimo possvel de privilgios ou permisses de acesso. Dessa forma,
os danos provocados por erros ou aes maliciosas intencionais sero
minimizados.
Mediao completa : todos os acessos a recursos, tanto diretos quanto
indiretos, devem ser verificados pelos mecanismos de segurana. Eles
devem estar dispostos de forma a ser impossvel contorn-los.
c Carlos Maziero
303
c Carlos Maziero
304
8: Ameaas
8.2.2
Ameaas
c Carlos Maziero
305
8: Vulnerabilidades
8.2.3
Vulnerabilidades
c Carlos Maziero
306
8: Vulnerabilidades
Uma classe especial de vulnerabilidades decorrentes de erros de programao so os chamados estouros de buffer e de pilha (buffer/stack overflows).
Nesse erro, o programa escreve em reas de memria indevidamente, com
resultados imprevisveis, como mostra o exemplo a seguir e o resultado de
sua execuo:
#include <stdio.h>
#include <stdlib.h>
1
2
3
4
5
int main()
{
i = j = k = 0 ;
6
7
8
9
10
11
12
13
14
return(0);
15
16
c Carlos Maziero
307
8: Ataques
8.2.4
Ataques
c Carlos Maziero
308
8: Ataques
interceptao
interrupo
fonte
fonte
destino
atacante
atacante
fabricao
modificao
fonte
destino
fonte
destino
atacante
atacante
Figura
8.1:
Tipos
bsicos
[Pfleeger and Pfleeger, 2006]).
destino
de
ataques
(inspirado
em
Existem ataques passivos, que visam capturar informaes confidenciais, e ataques ativos, que visam introduzir modificaes no sistema para
beneficiar o atacante ou impedir seu uso pelos usurios vlidos. Alm disso,
os ataques a um sistema operacional podem ser locais, quando executados
por usurios vlidos do sistema, ou remotos, quando so realizados atravs
da rede, sem fazer uso de uma conta de usurio local. Um programa
especialmente construdo para explorar uma determinada vulnerabilidade
de sistema e realizar um ataque denominado exploit.
A maioria dos ataques a sistemas operacionais visa aumentar o poder
do atacante dentro do sistema, o que denominado elevao de privilgios
(privilege escalation). Esses ataques geralmente exploram vulnerabilidades
em programas do sistema (que executam com mais privilgios), ou do
prprio ncleo, atravs de chamadas de sistema, para receber os privilgios
do administrador.
Por outro lado, os ataques de negao de servios (DoS Denial of Service)
visam prejudicar a disponibilidade do sistema, impedindo que os usurios
vlidos do sistema possam utiliz-lo, ou seja, que o sistema execute suas
funes. Esse tipo de ataque muito comum em ambientes de rede, com
a inteno de impedir o acesso a servidores Web, DNS e de e-mail. Em
c Carlos Maziero
309
8: Ataques
#include <unistd.h>
2
3
4
5
6
7
int main()
{
while (1)
fork() ;
}
// lao infinito
// reproduz o processo
c Carlos Maziero
310
8.2.5
8: Malwares
Malwares
De forma anloga, um vrus biolgico precisa de uma clula hospedeira, pois usa o
material celular como suporte para sua existncia e replicao.
c Carlos Maziero
311
8: Malwares
c Carlos Maziero
312
8.2.6
8: Infraestrutura de segurana
Infraestrutura de segurana
c Carlos Maziero
313
8: Infraestrutura de segurana
A Figura 8.2 ilustra alguns dos conceitos vistos at agora. Nessa figura, as
partes indicadas em cinza e os mecanismos utilizados para implement-las
constituem a base de computao confivel do sistema.
auditoria
auditoria
evento
humanos
autenticao
sistemas
externos
usurios
dados de
auditoria
evento
processos
threads
transaes
controle
de acesso
dados de
autenticao
polticas
de controle
de acesso
autenticao
controle de acesso
Illenihild
ubitatquin
ullamscientiam
habet(Nadaduvi
daquemnadasabe
)Illenihildubi
tatquinullamsc
ientiamhabet(N
adaduvidaquemn
adasabe)Illeni
hildubitatquin
ullamscientiam
habet(Nadaduvi
arquivos
Illenihild
ubitatquin
ullamscientiam
habet(Nadaduvi
daquemnadasabe
)Illenihildubi
tatquinullamsc
ientiamhabet(N
adaduvidaquemn
adasabe)Illeni
hildubitatquin
ullamscientiam
habet(Nadaduvi
Illenihild
ubitatquin
ullamscientiam
habet(Nadaduvi
daquemnadasabe
)Illenihildubi
tatquinullamsc
ientiamhabet(N
adaduvidaquemn
adasabe)Illeni
hildubitatquin
ullamscientiam
habet(Nadaduvi
outros
sujeitos
ou
sistemas
registros
recursos
c Carlos Maziero
314
8: Fundamentos de criptografia
As linguagens de programao tambm desempenham um papel importante nesse contexto, pois muitos problemas de segurana tm origem em
erros de programao. O controle estrito de ndices em vetores, a restrio
do uso de ponteiros e a limitao de escopo de nomes para variveis e
funes so exemplos de aspectos importantes para a segurana de um
programa. Por fim, as aplicaes tambm tm responsabilidade em relao
segurana, no sentido de ter implementaes corretas e validar todos
os dados manipulados. Isso particularmente importante em aplicaes
multi-usurios (como sistemas corporativos e sistemas Web) e processos
privilegiados que recebam requisies de usurios ou da rede (servidores
de impresso, de DNS, etc.).
8.3
Fundamentos de criptografia
8.3.1
Cifragem e decifragem
c Carlos Maziero
315
mensagem aberta:
mensagem cifrada com k = 1:
mensagem cifrada com k = 2:
mensagem cifrada com k = 3:
Reunir
Sfvojs
Tgwpkt
Uhxqlu
todos
upept
vqfqu
wrgrv
os
pt
qu
rv
generais
hfofsbjt
igpgtcku
jhqhudlv
para
qbsb
rctc
sdud
o
p
q
r
ataque
bubrvf
cvcswg
dwdtxh
8.3.2
c Carlos Maziero
316
0
{ { x }k }1
k0 = x k = k
texto aberto
texto cifrado
cifrar
chave secreta
6d034072696a6e6461656c2d31
3238002000636263006d63727970
742d7368613100157290d14234f6
fce39f0908827c54cdf58890687f
7368613100ff56dfb2015aae6f33
86a6acbd051a33562699a2d97623
ca974d8cc5d986b6c48fba534eab
2eb4d39273910b72c869c54521c1
c5df85cb3a37d2aaa6f19b560ead
a9eb92c5e8e95
decifrar
chave secreta
c Carlos Maziero
317
{ { x }kp(u) }1
= x k = kv(u)
k
{ { x }kv(u) }1
= x k = kp(u)
k
Essas duas chaves esto fortemente relacionadas: para cada chave pblica
h uma nica chave privada correspondente, e vice-versa. Todavia, no
possvel calcular uma das chaves a partir da outra. Como o prprio nome
diz, geralmente as chaves pblicas so amplamente conhecidas e divulgadas
(por exemplo, em uma pgina Web ou um repositrio de chaves pblicas),
enquanto as chaves privadas correspondentes so mantidas em segredo por
seus proprietrios. Alguns algoritmos assimtricos bem conhecidos so o
RSA (Rivest-Shamir-Adleman) e o algoritmo de Diffie-Hellman. A Figura 8.4
ilustra o funcionamento da criptografia assimtrica.
texto aberto
texto aberto
texto cifrado
cifrar
chave pblica
6d034072696a6e6461656c2d31
3238002000636263006d63727970
742d7368613100157290d14234f6
fce39f0908827c54cdf58890687f
7368613100ff56dfb2015aae6f33
86a6acbd051a33562699a2d97623
ca974d8cc5d986b6c48fba534eab
2eb4d39273910b72c869c54521c1
c5df85cb3a37d2aaa6f19b560ead
a9eb92c5e8e95
decifrar
chave privada
Textos em ingls habitualmente usam os nomes Alice, Bob, Carol e Dave para explicar
algoritmos e protocolos criptogrficos, em substituio s letras A, B, C e D. Neste texto
usaremos a mesma abordagem, mas com nomes em portugus.
c Carlos Maziero
318
Alice
Ille nihil dubitat qui
nullam scientiam habet
(Nada duvida quem nada sabe)
texto aberto
3: cifrar
6d034072696a6e6461656c2d31
3238002000636263006d63727970
742d7368613100157290d14234f6
fce39f0908827c54cdf58890687f
7368613100ff56dfb2015aae6f33
86a6acbd051a33562699a2d97623
ca974d8cc5d986b6c48fba534eab
2eb4d39273910b72c869c54521c1
c5df85cb3a37d2aaa6f19b560ead
a9eb92c5e8e95
Beto
Ille nihil dubitat qui
nullam scientiam habet
(Nada duvida quem nada sabe)
texto aberto
5: decifrar
Chaveiro pblico
Alice
1: Beto divulga
sua chave pblica
c Carlos Maziero
319
8: Resumo criptogrfico
8.3.3
Resumo criptogrfico
c Carlos Maziero
320
8: Assinatura digital
maziero:~> md5sum *
62ec3f9ff87f4409925a582120a40131
0920785a312bd88668930f761de740bf
45acbba4b57317f3395c011fbd43d68d
6c332adb037265a2019077e09a024d0c
header.tex
main.pdf
main.tex
main.tex~
6
7
8
9
10
11
maziero:~> sha1sum *
742c437692369ace4bf0661a8fe5741f03ecb31a
9f9f52f48b75fd2f12fa297bdd5e1b13769a3139
d6973a71e5c30d0c05d762e9bc26bb073d377a0b
cf1670f22910da3b9abf06821e44b4ad7efb5460
8.3.4
header.tex
main.pdf
main.tex
main.tex~
Assinatura digital
c Carlos Maziero
321
8.3.5
A identificao confivel do proprietrio de uma chave pblica fundamental para o funcionamento correto das tcnicas de criptografia assimtrica e de assinatura digital. Uma chave pblica composta por uma
mera sequncia de bytes que no permite a identificao direta de seu
proprietrio. Por isso, torna-se necessria uma estrutura complementar
para fazer essa identificao. A associao entre chaves pblicas e seus
respectivos proprietrios realizada atravs dos certificados digitais. Um
certificado digital um documento digital assinado, composto das seguintes
partes [Menezes et al., 1996]:
A chave pblica do proprietrio do certificado;
c Carlos Maziero
322
Ille nihil
dubitat qui
nullam
scientiam
habet
(Nada duvida
quem
nada sabe)
Ille nihil
dubitat qui
nullam
scientiam
habet
(Nada duvida
quem
nada sabe)
d'
hash
3423a2e67ba6fc
5b432c2d9f0588
4aef7f7362a74d
hash
6fce39f0908827
ca54cdf5889068
7f734aef674d2a
6fce39f0908827
ca54cdf5889068
7f734aef674d2a
documento
assinado
por Alice
resumo
s
r'=r'' ?
r'
sim
assinatura
vlida
s'
6fce39f0908827
ca54cdf5889068
7f734aef674d2a
r''
cifrar
Alice
chave
privada
chave
pblica
decifrar
Chaveiro pblico
c Carlos Maziero
323
identificao
d s lj k l s
assinatura
29-05-2009
lsd jsfhd
dfh kds
ks
lk
d sk
f dsjh
ACs
secundrias
dfh kds
ks
f dsjh
f dsjh
k
d sk
f dsjh
d sk
f dsjh
dfh kds
ks
dfh kds
ks
d sk
dfh kds
ks
lsd jsfhd
lsd jsfhd
lsd jsfhd
dfh kds
ks
d s lj k l s
d
lk
29-05-2009
d sk
d s lj k l s
29-05-2009
lsd jsfhd
lk
d s lj k l s
29-05-2009
lk
d sk
f dsjh
lsd jsfhd
dfh kds
ks
d s lj k l s
d
lsd jsfhd
d s lj k l s
d
lk
29-05-2009
lk
29-05-2009
d s lj k l s
d
lk
29-05-2009
d sk
f dsjh
c Carlos Maziero
324
8.4
8: Autenticao
Autenticao
8.4.1
Usurios e grupos
c Carlos Maziero
325
8: Tcnicas de autenticao
8.4.2
Tcnicas de autenticao
As tcnicas usadas para a autenticao de um usurio podem ser classificadas em trs grandes grupos:
SYK Something You Know (algo que voc sabe): estas tcnicas de
autenticao so baseadas em informaes conhecidas pelo usurio,
como seu nome de login e sua senha. So consideradas tcnicas de
autenticao fracas, pois a informao necessria para a autenticao
pode ser facilmente comunicada a outras pessoas, ou mesmo roubada.
SYH Something You Have (algo que voc tem): so tcnicas que se
baseiam na posse de alguma informao mais complexa, como um
certificado digital ou uma chave criptogrfica, ou algum dispositivo
material, como um smartcard, um carto magntico, um cdigo de
barras, etc. Embora sejam mais robustas que as tcnicas SYK, estas
tcnicas tambm tm seus pontos fracos, pois dispositivos materiais,
como cartes, tambm podem ser roubados ou copiados.
SYA Something You Are (algo que voc ): se baseiam em caractersticas intrinsecamente associadas ao usurio, como seus dados biomtricos: impresso digital, padro da ris, timbre de voz, etc. So
tcnicas mais complexas de implementar, mas so potencialmente
mais robustas que as anteriores.
c Carlos Maziero
326
8: Senhas
8.4.3
Senhas
A grande maioria dos sistemas operacionais de propsito geral implementam a tcnica de autenticao SYK baseada em login/senha. Na
autenticao por senha, o usurio informa ao sistema seu identificador de
usurio (nome de login) e sua senha, que normalmente uma sequncia de
caracteres memorizada por ele. O sistema ento compara a senha informada
pelo usurio com a senha previamente registrada para ele: se ambas forem
iguais, o acesso consentido.
A autenticao por senha simples mas muito frgil, pois implica no
armazenamento das senhas em aberto no sistema, em um arquivo ou
base de dados. Caso o arquivo ou base seja exposto devido a algum erro
ou descuido, as senhas dos usurios estaro visveis. Para evitar o risco
de exposio indevida das senhas, so usadas funes unidirecionais para
armazen-las, como os resumos criptogrficos (Seo 8.3.3).
A autenticao por senhas usando um resumo criptogrfico bem
simples: ao registrar a senha s de um novo usurio, o sistema calcula seu
resumo (r = hash(s)), e o armazena. Mais tarde, quando esse usurio solicitar
sua autenticao, ele informar uma senha s0 ; o sistema ento calcular
novamente seu resumo r0 = hash(s0 ) e ir compar-lo ao resumo previamente
armazenado (r0 = r). Se ambos forem iguais, a senha informada pelo usurio
c Carlos Maziero
327
8: Senhas descartveis
8.4.4
Senhas descartveis
c Carlos Maziero
328
8: Tcnicas biomtricas
8.4.5
Tcnicas biomtricas
A biometria (biometrics) consiste em usar caractersticas fsicas ou comportamentais de um indivduo, como suas impresses digitais ou seu timbre
de voz, para identific-lo unicamente perante o sistema. Diversas caractersticas podem ser usadas para a autenticao biomtrica; no entanto, elas
devem obedecer a um conjunto de princpios bsicos [Jain et al., 2004]:
Universalidade: a caracterstica biomtrica deve estar presente em todos
os indivduos que possam vir a ser autenticados;
c Carlos Maziero
329
8: Tcnicas biomtricas
Singularidade (ou unicidade): dois indivduos quaisquer devem apresentar valores distintos para a caracterstica em questo;
Permanncia: a caracterstica no deve mudar ao longo do tempo, ou
ao menos no deve mudar de forma abrupta;
Mensurabilidade: a caracterstica em questo deve ser facilmente mensurvel em termos quantitativos.
As caractersticas biomtricas usadas em autenticao podem ser fsicas ou
comportamentais. Como caractersticas fsicas so consideradas, por exemplo,
o DNA, a geometria das mos, do rosto ou das orelhas, impresses digitais,
o padro da ris (padres na parte colorida do olho) ou da retina (padres de
vasos sanguneos no fundo do olho). Como caractersticas comportamentais
so consideradas a assinatura, o padro de voz e a dinmica de digitao
(intervalos de tempo entre teclas digitadas), por exemplo.
Os sistemas mais populares de autenticao biomtrica atualmente so
os baseados em impresses digitais e no padro de ris. Esses sistemas
so considerados confiveis, por apresentarem taxas de erro relativamente
baixas, custo de implantao/operao baixo e facilidade de coleta dos dados
biomtricos. A Figura 8.9 apresenta alguns exemplos de caractersticas
biomtricas empregadas nos sistemas atuais.
iris
retina
retina e ris
padro de voz
impresso digital
c Carlos Maziero
330
8: Desafio-resposta
sistema [Jain et al., 2004]. O sistema pode funcionar de dois modos: no modo
de autenticao, ele verifica se as caractersticas biomtricas de um indivduo
(previamente identificado por algum outro mtodo, como login/senha,
carto, etc.) correspondem s suas caractersticas biomtricas previamente
armazenadas. Desta forma, a biometria funciona como uma autenticao
complementar. No modo de identificao, o sistema biomtrico visa identificar
o indivduo a quem correspondem as caractersticas biomtricas coletadas
pelo sensor, dentre todos aqueles presentes no banco de dados. A Figura
8.10 mostra os principais elementos de um sistema biomtrico tpico.
dados
biomtricos
sensor
dados
biomtricos
sistema biomtrico
extrator de
caractersticas
coleta/registro
caractersticas
relevantes
humanos
senha
carto
etc.
autenticador
identidade
comparador
usurios
cadastrados
base de
dados
8.4.6
Desafio-resposta
c Carlos Maziero
331
8: Certificados de autenticao
Servidor
solicita acesso
desao(d)
senha s'
dene d
aleatrio
r=hash(s||d)
resposta(r)
aceito/recusado
r'=hash(s'||d)
aceito se r'=r
(implica s'=s)
8.4.7
Certificados de autenticao
c Carlos Maziero
332
8: Kerberos
8.4.8
Kerberos
c Carlos Maziero
333
8: Kerberos
client
3
Authentication
Service
Ticket
Granting
Service
T1
T2
6
T2
users/keys
database
server
c Carlos Maziero
334
8: Kerberos
m1 = [c tgs ts n1 ]
2. A resposta do AS (mensagem m2 ) contm duas partes: a primeira
parte contm a chave de sesso a ser usada na comunicao com o
TGS (kctgs ) e o nmero aleatrio n1 , ambos cifrados com a chave do
cliente kc registrada no AS; a segunda parte um ticket cifrado com a
chave do TGS (ktgs ), contendo a identidade do cliente (c), o prazo de
validade do ticket concedido pelo AS (tv) e uma chave de sesso kctgs ,
a ser usada na interao com o TGS:
m2 = [{kctgs n1 }kc Tctgs ]
c Carlos Maziero
335
8: Infra-estruturas de autenticao
8.4.9
Infra-estruturas de autenticao
c Carlos Maziero
336
8: Infra-estruturas de autenticao
Para resolver esse problema, foram propostas infra-estruturas de autenticao (authentication frameworks) que unificam as tcnicas de autenticao,
oferecem uma interface de programao homognea e usam as mesmas
informaes (pares login/senha, dados biomtricos, certificados, etc.). Assim,
as informaes de autenticao so coerentes entre os diversos servios,
novas tcnicas de autenticao podem ser automaticamente usadas por
todos os servios e, sobretudo, a criao de novos servios simplificada.
A viso genrica de uma infra-estrutura de autenticao apresentada
na Figura 8.13. Nela, os vrios mecanismos disponveis de autenticao
so oferecidos s aplicaes atravs de uma interface de programao (API)
padronizada. As principais infra-estruturas de autenticao em uso nos
sistemas operacionais atuais so:
PAM (Pluggable Authentication Modules): proposto inicialmente para o
sistema Solaris, foi depois adotado em vrios outros sistema UNIX,
como FreeBSD, NetBSD, MacOS X e Linux;
XSSO (X/Open Single Sign-On): uma tentativa de extenso e padronizao
do sistema PAM, ainda pouco utilizada;
BSD Auth : usada no sistema operacional OpenBSD; cada mtodo de
autenticao implementado como um processo separado, respeitando
o princpio do privilgio mnimo (vide Seo 8.5.1);
NSS (Name Services Switch): infra-estrutura usada em sistemas UNIX para
definir as bases de dados a usar para vrios servios do sistema
operacional, inclusive a autenticao;
GSSAPI (Generic Security Services API): padro de API para acesso a servios
de segurana, como autenticao, confidencialidade e integridade de
dados;
SSPI (Security Support Provider Interface): variante proprietria da GSSAPI,
especfica para plataformas Windows.
c Carlos Maziero
337
8: Controle de acesso
...
endereo IP
biometria
certificados
login/senha
API padronizada
8.5
Controle de acesso
c Carlos Maziero
338
8.5.1
c Carlos Maziero
339
c Carlos Maziero
340
8.5.2
8: Polticas discricionrias
Polticas discricionrias
c Carlos Maziero
341
Alice
Beto
8: Polticas discricionrias
f ile1
read
write
remove
read
write
Carol
Davi
read
f ile2
read
write
program1
execute
read
write
remove
read
read
execute
append
read
socket1
write
read
write
read
append
si S, o j O, Mi j A
c Carlos Maziero
342
Alice
Beto
8: Polticas discricionrias
f ile1
read
write
remove
owner
read
write
Carol
Davi
read
f ile2
read
write
program1
execute
read
write
remove
owner
read
read
owner
execute
write
read
socket1
write
read
write
read
write
owner
c Carlos Maziero
343
8: Polticas discricionrias
Sujeito
Alice
Alice
Alice
Alice
Alice
Alice
Alice
Alice
Beto
Beto
Beto
Beto
Beto
Beto
Beto
Beto
Carol
Carol
Carol
Carol
Davi
Davi
Davi
Davi
Davi
Davi
Objeto
f ile1
f ile1
f ile1
f ile1
f ile2
f ile2
program1
socket1
f ile1
f ile1
f ile2
f ile2
f ile2
f ile2
program1
socket1
f ile2
program1
socket1
socket1
f ile1
f ile2
program1
socket1
socket1
socket1
Ao
read
write
remove
owner
read
write
execute
write
read
write
read
write
remove
owner
read
owner
read
execute
read
write
read
write
read
read
write
owner
c Carlos Maziero
344
8: Polticas discricionrias
c Carlos Maziero
345
8: Polticas obrigatrias
8.5.3
Polticas obrigatrias
Nas polticas obrigatrias (MAC - Mandatory Access Control) o controle de acesso definido por regras globais incontornveis, que
no dependem das identidades dos sujeitos e objetos nem da vontade de seus proprietrios ou mesmo do administrador do sistema
[Samarati and De Capitani di Vimercati, 2001]. Essas regras so normalmente baseadas em atributos dos sujeitos e/ou dos objetos, como mostram
estes exemplos bancrios (fictcios):
c Carlos Maziero
346
8: Polticas obrigatrias
c Carlos Maziero
347
8: Polticas obrigatrias
c Carlos Maziero
348
8: Polticas obrigatrias
c Carlos Maziero
349
8.5.4
/* type definitions
type unix_t,
/*
specs_t,
/*
budget_t,
/*
rates_t;
/*
*/
normal UNIX files, programs, etc. */
engineering specifications */
budget projections */
labor rates */
c Carlos Maziero
350
8
9
10
11
12
13
14
15
/* domain definitions */
domain engineer_d = DEFAULT, (rwd->specs_t);
domain project_d = DEFAULT, (rwd->budget_t), (rd->rates_t);
domain accounting_d = DEFAULT, (rd->budget_t), (rwd->rates_t);
domain system_d = (/etc/init), (rwxd->unix_t), (auto->login_d);
domain login_d
= (/bin/login), (rwxd->unix_t),
(exec-> engineer_d, project_d, accounting_d);
16
17
18
19
20
21
22
23
/* assign
assign -r
assign -r
assign -r
assign -r
acessos
system_d
transies
*_t tipos
init
*_d domnios
pontos de entrada
login_d
accounting_d
engineer_d
sh
sh
login
edit
csh
rwxd
rwxd
Illenihild
ubitatquin
ullamscientiam
habet(Nadaduvi
daquemnadasabe
)Illenihildubi
tatquinullamsc
ientiamhabet(N
adaduvidaquemn
adasabe)Illeni
hildubitatquin
ullamscientiam
habet(Nadaduvi
Illenihild
ubitatquin
ullamscientiam
habet(Nadaduvi
daquemnadasabe
)Illenihildubi
tatquinullamsc
ientiamhabet(N
adaduvidaquemn
adasabe)Illeni
hildubitatquin
ullamscientiam
habet(Nadaduvi
unix_t
Illenihild
ubitatquin
ullamscientiam
habet(Nadaduvi
daquemnadasabe
)Illenihildubi
tatquinullamsc
ientiamhabet(N
adaduvidaquemn
adasabe)Illeni
hildubitatquin
ullamscientiam
habet(Nadaduvi
r-x
csh
rd
Illenihild
ubitatquin
ullamscientiam
habet(Nadaduvi
daquemnadasabe
)Illenihildubi
tatquinullamsc
ientiamhabet(N
adaduvidaquemn
adasabe)Illeni
hildubitatquin
ullamscientiam
habet(Nadaduvi
cad
Illenihild
ubitatquin
ullamscientiam
habet(Nadaduvi
daquemnadasabe
)Illenihildubi
tatquinullamsc
ientiamhabet(N
adaduvidaquemn
adasabe)Illeni
hildubitatquin
ullamscientiam
habet(Nadaduvi
budget_t
r-x
rxd
Illenihild
ubitatquin
ullamscientiam
habet(Nadaduvi
daquemnadasabe
)Illenihildubi
tatquinullamsc
ientiamhabet(N
adaduvidaquemn
adasabe)Illeni
hildubitatquin
ullamscientiam
habet(Nadaduvi
rwd
Illenihild
ubitatquin
ullamscientiam
habet(Nadaduvi
daquemnadasabe
)Illenihildubi
tatquinullamsc
ientiamhabet(N
adaduvidaquemn
adasabe)Illeni
hildubitatquin
ullamscientiam
habet(Nadaduvi
Illenihild
ubitatquin
ullamscientiam
habet(Nadaduvi
daquemnadasabe
)Illenihildubi
tatquinullamsc
ientiamhabet(N
adaduvidaquemn
adasabe)Illeni
hildubitatquin
ullamscientiam
habet(Nadaduvi
Illenihild
ubitatquin
ullamscientiam
habet(Nadaduvi
daquemnadasabe
)Illenihildubi
tatquinullamsc
ientiamhabet(N
adaduvidaquemn
adasabe)Illeni
hildubitatquin
ullamscientiam
habet(Nadaduvi
specs_t
c Carlos Maziero
351
[Badger et al., 1995, Cowan et al., 2000] propem o uso de tipagem implcita: todos os objetos que satisfazem um certo critrio (como por exemplo ter
como caminho /usr/local/*) so automaticamente classificados em um
dado tipo. Da mesma forma, os domnios podem ser definidos pelos nomes
dos programas executveis que os sujeitos executam (como /usr/bin/httpd
e /usr/lib/httpd/plugin/* para o domnio do servidor Web). Alm disso,
ambos os autores propem linguagens para a definio dos domnios e tipos
e para a descrio das polticas de controle de acesso.
8.5.5
Um dos principais problemas de segurana em um sistema computacional a administrao correta das polticas de controle de acesso. As
polticas MAC so geralmente consideradas pouco flexveis e por isso as
polticas DAC acabam sendo muito mais usadas. Todavia, gerenciar as
autorizaes medida em que usurios mudam de cargo e assumem novas
responsabilidades, novos usurios entram na empresa e outros saem pode
ser uma tarefa muito complexa e sujeita a erros.
Esse problema pode ser reduzido atravs do controle de acesso baseado em
papis (RBAC - Role-Based Access Control) [Sandhu et al., 1996]. Uma poltica
RBAC define um conjunto de papis no sistema, como diretor, gerente,
suporte, programador, etc. e atribui a cada papel um conjunto de
autorizaes. Essas autorizaes podem ser atribudas aos papis de forma
discricionria ou obrigatria.
Para cada usurio do sistema definido um conjunto de papis que
este pode assumir. Durante sua sesso no sistema (geralmente no incio),
o usurio escolhe os papis que deseja ativar e recebe as autorizaes
correspondentes, vlidas at este desativar os papis correspondentes ou
encerrar sua sesso. Assim, um usurio autorizado pode ativar os papis
de professor ou de aluno dependendo do que deseja fazer no sistema.
Os papis permitem desacoplar os usurios das permisses. Por isso,
um conjunto de papis definido adequadamente bastante estvel, restando
gerncia apenas atribuir a cada usurio os papis a que este tem direito. A
Figura 8.15 apresenta os principais componentes de uma poltica RBAC.
Existem vrios modelos para a implementao de polticas baseadas em
papis, como os apresentados em [Sandhu et al., 1996]. Por exemplo, no
modelo RBAC hierrquico os papis so classificados em uma hierarquia, na
qual os papis superiores herdam as permisses dos papis inferiores. No
c Carlos Maziero
352
Illenihild
ubitatquin
ullamscientiam
habet(Nadaduvi
daquemnadasabe
)Illenihildubi
tatquinullamsc
ientiamhabet(N
adaduvidaquemn
adasabe)Illeni
hildubitatquin
ullamscientiam
habet(Nadaduvi
professor
diretor
aluno
Illenihild
ubitatquin
ullamscientiam
habet(Nadaduvi
daquemnadasabe
)Illenihildubi
tatquinullamsc
ientiamhabet(N
adaduvidaquemn
adasabe)Illeni
hildubitatquin
ullamscientiam
habet(Nadaduvi
arquivos
Illenihild
ubitatquin
ullamscientiam
habet(Nadaduvi
daquemnadasabe
)Illenihildubi
tatquinullamsc
ientiamhabet(N
adaduvidaquemn
adasabe)Illeni
hildubitatquin
ullamscientiam
habet(Nadaduvi
outros
sujeitos
ou
sistemas
suporte
registros
usurios
ativaes
papis
permisses
objetos
8.5.6
c Carlos Maziero
353
Infra-estrutura bsica
A arquitetura bsica de uma infra-estrutura de controle de acesso tpica
composta pelos seguintes elementos (Figura 8.16):
Bases de sujeitos e objetos (User/Object Bases): relao dos sujeitos e objetos que compem o sistema, com seus respectivos atributos;
Base de polticas (Policy Base): base de dados contendo as regras que
definem como e quando os objetos podem ser acessados pelos sujeitos,
ou como/quando os sujeitos podem interagir entre si;
Monitor de referncias (Reference monitor): elemento que julga a pertinncia de cada pedido de acesso. Com base em atributos do sujeito e do
objeto (como suas respectivas identidades), nas regras da base de polticas e possivelmente em informaes externas (como horrio, carga
do sistema, etc.), o monitor decide se um acesso deve ser permitido
ou negado;
Mediador (impositor ou Enforcer): elemento que medeia a interao entre
sujeitos e objetos; a cada pedido de acesso a um objeto, o mediador
consulta o monitor de referncias e permite/nega o acesso, conforme a
deciso deste ltimo.
importante observar que os elementos dessa estrutura so componentes
lgicos, que no impem uma forma de implementao rgida. Por exemplo,
em um sistema operacional convencional, o sistema de arquivos possui
sua prpria estrutura de controle de acesso, com permisses de acesso
armazenadas nos prprios arquivos, e um pequeno monitor/mediador
associado a algumas chamadas de sistema, como open e mmap. Outros
recursos (como reas de memria ou semforos) possuem suas prprias
regras e estruturas de controle de acesso, organizadas de forma diversa.
Controle de acesso em UNIX
Os sistemas operacionais do mundo UNIX implementam um sistema
de ACLs bsico bastante rudimentar, no qual existem apenas trs sujeitos:
user (o dono do recurso), group (um grupo de usurios ao qual o recurso
est associado) e others (todos os demais usurios do sistema). Para cada
objeto existem trs possibilidades de acesso: read, write e execute, cuja
c Carlos Maziero
354
sujeitos
objetos
permite
acessos
mediador
aes
Illenihild
ubitatquin
ullamscientiam
habet(Nadaduvi
daquemnadasabe
)Illenihildubi
tatquinullamsc
ientiamhabet(N
adaduvidaquemn
adasabe)Illeni
hildubitatquin
ullamscientiam
habet(Nadaduvi
outros
sujeitos
ou
sistemas
nega
processos
threads
transaes
informaes externas
(horrio, etc)
base de
sujeitos
sujeito,
objeto,
ao
arquivos
deciso
monitor de
referncias
base de
polticas
eventos
para os registros
de auditoria
base de
objetos
c Carlos Maziero
355
tamanho em bytes
data/hora da ltima modificao
nome
c Carlos Maziero
356
host:~> ll
-rw-r--r-- 1 maziero prof 2450791 2009-06-18 10:47 main.pdf
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
c Carlos Maziero
357
c Carlos Maziero
358
usurio
sujeito
logon
Local
Security
Authority
Subsystem
processo
ou
thread
solicitao
de acesso
Security
Reference
Monitor
Illenihild
ubitatquin
ullamscientiam
habet(Nadaduvi
daquemnadasabe
)Illenihildubi
tatquinullamsc
ientiamhabet(N
adaduvidaquemn
adasabe)Illeni
hildubitatquin
ullamscientiam
habet(Nadaduvi
acesso
autorizado
AT
eventos
registros
de
auditoria
access
token
Token ID
Owner SID
Group1 SID
Group2 SID
...
Flags
Privileges
...
SD
eventos
registros
de
auditoria
security
descriptor
Revision number
Owner SID
Group SID
Flags
DACL
ACE
ACE
ACE
ACE
...
SACL
ACE
ACE
ACE
ACE
...
c Carlos Maziero
359
c Carlos Maziero
360
8: Mudana de privilgios
8.5.7
Mudana de privilgios
c Carlos Maziero
361
8: Mudana de privilgios
c Carlos Maziero
362
8: Mudana de privilgios
arquivo executvel
processo filho
Illenihild
ubitatquin
ullamscientiam
habet(Nadaduvi
daquemnadasabe
)Illenihildubi
tatquinullamsc
ientiamhabet(N
adaduvidaquemn
adasabe)Illeni
hildubitatquin
ullamscientiam
habet(Nadaduvi
Illenihild
ubitatquin
ullamscientiam
habet(Nadaduvi
daquemnadasabe
)Illenihildubi
tatquinullamsc
ientiamhabet(N
adaduvidaquemn
adasabe)Illeni
hildubitatquin
ullamscientiam
habet(Nadaduvi
Illenihild
ubitatquin
ullamscientiam
habet(Nadaduvi
daquemnadasabe
)Illenihildubi
tatquinullamsc
ientiamhabet(N
adaduvidaquemn
adasabe)Illeni
hildubitatquin
ullamscientiam
habet(Nadaduvi
c Carlos Maziero
363
8: Mudana de privilgios
c Carlos Maziero
364
8: Auditoria
8.6
Auditoria
8.6.1
Coleta de dados
c Carlos Maziero
365
8: Coleta de dados
c Carlos Maziero
366
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
...
Sep
Sep
Sep
Sep
Sep
Sep
Sep
Sep
Sep
Sep
Sep
Sep
Sep
Sep
Sep
Sep
Sep
Sep
Sep
Sep
Sep
Sep
...
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
8
23:02:09
23:19:57
23:34:14
23:57:16
00:08:16
00:35:24
00:42:19
00:49:06
00:53:40
00:53:55
01:08:43
01:12:41
01:12:41
01:12:41
01:38:26
02:18:29
02:18:29
02:18:29
09:06:33
06:06:34
06:06:34
06:06:57
espec
espec
espec
espec
espec
espec
espec
espec
espec
espec
espec
espec
espec
espec
espec
espec
espec
espec
espec
espec
espec
espec
8: Coleta de dados
Processo que executa em segundo plano, sem estar associado a uma interface com o
usurio, como um terminal ou janela.
c Carlos Maziero
367
8: Coleta de dados
terminal
servio
de e-mail
servio
SSH
servio de
autenticao
syslogd
rede
eventos
kernel
logger
servio de
impresso
eventos do
ncleo
ncleo
root:~>
syslog: system reboot
syslog:
shutdown now
terminal
logfiles
Illenihild
ubitatquin
Illenihild
ullamscientiam
ubitatquin
habet(Nadaduvi
Illenihild
ullamscientiam
daquemnadasabe
ubitatquin
habet(Nadaduvi
)Illenihildubi
ullamscientiam
daquemnadasabe
tatquinullamsc
habet(Nadaduvi
)Illenihildubi
ientiamhabet(N
daquemnadasabe
tatquinullamsc
adaduvidaquemn
)Illenihildubi
ientiamhabet(N
adasabe)Illeni
tatquinullamsc
adaduvidaquemn
hildubitatquin
ientiamhabet(N
adasabe)Illeni
ullamscientiam
adaduvidaquemn
hildubitatquin
habet(Nadaduvi
adasabe)Illeni
ullamscientiam
hildubitatquin
habet(Nadaduvi
ullamscientiam
habet(Nadaduvi
syslogd
c Carlos Maziero
368
8.6.2
8: Anlise de dados
Anlise de dados
Uma vez registrada a ocorrncia de um evento de interesse para a segurana do sistema, deve-se proceder sua anlise. O objetivo dessa anlise
sobretudo identificar possveis violaes da segurana em andamento ou j
ocorridas. Essa anlise pode ser feita sobre os registros dos eventos medida
em que so gerados (chamada anlise online) ou sobre registros previamente
armazenados (anlise offline). A anlise online visa detectar problemas de
segurana com rapidez, para evitar que comprometam o sistema. Como
essa anlise deve ser feita simultaneamente ao funcionamento do sistema,
importante que seja rpida e leve, para no prejudicar o desempenho do
sistema nem interferir nas operaes em andamento. Um exemplo tpico de
anlise online so os anti-vrus, que analisam os arquivos medida em que
estes so acessados pelos usurios.
Por sua vez, a anlise offline realizada com dados previamente coletados,
possivelmente de vrios sistemas. Como no tem compromisso com uma
resposta imediata, pode ser mais profunda e detalhada, permitindo o uso de
tcnicas de minerao de dados para buscar correlaes entre os registros,
que possam levar descoberta de problemas de segurana mais sutis. A
anlise offline usada em sistemas de deteco de intruso, por exemplo,
para analisar a histria do comportamento de cada usurio. Alm disso,
frequentemente usada em sistemas de informao bancrios, para se analisar
o padro de uso dos cartes de dbito e crdito dos correntista e identificar
fraudes.
As ferramentas de anlise de registros de segurana podem adotar
basicamente duas abordagens: anlise por assinaturas ou anlise por
anomalias. Na anlise por assinaturas, a ferramenta tem acesso a uma base de
dados contendo informaes sobre os problemas de segurana conhecidos
que deve procurar. Se algum evento ou registro se encaixar nos padres
descritos nessa base, ele considerado uma violao de segurana. Um
exemplo clssico dessa abordagem so os programas anti-vrus: um antivrus tpico varre o sistema de arquivos em busca de contedos maliciosos.
O contedo de cada arquivo verificado junto a uma base de assinaturas,
que contm descries detalhadas dos vrus conhecidos pelo software; se
o contedo de um arquivo coincidir com uma assinatura da base, aquele
arquivo considerado suspeito. Um problema com essa forma de anlise
sua incapacidade de detectar novas ameaas, como vrus desconhecidos,
cuja assinatura no esteja na base.
c Carlos Maziero
369
8: Auditoria preventiva
Por outro lado, uma ferramenta de anlise por anomalias conta com
uma base de dados descrevendo o que se espera como comportamento ou
contedo normal do sistema. Eventos ou registros que no se encaixarem
nesses padres de normalidade so considerados como violaes potenciais
da segurana, sendo reportados ao administrador do sistema. A anlise
por anomalias, tambm chamada de anlise baseada em heursticas,
utilizada em certos tipos de anti-vrus e sistemas de deteco de intruso,
para detectar vrus ou ataques ainda desconhecidos. Tambm muito usada
em sistemas de informao bancrios, para detectar fraudes envolvendo o
uso das contas e cartes bancrios. O maior problema com esta tcnica
caracterizar corretamente o que se espera como comportamento normal,
o que pode ocasionar muitos erros.
8.6.3
Auditoria preventiva
c Carlos Maziero
370
8: Auditoria preventiva
Captulo 9
Virtualizao de sistemas
As tecnologias de virtualizao do ambiente de execuo de aplicaes ou de plataformas de hardware tm sido objeto da ateno
crescente de pesquisadores, fabricantes de hardware/software, administradores de sistemas e usurios avanados. Os recentes avanos
nessa rea permitem usar mquinas virtuais com os mais diversos
objetivos, como a segurana, a compatibilidade de aplicaes legadas
ou a consolidao de servidores. Este captulo apresenta os principais
conceitos, arquiteturas e implementaes de ambientes virtuais de
execuo, como mquinas virtuais, emuladores e contineres.
9.1
Conceitos bsicos
c Carlos Maziero
372
9.1.1
9: Um breve histrico
Um breve histrico
c Carlos Maziero
373
9.1.2
9: Interfaces de sistema
Interfaces de sistema
Uma mquina real formada por vrios componentes fsicos que fornecem operaes para o sistema operacional e suas aplicaes. Iniciando pelo
ncleo do sistema real, o processador central (CPU) e o chipset da placa-me
fornecem um conjunto de instrues e outros elementos fundamentais para
o processamento de dados, alocao de memria e processamento de entrada/sada. Os sistemas de computadores so projetados com basicamente
trs componentes: hardware, sistema operacional e aplicaes. O papel do
hardware executar as operaes solicitadas pelas aplicaes atravs do
sistema operacional. O sistema operacional recebe as solicitaes das operaes (por meio das chamadas de sistema) e controla o acesso ao hardware
principalmente nos casos em que os componentes so compartilhados,
como o sistema de memria e os dispositivos de entrada/sada.
Os sistemas de computao convencionais so caracterizados por nveis
de abstrao crescentes e interfaces bem definidas entre eles. As abstraes
oferecidas pelo sistema s aplicaes so construdas de forma incremental,
em nveis separados por interfaces bem definidas e relativamente padronizadas. Cada interface encapsula as abstraes dos nveis inferiores, permitindo
assim o desenvolvimento independente dos vrios nveis, o que simplifica
a construo e evoluo dos sistemas. As interfaces existentes entre os
componentes de um sistema de computao tpico so:
Conjunto de instrues (ISA Instruction Set Architecture): a interface
bsica entre o hardware e o software, sendo constituda pelas instrues
em cdigo de mquina aceitas pelo processador e todas as operaes
de acesso aos recursos do hardware (acesso fsico memria, s portas
de entrada/sada, ao relgio do sistema, etc.). Essa interface dividida
em duas partes:
Instrues de usurio (User ISA): compreende as instrues do
processador e demais itens de hardware acessveis aos programas
do usurio, que executam com o processador operando em modo
no-privilegiado;
Instrues de sistema (System ISA): compreende as instrues do
processador e demais itens de hardware, unicamente acessveis
ao ncleo do sistema operacional, que executa em modo privilegiado;
c Carlos Maziero
374
chamadas de biblioteca
chamadas de sistema
system ISA
ncleo do SO
user ISA
hardware
9.1.3
Para que programas e bibliotecas possam executar sobre uma determinada plataforma, necessrio que tenham sido compilados para ela,
respeitando o conjunto de instrues do processador em modo usurio
(User ISA) e o conjunto de chamadas de sistema oferecido pelo sistema
operacional. A viso conjunta dessas duas interfaces (User ISA + syscalls)
denominada Interface Binria de Aplicao (ABI Application Binary Interface).
c Carlos Maziero
375
aplicaes de usurio
bibliotecas
bibliotecas
ABI
ncleo do SO
ncleo do SO
ISA
hardware
hardware
Figura 9.2: Interfaces de sistema ISA e ABI [Smith and Nair, 2004].
Nos sistemas computacionais de mercado atuais, as interfaces de baixo
nvel ISA e ABI so normalmente fixas, ou pouco flexveis. Geralmente
no possvel criar novas instrues de processador ou novas chamadas
de sistema operacional, ou mesmo mudar sua semntica para atender s
necessidades especficas de uma determinada aplicao. Mesmo se isso
fosse possvel, teria de ser feito com cautela, para no comprometer o
funcionamento de outras aplicaes.
Os sistemas operacionais, assim como as aplicaes, so projetados para
aproveitar o mximo dos recursos que o hardware fornece. Normalmente
os projetistas de hardware, sistema operacional e aplicaes trabalham de
forma independente (em empresas e tempos diferentes). Por isso, esses
trabalhos independentes geraram, ao longo dos anos, vrias plataformas
computacionais diferentes e incompatveis entre si.
Observa-se ento que, embora a definio de interfaces seja til, por
facilitar o desenvolvimento independente dos vrios componentes do sistema, torna pouco flexveis as interaes entre eles: um sistema operacional
s funciona sobre o hardware (ISA) para o qual foi construdo, uma biblioteca s funciona sobre a ABI para a qual foi projetada e uma aplicao
tem de obedecer a ABIs/APIs pr-definidas. A Figura 9.3, extrada de
[Smith and Nair, 2004], ilustra esses problemas de compatibilidade entre
interfaces.
A baixa flexibilidade na interao entre as interfaces dos componentes
de um sistema computacional traz vrios problemas [Smith and Nair, 2004]:
c Carlos Maziero
376
Aplics Solaris
Aplics Windows
Aplics Linux
Solaris
Windows
Linux
Sparc
x86
Aplics Windows
Windows
x86
Aplics Windows
Problemas!
Linux
Sparc
Figura 9.3:
Problemas
[Smith and Nair, 2004].
x86
de
compatibilidade
entre
interfaces
c Carlos Maziero
377
9.1.4
9: Virtualizao de interfaces
Virtualizao de interfaces
c Carlos Maziero
378
sistema
convidado
monitor
sistema
hospedeiro
9: Virtualizao de interfaces
Aplics Windows
Aplics Windows
Windows
Windows
camada de
virtualizao
Sparc
x86
Mquina
Virtual
c Carlos Maziero
379
Aplicaes
SO
Aplicaes
Aplicaes
Aplics
hipervisor
OS 1
Aplics
OS 2
SO
hipervisor
hv
SO
Sparc 1
hardware
hardware 2
hardware 2
emulao
de hardware
emulao do SO
otimizao dinmica
hipervisor
hardware 2
replicao
de hardware
9.1.5
c Carlos Maziero
380
open
write
close
read
abstrao
de arquivo
diretrios,
permisses
Alocao de arquivos
estratgias de
alocao de arquivos
buering, caching,
escalonamento de disco
Controle de E/S
Operaes de E/S
tratamento de interrupes
dispositivos fsicos
e controladores
dispositivos
virtuais
camada de virtualizao
sparc
disco'
disco''
camada de virtualizao
dispositivos
reais
disco real
c Carlos Maziero
381
aplicaes
SO convid
SO convid
arquivos
discos
virtuais
Sist Operacional
disco
Hipervisor
disco real
9.2
c Carlos Maziero
382
9.2.1
9: Definio formal
Definio formal
c Carlos Maziero
383
9: Definio formal
processador real devem ser interpretadas pelo hipervisor e traduzidas em aes equivalentes no processador real. Instrues simples,
que no afetem outras mquinas virtuais ou aplicaes, podem ser
executadas diretamente no processador real.
Alm dessas trs propriedades bsicas, as propriedades derivadas a seguir so frequentemente associadas a hipervisores
[Popek and Goldberg, 1974, Rosenblum, 2004]:
Isolamento: aplicaes dentro de uma mquina virtual no podem interagir
diretamente (a) com outras mquinas virtuais, (b) com o hipervisor,
ou (c) com o sistema real hospedeiro. Todas as interaes entre
entidades dentro de uma mquina virtual e o mundo exterior devem
ser mediadas pelo hipervisor.
Recursividade: alguns sistemas de mquinas virtuais exibem tambm esta
propriedade: deve ser possvel executar um hipervisor dentro de uma
mquina virtual, produzindo um novo nvel de mquinas virtuais.
Neste caso, a mquina real normalmente denominada mquina de
nvel 0.
Inspeo: o hipervisor tem acesso e controle sobre todas as informaes do
estado interno da mquina virtual, como registradores do processador,
contedo de memria, eventos etc.
Essas propriedades bsicas caracterizam um hipervisor ideal, que nem
sempre pode ser construdo sobre as plataformas de hardware existentes.
A possibilidade de construo de um hipervisor em uma determinada
plataforma definida atravs do seguinte teorema, enunciado e provado
por Popek e Goldberg em [Popek and Goldberg, 1974]:
Para qualquer computador convencional de terceira gerao, um hipervisor pode ser construdo se o conjunto de instrues sensveis
daquele computador for um sub-conjunto de seu conjunto de instrues
privilegiadas.
Para compreender melhor as implicaes desse teorema, necessrio
definir claramente os seguintes conceitos:
c Carlos Maziero
384
9: Definio formal
Computador convencional de terceira gerao: qualquer sistema de computao convencional seguindo a arquitetura de Von Neumann, que
suporte memria virtual e dois modos de operao do processador:
modo usurio e modo privilegiado.
Instrues sensveis: so aquelas que podem consultar ou alterar o
status do processador, ou seja, os registradores que armazenam o
status atual da execuo na mquina real;
Instrues privilegiadas: so acessveis somente por meio de cdigos
executando em nvel privilegiado (cdigo de ncleo). Caso um
cdigo no-privilegiado tente executar uma instruo privilegiada,
uma exceo (interrupo) deve ser gerada, ativando uma rotina de
tratamento previamente especificada pelo ncleo do sistema real.
De acordo com esse teorema, toda instruo sensvel deve ser tambm
privilegiada. Assim, quando uma instruo sensvel for executada por
um programa no-privilegiado (um ncleo convidado ou uma aplicao
convidada), provocar a ocorrncia de uma interrupo. Essa interrupo
pode ser usada para ativar uma rotina de interpretao dentro do hipervisor,
que ir simular o efeito da instruo sensvel (ou seja, interpret-la), de
acordo com o contexto onde sua execuo foi solicitada (mquina virtual ou
hipervisor). Obviamente, quanto maior o nmero de instrues sensveis,
maior o volume de interpretao de cdigo a realizar, e menor o desempenho
da mquina virtual.
No caso de processadores que no atendam as restries de Popek/Goldberg, podem existir instrues sensveis que executem sem gerar
interrupes, o que impede o hipervisor de intercept-las e interpret-las.
Uma soluo possvel para esse problema a traduo dinmica das instrues
sensveis presentes nos programas de usurio: ao carregar um programa na
memria, o hipervisor analisa seu cdigo e substitui essas instrues sensveis por chamadas a rotinas que as interpretam dentro do hipervisor. Isso
implica em um tempo maior para o lanamento de programas, mas torna
possvel a virtualizao. Outra tcnica possvel para resolver o problema
a para-virtualizao, que se baseia em reescrever parte do sistema convidado
para no usar essas instrues sensveis. Ambas as tcnicas so discutidas a
seguir.
c Carlos Maziero
385
9.2.2
9: Suporte de hardware
Suporte de hardware
c Carlos Maziero
386
9: Suporte de hardware
virtualizao com
modelo 0/1/3
virtualizao com
modelo 0/2/3
aplicaes
aplicaes
3 aplicaes
no usado
no usado
2 ncleo convidado
no usado
ncleo convidado
no usado
ncleo do SO
hipervisor
hipervisor
c Carlos Maziero
387
9: Suporte de hardware
aplicaes
aplicaes
2 no usado
3 aplicaes
2 no usado
1 no usado
2 no usado
1 no usado
0 ncleo convidado
1 no usado
0 ncleo convidado
3
no usado
no usado
no usado
hipervisor
VM entry
VM exit
modo root
ncleo convidado
modo non-root
c Carlos Maziero
388
9: Formas de virtualizao
9.2.3
Formas de virtualizao
c Carlos Maziero
389
9: Formas de virtualizao
c Carlos Maziero
390
9.3
c Carlos Maziero
391
Aplics Solaris
Espao de
usurio
Espao de
usurio
Aplic
Java
Aplics Linux
Espao de
usurio
Aplics Linux
JVM
Aplics Windows
Aplics Linux
ncleo Linux ncleo Windows
ncleo Solaris
ncleo Linux
hipervisor
hardware Sparc
hardware x86
hardware x86
VM de processo
VM de sistema
operacional
VM de sistema
(hardware)
9.3.1
c Carlos Maziero
392
c Carlos Maziero
393
c Carlos Maziero
394
Aplicao
Windows
Chamadas de
sistema Windows
Wine
Chamadas de
sistema UNIX
Linux
Instrues Intel
PC Intel
9.3.2
c Carlos Maziero
395
c Carlos Maziero
396
domain 1
domain 2
domain 3
host OS kernel
hardware
c Carlos Maziero
397
postx
etc
lib
var
etc
lib
var
c Carlos Maziero
398
9.3.3
c Carlos Maziero
399
buscava fornecer a cada usurio uma mquina virtual com seus recursos
virtuais prprios, sobre a qual o usurio executava um sistema operacional
mono-tarefa e suas aplicaes. Assim, o compartilhamento de recursos no
era responsabilidade do sistema operacional convidado, mas do hipervisor
subjacente. No entanto, ao longo dos anos 70, como o desenvolvimento de
sistemas operacionais multi-tarefas eficientes e robustos como MULTICS
e UNIX, as mquinas virtuais de sistema perderam gradativamente seu
interesse. Somente no final dos anos 90, com o aumento do poder de processamento dos micro-processadores e o surgimento de novas possibilidades
de aplicao, as mquinas virtuais de sistema foram redescobertas.
Existem basicamente duas arquiteturas de hipervisores de sistema,
apresentados na Figura 9.15:
Hipervisores nativos (ou de tipo I): nesta categoria, o hipervisor executa
diretamente sobre o hardware do computador real, sem um sistema
operacional subjacente. A funo do hipervisor virtualizar os
recursos do hardware (memria, discos, interfaces de rede, etc.) de
forma que cada mquina virtual veja um conjunto de recursos prprio
e independente. Assim, cada mquina virtual se comporta como
um computador completo que pode executar o seu prprio sistema
operacional. Esta a forma mais antiga de virtualizao, encontrada
nos sistemas computacionais de grande porte dos anos 1960-70. Alguns
exemplos de sistemas que empregam esta abordagem so o IBM OS/370,
o VMware ESX Server e o ambiente Xen.
Hipervisores convidados (ou de tipo II): nesta categoria, o hipervisor executa como um processo normal sobre um sistema operacional nativo
subjacente. O hipervisor utiliza os recursos oferecidos pelo sistema
operacional nativo para oferecer recursos virtuais ao sistema operacional convidado que executa sobre ele. Normalmente, um hipervisor
convidado suporta apenas uma mquina virtual com uma instncia de
sistema operacional convidado. Caso mais mquinas sejam necessrias, mais hipervisores devem ser lanados, como processos separados.
Exemplos de sistemas que adotam esta estrutura incluem o VMware
Workstation, o QEMU e o VirtualBox.
Pode-se afirmar que os hipervisores convidados so mais flexveis que
os hipervisores nativos, pois podem ser facilmente instalados/removidos em
mquinas com sistemas operacionais previamente instalados, e podem ser
c Carlos Maziero
400
9: Tcnicas de virtualizao
aplics
OS 1
aplics
aplics
aplics
guest OS
OS 2
hipervisor
host OS
hipervisor
hardware
hardware
hipervisor nativo
hipervisor convidado
9.4
Tcnicas de virtualizao
9.4.1
Emulao completa
c Carlos Maziero
401
9: Emulao completa
SO
convidado
rea de
memria
separada
hipervisor
tradutor
hardware
cache
ISA de
alto nvel
ISA de
baixo nvel
c Carlos Maziero
402
9.4.2
9.4.3
Traduo dinmica
Uma tcnica frequentemente utilizada na construo de mquinas virtuais a traduo dinmica (dynamic translation) ou recompilao dinmica
(dynamic recompilation) de partes do cdigo binrio do sistemas convidado
e suas aplicaes. Nesta tcnica, o hipervisor analisa, reorganiza e traduz
as sequncias de instrues emitidas pelo sistema convidado em novas
sequncias de instrues, medida em que a execuo do sistema convidado
avana.
A traduo binria dinmica pode ter vrios objetivos: (a) adaptar
as instrues geradas pelo sistema convidado interface ISA do sistema
real, caso no sejam idnticas; (b) detectar e tratar instrues sensveis
no-privilegiadas (que no geram interrupes ao serem invocadas pelo
sistema convidado); ou (c) analisar, reorganizar e otimizar as sequncias
de instrues geradas pelo sistema convidado, de forma a melhorar o
c Carlos Maziero
403
9: Traduo dinmica
c Carlos Maziero
404
9: Paravirtualizao
9.4.4
Paravirtualizao
c Carlos Maziero
405
9: Aspectos de desempenho
aplicaes
aplicaes
Sistema
operacional
modicado
Sistema
operacional
standard
hypercalls
hipervisor
hipervisor
hardware
hardware
hardware
virtualizao
clssica
paravirtualizao
9.4.5
Aspectos de desempenho
c Carlos Maziero
406
9: Aspectos de desempenho
c Carlos Maziero
407
9: Aspectos de desempenho
OS 1
aplics
aplics
aplics
guest OS
OS 2
1
monitor
host OS
monitor
hardware
hardware
monitor convidado
(tipo II)
monitor nativo
(tipo I)
arquivos no
SO convidado
SO convidado
VM convidada
VM hbrida
arquivos no
SO convidado
arquivos no
SO convidado
SO convidado
SO convidado
disco virtual
disco virtual
disco virtual
Hipervisor
Hipervisor
Hipervisor
arquivo no
SO hospedeiro
driver
SO hospedeiro
disco real
disco real
SO hospedeiro
disco real
c Carlos Maziero
408
9.5
9: Aplicaes da virtualizao
Aplicaes da virtualizao
c Carlos Maziero
409
9: Aplicaes da virtualizao
c Carlos Maziero
410
9: Aplicaes da virtualizao
c Carlos Maziero
411
9.6
9.6.1
VMware
c Carlos Maziero
412
9: FreeBSD Jails
9.6.2
FreeBSD Jails
c Carlos Maziero
413
9: Xen
9.6.3
Xen
c Carlos Maziero
414
9: User-Mode Linux
9.6.4
User-Mode Linux
O User-Mode Linux foi proposto por Jeff Dike em 2000, como uma alternativa de uso de mquinas virtuais no ambiente Linux [Dike, 2000]. O ncleo
do Linux foi portado de forma a poder executar sobre si mesmo, como um
processo do prprio Linux. O resultado um user space separado e isolado
na forma de uma mquina virtual, que utiliza dispositivos de hardware
c Carlos Maziero
415
9: User-Mode Linux
VM 0 (gerncia)
VM 1
VM n
aplics de
gerncia
aplicaes
convidadas
aplicaes
convidadas
...
Linux convidado
driver
nativo
driver
back-end
SO convidado
SO convidado
driver
front-end
driver
front-end
Hipervisor Xen
hardware x86
c Carlos Maziero
416
9: QEMU
9.6.5
QEMU
c Carlos Maziero
417
9: Valgrind
9.6.6
Valgrind
O Valgrind [Nethercote and Seward, 2007] uma ferramenta de depurao de uso da memria RAM e problemas correlatos. Ele permite investigar
fugas de memria (memory leaks), acessos a endereos invlidos, padres de
uso dos caches e outras operaes envolvendo o uso da memria RAM. O
Valgrind foi desenvolvido para plataforma x86 Linux, mas existem verses
experimentais para outras plataformas.
Tecnicamente, o Valgrind um hipervisor de aplicao que virtualiza o
processador atravs de tcnicas de traduo dinmica. Ao iniciar a anlise
c Carlos Maziero
418
9: JVM
9.6.7
JVM
c Carlos Maziero
419
9: JVM
Cdigo
fonte
Java
.java
aplicao
em
bytecode
compilao
aplicao
em
bytecode
JVM
JVM
carga
Windows
x86
carga
.jar
distribuio
bytecode
distribuio
Solaris
Sparc
Referncias Bibliogrficas
[Amoroso, 1994] Amoroso, E. (1994). Fundamentals of Computer Security
Technology. Prentice Hall PTR.
[Anderson et al., 2002] Anderson, D., Cobb, J., Korpela, E., Lebofsky, M.,
and Werthimer, D. (2002). SETI@home: An experiment in public-resource
computing. Communications of the ACM, 45(11):5661.
[Anderson et al., 1992] Anderson, T., Bershad, B., Lazowska, E., and Levy,
H. (1992). Scheduler activations: effective kernel support for the userlevel management of parallelism. ACM Transactions on Computer Systems,
10(1):5379.
[Arpaci-Dusseau et al., 2003] Arpaci-Dusseau, A., Arpaci-Dusseau, R., Burnett, N., Denehy, T., Engle, T., Gunawi, H., Nugent, J., and Popovici, F.
(2003). Transforming policies into mechanisms with InfoKernel. In 19th
ACM Symposium on Operating Systems Principles.
[Avizienis et al., 2004] Avizienis, A., Laprie, J.-C., Randell, B., and
Landwehr, C. (2004). Basic Concepts and Taxonomy of Dependable
and Secure Computing. IEEE Transactions on Dependable and Secure Computing, 1(1).
[Bach, 1986] Bach, M. J. (1986). The design of the UNIX operating System.
Prentice-Hall.
[Badger et al., 1995] Badger, L., Sterne, D., Sherman, D., Walker, K., and
Haghighat, S. (1995). Practical Domain and Type Enforcement for UNIX.
In IEEE Symposium on Security and Privacy, pages 6677.
[Bansal and Modha, 2004] Bansal, S. and Modha, D. (2004). CAR: Clock
with adaptive replacement. In USENIX Conference on File and Storage
Technologies.
c Carlos Maziero
421
9: REFERNCIAS BIBLIOGRFICAS
[Barham et al., 2003] Barham, P., Dragovic, B., Fraser, K., Hand, S., Harris,
T., Ho, A., Neugebauer, R., Pratt, I., and Warfield, A. (2003). Xen and the
art of virtualization. In ACM Symposium on Operating Systems Principles,
pages 164177.
[Barney, 2005] Barney, B. (2005).
POSIX threads programming.
http://www.llnl.gov/computing/tutorials/pthreads.
[Bell and LaPadula, 1974] Bell, D. E. and LaPadula, L. J. (1974). Secure
computer systems. mathematical foundations and model. Technical
Report M74-244, MITRE Corporation.
[Bellard, 2005] Bellard, F. (2005). QEMU, a fast and portable dynamic
translator. In USENIX Annual Technical Conference.
[Ben-Ari, 1990] Ben-Ari, M. (1990). Principles of Concurrent and Distributed
Programming. Prentice-Hall.
[Biba, 1977] Biba, K. (1977). Integrity considerations for secure computing
systems. Technical Report MTR-3153, MITRE Corporation.
[Birrell, 2004] Birrell, A. (2004). Implementing condition variables with
semaphores. Computer Systems Theory, Technology, and Applications, pages
2937.
[Black, 1990] Black, D. L. (1990). Scheduling and resource management techniques for multiprocessors. Technical Report CMU-CS-90-152, CarnegieMellon University, Computer Science Dept.
[Blunden, 2002] Blunden, B. (2002). Virtual Machine Design and Implementation in C/C++. Worldware Publishing.
[Boebert and Kain, 1985] Boebert, W. and Kain, R. (1985). A practical alternative to hierarchical integrity policies. In 8th National Conference on
Computer Security, pages 1827.
[Bomberger et al., 1992] Bomberger, A., Frantz, A., Frantz, W., Hardy, A.,
Hardy, N., Landau, C., and Shapiro, J. (1992). The KeyKOS nanokernel
architecture. In USENIX Workshop on Micro-Kernels and Other Kernel
Architectures, pages 95112.
c Carlos Maziero
422
9: REFERNCIAS BIBLIOGRFICAS
[Bovet and Cesati, 2005] Bovet, D. and Cesati, M. (2005). Understanding the
Linux Kernel, 3rd edition. OReilly Media, Inc.
[Boyd-Wickizer et al., 2009] Boyd-Wickizer, S., Morris, R., and Kaashoek, M.
(2009). Reinventing scheduling for multicore systems. In 12th conference
on Hot topics in operating systems, page 21. USENIX Association.
[Brown, 2000] Brown, K. (2000). Programming Windows Security. AddisonWesley Professional.
[Burns and Wellings, 1997] Burns, A. and Wellings, A. (1997). Real-Time
Systems and Programming Languages, 2nd edition. Addison-Wesley.
[Carr and Hennessy, 1981] Carr, R. and Hennessy, J. (1981). WSclock - a
simple and effective algorithm for virtual memory management. In ACM
symposium on Operating systems principles.
[Chen et al., 1994] Chen, P. M., Lee, E. K., Gibson, G. A., Katz, R. H., and
Patterson, D. A. (1994). RAID: high-performance, reliable secondary
storage. ACM Computing Surveys, 26:145185.
[Clark et al., 2005] Clark, C., Fraser, K., Hand, S., Hansen, J., Jul, E., Limpach,
C., Pratt, I., and Warfield, A. (2005). Live migration of virtual machines.
In Symposium on Networked Systems Design and Implementation.
[Coffman et al., 1971] Coffman, E., Elphick, M., and Shoshani, A. (1971).
System deadlocks. ACM Computing Surveys, 3(2):6778.
[Corbat, 1963] Corbat, F. (1963). The Compatible Time-Sharing System: A
Programmers Guide. MIT Press.
[Corbat et al., 1962] Corbat, F., Daggett, M., and Daley, R. (1962). An
experimental time-sharing system. In Proceedings of the Spring Joint
Computer Conference.
[Corbat and Vyssotsky, 1965] Corbat, F. J. and Vyssotsky, V. A. (1965).
Introduction and overview of the Multics system. In AFIPS Conference
Proceedings, pages 185196.
[Corbet et al., 2005] Corbet, J., Rubini, A., and Kroah-Hartman, G. (2005).
Linux Device Drivers, 3rd Edition. OReilly Media, Inc.
c Carlos Maziero
423
9: REFERNCIAS BIBLIOGRFICAS
[Cowan et al., 2000] Cowan, C., Beattie, S., Kroah-Hartman, G., Pu, C.,
Wagle, P., and Gligor, V. (2000). SubDomain: Parsimonious server
security. In 14th USENIX Systems Administration Conference.
[Dasgupta et al., 1991] Dasgupta, P., Richard J. LeBlanc, J., Ahamad, M.,
and Ramachandran, U. (1991). The Clouds distributed operating system.
Computer, 24(11):3444.
[Day, 1983] Day, J. (1983). The OSI reference model. Proceedings of the IEEE.
[Denning, 1980] Denning, P. (1980). Working sets past and present. IEEE
Transactions on Software Engineering, 6(1):6484.
[Denning, 2006] Denning, P. J. (2006). The locality principle. In Barria, J.,
editor, Communication Networks and Computer Systems, chapter 4, pages
4367. Imperial College Press.
[di Vimercati et al., 2007] di Vimercati, S., Foresti, S., Jajodia, S., and Samarati, P. (2007). Access control policies and languages in open environments.
In Yu, T. and Jajodia, S., editors, Secure Data Management in Decentralized Systems, volume 33 of Advances in Information Security, pages 2158.
Springer.
[di Vimercati et al., 2005] di Vimercati, S., Samarati, P., and Jajodia, S. (2005).
Policies, Models, and Languages for Access Control. In Workshop on
Databases in Networked Information Systems, volume LNCS 3433, pages
225237. Springer-Verlag.
[Dike, 2000] Dike, J. (2000). A user-mode port of the Linux kernel. In
Proceedings of the 4th Annual Linux Showcase & Conference.
[Dorward et al., 1997] Dorward, S., Pike, R., Presotto, D., Ritchie, D., Trickey,
H., and Winterbottom, P. (1997). The Inferno operating system. Bell Labs
Technical Journal, 2(1):518.
[Downey, 2008] Downey, A. (2008). The Little Book of Semaphores. Green Tea
Press.
[Duesterwald, 2005] Duesterwald, E. (2005). Design and engineering of a
dynamic binary optimizer. Proceedings of the IEEE, 93(2):436448.
c Carlos Maziero
424
9: REFERNCIAS BIBLIOGRFICAS
[Evans and Elischer, 2003] Evans, J. and Elischer, J. (2003). Kernelscheduled entities for FreeBSD. http://www.aims.net.au/chris/kse.
[Farines et al., 2000] Farines, J.-M., da Silva Fraga, J., and de Oliveira, R. S.
(2000). Sistemas de Tempo Real 12a Escola de Computao da SBC. Sociedade
Brasileira de Computao.
[Ford and Susarla, 1996] Ford, B. and Susarla, S. (1996). CPU Inheritance
Scheduling. In Usenix Association Second Symposium on Operating Systems
Design and Implementation (OSDI), pages 91105.
[Foundation, 2005] Foundation, W. (2005). Wikipedia online enciclopedia.
http://www.wikipedia.org.
[Freed and Borenstein, 1996] Freed, N. and Borenstein, N. (1996). RFC 2046:
Multipurpose Internet Mail Extensions (MIME) part two: Media types.
[Gallmeister, 1994] Gallmeister, B. (1994). POSIX.4: Programming for the Real
World. OReilly Media, Inc.
[Gnome, 2005] Gnome (2005). Gnome: the free software desktop project.
http://www.gnome.org.
[Goldberg, 1973] Goldberg, R. (1973). Architecture of virtual machines. In
AFIPS National Computer Conference.
[Goldberg and Mager, 1979] Goldberg, R. and Mager, P. (1979). Virtual
machine technology: A bridge from large mainframes to networks of
small computers. IEEE Proceedings Compcon Fall 79, pages 210213.
[Hart, 2004] Hart, J. (2004). Windows System Programming, 3rd edition.
Addison-Wesley Professional.
[Holt, 1972] Holt, R. (1972). Some deadlock properties of computer systems.
ACM Computing Surveys, 4(3):179196.
[IBM, 2007] IBM (2007). Power Instruction Set Architecture Version 2.04.
IBM Corporation.
c Carlos Maziero
425
9: REFERNCIAS BIBLIOGRFICAS
[Jain et al., 2004] Jain, A., Ross, A., and Prabhakar, S. (2004). An Introduction
to Biometric Recognition. IEEE Transactions on Circuits and Systems for
Video Technology, 14(1).
[Jiang and Zhang, 2002] Jiang, S. and Zhang, X. (2002). LIRS: an efficient
low inter-reference recency set replacement policy to improve buffer
cache performance. In ACM SIGMETRICS Intl Conference on Measurement
and Modeling of Computer Systems, pages 3142.
[Johnstone and Wilson, 1999] Johnstone, M. S. and Wilson, P. R. (1999).
The memory fragmentation problem: solved? ACM SIGPLAN Notices,
34(3):2636.
[Jones, 1997] Jones, M. (1997). What really happened on Mars Rover Pathfinder. ACM Risks-Forum Digest, 19(49).
[Kay and Lauder, 1988] Kay, J. and Lauder, P. (1988). A fair share scheduler.
Communications of the ACM, 31(1):4455.
[KDE, 2005] KDE (2005). KDE desktop project. http://www.kde.org.
[Kernighan and Ritchie, 1989] Kernighan, B. and Ritchie, D. (1989). C: a
Linguagem de Programao - Padro ANSI. Campus/Elsevier.
[King et al., 2003] King, S., Dunlap, G., and Chen, P. (2003). Operating
system support for virtual machines. In Proceedings of the USENIX
Technical Conference.
[Klein et al., 2009] Klein, G., Elphinstone, K., Heiser, G., Andronick, J., Cock,
D., Derrin, P., Elkaduwe, D., Engelhardt, K., Kolanski, R., Norrish, M.,
Sewell, T., Tuch, H., and Winwood, S. (2009). SeL4: Formal verification of
an OS kernel. In 22nd ACM Symposium on Operating Systems Principles,
Big Sky, MT, USA.
[Lamport, 1974] Lamport, L. (1974). A new solution of Dijkstras concurrent
programming problem. Communications of the ACM, 17(8):453455.
[Lampson, 1971] Lampson, B. (1971). Protection. In 5th Princeton Conference
on Information Sciences and Systems. Reprinted in ACM Operating Systems
Rev. 8, 1 (Jan. 1974), pp 18-24.
c Carlos Maziero
426
9: REFERNCIAS BIBLIOGRFICAS
c Carlos Maziero
427
9: REFERNCIAS BIBLIOGRFICAS
[Navarro et al., 2002] Navarro, J., Iyer, S., Druschel, P., and Cox, A. (2002).
Practical, transparent operating system support for superpages. In 5th
USENIX Symposium on Operating Systems Design and Implementation, pages
89104.
[Nethercote and Seward, 2007] Nethercote, N. and Seward, J. (2007). Valgrind: A framework for heavyweight dynamic binary instrumentation.
In ACM Conference on Programming Language Design and Implementation,
San Diego - California - USA.
[Neuman and Tso, 1994] Neuman, B. C. and Tso, T. (1994). Kerberos: An
authentication service for computer networks. IEEE Communications
Magazine, 32(9):3338.
[Neuman et al., 2005] Neuman, C., Yu, T., Hartman, S., and Raeburn, K.
(2005). The Kerberos Network Authentication Service (V5). RFC 4120
(Proposed Standard). Updated by RFCs 4537, 5021.
[Newman et al., 2005] Newman, M., Wiberg, C.-M., and Braswell, B.
(2005). Server Consolidation with VMware ESX Server. IBM RedBooks.
http://www.redbooks.ibm.com.
[Nichols et al., 1996] Nichols, B., Buttlar, D., and Farrell, J. (1996). PThreads
Programming. OReilly Media, Inc.
[Nieh and Lam, 1997] Nieh, J. and Lam, M. (1997). The design, implementation and evaluation of SMART: a scheduler for multimedia applications.
In Proceedings of the 16th ACM Symposium on Operating Systems Principles,
pages 184197.
[Patterson and Henessy, 2005] Patterson, D. and Henessy, J. (2005). Organizao e Projeto de Computadores. Campus.
[Patterson et al., 1988] Patterson, D. A., Gibson, G., and Katz, R. H. (1988). A
case for redundant arrays of inexpensive disks (RAID). In ACM SIGMOD
International Conference on Management of Data, pages 109116. ACM.
[Petzold, 1998] Petzold, C. (1998). Programming Windows, 5th edition. Microsoft Press.
[Pfleeger and Pfleeger, 2006] Pfleeger, C. and Pfleeger, S. L. (2006). Security
in Computing, 4th Edition. Prentice Hall PTR.
c Carlos Maziero
428
9: REFERNCIAS BIBLIOGRFICAS
[Pike et al., 1995] Pike, R., Presotto, D., Dorward, S., Flandrena, B., Thompson, K., Trickey, H., and Winterbottom, P. (1995). Plan 9 from Bell Labs.
Journal of Computing Systems, 8(3):221254.
[Pike et al., 1993] Pike, R., Presotto, D., Thompson, K., Trickey, H., and
Winterbottom, P. (1993). The use of name spaces in Plan 9. Operating
Systems Review, 27(2):7276.
[Popek and Goldberg, 1974] Popek, G. and Goldberg, R. (1974). Formal
requirements for virtualizable third generation architectures. Communications of the ACM, 17(7):412421.
[Price and Tucker, 2004] Price, D. and Tucker, A. (2004). Solaris zones:
Operating system support for consolidating commercial workloads. In
18th USENIX conference on System administration, pages 241254.
[Provos et al., 2003] Provos, N., Friedl, M., and Honeyman, P. (2003). Preventing privilege escalation. In 12th USENIX Security Symposium.
[Rashid et al., 1989] Rashid, R., Julin, D., Orr, D., Sanzi, R., Baron, R., Forin,
A., Golub, D., and Jones, M. B. (1989). Mach: a system software kernel.
In Proceedings of the 1989 IEEE International Conference, COMPCON, pages
176178, San Francisco, CA, USA. IEEE Comput. Soc. Press.
[Raynal, 1986] Raynal, M. (1986). Algorithms for Mutual Exclusion. The MIT
Press.
[Rice, 2000] Rice, L. (2000). Introduction to OpenVMS. Elsevier Science &
Technology Books.
[Robbins and Robbins, 2003] Robbins, K. and Robbins, S. (2003). UNIX
Systems Programming. Prentice-Hall.
[Robin and Irvine, 2000] Robin, J. and Irvine, C. (2000). Analysis of the Intel
Pentiums ability to support a secure virtual machine monitor. In 9th
USENIX Security Symposium.
[Rosenblum, 2004] Rosenblum, M. (2004). The reincarnation of virtual
machines. Queue Focus - ACM Press, pages 3440.
c Carlos Maziero
429
9: REFERNCIAS BIBLIOGRFICAS
c Carlos Maziero
430
9: REFERNCIAS BIBLIOGRFICAS
c Carlos Maziero
431
: REFERNCIAS BIBLIOGRFICAS
Apndice A
O Task Control Block do Linux
A estrutura em linguagem C apresentada a seguir constitui o descritor
de tarefas (Task Control Block) do Linux (estudado na Seo 2.4.1). Ela foi
extrada do arquivo include/linux/sched.h do cdigo-fonte do ncleo
Linux 2.6.12 (o arquivo inteiro contm mais de 1.200 linhas de cdigo em C).
1
2
3
4
5
6
struct task_struct {
volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */
struct thread_info *thread_info;
atomic_t usage;
unsigned long flags; /* per process flags, defined below */
unsigned long ptrace;
7
8
int lock_depth;
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#ifdef CONFIG_SCHEDSTATS
struct sched_info sched_info;
#endif
c Carlos Maziero
433
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/* task state */
struct linux_binfmt *binfmt;
long exit_state;
int exit_code, exit_signal;
int pdeath_signal; /* The signal sent when the parent dies */
/* ??? */
unsigned long personality;
unsigned did_exec:1;
pid_t pid;
pid_t tgid;
/*
* pointers to (original) parent process, youngest child, younger sibli
* older sibling, respectively. (p->father can be replaced with
* p->parent->pid)
*/
struct task_struct *real_parent; /* real parent process (when being deb
struct task_struct *parent; /* parent process */
/*
* children/sibling forms the list of my children plus the
* tasks Im ptracing.
*/
struct list_head children; /* list of my children */
struct list_head sibling; /* linkage in my parents children list */
struct task_struct *group_leader; /* threadgroup leader */
61
62
63
64
65
66
67
/* for vfork() */
/* CLONE_CHILD_SETTID */
/* CLONE_CHILD_CLEARTID */
68
69
70
71
72
73
74
c Carlos Maziero
434
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
00
01
02
03
04
05
06
07
08
09
/* process credentials */
uid_t uid,euid,suid,fsuid;
gid_t gid,egid,sgid,fsgid;
struct group_info *group_info;
kernel_cap_t cap_effective, cap_inheritable, cap_permitted;
unsigned keep_capabilities:1;
struct user_struct *user;
#ifdef CONFIG_KEYS
struct key *thread_keyring; /* keyring private to this thread */
#endif
int oomkilladj; /* OOM kill score adjustment (bit shift). */
char comm[TASK_COMM_LEN]; /* executable name excluding path
- access with [gs]et_task_comm (which lock
it with task_lock())
- initialized normally by flush_old_exec */
/* file system info */
int link_count, total_link_count;
/* ipc stuff */
struct sysv_sem sysvsem;
/* CPU-specific state of this task */
struct thread_struct thread;
/* filesystem information */
struct fs_struct *fs;
/* open file information */
struct files_struct *files;
/* namespace */
struct namespace *namespace;
/* signal handlers */
struct signal_struct *signal;
struct sighand_struct *sighand;
10
11
12
13
14
15
16
17
18
c Carlos Maziero
435
sigset_t *notifier_mask;
19
20
21
22
void *security;
struct audit_context *audit_context;
seccomp_t seccomp;
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/* VM state */
struct reclaim_state *reclaim_state;
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
c Carlos Maziero
436
#endif
#ifdef CONFIG_CPUSETS
struct cpuset *cpuset;
nodemask_t mems_allowed;
int cpuset_mems_generation;
#endif
};