cap6-sistemas-operacionais.asc 33.3 KB
Newer Older
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
1
[[cap_so]]
2
== Introdução aos Sistemas Operacionais
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
3
4
5


.Objetivos do capítulo
6
____
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
7
8
9
10
11
12
13
Ao final deste capítulo você deverá ser capaz de:

* Descrever as funções de um Sistema Operacional;

* Apresentar os principais fatos na evolução dos Sistemas Operacionais durante 
a evolução da arquitetura dos computadores;

14
* Descrever os principais conceitos de Sistema Operacional e como o mesmo 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
15
abstrai o uso do hardware de um computador.
16
____
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31


Um sistema computacional moderno consiste em um ou mais processadores, memória 
principal, discos, impressoras, teclado, monitor, interfaces de rede e outros 
dispositivos de entrada e saída. Enfim é um sistema complexo. Desenvolver 
programas que mantenham o controle de todos esses componentes e os utilizem 
corretamente e de maneira otimizada é um trabalho extremamente difícil. Por 
isso, os computadores têm um dispositivo de software denominado Sistema 
Operacional, cujo trabalho é gerenciar esses componentes e fornecer aos 
programas do usuário uma interface com o hardware mais simples.

A maioria dos usuários de computador já teve alguma experiência com um 
Sistema Operacional, mesmo assim é difícil reconhecer de modo preciso o que 
é um Sistema Operacional. Este problema ocorre porque os Sistemas Operacionais 
realizam basicamente duas funções não relacionadas: estender a máquina e 
32
gerenciar recursos. Este capítulo irá descrever suas principais funções para o usuário do computador.
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
33
34
35



36
=== Introdução
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
37
38
39
40

Sem o software, um computador seria um pedaço de metal sem uso. Muitos 
consideram o software como a alma do computador.

41
42
43
44
45
46
Existem dois tipos de software para computadores: 

Programas do sistema::
responsáveis por operações de gerenciamento do próprio computador, 

Programas aplicações:: implementados por usuários do computador para resolver 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
47
48
seus problemas específicos.

49
O principal programa do sistema é o ((Sistema Operacional)) (SO), responsável por 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
50
51
52
53
54
55
56
gerenciar o acesso aos recursos do computador e prover serviços extras da 
máquina. Nos computadores modernos, muitos são os dispositivos a serem 
gerenciados: um ou mais processadores, memória principal, terminais de acesso, 
disco rígido, interfaces de rede e etc. Imagine a complexidade de implementar 
um programa que faz uso de cada um destes dispositivos, controlando o acesso 
concorrente de outros programas para não interferir no resultado final do seu.

57
58
59
60
61
[[fig_so]]
.Recursos gerenciados pelo Sistema Operacional
image::images/sistemas-operacionais/so-perifericos.png[scaledwidth="60%"]


62

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
63
64
65
66
67
O leitor deve perceber que seriam programações muito complexas e é uma das 
funções do Sistema Operacional, permitir as aplicações de usuário o uso 
destes dispositivos de forma mais simplificada. Para isso, o Sistema 
Operacional fornece as aplicações, uma coleção de funções 
pré-programadas para atuarem sobre estes dispositivos, as chamadas do sistema 
68
(_((system calls))_).
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
69
70
71



72
73
[[fig_camdas]]
.Sistema de um computador: hardware, programas do sistema e aplicações.
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
74
image::images/sistemas-operacionais/camadas.png[scaledwidth="40%"]
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
75
76


77
Podemos observar na <<fig_camdas>> a arquitetura em camadas de um sistema 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
78
79
80
81
82
83
84
computacional. Na camada inferior encontram-se os circuitos integrados, fonte 
de energia, barramentos, placas de rede e etc.

Um conjunto de instruções é interpretado pela camada de Microprogramação. 
Esta camada conversa diretamente com os dispositivos providenciando 
funcionalidades para a camada acima através das instruções de máquina.

85
86
(((Sistema Operacional)))

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
87
A principal função da camada do Sistema Operacional é *diminuir a 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
88
complexidade e fornecer ao programador um conjunto de instruções de mais alto 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
89
nível*, sem a preocupação dos detalhes das instruções, como a 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
90
91
92
93
94
95
96
97
98
99
movimentação do cabeçote de leitura dos discos rígidos contidos na memória 
secundária para ler os dados de um programa em execução.

