Sistemas Operacionais

Propaganda
1
Sistemas Operacionais
1 – Introdução
1.1 - O que é Sistema Operacional?
Antes de definir o que é um sistema operacional, é necessário que se
entenda o conceito de sistema computacional. Um sistema computacional
consiste em um ou mais processadores, memórias principal e secundária,
dispositivos de entrada/saída como interfaces de redes, teclado, mouse, etc. e
interface com usuário, seja ela através de linha de comando ou gráfica. Em
outras palavras, um sistema computacional é o conjunto formado pelo
hardware e software.
Um sistema operacional é um programa ou conjunto de programas que
faz o gerenciamento do computador. Sua principal função é controlar o
funcionamento do computador, gerenciando a utilização e o compartilhamento
de recursos tais como processador, memória e dispositivos de entrada/saída.
São exemplos de sistemas operacionais os antigos D.O.S. (Disk Operation
System) e o Unix, e os atuais Windows XP, Windows Vista e Seven(7), Solaris,
Mac OS X, Linux, FreeBSD, Symbian, Android, iOS entre outros. Sendo alguns
de sistemas operacionais livres e distribuídos com o código-fonte aberto, outros
são sistemas proprietários. Também temos aqueles que foram desenvolvidos
exclusivamente para celulares e smartphones.
Se não existisse o sistema operacional, para trabalhar com o
computador, seria necessário um profundo conhecimento do hardware para
poder usar o computador. O sistema operacional serve como interface entre o
usuário e o hardware.
As funções de um sistema operacional são executadas por demanda, ou
seja, sempre que necessário e não de forma linear, como um programa
desenvolvido em Pascal ou C. Suas funções são executadas sempre que
algum evento ocorrer, como exemplo, a solicitação de desligar o computador
por parte do usuário.
2
Figura 1.1 – IBM-PC e MS-DOS
Figura 1.2 – Microsoft Windows Vista
3
Figura 1.3 – MAC OS X
Figura 1.4 – Mandriva Linux
4
Figura 1.5 – Kurumin Linux (Brasileiro)
1.2 - Funções Básicas
1.2.1 - Facilitar o acesso aos recursos do sistema
Um computador possui diversos dispositivos, como monitor, entradas
USB, disco rígido, etc. O sistema operacional facilita o acesso a estes
dispositivos, tornando essa operação transparente para os usuários. Por
exemplo, quando se vai ler ou gravar um arquivo em disco, você não sabe o
que esta ocorrendo, apenas executa o comando que faz a gravação, mas
quem cuida de todo o processo de gravação, que vai de posicionar o cabeçote
na trilha e no setor certo, para depois fazer a gravação, desde o início da
operação e até o término da mesma, é o sistema operacional. É o sistema
operacional que comanda todo o funcionamento do computador, seja de
hardware, seja de software.
5
1.2.2 - Compartilhamento de Recursos
O Sistema Operacional cuida de compartilhar os recursos de forma
organizada, como por exemplo, gerenciar o compartilhamento de uma
impressora em rede. Quando um usuário manda um arquivo para a impressora,
este arquivo é colocado em uma fila de impressão para depois ser impresso.
Se a impressora estiver compartilhada e algum outro usuário mandar outro
arquivo para a impressora, este entrará ao final da fila de impressão e, caso
haja algum arquivo sendo impresso, o sistema operacional irá esperar o
primeiro arquivo terminar a impressão para depois imprimir o segundo arquivo.
Tudo isto ocorre sem a intervenção do usuário, ou sem mesmo que o usuário
saiba o que está acontecendo.
1.3 - Máquina de Níveis
Antes
do
surgimento
do
Sistema
Operacional,
para
utilizar o
computador, fazer algum programa, era necessário um profundo conhecimento
do hardware que seria usado. Com o surgimento do Sistema Operacional, essa
operação ficou mais rápida e eficiente. O programador não precisava mais
conhecer o hardware para fazer seus programas, pois os usuários passaram a
interagir com o sistema operacional e não diretamente com o hardware.
O computador pode ser considerado como uma máquina de níveis, onde
existem dois níveis, sendo o hardware o nível mais baixo e o sistema
operacional o nível logo acima. Mas esses níveis podem, e devem, serem
expandidos
para
quantos
níveis
forem
necessários.
computadores estão estruturados da seguinte forma:
Atualmente,
os
6
Figura 1.6 – Máquina de Níveis
Pensando no computador na forma de máquina de níveis, para poder
trabalhar em apenas um nível não é necessário o conhecimento dos outros
níveis acima ou abaixo.
1.4 – Histórico
A evolução dos sistemas operacionais esta diretamente ligada à
evolução dos computadores em si. Vamos dividir o histórico dos Sistemas
Operacionais em décadas, desde o seu surgimento até os dias de hoje.
Antes da década de 1940, várias pesquisas foram feitas na tentativa de
criar uma máquina capaz de realizar cálculos de forma rápida e precisa.
Ordem Cronológica
- em 1642, o matemático francês Blaise Pascal inventou uma máquina de
somar;
- em 1673, o matemático e filósofo alemão Gottfried Leibniz, inventou uma
máquina capaz de somar e multiplicar.
- em 1820, o francês Charles Colmar inventou uma máquina capaz de efetuar
as quatro operações.
7
- em 1822, o matemático inglês Charles Babbage, considerado o pai do
computador, criou uma máquina para cálculos de equações polinomiais.
- em 1833, ele fez outra máquina capaz de executar qualquer tipo de operação
chamada Máquina Analítica, que nunca funcionou como deveria. Foi o invento
mais próximo do computador. Babbage tinha uma secretaria chamada Ada
Byron. Babbage cuidava da parte mecânica enquanto Ada cuidava das
instruções a serem executadas, por isso é considerada por muitos como a
primeira programadora da história.
- em 1854, o matemático inglês George Boole criou a lógica booleana, que é
usada até hoje.
- no fim do século XIX, Herman Hollerith criou os tão famosos cartões
perfurados e foi o fundador de uma empresa que viria a se tornar a IBM.
- na década de 1930, o alemão Konrad Zuse desenvolveu o Z-1. Nos EUA,
John Vicent Atanasoff e Clifford Berry desenvolveram uma máquina para
cálculo de equações lineares, que é considerada por muitos como sendo o
primeiro computador eletrônico da história.
- em 1937, o matemático inglês Alan Turing desenvolveu a idéia de uma
máquina capaz de executar uma seqüência de operações que ficou conhecida
como a Máquina de Turing.
1.4.1 – Década de 1940
Uma das coisas que alavancou a evolução da computação foi a
Segunda Guerra Mundial. Em 1943, Alan Turing estava envolvido em um
projeto de uma máquina para decifrar códigos. Nos EUA, em 1944 foi
construído o primeiro computador eletromecânico, batizado de Mark I,
desenvolvido pelo professor Howard Aiken, da Universidade de Harvard com
apoio da IBM e utilizava os mesmos princípios da Maquina Analítica de
Babbage.
O ENIAC (Eletronic Numerical Integrator and Calculator) é
considerado o primeiro computador digital e eletrônico. Desenvolvido pelos
engenheiros J. Presper Eckert e John W. Mauchly, na Universidade da
8
Pensilvânia. O ENIAC ficou em operação entre 1946 a 1955. Sua estrutura
possuía mais de 17 mil válvulas, 10 mil capacitores, 70 mil resistores e pesava
30 toneladas. Consumia cerca de 140 quilowatts e era capaz de realizar 5 mil
adições por segundo. O ENIAC não possuía sistema operacional e para ser
utilizado era necessário o conhecimento do hardware, sendo feita a
programação em painéis.
Figura 1.7 – Parte do ENIAC
O professor John von Neumann, imaginou uma máquina que utilizasse
uma memória única, onde os dados e a instruções seriam armazenados. Esse
conceito é conhecido como “programa armazenado”, que é a base da
arquitetura da computação atual, chamada de “Arquitetura von Neumann”.
9
1.4.2 – Década de 1950
O uso de transistor e da memória magnética contribuiu para o avanço da
computação. O transistor permitiu o aumento da velocidade de processamento
e a memória magnética o acesso mais rápido aos dados. Os primeiros
computadores transistorizados foram lançados comercialmente apenas no final
da década de 50.
Em 1946, os criadores do ENIAC, criaram o UNIVAC (Universal
Automatic Computer), que foi o primeiro computador que funcionou
efetivamente.
Em 1951, o MIT (Massachusetts Instituite of Technology – Instituto de
Tecnologia de Massachusetss) colocou em operação o primeiro computador
voltado para processamento em tempo real, o Whirlwind I, que foi o primeiro a
utilizar memória magnética.
Os programas eram feitos em cartões perfurados, que eram gravados
em uma fita de entrada que, depois era lida pelo computador, que executava os
programas um a um, gravando o resultado em uma fita de saída. A fita de
saída era lida e impressa. Esse tipo de processamento é chamado de
processamento em lote ou “processamento batch”.
O primeiro sistema operacional foi desenvolvido em 1953, pelos
usuários do IBM 701 do Centro de Pesquisas da General Motors, que depois
esse sistema seria reescrito para um IBM 704 pelos usuários da IBM.
Com o surgimento das primeiras linguagens de programação de alto
nível, como o FORTRAN, ALGOL e COBOL, os programas deixaram de ter
relação direta com o hardware. Os Sistemas Operacionais evoluíram também e
foram incorporados a eles rotinas para operações de Entrada/Saída
(Input/Output Control System). Isso liberava os programadores a não ter mais
que escrever essas rotinas.
No final da década de 1950, a Universidade de Manchester na Inglaterra
desenvolveu o sistema operacional Atlas, quem introduziu a ideia de
paginação por demanda.
10
1.4.3 – Década de 1960
A década de 1960 foi um marco nas inovações na área de Sistemas
Operacionais, houve aumento no poder de processamento e diminuição do
tamanho dos computadores. Surgiram às técnicas de multiprogramação,
multiprocessamento, time-sharing e memória virtual.
Antes da multiprogramação, enquanto um programa executava uma
operação de entrada/saída, o processador ficava ocioso, esperando a
operação terminar.
Em 1963, a Burroughs lança o B-5000 com o sistema operacional
Master Control Program (MCP), que implementava multiprogramação, memória
virtual, multiprocessamento assimétrico, e foi o primeiro sistema desenvolvido
em linguagem de alto nível. No mesmo ano, a Control Data Corporation, lançou
o primeiro supercomputador PCDC6600.
Em 1964, a IBM lança o System/360, que era uma máquina de porte
menor, mas que poderia ser expandido. O System/360 usava o sistema
operacional OS/360, que implementava todas as características anteriormente
citadas.
Cada
programa
poderia
utilizar
o
processador
por
intervalos
determinados de tempo, esse conceito é chamado de time-sharing, ou tempo
compartilhado. Nesta década também surgiram os terminais de vídeo e
teclados, dispositivos de E/S, permitindo a interação do usuário com a
aplicação enquanto era executada, de onde surgiu o conceito de sistema online.
Em 1965, a Bell Labs, o MIT e a General Eletrics estavam envolvidos no
projeto do sistema operacional MULTICS (Multiplexed Information and
Computing Service). O MULTICS implementava memória virtual com
paginação e segmentação.
A Digital Equipament Corp. (DEC), lançou o PDP-8, que era o primeiro
computador de pequeno porte. Em 1969, Ken Thompson criou o sistema
operacional Unix, utilizando um PDP-7.
11
1.4.4 – Década de 1970
Em 1970, a DEC lança o PDP-11, posteriormente o VAX/MMs, de 32
bits. Em 1971, a Intel produz seu primeiro microprocessador, o Intel 4004, e
três anos depois o 8080, utilizado no primeiro microcomputador, o Altair.
Posteriormente, a Zilog lançaria o processador Z80.
Em 1976, Steve Jobs e Steve Wozniak produzem o Apple II de 8 bits.
Neste ano surgiram as duas grandes do mundo dos softwares conhecidas
atualmente, a Apple e a Microsoft. O sistema operacional mais utilizado na
época era o CP/M(Control Program Monitor) da Digital Research.
Também em 1976, foi lançado o Cray-1, contendo 200.000 circuitos
integrados e realizando 100 milhões de operações de ponto flutuante por
segundo (100 MFLOPS).
Nesta década surgiram as redes distribuídas e, com elas, os protocolos
de comunicação como o TCP/IP. Também surgiram as primeiras LANs.
Duas linguagens de programação foram desenvolvidas nesta década.
Em 1971, Niklaus Wirth desenvolvem a linguagem Pascal. Em 1975, Dennis
Ritchie desenvolve a linguagem C, e juntamente com Ken Thompson,
reescrevem o sistema operacional Unix, em linguagem C, para um PDP-11.
1.4.5 – Década de 1980
Em 1981, a IBM cria o primeiro computador pessoal, chamado IBM PC.
O primeiro PC utilizava o processador Intel 8088 de 16 bits e o sistema
operacional MS-DOS (Microsoft Disk Operating System).
A Universidade de Berkeley na Califórnia desenvolveu sua própria
versão do Unix, chamada de BSD (Berkeley Software Distribution) e introduziu
vários melhoramentos, com destaque para o TCP/IP.
Em 1982, a Sun Microsystems lança as primeiras estações RISC com o
sistema operacional SunOS, que viria a se tornar o Solaris.
Com a evolução dos microcomputadores, surgiram os primeiros
sistemas operacionais com interface gráfica, com o Microsoft Windows e o IBM
12
OS/2. Surgem os sistemas operacionais de rede, como o Novell Netware e o
Microsoft LAN Manager.
Nota: entre os anos de 1982 e 1986, foi desenvolvido no Núcleo de
Computação Eletrônica
da Universidade Federal do Rio de
Janeiro
(NCE/UFRJ) o sistema operacional PLURIX para o computador PEGASUS,
também construído no NCE.
1.4.6 – Década de 1990
A
evolução
da
microeletrônica
permitiu
o
desenvolvimento
de
processadores cada vez mais baratos e menores, dispositivos de E/S menores,
mais rápidos e com maior capacidade de armazenamento. Os componentes
baseados em VLSI evoluem para ULSI (Ultra Large Scale Integration).
Houve o surgimento oficial da Internet, o protocolo TCP/IP passou a ser
padrão.
A arquitetura Cliente/Servidor passa a ser amplamente utilizada, com o
avanço da Internet.
A década de 1990 consolidou os sistemas operacionais baseados em
interface gráfica. Surgiram os sistemas operacionais Microsoft Windows, os
Unixes HP-UX, IBM-AIX e o Solaris.
Outro fato importante, o surgimento de sistemas operacionais como o
Linux, e o FreeBSD, e do movimento pelo software livre e Open Source.
1.4.7 – Dias atuais – Década de 2000
No final da década de 90, a Microsoft já lançava a família de sistemas
operacionais Windows 2000 e também o Windows Milenium. Alguns anos
após, o surgimento do Windows XP. O Windows XP também foi somente
considerado após o Service Pack 2, que praticamente reescreve o kernel do
sistema e incorpora diversos drivers e uma boa dose de segurança.
Em janeiro de 2007, a Microsoft lançou o sistema operacional Windows
Vista, que nada mais é do que uma versão mais pesada, com mais firulas de
segurança e telinhas engraçadas, porém pouco funcional e um consumidor
13
voraz de hardware, além de ser um péssimo gerenciador de recursos. Porém, a
Microsoft se redimiu dois anos mais tarde, com o Windows 7, um sistema
operacional muito bem feito, com visual atraente e boa usabilidade.
Outro fato importante é o advento e popularização de celulares e
smartphones, fazendo com que os sistemas operacionais para esses
dispositivos também evoluíssem bastante e novos sistemas surgiram, como o
caso do Google Android, o Blackberry da RIM, o Apple iOS e outros.
Figura 1.8 – Motorola Millestone com Android
1.5 – Tipos de Sistemas Operacionais
Os sistemas operacionais evoluíram continuamente com a evolução do
hardware. Muitos conceitos foram surgindo e mudando ou sendo substituídos
por outros e muitos outros foram apenas mudando de nome.
Com os sistemas operacionais aconteceu a mesma coisa. Continuaram
chamando sistema operacional, mas foram incorporados conceitos, uma
espécie de classificação. Os sistemas operacionais podem ser classificados em
três
tipos:
Sistemas
Monoprogramáveis
/
Monotarefa,
Sistemas
Multiprogramáveis / Multitarefa e Sistemas com Múltiplos Processadores ou
Sistemas Multiprocessados. A seguir vãos estudar esses três tipos.
14
1.5.1 – Sistemas Monoprogramáveis/Monotarefa
Sistemas Monoprogramáveis ou Sistemas Monotarefas, como o próprio
nome diz, são sistemas feitos para a execução de um único programa ou uma
única tarefa. Esses sistemas têm como características permitir que todos os
recursos computacionais fiquem exclusivamente dedicados a uma mesma
tarefa. Esses sistemas também ficam dedicados a um único usuário, chamados
assim de sistema monousuário.
Uma
vantagem
desse
tipo
de
sistema
operacional
é
a
fácil
implementação, pois não existe a preocupação com o compartilhamento de
recursos, como o uso da memória ou uma operação de entrada/saída. Uma
desvantagem é exatamente a monoprogramação, pois enquanto um programa
executa uma operação de entrada/saída o processador fica ocioso aguardando
o término da operação.
1.5.2 – Sistemas Multiprogramáveis/Multitarefa
Os Sistemas Multiprogramáveis ou Multitarefa são uma evolução dos
sistemas
monoprogramáveis.
Neste
tipo
de
sistema,
os
recursos
computacionais, como memória e processador são compartilhados por diversas
aplicações e usuários.
Nestes sistemas, diferentemente dos sistemas monoprogramáveis,
enquanto um programa espera por uma operação de entrada/saída, outros
programas podem estar em execução. Nestes casos, quem se preocupa em
fazer o gerenciamento do acesso aos recursos de forma correta é o sistema
operacional.
Uma das vantagens do uso desses sistemas é o tempo de resposta das
aplicações, que é mais curto, mas a implementação desses sistemas é muito
mais complexa devido ao compartilhamento de recursos.
Os Sistemas Multiprogramáveis podem ser classificados de acordo com
o número de usuários que interagem com o sistema. Eles podem ser
monousuários se apenas um usuário interage com o sistema, monopolizando
15
todos os recursos do mesmo, e podem ser multiusuário, se mais de um usuário
interage com o sistema ao mesmo tempo.
Outra classificação dada aos sistemas multiprogramáveis podem ser
devido a como o sistema faz o gerenciamento das aplicações. Os sistemas
podem ser divididos em sistemas batch(em lote), sistemas de tempo
compartilhado e sistemas de tempo real. Esses sistemas podem suportar mais
de um tipo de classificação.
1.5.2.1 – Sistemas Batch(em lote)
Os sistemas batch foram os primeiros sistemas multiprogramáveis que
surgiram. O processamento batch tem por característica de não exigir interação
com o usuário. Todos os programas são executados sequencialmente, um
após o outro, sendo gravados em uma fita de entrada, depois são processados
e gravados em uma fita de saída e então impressos.
Esses sistemas podem ser bastante eficientes devido à boa utilização do
processador, mas podem ter tempos de respostas longos. Atualmente, os
sistemas implementam ou simulam o processamento batch, mas não são
dedicadamente batch.
1.5.2.2 – Sistemas de tempo compartilhado
Sistemas de tempo compartilhado (time-sharing) permitem que
diversos programas utilizem o processador em um determinado espaço de
tempo, denominados time slice. Caso o programa não termine a execução
nesse espaço de tempo, o sistema operacional interrompe o processo e coloca
outro processo em execução, até que termine o time slice desse processo e o
processo anterior volte à execução.
Os sistemas de tempo compartilhado permitem a interação do usuário
com sistema, durante a execução de um processo. Desta forma é possível
verificar o status do processo, e se necessário, até interromper a sua
execução. Devido a esta interação, os sistemas de tempo compartilhado
também são chamados de sistemas on-line.
16
1.5.2.3 – Sistemas de tempo real
Os sistemas de tempo real são bem parecidos com o sistema de tempo
compartilhado, o que os diferencia é o tempo de processamento. Nos sistemas
de tempo real, o tempo de processamento deve obedecer a limites rígidos.
Nos sistemas de tempo real, um programa utiliza o processador o tempo
que for necessário ou até que apareça outro programa com prioridade mais
alta. Esse nível de prioridade é definido pela própria aplicação e não pelo
sistema operacional.
1.5.3 – Sistemas com Múltiplos Processadores
Os sistemas com múltiplos processadores possuem, como o próprio
nome diz, um ou mais processadores interligados e trabalhando em conjunto.
Esses sistemas permitem que vários programas sejam executados ao mesmo
tempo ou que um mesmo programa seja executado por vários processadores.
Os conceitos empregados nos projetos de sistemas com múltiplos
processadores se baseia nos mesmos princípios da multiprogramação. Além
disso, possuem outras características muito importantes, tais como:
- Escalabilidade: capacidade de ampliar o poder de processamento apenas
adicionando novos processadores.
- Disponibilidade: capacidade de manter o sistema operação mesmo em caso
de falha de algum processador, de forma transparente.
- Balanceamento de carga (load balancing): capacidade de distribuir a carga
de processamento entre os diversos processadores, a partir da carga de um
processador, o que garante um melhor desempenho.
Os sistemas com múltiplos processadores podem ser classificados, em
sistemas fortemente acoplados e sistemas fracamente acoplados. Essa
classificação é feita em função de como é feita à comunicação entre os
processadores e o compartilhamento da memória e dos dispositivos de
entrada/saída.
17
1.5.3.1 – Sistemas Fortemente Acoplados
Um sistema fortemente acoplado tem como principal característica
vários processadores dividindo a mesma memória principal e os mesmos
dispositivos de entrada/saída, todos sendo gerenciados por um único sistema
operacional. Esses sistemas também são conhecidos como sistemas
multiprocessados.
Em sistemas multiprocessados são divididos em SMP (Symetric
Multiprocessors – Multiprocessamento Simétrico) e NUMA(Non-Uniform
Memory Access). Em sistemas SMP todos os processadores acessam a
memória de forma uniforme e todos os processadores têm a mesma função.
1.5.3.2 – Sistemas Fracamente Acoplados
Um sistema fracamente acoplado possui dois ou mais computadores
conectados através de algum meio de comunicação. Cada sistema possui sua
própria memória, processador, dispositivos de entrada/saída e sistema
operacional.
Nos sistemas fracamente acoplados normalmente são sistemas de
pequeno porte computacional e estão interligados em rede ou por algum outro
meio de comunicação. Esses sistemas fazem uma intercomunicação entre os
hosts da rede, distribuindo o processamento e o armazenamento das
informações, onde surgiram os sistemas operacionais de redes e os sistemas
distribuídos.
Os sistemas operacionais de redes permitem o compartilhamento de
recursos entre os hosts da rede, de forma clara para o usuário. Em sistemas
distribuídos, o sistema operacional esconde esses detalhes dos usuários, como
se fosse um sistema único. Um exemplo de sistema distribuído são os clusters.
Em cluster, existem dois ou mais computadores interligados por uma rede de
alta performance e os usuários não sabem quantos são os nós do cluster.
Download