cap6-sistemas-operacionais.asc 32.5 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
75
76
image::images/sistemas-operacionais/camadas.png[scaledwidth="60%"]


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
88
89
90
91
92
93
94
95
96
97
98
99
A principal função da camada do Sistema Operacional é diminuir a 
complexidade e fornecer ao programador um conjunto de instruções de mais alto 
nível, sem a preocupação dos detalhes das instruções, como a 
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.

100
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
101
102
103
104
105
106
107
108
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 
o mesmo seja o Sistema Operacional de fato. Para podermos definir bem a 
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.

109
==== O Sistema Operacional como uma Máquina Estendida
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133

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.

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.

Esse programa que oculta a “verdade” ao programador sobre o hardware e 
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.

134
==== Gerenciador de Recursos
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162

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.

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).

O gerenciamento de recursos realiza o compartilhamento desses recursos de duas 
maneiras: no tempo e no espaço. Quando o recurso é compartilhado no tempo, 
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.

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.

163
=== Evolução dos Sistemas Operacionais 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
164

165
A história dos Sistemas Operacionais está diretamente ligada a arquitetura 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
166
167
168
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.

169
==== Computadores a Vácuo (1945-1955)
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184

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.

185
186
187
==== Transistores e Sistemas em Lote (1955-1965)

(((Transistores)))
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207

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 
208
enviava sua saída para a impressora. Após o encerramento deste programa o 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
209
210
211
sistema configurava a próxima atividade para entrar em execução. Este ciclo 
se repetia até acabarem todas as atividades do lote.

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

(((Circuitos Integrados))) (((Multiprogramação)))
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
215
216
217
218
219
220
221
222
223
224
225
226

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 
227
memória principal ao mesmo tempo, cada uma com seu espaço reservado na 
228
memória, compartilhamento do espaço (<<fig_compartilhar_tempo_espaco>>(a)), 
229
podendo estas atividades serem executadas ao mesmo tempo.
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
230
231


232
233
[[fig_compartilhar_tempo_espaco]]
.Multiprogramação em um Sistema Operacional, tipos de compartilhamento dos recursos do computador.
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
234
235
236
237
238
239
240
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 
241
(<<fig_compartilhar_tempo_espaco>>(b)).
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
242

243
244
245
==== Computadores Pessoais (1980-1995)

(((Computadores Pessoais)))
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275

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 
276
futuro dos computadores, na época dominada por grandes computadores da poderosa 
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
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 
mais vendido da história, desbancando o posto do Walkman da Sony. O tablete 
iPad tirou a funcionalidade de leitura e entretenimento do computador pessoal, 
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.

333
=== Tipos de Sistemas Operacionais
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
334
335
336
337
338
339
340
341
342

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 
343
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
344
345
346
347
como sofisticados servidores web e servidores para transações entre empresas.

Seus Sistemas Operacionais são, sobretudo, orientados para o processamento 
simultâneo de muitos jobs com quantidades volumosas de E/S. Esses sistemas 
348
oferecem normalmente três tipos de serviços: em lote ('batch'), processamento 
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
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
de transações e tempo compartilhado.

==== 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

Os Sistemas Operacionais de tempo real são caracterizados por terem o tempo 
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.

Existem dois tipos de Sistema Operacionais de tempo real, o crítico, onde as 
ações precisam ocorrer em determinados instantes. E o não crítico no qual o 
descumprimento ocasional de um prazo é aceitável. Sistemas multimídia 
pertencem a esta última categoria.

==== Sistema Operacional Embarcado

388
389
(((Sistemas embarcados)))

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
390
391
392
393
394
395
396
397
398
399
400
401
402
403
Sistemas embarcados são pequenos computadores, geralmente computadores de 
mão, celulares e set-top-box para TV Digital. Realizam um pequeno número de 
funções, seu Sistema Operacional deve lidar com restrições de tamanho, 
memória e consumo de energia.

==== 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.

404
=== Conceitos de Sistemas Operacionais
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
405
406
407
408
409

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.

410
==== Processos
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439

Um processo é basicamente um programa em execução. Associado a cada processo 
está o seu espaço de endereçamento e uma lista de posições de memória que 
este processo pode 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 
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.

440
===== Estados de Processos
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
441
442

Os processos em um Sistema Operacional possuem três estados ilustrados na 
443
<<fig_transicao_de_estados>>, estes estados são:
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
444
445
446
447
448
449
450

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.

451
452
[[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
453
454
455
image::images/sistemas-operacionais/estados.png[scaledwidth="60%"]


456
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
457
458
transições são:

459
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
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483

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.

484
485
486
===== Threads

(((Threads)))
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
487
488
489
490
491
492

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 
493
separados. Este conceito, chamado de multithread, pode ser observado na 
494
<<fig_processos_x_threads>>(b) a seguir.
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
495

496
497
[[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
498
499
image::images/sistemas-operacionais/processXthread.png[scaledwidth="60%"]

500
501
502
503
////
Faltou referenciar a parte b?
////

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
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.

A vantagem de se criar thread está na rapidez de sua criação e no menor 
gasto de recursos do sistema para o mesmo.

519
==== Gerenciamento de memória
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538

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 
memória, é denominado gerenciador de memória. Sua função é manter o 
controle de quais partes da memória estão em uso e quais não estão, 
alocando memória aos processos quando precisam e liberando a memória quando 
os processos terminam.

===== Monoprogramação

539
540
(((Monoprogramação)))

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
541
542
543
544
545
546
547
548
549
550
551
552
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.

===== Multiprogramação

553
554
(((Multiprogramação)))

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
555
556
557
558
559
560
561
562
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

563
564
(((Memória Virtual)))

Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
565
566
567
568
569
570
571
572
573
O conceito básico da Memória Virtual é que um programa pode está com sua 
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 
574
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
575
576
forem sendo exigidos pelo usuário.

577
578
579
==== Entrada/Saída (E/S)

(((Entrada & Saída)))
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
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

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.


608
609
610
==== Sistema de Arquivo

(((Sistema de Arquivo)))
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627

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 
628
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
629

630
631
[[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
632
633
634
635
636
637
638
639
640
641
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.


642
=== Recapitulando
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
643
644
645
646
647
648
649
650
651
652
653
654
655

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.


656
657
// FIXME Faltando ponte para o próximo capítulo.

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

659
=== Atividades
Eduardo de Santana Medeiros Alexandre's avatar
so    
Eduardo de Santana Medeiros Alexandre committed
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683

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?