Acima do Sistema Operacional, existem outros programas do sistema, como os 
Compiladores, Editores e os Interpretadores de Comandos, que auxiliam as 
aplicações a fazerem uso das funcionalidades do Sistema Operacional. E por 
fim, a camada de aplicações, escritas pelos usuários para resolver seus 
problemas específicos, como processamento de imagens, serviços de 
comunicação na rede, aplicações comerciais, científicas e etc.

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
100
[IMPORTANT]
101
Muitos confundem o Sistema Operacional com a sua interface gráfica. No Windows, 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
102
103
104
Sistema Operacional da Microsoft, existe um programa do sistema, chamado 
gerenciador de janelas, responsável por controlar as ações do usuário e 
ativar os recursos do Sistema Operacional, dando assim uma falsa impressão que 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
105
106
107
o mesmo seja o Sistema Operacional de fato. 

Para podermos definir bem a 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
108
109
110
111
fronteira do que é o papel do Sistema Operacional, elencamos e em seguida 
descrevemos suas duas principais funções: Extensão da Máquina e Gerenciador 
de Recursos.

112
==== O Sistema Operacional como uma Máquina Estendida
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
113
114
115
116
117

A arquitetura, conjunto de instruções, organizações de memória, E/S e 
estrutura de barramentos da maioria dos computadores em nível de linguagem de 
máquina é primitivo e de difícil programação.

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
118
119
//TODO hj ninguem usa disquete, trocar o texto para HD.

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
120
121
122
123
124
125
126
127
128
129
130
Examinando como é feita a E/S da unidade de discos flexíveis (disquete), são 
realizados inúmeros comandos para leitura e escrita de dados, movimentação 
do braço do disco e formatação de trilhas. Além da inicialização, 
sinalização, reinicialização e recalibração do controlador e das unidades 
de disquetes.

Sem entrar em detalhes de fato, é claro que um programador de nível médio 
provavelmente não se envolverá com os detalhes de programação das unidades 
de disco, em vez disso, busca lidar com essas unidades de modo mais abstrato e 
simples.

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
131
Esse programa que oculta a ``verdade'' ao programador sobre o hardware e 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
132
133
134
135
136
137
138
apresenta uma visão simples é o Sistema Operacional, permitindo que o 
usuário trabalhe com o conceito de arquivos com nomes para dividir o disco.

Em todo caso a abstração oferecida pelo sistema operacional é mais simples e 
mais fácil de usar que a do hardware, oferecendo ao usuário o equivalente a 
uma máquina estendida.

139
==== Gerenciador de Recursos
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
140

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
141
142
143
O segundo trabalho do Sistema Operacional é fornecer uma *alocação ordenada e 
controlada* de processadores, memórias e dispositivos de E/S entre vários 
programas que *competem* por eles.
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
144
145
146
147
148
149
150
151
152
153
154
155

Imagine o que aconteceria se três programas em execução em algum computador 
tentassem imprimir suas saídas simultaneamente na mesma impressora. As 
primeiras linhas poderiam ser do programa 1, as linhas seguintes do programa 2 
e algumas outras do programa 3. O resultado seria uma confusão. O Sistema 
Operacional pode trazer ordem a essa confusão, armazenando temporariamente no 
disco todas as saídas destinadas à impressora, tratando a impressão de cada 
saída por vez.

Além disso, os usuários muitas vezes precisam compartilhar não somente 
hardware, mas também informação (arquivo, banco de dados e etc).

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
156
157
158
159
O gerenciamento de recursos realiza o compartilhamento destes recursos de duas maneiras:

No tempo:: 
Quando o recurso é compartilhado no tempo, 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
160
161
162
163
164
diferentes usuários aguardam sua vez para utilizar um recurso. Por exemplo, 
com somente uma CPU e múltiplos programas, o Sistema Operacional aloca a CPU a 
um programa, e depois que executou o suficiente, outro programa obtém seu uso, 
então outro e por fim o primeiro programa novamente.

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
165
No espaço::
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
166
167
168
169
170
171
No compartilhamento do espaço, os usuários não esperam a sua vez, cada um 
ocupa sua parte no recurso. Por exemplo, a memória principal é normalmente 
dividida entre vários programas em execução, assim, cada um pode residir ao 
mesmo tempo na memória.


172
=== Tipos de Sistemas Operacionais
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
173
174
175
176
177
178
179
180
181

Como vimos na seção anterior, muitos Sistemas Operacionais possuem 
características distintas devido à arquitetura do hardware em que irão 
executar. Esta seção traz alguns dos tipos de Sistemas Operacionais 
existentes descrevendo suas principais características

==== Computadores de Grande Porte

Estes computadores distinguem dos PCs em termos de capacidade de E/S. Possui 
182
milhares de discos com milhares de 'terabytes' de dados. Atualmente ressurgiram 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
183
184
185
como sofisticados servidores web e servidores para transações entre empresas.

Seus Sistemas Operacionais são, sobretudo, orientados para o processamento 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
186
187
188
189
simultâneo de muitos tarefas (_jobs_) com quantidades volumosas de E/S. Esses sistemas 
oferecem normalmente três tipos de serviços: em *lote* ('batch'), *processamento de transações* e *tempo compartilhado*.

// TODO explicar melhor os conceitos acima? lote/processamento de transações/tempo compartilhado
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214

==== Sistema Operacional de Servidores

Servidores são computadores pessoais grandes, estações de trabalho e até 
computadores de grande porte. Eles servem múltiplos usuários de uma vez em 
uma rede e permitem-lhe compartilhar recursos de hardware e software. Seu 
Sistema Operacional deve prover um bom gerenciamento de recursos, como 
serviços de impressão, serviços de arquivos ou serviços web.

==== Sistema Operacional de Multiprocessadores

Um módulo cada vez mais comum de obter potência computacional é conectar 
múltiplas CPUs em um único sistema. Dependendo da forma como são 
interligados os processadores e o que os mesmos compartilham, esses sistemas 
são denominados computadores paralelos, multicomputadores ou 
multiprocessadores. São Sistemas Operacionais com aspectos especiais de 
comunicação e conectividade.

==== Sistema Operacional de PC

Seu trabalho é oferecer uma boa interface para um único usuário. São 
amplamente usados para processadores de texto, planilha e acesso a internet.

==== Sistema Operacional de Tempo Real

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
215
Os Sistemas Operacionais de ((tempo real)) são caracterizados por terem o tempo 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
216
217
218
219
220
como um parâmetro fundamental. Por exemplo, em sistemas de controle de 
processos industriais é muito comum a existência de prazos rígidos para a 
execução de determinadas tarefas, podendo uma ação, ocorrendo em um momento 
incorreto, soldar uma região errada de uma peça, estragando o produto final.

Eduardo de Santana Medeiros Alexandre's avatar
tablet    
Eduardo de Santana Medeiros Alexandre committed
221
Existem dois tipos de Sistema Operacionais de tempo real:
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
222
223
224
225
226

O crítico::
Onde as ações precisam ocorrer em determinados instantes. 

O não crítico:: No qual o 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
227
228
229
230
231
descumprimento ocasional de um prazo é aceitável. Sistemas multimídia 
pertencem a esta última categoria.

==== Sistema Operacional Embarcado

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
232
((Sistemas embarcados)) são pequenos computadores, geralmente computadores de 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
233
mão, celulares e set-top-box para TV Digital. Realizam um pequeno número de 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
234
235
236
funções, seu Sistema Operacional deve lidar com restrições de *tamanho*, 
*memória* e *consumo de energia*.

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
237
238
239
240
241
242
243
244
245
246

==== Sistema Operacional de Cartões Inteligentes

Sistemas de Cartões Inteligentes são dispositivos do tamanho de cartões de 
crédito que contém um chip de CPU. Possui restrições severas de consumo de 
energia e de memória. Alguns deles podem realizar apenas uma única função, 
como pagamentos eletrônicos, mas outros podem tratar múltiplas funções. O 
gerenciamento dos recursos e a proteção das mesmas são tratados pelo Sistema 
Operacional, geralmente muito primitivo, contido no cartão.

247
=== Conceitos de Sistemas Operacionais
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
248
249
250
251
252

Todos os Sistemas Operacionais têm certos conceitos básicos, como processos, 
memória e arquivos, que são fundamentais para entendê-los. Nesta seção 
iremos dar uma introdução sobre seus principais conceitos.

253
==== Processos
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
254

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
255
Um *((processo))* é basicamente um programa em execução. Associado a cada processo 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
256
está o seu espaço de endereçamento e uma lista de posições de memória que 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
257
258
259
este processo possui permissão para ler e escrever. Também associado a cada processo está um 
conjunto de ((registradores)), que inclui o ((contador)) de programa, o ponteiro para a 
((pilha de execução)) e demais informações necessárias para executar um 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
programa.

Em um sistema multiprogramado, a CPU salta de programa para programa, 
executando cada um deles por dezenas ou centenas de vezes por segundo. 
Estritamente falando, enquanto a cada instante a CPU executa somente um 
programa, no decorrer de um segundo ela pode trabalhar sobre vários programas, 
dando a ilusão de um verdadeiro paralelismo. Fala-se em pseudoparalelismo para 
contrastar com o real paralelismo dos sistemas multiprocessadores.

Quando um processo é suspenso temporariamente dessa maneira, ele deverá ser 
reiniciado mais tarde, exatamente do mesmo ponto em que ele estava quando foi 
interrompido. Logo, todas as informações relativas ao processo devem ser 
explicitamente salvas. Por exemplo, um processo pode ter vários arquivos 
abertos para leitura. Existe um ponteiro associado a cada um desses arquivos, 
que indica a posição atual, assim quando o processo retorna a execução, a 
chamada de sistema `read` sobre o arquivo poderá ler os dados corretamente de 
sua última posição manipulada.

Em muitos sistemas operacionais os dados relativos ao processo, que não 
estejam em seu espaço de endereçamento, são armazenados em uma tabela do 
Sistema Operacional chamada de tabela de processos, contendo uma entrada para 
cada processo.

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
283
284
// TODO Ilustrar os dois ultimos paragrafos.

285
===== Estados de Processos
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
286
287

Os processos em um Sistema Operacional possuem três estados ilustrados na 
288
<<fig_transicao_de_estados>>, estes estados são:
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
289
290
291
292
293
294
295

Em execução:: realmente usando a  CPU naquele instante;

Pronto:: executável, temporariamente parado para dar lugar a outro processo;

Bloqueado:: incapaz de executar enquanto um evento externo esperado não ocorrer.

296
297
[[fig_transicao_de_estados]]
.Transição de estados de um processo.
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
298
299
300
image::images/sistemas-operacionais/estados.png[scaledwidth="60%"]


301
As transições entre os estados também estão ilustradas na <<fig_transicao_de_estados>>, estas 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
302
303
transições são:

304
1. Processo bloqueia aguardando uma entrada dos dispositivos de E/S.
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328

2. O escalador de processos seleciona outro processo.

3. O escalador de processos seleciona este processo.

4. A entrada torna-se disponível.

A transição 1 ocorre quando um processo descobre que ele não pode 
prosseguir. No UNIX, quando um processo lê de um arquivo especial e não há 
entrada disponível, o processo é automaticamente bloqueado.

As transições 2 e 3 são causadas pelo escalonador de processos sem que o 
processo saiba disso. A transição 2 ocorre quando o escalonador decide que o 
processo em execução já teve tempo suficiente de CPU e é momento de deixar 
outro processo ocupar o tempo de CPU. A transição 3 ocorre quando o 
escalonador define que é justo que o processo retorne a ser executado, após 
ter compartilhado a CPU com outros processos.

A transição 4 ocorre quando um evento externo pelo qual um processo estava 
aguardando (por exemplo, a chegada de uma dado vindo da placa de rede). Note 
que a transição 4 não leva o processo diretamente para o estado “Em 
Execução”, pois pode existir um outro processo em execução e este 
processo que estava bloqueado deve aguardar sua vez no escalonador.

329
330
331
===== Threads

(((Threads)))
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
332
333
334
335
336
337

Em Sistemas Operacionais tradicionais, cada processo tem um espaço de 
endereçamento e um único thread (fluxo) de controle. Na verdade, isso é 
quase uma definição de processo. Contudo, frequentemente há situações em 
que é desejável ter múltiplos threads de controle no mesmo espaço de 
endereçamento executando quase em paralelo como se fossem dois processos 
338
separados. Este conceito, chamado de multithread, pode ser observado na 
339
<<fig_processos_x_threads>>(b) a seguir.
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
340

341
342
[[fig_processos_x_threads]]
.(a)Três processos, cada um com um Thread de execução. (b) Um processo com três threads de execução.
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
343
344
image::images/sistemas-operacionais/processXthread.png[scaledwidth="60%"]

345
346
347
348
////
Faltou referenciar a parte b?
////

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
349
350
351
352
353
354
355
356
357
358
359
360
Threads distintos em um processo não são tão independentes quanto processos 
distintos. Todos os threads têm exatamente o mesmo espaço de endereçamento, 
o que significa que eles compartilham as mesmas variáveis globais.

Como os threads têm algumas das propriedades dos processos, eles são chamados 
de processos leves. É importante perceber que cada thread tem sua própria 
pilha de execução. Logo os estados dos processos são os mesmos para os 
threads, ocorrendo as mesmas transações de estados, como se cada thread fosse 
um processo separado. Havendo a necessidade de salvar o estado da pilha de 
execução de cada thread toda vez que o mesmo perder a vez na CPU, podendo 
futuramente retornar a execução no ponto em que foi interrompido.

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
361
[IMPORTANT]
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
362
363
364
A vantagem de se criar thread está na rapidez de sua criação e no menor 
gasto de recursos do sistema para o mesmo.

365
==== Gerenciamento de memória
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
366

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
367
368
(((Memória, gerenciamento)))

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
369
370
371
372
373
374
375
376
377
378
379
O que todo programador deseja é dispor de uma memória infinitamente grande, 
rápida e não volátil, a um custo muito baixo. Infelizmente, a tecnologias 
atuais não comportam essas memórias. Por isso, a maioria dos computadores 
utiliza uma hierarquia de memórias, que combina: uma pequena quantidade de 
memória cache, volátil, muito rápida e de alto custo; uma grande memória 
principal (RAM), volátil com alguns gigabytes, de velocidade e custo médios; 
e uma memória secundária, constituída de armazenamento não volátil em 
disco, com centenas de gigabytes e custo baixo. Cabe ao Sistema Operacional 
coordenar a utilização dessas memórias.

A parte do Sistema Operacional, responsável pela gerência das hierarquias de 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
380
memória, é denominado *gerenciador de memória*. Sua função é manter o 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
381
controle de quais partes da memória estão em uso e quais não estão, 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
382
*alocando* memória aos processos quando precisam e *liberando* a memória quando 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
383
384
385
386
os processos terminam.

===== Monoprogramação

387
388
(((Monoprogramação)))

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
389
390
391
392
393
394
395
396
397
398
Quando se utiliza o esquema mais simples de gerenciamento de memória, a mesma 
é compartilhada entre o programa e o Sistema Operacional, e somente um 
programa é executado por vez.

Tão logo um usuário tecle um comando, o Sistema Operacional carrega o 
programa solicitado do disco na memória e o executa. Quando o processo 
finaliza, o Sistema Operacional espera por um novo comando. Ao receber um novo 
comando, carregará o novo programa na memória, no espaço de endereçamento 
ocupado pelo programa anterior.

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
399
400
401
402
403
NOTE: Os antigos jogos do MS-DOS funcionavam assim. Quando um jogo era iniciado,
nenhum outro aplicativo poderia ser executado. O jogo tinha exclusividade de 
acesso a toda memória do usuário. Para acionar outro programa era necessário
sair do jogo.

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
404
405
===== Multiprogramação

406
407
(((Multiprogramação)))

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
408
409
410
411
412
413
414
415
A maioria dos sistemas modernos permite a multiprogramação, onde múltiplos 
processos estejam em execução simultânea, coexistindo na memória principal, 
através do particionamento da memória entre os processos. Das técnicas de 
compartilhamento e gerenciamento desta memória a mais utilizada nos 
microcomputadores é a Memória Virtual.

===== Memória Virtual

416
417
(((Memória Virtual)))

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
418
O conceito básico da *Memória Virtual* é que um programa pode está com sua 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
419
420
421
422
423
424
425
426
parte ativa em memória e o restante em disco, por exemplo, um programa com 
16MB de memória pode rodar em um computador de 4MB de memória, sendo parte do 
programa dinamicamente carregado em memória de acordo com a necessidade de 
execução.

Na multiprogramação vários programas podem ter pedaços ativos deles em 
memória, enquanto o resto se encontra em disco. Ficando como responsabilidade 
do Sistema Operacional o controle de indicar que programas devem ficar na 
427
memória e quais devem ficar em disco, chaveando estes programas a medida que 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
428
429
forem sendo exigidos pelo usuário.

430
431
432
==== Entrada/Saída (E/S)

(((Entrada & Saída)))
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460

O Sistema Operacional deve controlar todos os dispositivos de E/S de um 
computador. Deve emitir comandos para os dispositivos, interceptar 
interrupções e tratar os erros, deve também fornecer uma interface simples e 
fácil de usar, na medida do possível, esta interface deveria ser a mesma para 
todos os dispositivos. Ou seja, para o usuário ler dados de um arquivo ou de 
um dispositivo de rede as chamadas ao sistema são iguais, mudando apenas os 
parâmetros de entrada.

===== Dispositivos de E/S

Os dispositivos de E/S podem ser de modo genérico, divididos em duas 
categorias: dispositivos de blocos e dispositivos de caractere.

Um dispositivo de bloco é aquele que armazena informação em blocos de 
tamanho fixo, cada um com seu próprio endereço. Os tamanhos de blocos variam 
de 512 bytes a 32.768 bytes. A propriedade essencial de um dispositivo de 
blocos é que cada bloco pode ser lido ou escrito independente de todos os 
outros. Discos são dispositivos de blocos mais comuns.

O outro tipo de dispositivos de E/S é o dispositivo de caractere, o qual envia 
ou recebe um fluxo de caracteres, sem considerar qualquer estrutura de blocos. 
Ele não é endereçável e não dispõe de qualquer operação de 
posicionamento. Impressoras, interface de rede, mouses e a maior parte de 
outros dispositivos que são diferentes do disco são considerados dispositivos 
de caractere.


461
462
463
==== Sistema de Arquivo

(((Sistema de Arquivo)))
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480

Um problema em manter a informação dentro do espaço de endereçamento do 
processo é quando o mesmo termina, e sua informação é perdida. Em muitas 
aplicações a informação precisa ficar retida por semanas, meses ou até 
para sempre.

A solução usual para esse problema é armazenar a informação em disco, em 
unidades chamadas arquivos. Chamadas ao sistema são obviamente necessárias 
para criar, remover, ler e escrever arquivos. Antes que possa ser lido, um 
arquivo deve ser localizado no disco, aberto e depois de lido, fechado. Desse 
modo, chamadas ao sistema são fornecidas para realizar estas tarefas.

Para ter um local para guardar os arquivos, a maioria dos Sistemas Operacionais 
fornece o conceito de diretório como um modo de agrupar arquivos. São 
necessárias chamadas ao sistema para criar e remover diretórios. São também 
fornecidas chamadas para colocar um arquivo em um diretório e removê-los de 
lá. Entrada para diretórios também podem ser outros diretórios, formando 
481
uma hierarquia de diretórios como ilustrado na <<fig_sistema_de_arquivos>>.
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
482

483
484
[[fig_sistema_de_arquivos]]
.Sistema de Arquivos de um computador pessoal.
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
485
486
487
488
489
490
491
492
493
image::images/sistemas-operacionais/hierarquiaArquivos.png[scaledwidth="60%"]


Antes que possa ser lido ou escrito, um arquivo precisa ser aberto e, nesse 
momento as permissões são verificadas. Se o acesso ao arquivo, pelo usuário, 
for permitido, o sistema retorna o descritor de arquivo para usá-lo em 
operações subseqüentes. Se o acesso for proibido, um código de erro é 
retornado.

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
=== Conteúdos complementares

==== Evolução dos Sistemas Operacionais 

A história dos Sistemas Operacionais está diretamente ligada a arquitetura 
dos computadores em que os mesmos iriam executar. Nesta seção iremos abordar 
alguns exemplos desta evolução casada entre o hardware e o software.

===== Computadores a Vácuo (1945-1955)

Durante a segunda guerra mundial uma aceleração na evolução dos 
computadores ocorreu devido à necessidade de aplicações que pudessem quebrar 
a codificação das mensagens dos inimigos.

Neste período alguns pesquisadores como John Von Newman em Princeton, Konrad 
Zuse na Alemanha e Howard Aiken em Harvad construíram dispositivos capazes de 
computar através de tubos a vácuo, sendo estes equipamentos grandes o 
bastante para ocupar salas inteiras.

Nesta geração as instruções eram dadas diretamente em código de máquina. 
Não havia linguagem de programação (nem mesmo linguagem de montagem). E os 
Sistemas Operacionais não tinham qualquer funcionalidade, ou seja, não 
existiam.

===== Transistores e Sistemas em Lote (1955-1965)

(((Transistores)))

Com o surgimento dos transistores, os computadores se tornaram confiáveis e 
passaram a ser comercializados, isto em meados da década de 50.

O computador passou a ter mais clara a separação dos papeis de seus atores: 
os projetistas do computador, programadores e os operadores da máquina. Antes 
estes papeis eram realizados pelos mesmos desbravadores da Computação.

Para executar um programa, o programador desenvolvia seu algoritmo e entregava 
o cartão contendo seu código ao operador. O operador era responsável por 
entrar com o cartão no computador e acionar sua computação, ao final, a 
saída era impressa e o resultado entregue de volta ao programador.

Como os computadores iniciais eram muito caros, uma empresa compartilhava seus 
diversos processos em uma única máquina, para isso, desenvolveu-se o conceito 
de sistema em lote.

O *((sistema em lote))* trabalhava com fitas magnéticas que possuíam diversos 
programas a serem executados em sequencia. Um programa especial (ancestral do 
Sistema Operacional) carregava cada programa da fita, executava o programa e 
enviava sua saída para a impressora. Após o encerramento deste programa o 
sistema configurava a próxima atividade para entrar em execução. Este ciclo 
se repetia até acabarem todas as atividades do lote.

===== Circuitos Integrados e Multiprogramação (1965-1980)

(((Circuitos Integrados))) (((Multiprogramação)))

No início da década de 60, os computadores passaram a ter duas utilizações 
no mercado: os computadores científicos de larga escala para a ciência e a 
engenharia e os computadores comerciais adotados por bancos, companhias de 
seguro e departamentos de recursos humanos.

O principal responsável pela sua popularização foi a adoção da tecnologia 
de Circuitos Integrados que diminuiu o tamanho e o preço dos computadores. O 
IBM 360 foi o principal computador adotado pelos dois filões do mercado.

A principal mudança para os Sistemas Operacionais foi a criação da 
Multiprogramação, permitindo que vários programas pudessem compartilhar a 
memória principal ao mesmo tempo, cada uma com seu espaço reservado na 
memória, compartilhamento do espaço (<<fig_compartilhar_tempo_espaco>>(a)), 
podendo estas atividades serem executadas ao mesmo tempo.


[[fig_compartilhar_tempo_espaco]]
.Multiprogramação em um Sistema Operacional, tipos de compartilhamento dos recursos do computador.
image::images/sistemas-operacionais/Compart_tempo_espaco.png[scaledwidth="60%"]


Entretanto os computadores desta época não tinham mais de um núcleo de 
processamento (processador), logo era de responsabilidade do Sistema 
Operacional, dividir o uso do único processador com os diversos programas em 
execução durante pequenas frações de tempo, compartilhamento do tempo 
(<<fig_compartilhar_tempo_espaco>>(b)).

===== Computadores Pessoais (1980-1995)

(((Computadores Pessoais)))

Com o advento dos minicomputadores na década de 80, o computador passou a ser 
usado na vida privada das pessoas, passou-se a comprar computadores como se 
comprava vídeo cassete, surgindo assim o conceito de Computador Pessoal 
(Personal Computer - PC).

A popularização do computador se deu pelas interfaces gráficas propostas 
pelos Sistemas Operacionais, permitindo que leigos da área pudessem manipular 
suas aplicações pessoais, sem o auxílio dos antigos operados de máquina.

Os principais Sistemas operacionais da época foram o MS-DOS, precursor do 
Windows da Microsoft, o Unix, base para as diversas distribuições do Linux, 
Sistema Operacional aberto ao público (podendo usa-lo e modificar seu código) 
e o Mac OS, sistema criado pela Apple que trouxe a revolução na Interface 
Gráfica, adotado até hoje nos Sistemas Operacionais modernos.

No final da década de 80, começou-se a criar Sistemas Operacionais para 
manipular computadores interligados por redes de comunicação, chamados 
Sistemas Operacionais de Rede ou de Sistemas Distribuídos. Nele o usuário 
passou a controlar diversos computadores ao mesmo tempo, podendo até se logar 
em um computador remoto, localizado a quilômetros de distância, e controla-lo 
como se estivesse usando seu teclado ou mouse local.



==== A Guerra dos Sistemas Operacionais

image::images/sistemas-operacionais/appleXmicrosoft.png[scaledwidth="60%"]

Na década de 70 dois jovens estudantes tiveram visões distintas sobre o 
futuro dos computadores, na época dominada por grandes computadores da poderosa 
IBM. Seus nomes Steven Jobs e Bill Gates. O primeiro entendeu que o computador 
deveria ser usado por pessoas comuns para auxiliá-los em tarefas do trabalho e 
de casa, criando assim o conceito de Computador Pessoal, materializado pelo 
lançamento do Apple 2 no ano de 1977, que passou a ser o nome de sua empresa, 
a atual gigante Apple. Sua proposta era ter controle total sobre o 
desenvolvimento do computador, sendo responsável pelo projeto do hardware e do 
software. Inicialmente o design de seus produtos fizeram muito sucesso e a 
interface gráfica de seu sistema operacional (Mac OS), adota da empresa Xerox, 
foi tão revolucionária que grupos de usuários passaram a se intitular fãs 
dos produtos e seu mentor o profeta da revolução da Computação que iria 
livrar o mundo da opressão dos grandes computadores da IBM.

O segundo criou a Microsoft, e tinha uma visão mais voltada para o software, o 
seu Sistema Operacional, o Windows, foi pensado para funcionar em qualquer 
hardware,  fato que diminuiu a qualidade do mesmo. Entretanto aliado à 
funcionalidade da interface gráfica, copiado dos produtos da Apple, a um 
conjunto de aplicações muito funcionais nas empresas e em trabalhos 
domésticos como o Word, Excel, Powerpoint e etc (``Killed Applications''), o 
Sistema Operacional dos computadores comerciais por muito tempo passou a ser 
sinônimo de Windows. Na década de 90 a Microsoft se torna a maior empresa de 
informática do mundo, tornando seu dono o homem mais rico do planeta. Nada mal 
para um estudante pobre que só vendia software.

A disputa entre Jobs e Gates tinha se tornada pública, e na década de 90 a 
aposta total no software parecia ter sido declarada como campeã. Steven Jobs 
fora demitido da sua própria empresa e chegou a trabalhar no ramo da 
animação, tendo como frutos a empresa Pixel, hoje um renomado estúdio de 
desenhos animados, criadora do famoso desenho Toy Story.

No final da década de 90 Jobs retorna a Apple, e com sua capacidade de 
inovação e a busca constante pela perfeição no design de seus produtos 
sempre pensando na interface com o usuário, a Apple lança em série novos 
produtos revolucionários, o iPod, iPhone e iPad, além de uma série de 
computadores pessoais e seus notebooks sempre elegantes e modernos.  A ideia de 
ter o controle sobre o projeto do hardware influenciando o projeto do software 
permitiu que na primeira década do século XXI a Apple tomasse o posto de 
maior empresa de informática da Microsoft, chegando em 2012 a valer o dobro da 
concorrente. O iPod (tocador de música em mp3) foi o equipamento eletrônico 
Eduardo de Santana Medeiros Alexandre's avatar
tablet    
Eduardo de Santana Medeiros Alexandre committed
648
649
650
651
652
653
654
mais vendido da história, desbancando o posto do Walkman da Sony. 
O tablet iPad com seus jogos, aplicativos, design e usabilidade
tem conquistando um mercado que era exclusivo dos computadores.


////
O tablet iPad tirou a funcionalidade de leitura e entretenimento do computador pessoal, 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
655
este agora um aparelho para trabalho.
Eduardo de Santana Medeiros Alexandre's avatar
tablet    
Eduardo de Santana Medeiros Alexandre committed
656
////
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673

// FIXME frase acima: este agora um aparelho para trabalho ?

Agora sem o comando de Gates a Microsoft quer voltar a ser a empresa inovadora 
de antes, mas para isso tem que percorrer o caminho já trilhado por suas 
concorrentes. Em 2012 a Microsoft lançou seu primeiro computador, chamado 
Surface, um híbrido de notebook e tablet e para controlar seu hardware foi 
desenvolvido um novo Sistema Operacional, o Windows 8, com boa aparência mas 
com a velha obsessão da Microsoft de colocar seus softwares para serem 
compatíveis com vários hardwares, logo o Windows 8 foi adaptado para telas de 
toque e computadores com teclado e mouse, o que leva o usuário a confusões de 
navegabilidade.

O importante é que nesta briga ganham os usuários, com novas ferramentas mais 
amigáveis e novas funcionalidade para os dispositivos que um dia serviam 
apenas para cálculos científicos ou contabilidades empresariais.

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
674

675
=== Recapitulando
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
676
677
678
679
680
681
682
683
684
685
686
687
688

Neste capítulo introduzimos o conceito de Sistema Operacional, descrevendo 
suas duas principais funções paras os programadores de aplicações: 
Extensão da Máquina e Gerenciamento dos Recursos da máquina. Analisamos a 
evolução dos Sistemas Operacionais na história, ligados a evolução da 
arquitetura dos computadores a eles associados e ainda identificamos os tipos 
de Sistemas Operacionais baseado nas necessidades de cada arquitetura.

Por fim, descrevemos os principais conceitos de um Sistema Operacional na 
visão de seus usuários, estes conceitos são: Processos, Thread, seus estados 
e transições; Gerenciamento de Memória e Sistemas de Arquivos.


689
690
// FIXME Faltando ponte para o próximo capítulo.

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
691

692
=== Atividades
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716

1. Quais as principais funções de um Sistema Operacional? Para quem se 
destinam estas funções?


2. Descreva o que é um Processo. Quais seus possíveis estados? Quais são as 
transições entre estes estados?


3. Descreva três tipos de Sistemas Operacionais, destacando suas principais 
funções para a arquitetura do computador que o mesmo executa.


4. Durante a programação de uma aplicação de usuário, para que serve o uso 
de chamadas de sistema (system calls)?


5. Como o Sistema Operacional abstrai o uso dos dispositivos de E/S? Quais são 
os dois tipos de dispositivos de E/S manipulados pelo Sistema Operacional?


6. Qual a função do Sistema de Arquivo no Sistema Operacional?