SlideShare uma empresa Scribd logo
1 de 18
Baixar para ler offline
Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012.
Introdução aos Sistemas Operacionais.
Um sistema operacional é um programa que gerencia o hardware do computador, ele também
fornece uma base para os programas aplicativos e atua como intermediário entre o usuário e o hardware. Um
aspecto interessante dos sistemas operacionais é, o quanto eles assumem diferentes abordagens ao cumprir
estas tarefas. Os sistemas operacionais de mainframes são projetados basicamente para otimizar a utilização
de hardware, os sistemas operacionais de computadores pessoais suportam jogos complexos, aplicações
comerciais e tudo mais entre estes, já os sistemas de computadores do tipo palm são projetados de modo a
oferecer um ambiente no qual o usuário possa interagir facilmente com o computador para executar seus
programas. Assim, alguns sistemas operacionais são projetados para serem eficazes, outros para serem
eficientes e outros para atender a alguma combinação de ambos os aspectos.
Mas afinal o que é um Sistema Operacional?
Um sistema operacional é uma parte importante de quase todos os sistemas de computação. Um
sistema de computação pode ser grosseiramente dividido em quatro componentes: Hardware, sistema
operacional, programas aplicativos e usuário. Na figura 1, vemos a relação entre esses componentes.
Figura 1 - Visão abstrata dos componentes de um sistema computacional.
O sistema operacional oferece os meios para a utilização apropriada dos recursos durante a operação
do sistema de computação. Um sistema operacional é semelhante ao governo, ele não desempenha funções
úteis para ele mesmo, apenas proporciona um ambiente no qual outros possam desempenhar tarefas úteis. Os
sistemas operacionais podem ser compreendidos a partir de dois pontos de vistas: do usuário e do sistema.
O ponto de vita do usuário.
A perspectiva do usuário em relação ao computador varia dependendo da interface que estiver sendo
utilizada. A maioria dos usuários de computador senta-se diante de um computador pessoal, tal sistema é
projetado para que um único usuário monopolize seus recursos, de modo a maximizar o trabalho que o
usuário esteja executados. Neste caso, o sistema operacional é projetado principalmente para facilidade de
uso, com alguma atenção dada ao desempenho e nenhuma atenção à utilização de recursos. O desempenho é
importante para o usuário, mas não importa se a maioria do sistema permanece ociosa, esperando pela baixa
velocidade de I/O do usuário.
Alguns usuários colocam-se diante de um terminal conectado a um mainframe ou a um
minicomputador. Outros usuários fazem acesso ao mesmo computador por intermédio de outros terminais.
Estes usuários compartilham recursos e podem trocar informação. O sistema operacional é projetado para
maximizar a utilização dos recursos, assegurando que todo o tempo de CPU, memória e I/O disponíveis
sejam utilizados eficientemente e que nenhum usuário individual ocupe mais do que sua cota justa.
Outros usuários ocupam estações de trabalho, conectados em rede com outras estações de trabalho e
servidores. Estes usuários possuem recursos dedicados à sua disposição, mas também compartilham recursos
tais como a rede e os servidores. Neste ambiente, o sistema operacional é projetado para estabelecer um
Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012.
Introdução aos Sistemas Operacionais.
compromisso entre usabilidade individual e utilização de recursos.
Ultimamente, estão na moda muitas variedades de computadores do tipo palm. Estes dispositivos são
na maioria monousuários, usados apenas por usuários individuais. Alguns são conectados a redes. Devido às
limitações de energia e de interface, eles executam relativamente poucas operações remotas. Os sistemas
operacionais são projetados principalmente objetivando usabilidade individual, embora o desempenho em
relação ao tempo de vida da bateria também seja importante.
Alguns computadores são pouco ou nada visíveis ao usuário, por exemplo os computadores de bordo
de automóveis ou outros dispositivos. Basicamente eles e seus sistemas operacionais são projetados para
operar sem intervenção do usuário.
O ponto de vista do sistema.
Do ponto de vista do computador, o sistema operacional é o programa mais íntimo do hardware.
Podemos ver um sistema operacional como um alocador de recursos. Um sistema de computação tem muitos
recursos que podem ser exigidos para resolver um problema: tempo de CPU, espaço de memória, espaço de
armazenamento em arquivo, dispositivos de I/O, etc. O sistema operacional atua como o gerenciador destes
recursos. Ao lidar com solicitações por recursos numerosas e possivelmente concorrentes, o sistema
operacional precisa decidir como alocar tais recursos a programas e usuários específicos de modo que o
sistema de computação possa ser operado com eficiência e justiça.
Um enfoque ligeiramente diferente relacionado a um sistema operacional enfatiza a necessidade de
controlar os diversos dispositivos de I/O e os programas de usuário. Um sistema operacional é um programa
de controle que gerencia a execução dos programas de usuário para evitar erros e o uso impróprio do
computador. Ele focaliza especialmente a operação e o controle dos dispositivos de I/O.
Em geral, entretanto, não possuímos uma definição adequada de um sistema operacional. Sistemas
operacionais, existem porque eles representam uma maneira razoável para resolver o problema de criar um
sistema de computação utilizável. O objetivo fundamental dos sistemas de computação é executar os
programas dos usuários e facilitar a resolução dos problemas. É com este objetivo que o hardware do
computador é construído. Os programas aplicativos são desenvolvidos tendo em vista que o hardware puro
não é particularmente fácil de ser utilizado. Estes programas requerem determinadas operações comuns,
como as que controlam os dispositivos de I/O. As funções comuns de controle e alocação de recursos são
então reunidas em um tipo de software: o sistema operacional.
Além disso, não existe uma definição universalmente aceita sobre o que compõe o sistema
operacional. Uma forma simplista de ver é que ele inclui tudo que um vendedor monta quando você
encomenda “o sistema operacional”. Entretanto, os requisitos e facilidades de armazenamento incluídos
variam muito entre os sistemas.
Uma definição mais comum é que o sistema operacional é o programa (usualmente chamado de
Kernel) que permanece em execução no computador durante todo o tempo e todos os demais são programas
aplicativos.
Objetivos do sistema.
É mais fácil definir um sistema operacional pelo que ele faz do que pelo que ele é, mas mesmo isso
pode ser complicado. O primeiro objetivo de qualquer sistema operacional é a eficácia para o usuário.
Sistemas operacionais existem porque se espera que a computação seja mais fácil com eles do sem eles. Este
ponto de vista fica mais claro quando você observa os sistemas operacionais de PCs de pequeno porte.
O principal objetivo de outros sistemas operacionais é a operação eficiente do sistema de
computação. Este é o caso dos grandes sistemas operacionais, compartilhados e com multiusuários. Tais
sistemas são caros e portante é desejável fazê-los tão eficientes quanto possível. Estes dois objetivos são
muitas vezes contraditório. No passado eficiência era muitas vezes mais importante que eficácia. Assim,
muito da teoria dos sistemas operacionais concentrava-se no uso ótimo dos recursos computacionais. Os
sistemas operacionais também evoluíram através dos tempos.
Podemos dizer que os dois objetivos principais dos sistemas operacionais são:
• Estender a máquina: tem como premissa garantir que haja um ambiente muito mais fácil de
programa que o hardware, pois as formas que as chamadas de sistema são geradas para o sistema
operacional são mais simples que as chamadas geradas para o hardware.
• Gerenciar recursos: tem como premissa garantir que múltiplos usuários possam utilizar o sistema,
gerenciando e protegendo a memória, os dispositivos de E/S e outros recursos.
Para entendermos o que os sistemas operacionais são e o que eles fazem, devemos considerar a sua
Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012.
Introdução aos Sistemas Operacionais.
evolução. Traçando tal evolução, podemos identificar os elementos comuns dos sistemas operacionais e
perceber como e por que estes sistemas evoluíram do modo como fizeram. Podemos notar que os sistemas
operacionais e a arquitetura de computador tiveram grande influência mútua, ou seja, o desenvolvimento dos
sistemas operacionais se deu para facilitar o uso do hardware, depois os sistemas operacionais propuseram
mudanças no projeto do hardware para simplificá-lo. Nesta pequena revisão, observe como a identificação de
problemas típicos do sistema operacional levou à introdução de novas facilidades no hardware.
Podemos classificar os sistemas operacionais com base no hardware utilizado, da seguinte forma:
• Sistemas Mainframe;
• Sistemas de desktops;
• Sistemas multiprocessadores;
• Sistemas distribuídos;
• Sistemas agrupados;
• Sistemas de tempo real;
• Sistemas palmer;
Sistemas Mainframe.
Foram os primeiros computadores usados para atender a muitas aplicações comerciais e científicas.
Estes sistemas evoluíram desde os simples sistemas batch, onde o computador opera uma aplicação, até os
sistemas de tempo compartilhado, passando pelos sistemas multiprogramados.
Sistemas Batch.
Os computadores iniciais eram, fisicamente, máquinas enormes operadas a partir de uma console. Os
dispositivos de entrada corriqueiros eram as leitoras de cartão e os drives de fita. Os dispositivos comuns de
saída eram as impressoras de linha, os drives de fita e as perfuradoras de cartões. O usuário não interagia
diretamente com os computadores. Preferencialmente, o usuário preparava um job, que constituía do
programa, dados e de alguma informação de controle sobre a natureza do job, e o submetia ao operador do
computador. O job estava usualmente sob forma de cartões perfurados. Algum tempo mais tarde a saída
aparecia. A saída consistia no resultado do programa, bem como em uma imagem da memória final e do
conteúdo dos registradores, para depuração.
Os sistemas operacionais neste computadores iniciais era um tanto simples. Sua maior tarefa era
transferir automaticamente o controle de um job ao seguinte. O sistema operacional estava sempre residente
na memória (Figura 2).
Figura 2 - Esquema da memória para um sistema batch simples.
Para aumentar a velocidade de processamento, os operadores reuniam os jobs em lotes com
requisitos semelhante e os operavam no computador como um grupo. Assim, os programadores tinham que
deixar seus programas com o operador. O operador classificaria os programas em lotes com requisitos
semelhantes e, à medida que o computador ficasse disponível, operaria cada lote. A saída de cada job seria
enviada de volta ao respectivo programador.
Neste ambiente de execução, a CPU estava frequentemente ociosa. As velocidades dos dispositivos
mecânicos de I/O eram intrinsecamente mais baixas do que as dos dispositivos eletrônicos. Mesmo uma CPU
lenta trabalha em escala de microssegundo, com milhões de instruções por segundo. Uma leitora de cartões
rápida, por outro lado, pode ler 1200 cartões por minuto (ou 20 cartões por segundo). Desta forma, a
Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012.
Introdução aos Sistemas Operacionais.
diferença de velocidade entre a CPU e seus dispositivos de I/O pode ser da magnitude de três ordens ou
mais. Com o tempo, naturalmente, os avanças da tecnologia e a introdução dos discos resultaram em
dispositivo de I/O mais rápidos. Entretanto, as velocidades da CPU aumentaram com maior expressão, e,
assim, o problema não só não foi resolvido como foi exacerbado.
A introdução da tecnologia de discos permitiu ao sistema operacional deixar todos os jobs em um
disco, em vez de em uma leitora de cartões serial. Com acesso direto a vários jobs, o sistema operacional
pode executar o agendamento de jobs de modo a utilizar os recurso e executar as tarefas eficientemente.
Sistemas multiprogramados.
O aspecto mais importante do agendamento dos jobs é a capacidade de multiprogramar. Um único
usuário não pode, em geral, manter tanto a CPU como os dispositivos de I/O ocupados durante todo o tempo.
A multiprogramação aumenta a utilizada da CPU organizando os jobs de modo que a CPU tenha sempre um
deles para executar.
Figura 3 - Esquema de memória para um sistema multiprogramável.
A ideia é a seguinte: o sistema operacional mantém vários jobs na memória simultaneamente (Figura
3). Este conjunto de jobs é um subconjunto daqueles que estão agendados na fila, já que o número de jobs
que pode ser mantidos ao mesmo tempo na memória é usualmente muito menor do que o número que pode
estar na fila. O sistema operacional seleciona e começa a executar um dos jobs na memória. Em dado
momento, o job pode ter que aguardar que alguma tarefa, como uma operação de I/O, seja completada. Em
um sistema não multiprogramado, a CPU permaneceria ociosa. Em um sistema multiprogramado, o sistema
operacional simplesmente redireciona para um novo job e o executa. Quando este job precisar aguardar, a
CPU é redirecionada para um outro job, e assim por diante. Por fim, o primeiro job termina a espera e retoma
a CPU. Considerando que pelo menos um job precise entrar em execução, a CPU nunca permanece ociosa.
A multiprogramação é a primeira instância na qual o sistema operacional deve tomar decisões em
favor dos usuários. Sistemas operacionais multiprogramados são, portanto, bastante sofisticados. Todos os
jobs que entram no sistema são mantidos na fila de jobs. Esta fila compõe-se de todos os processos residentes
em disco aguardando alocação na memória principal. Se diversos jobs estão prontos para serem carregados
na memória e se não há espaço suficiente para todos, então o sistema deve escolher um dentre eles. A toma
desta decisão corresponde ao agendamento de jobs. Quando o sistema operacional seleciona um job na fila,
carrega-o na memória para execução. A manutenção de vários programas em memória ao mesmo tempo
requer alguma forma de gerenciamento de memória, que iremos estudar mais à frente. Além disso, se
diversos jobs estão prontos para execução ao mesmo tempo, o sistema deve escolher entre eles. Esta tomada
de decisão é o agendamento da CPU. Finalmente, múltiplos jobs executando concorrentemente exigem que
suas capacidades de afetar uns aos outros sejam limitadas em todas as fases do sistema operacional,
incluindo o agendamento de processos, o armazenamento em disco e o gerenciamento de memória.
Sistemas de tempo compartilhado.
Sistemas batch multiprogramados propiciam um ambiente onde os diversos recursos do sistema são
utilizados de forma eficiente, mas não propiciam a interação do usuário com o sistema computacional.
Tempo compartilhado (ou multitarefa) é uma extensão da multiprogramação. A CPU executa múltiplos jobs
permutando entre eles, mas as permutas ocorrem com tanta frequência que os usuários podem interagir com
cada programa enquanto ele está em execução.
Um sistema de computação interativo proporciona comunicação direta entre o usuário e o sistema. O
Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012.
Introdução aos Sistemas Operacionais.
usuário fornece instruções para o sistema operacional ou para um programa, diretamente, usando um teclado
ou um mouse, e aguarda resultados imediatos. Em contrapartida, o tempo de resposta precisa ser curto,
geralmente menor que 1 segundo.
Um sistema operacional de tempo compartilhado permite que muitos usuários compartilhem o
computador simultaneamente. Como cada ação ou comando em um sistema de tempo compartilhado tende a
ser breve, apenas um pequeno tempo de CPU é necessário para cada usuário. Como o sistema permuta
rapidamente de um usuário para o seguinte, cada usuário tem a impressão de que o sistema de computação
inteiro está dedicado ao seu uso, mesmo que ele esteja sendo compartilhado entre muitos usuários.
Um sistema operacional de tempo compartilhado usa o agendamento da CPU e a multiprogramação
para prover cada usuário com uma pequena porção do computador de tempo compartilhado. Cada usuário
tem pelo menos um programa separado na memória. Um programa carregado na memória e em execução é
comumente denominado um processo. Quando um processo entra em execução, ele normalmente é
executado por apenas um curto tempo antes que termine ou necessite executar I/O. O I/O pode ser interativo,
isto é, a saída é exibida para o usuário e a entrada vem do teclado ou outro dispositivo. Considerando que o
I/O interativo é executado normalmente na velocidade do usuário, pode levar um longo tempo para se
completar. Ao invés de deixar a CPU ociosa enquanto esta entrada interativa acontece, o sistema operacional
rapidamente a direcionará para o programa de algum outro usuário.
Sistemas operacionais de tempo compartilhado são mais complexos do que sistemas operacionais
multiprogramados. Em ambos, diversos jobs devem ser mantidos simultaneamente na memória, logo o
sistema precisa possuir gerenciamento e proteção de memória. Para obter um tempo de resposta razoável, os
jobs podem ser permutados entre a memória principal e o disco, que então funciona como uma memória
secundária. Um método comum para alcançar este objetivo é a memória virtual, uma técnica que permite a
execução de jobs que pode não estar completamente na memória. A principal vantagem do esquema de
memória virtual é que os programas podem ser maiores do que a memória física. Além disso, ela sintetiza a
memória principal em um grande e uniforme vetor de armazenamento, separando da memória física a
memória lógica visualizada pelo usuário. Este esquema libera os programadores da preocupação com as
limitação de armazenamento de memória.
Sistema de tempo compartilhado devem também prover um sistema de arquivos. O sistema de
arquivos reside em uma coleção de discos, deste modo, o gerenciamento de discos precisa estar disponível.
Além disso, os sistemas de tempo compartilhado proveem um mecanismo para execução concorrente, o que
requer sofisticados esquemas de agendamento da CPU. Para garantir a execução ordenada, o sistema deve
fornecer mecanismos para sincronização e comunicação de jobs e deve assegurar que os jobs não ficarão
bloqueados em um deadlock, eternamente esperando um pelo outro.
A ideia de tempo compartilhado foi demonstrada desde 1960, mas como os sistemas de tempo
compartilhado são difíceis e de construção dispendiosa, não se tornaram comuns até o início dos anos 1970.
Embora algum processamento batch ainda seja executado, a maioria dos sistemas atuais são de tempo
compartilhado. Consequentemente, a multiprogramação e o tempo compartilhado são os temas centrais dos
modernos sistemas operacionais.
Sistemas de Desktop.
Os computadores pessoais apareceram nos anos 1970. Durante sua primeira década, as CPUs dos
PCs não possuíam as facilidades necessárias para proteger um sistema operacional dos programas do usuário.
Os sistemas operacionais dos PCs não eram, portanto, nem multiusuário nem multitarefa. Entretanto, os
objetivos destes sistemas operacionais mudaram com o tempo, em vez de maximizar a utilização da CPU e
dos periféricos, os sistemas operacionais optaram por maximizar a eficácia e a capacidade de resposta para o
usuário.
Os sistemas operacionais para estes computadores beneficiaram-se, de diversas maneiras, do
desenvolvimento dos sistemas operacionais para mainframes. Os microcomputadores tornaram-se logo
capazes de adotar algumas das tecnologias desenvolvidas para os sistemas operacionais maiores. Por outro
lado, os custo de hardware para os microcomputadores são suficientemente baixos para que indivíduos façam
uso isolado do computador, e assim a utilização da CPU não é mais um problema primordial. Deste modo,
algumas das decisões de projeto tomadas em relação aos sistemas operacionais de mainframes podem não ser
apropriadas para sistemas menores.
Outras decisões de projeto ainda se aplicam. Por exemplo, a proteção de arquivo não era, em
Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012.
Introdução aos Sistemas Operacionais.
princípio, necessária para uma máquina pessoa. Entretanto, estes computadores agora estão interligados a
outros computadores em redes locais ou a outras conexões da Internet. Quando outros computadores e outros
usuários podem ter acesso aos arquivos de um PC, a proteção de arquivos torna-se novamente uma
característica necessária ao sistema operacional. A falta de tal proteção tem facilitado a programas
predadores a destruição de dados em sistemas menos robustos. Características avançadas de tempo
compartilhado, como memória protegida e permissões de arquivos, não são suficientes, por si só, para
salvaguardar de ataques um sistema. Recentes quebras de segurança tem demonstrado isso.
Sistemas multiprocessadores.
A maioria dos sistemas, até então, são sistemas de um único processador, isto é, eles têm somente
uma CPU principal. Entretanto, os sistema multiprocessadores (ou sistemas paralelos ou sistemas fortemente
acoplados) estão crescendo em importância. Tais sistemas possuem mais que um processador em íntima
comunicação, compartilhando o barramento do computador, o relógio e, algumas vezes, a memória e os
dispositivos periféricos.
Os sistemas multiprocessadores têm três vantagens principais:
• Throughput aumentado: com o aumento do número de processadores, espera-se obter mais trabalho
executado em menor tempo. A taxa incremental de velocidade com N processadores não é N, antes, é
menor do que N. Quando múltiplos processadores cooperam em uma tarefa, está implícita uma certa
quantidade de overhead para que se mantenham todas as partes trabalhando corretamente. Este
overhead, mais a concorrência por recursos compartilhados, diminui o ganho esperado dos
processadores adicionais. Do mesmo modo, um grupo de N programadores trabalhando em íntima
cooperação não dá, como resultado, um montante de trabalho realizado aumentado N vezes.
• Economia de escala: sistemas multiprocessadores podem economizar mais dinheiro que múltiplos
sistemas com um único processador, porque eles podem compartilhar periféricos, memória de massa
e suprimentos de energia. Se vários programas operam sobre o mesmo conjunto de dados, é mais
barato armazenar estes dados em um disco, fazendo com que todos os processadores os
compartilhem, do que manter muitos computadores com discos locais e muitas cópias dos dados.
• Confiabilidade aumentada: se as funções podem ser distribuídas apropriadamente entre vários
processadores, então a falha de um processador não interrompe o sistema, apenas o torna mais lento.
Se temos dez processadores e um falha, então cada um dos ove processadores remanescentes deve
compartilhar o trabalho do processador que falhou. Assim, o sistema inteiro opera somente 10%
mais devagar, em vez de falhar completamente. Esta capacidade de continuar fornecendo serviço
proporcionalmente ao nível do hardware remanescente é chamada degradação limpa. Sistemas
projetados para atender à degradação limpa são também chamados de sistemas tolerantes a falhas.
A operação continuada em presença de falhas requer um mecanismo para permitir que a falha seja
detectada, diagnosticada e, se possível, corrigida.
Os sistemas multiprocessadores mais comuns hoje em dia usam multiprocessamento simétrico
(SMP), no qual cada processador executa uma cópia idêntica do sistema operacional, e estas cópias
comunicam-se umas com as outras quando necessário. Alguns sistemas usam multiprocessamento
assimétrico, no qual a cada processador é designada uma tarefa específica. Um processador mestre controla o
sistema, os demais processadores ou se dirigem ao mestre para instruções ou possuem tarefas predefinidas.
Este esquema define um relacionamento mestre-escravo. O processador mestre planeja e aloca trabalho para
os processadores escravos.
O SMP significa que todos os processadores são pares, não existe um relacionamento mestre-escravo
entre eles. Cada processador executa concorrentemente uma cópia do sistema operacional. O benefício deste
modelo é que muitos processadores podem operar simultaneamente, N processos podem ser executados se
houve N CPUs, sem causar uma deterioração de desempenho significativa. Entretanto, devemos controlar
cuidadosamente o I/O para assegurar que os dados alcancem o processador apropriado. Além disso, como as
CPUs estão separadas, uma pode ficar ociosa enquanto outra está sobrecarregada, resultando em ineficiência.
Estas ineficiências podem ser evitadas se os processadores compartilharem determinadas estruturas de dados.
Um sistema multiprocessador deste tipo possibilitará que processos e recursos sejam compartilhados
dinamicamente entre os vários processadores.
A diferença entre os multiprocessadores simétrico e assimétrico pode ser resultante tanto do
hardware quando do software. Um hardware especial pode diferenciar os processadores múltiplos, ou o
software pode ser escrito para permitir somente um mestre e vários escravos. À medida que os
Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012.
Introdução aos Sistemas Operacionais.
microprocessadores tornam-se mais baratos e mais poderosos, funções de sistema operacional adicionais são
atribuídas aos processadores escravos.
Sistemas distribuídos.
Uma rede é, simplesmente, uma via de comunicação entre dois ou mais sistemas. Sistemas
distribuídos dependem da interconexão em rede para realizarem comunicação, os sistemas distribuídos
conseguem compartilhar tarefas computacionais e oferecer um rico conjunto de facilidades aos usuários.
Sistemas Cliente-Servidor.
À medida que os PCs têm se tornado mais rápidos, mais poderosos e mais baratos, os projetistas têm
se afastado da arquitetura de sistemas centralizados. Terminais conectados a sistemas centralizados estão
agora sendo suplantados por PCs. Ao mesmo tempo, as funcionalidades de interface com usuário que
costumavam ser manejadas diretamente por sistemas centralizados estão, cada vez mais, sendo manejados
por PCs. Como resultado, os sistemas centralizados atuam, hoje, como sistemas servidores para satisfazer
requisitos gerados por sistemas clientes.
Sistemas paralelos.
O crescimento das redes de computadores tem influenciado profundamente o desenvolvimento
recente dos sistemas operacionais. Quando os PCs foram introduzidos nos anos 1970, eles eram projetados
para uso pessoal e eram geralmente considerados computadores monousuários. No anos 1980, com o início
da expansão do uso público da Internet para correio eletrônico, ftp, etc, muitos computadores se conectaram
a redes de computadores. Com a introdução da Web, na metade dos anos 1990, a conectividade para rede
tornou-se componente essencial de um sistema computacional.
Em contraste com os sistemas fortemente acoplados vistos anteriormente, as redes de computadores
usadas nestas aplicações compõem-se de uma coleção de processadores que não compartilham memória ou
relógio. Em vez disso, cada processador tem sua memória local. Os processadores intercomunicam-se
através de diversas linhas de comunicação, como barramentos de alta velocidade ou linhas telefônicas. Estes
sistemas são usualmente conhecidos como sistemas fracamente acoplados.
Alguns sistemas operacionais absorveram o conceito de redes e sistemas distribuídos além da noção
de prover conectividade em rede. Um sistema operacional de rede é um sistema operacional que oferece
facilidades como compartilhamento de arquivos e que inclui um esquema de comunicação que permite a
troca de mensagens entre processos diferentes em computadores diferentes. Um computador que execute um
sistema operacional de rede age autonomamente em relação a todos os outros computadores na rede. Um
sistema operacional distribuído é um ambiente menos autônomo. Os diferentes sistemas operacionais
comunicam-se suficientemente próximos para cria a ilusão de que somente um único sistema operacional
controla a rede.
Sistemas agrupados (clusters).
Como os sistemas paralelos, os sistemas agrupados reúnem múltiplos PCs para desenvolver trabalho
computacional. Entretanto, estes sistemas diferem dos sistemas paralelos no sentido de que são compostos de
dois ou mais sistemas individuais acoplados. A definição do termo agrupamento não é correta, muitos
pacotes comerciais divergem com relação ao que um sistema agrupado é, e por que uma forma é melhor do
que outra. A definição geralmente aceita é que os sistemas agrupados compartilham memória e são
proximamente conectados.
O agrupamento é habitualmente utilizado para proporcionar alta disponibilidade ou então alto
desempenho. Uma camada de software de agrupamento opera nos nós do agrupamento.
Apesar dos avanços da computação distribuída, a maioria dos sistemas não oferece sistemas de
arquivo distribuído de uso geral. Portanto, a maioria dos agrupamentos não permite acesso compartilhado
aos dados no disco. Por isso, os sistemas de arquivos distribuídos devem oferecer controle e segurança de
acesso aos arquivos para garantir que não ocorram operações conflitantes.
Sistemas de tempo real.
Uma outra forma de sistema operacional de uso específico é o sistema de tempo real. Um sistema de
tempo real é usado quando requisitos de tempo rígidos são exigidos para a operação de um processador ou
para o fluxo de dados, assim, ele é muito usado como dispositivo de controle em uma aplicação dedicada. Os
sensores trazem dados para o computador. O computador deve analisar os dados e possivelmente ajustar os
controles para modificar as entradas do sensor. Sistemas que controlam experimentos científicos, sistemas
médicos de processamento de imagem, sistemas de controle industrial e certos sistemas de exibição são
sistemas de tempo real. Alguns sistemas de injeção de combustível em automóveis, controladores de uso
Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012.
Introdução aos Sistemas Operacionais.
doméstico e sistemas bélicos são também sistemas de tempo real.
Um sistema de tempo real possui restrições de tempo fixas e bem definidas. O processamento tem
que ser realizado dentro das restrições definidas, ou o sistema irá falhar. Um sistema de tempo real somente
funciona corretamente quando retorna o resultado correto dentro das suas restrições de tempo.
Os sistemas de tempo real são de duas espécies: rígidos e flexíveis. Um sistema de tempo real rígido
garante que tarefas críticas sejam completadas em tempo. Esta meta requer que todos os retardos no sistema
sejam confinados, desde a recuperação de dados armazenados até o tempo que o sistema operacional leva
para concluir qualquer solicitação a ele dirigida. Tais restrições de tempo definem as facilidades que estão
disponíveis em sistemas de tempo real rígidos.
Sistemas de tempo real flexível são menos restritivos, visto que uma tarefa de tempo real crítica tem
prioridade sobre outras tarefas e retém esta prioridade até que se complete. Como nos sistemas de tempo real
rígidos, os retardos do kernel do sistema operacional precisam ser confinados: uma tarefa de tempo real não
pode ser mantida indefinidamente em espera até que o kernel possa processá-la. O tempo real flexível é um
objetivo alcançável que pode ser mesclado a outros tipos de sistemas.
Sistemas palmer.
Estes sistemas incluem celulares, PDAs, tablets, etc. Os desenvolvedores destes sistemas encontram
inúmeras dificuldades, a maior parte devido à limitação do tamanho dos dispositivos e ao seu hardware, que
na maioria das vezes é muito conflitante. Como decorrência, o sistema operacional e as aplicações precisam
gerenciar eficientemente o uso do hardware. Nestes sistemas o maior objetivo é maximizar a duração da
bateria.
Migração de características.
De modo geral, um exame dos sistemas operacionais para mainframes e microcomputadores mostra
que características antes disponível somente em mainframes foram adotadas pelos microcomputadores. Os
mesmos conceitos são apropriados para as diversas classes de computadores, como podemos ver na figura
abaixo.
Figura 4 – Migração de conceitos e características dos sistemas operacionais
Estruturas do Sistema Operacional.
Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012.
Introdução aos Sistemas Operacionais.
Um sistema operacional proporciona o ambiente dentro do qual os programas são executados.
Internamente, os sistemas operacionais diferem grandemente em sua composição, sendo organizados de
acordo com muitas linhas diferentes. O projeto de um novo sistema operacional é uma tarefa importante. Os
objetivos do sistema devem estar bem definidos antes que o projeto se inicie. O tipo do sistema requerido é a
base que orienta as escolhas entre vários algoritmos e estratégias.
Um sistema operacional pode ser analisado segundo diversos critérios. Um deles é o exame dos
serviços que ele oferece. Um outro é a avaliação da interface oferecida para usuários e programadores. Um
terceiro é a desmontagem do sistema em seus componentes e interconexões. Vamos explorar estes três
aspectos dos sistemas operacionais, analisando os pontos de vista de seus usuários, programadores e
projetistas. Considerando quais serviços um sistema operacional oferece, como eles são oferecidos e que
metodologias existem para o projeto de tais sistemas.
Componentes do sistema.
Podemos criar um sistema tão grande e complexo quanto um sistema operacional apenas
particionando-o em módulos menores. Cada módulo deve ser uma porção bem delineada do sistema, com
entradas, saídas, e funções cuidadosamente definidas. Obviamente, nem todos os sistemas têm a mesma
estrutura. Entretanto, muitos sistemas modernos compartilham a função de suporte aos componentes
apresentados a seguir.
Gerenciamento de processos.
Um programa não faz coisa alguma a menos que suas instruções sejam executadas por uma CPU.
Um processo pode ser conceituado como um programa em execução. Um programa de usuário de tempo
compartilhado, como um comilador, é um processo. Um programa de processamento de texto sendo operado
por usuário individual em um PC é um processo. Uma tarefa do sistema, como enviar uma saída para uma
impressora, é também um processo. Por ora, podemos considerar um processo como sendo um job ou um
programa de tempo compartilhado, porém iremos entender que o conceito é mais geral.
Um processo precisa de certos recursos – incluindo tempo de CPU, memória, arquivos e dispositivos
de I/o – para desempenhar suas tarefas. Estes recursos podem ser fornecidos ao processo quando ele é criado
ou podem ser a ele alocados durante a sua execução. Além dos vários recursos lógicos e físicos que um
processo obtém quando é criado, diversos dados de inicialização (ou entradas) podem ser passados a ele
durante sua execução.
É importante enfatizar que um programa, por si só, não é um processo, um programa é uma entidade
passiva, como os conteúdos de um arquivo armazenado em um disco, enquanto um processo é uma entidade
ativa, com um contador de programa indicando a próxima instrução a ser executada. A execução de um
processo deve ser sequencial. A CPU executa uma instrução do processo após a outra, até que o processo se
complete. Além disso, em cada momento, no máximo uma instrução relacionada ao processo é executada.
Assim, embora dois processos possam ser associados ao mesmo programa, eles não são jamais considerados
duas sequências de execução separadas. É comum haver um programa que gera muitos processos enquanto
está em execução.
O processo é a unidade de trabalho de um sistema. Um sistema consiste em uma coleção de
processos, alguns dos quais processos do sistema operacional (aqueles que executam código do sistema) e os
demais processos de usuário (aqueles que executam código do usuário). Todos estes processos podem, em
potencial, operar concorrentemente, multiplexando a CPU entre eles.
O sistema operacional é responsável pelas seguintes atividades, juntamente com o gerenciamento de
processos:
• Criar e apagar os processos tanto do sistema como de usuário.
• Suspender e recomeçar processos.
• Fornecer mecanismos de sincronização de processos.
• Fornecer mecanismos para comunicação entre processos.
• Fornecer mecanismos para manipulação de deadlock.
Gerenciamento de memória principal.
Conforme já estudado a memória principal é essencial para a operação de um moderno sistema de
computação. A memória principal é um grande vetor de palavras ou bytes que varia em tamanho, de centenas
de milhares a bilhões. Cada palavra ou byte tem seu próprio endereço. A memória principal é um repositório
Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012.
Introdução aos Sistemas Operacionais.
de dados rapidamente acessíveis, compartilhados entre a CPU e os dispositivos de I/O. O processador central
lê instruções a partir da memória principal durante o ciclo de busca de instrução, e tanto lê como grava dados
também a partir da memória principal durante o ciclo de busca de dados. As operações de I/O implementadas
via DMA também leem e grava dados na memória principal. A memória principal é em geral o único grande
dispositivo de armazenamento que a CPU é capaz de endereçar e acessar diretamente.
Para que um programa seja executado, ele precisa ser mapeado para endereços absolutos e carregado
na memória. Enquanto o programa executa, ele acessa instruções e dados na memória gerando esses
endereços absolutos. Em dado momento, o programa termina sua execução, seu espaço de memória é
declarado disponível, e o próximo programa pode ser carregado e executado.
No sentido de melhorar tanto a utilização da CPU quanto a velocidade de resposta do computador
para seus usuários, é desejável que se mantenham diversos programas em memória. Muitos esquemas
diferentes de gerenciamento de memória estão disponíveis, e a eficiência dos diversos algoritmos depende da
situação em particular. A seleção de um esquema de gerenciamento de memória para um sistema específico
depende de muitos fatores – em especial, do projeto de hardware do sistema. Cada algoritmo requer seu
próprio suporte de hardware.
O sistema operacional é responsável pelas seguintes atividades relacionadas ao gerenciamento de
memória:
• Monitorar as porções de memória que estão sendo correntemente usadas e por quem estão sendo
usadas.
• Decidir que processos estão prontos para ser carregados na memória quando o espaço de memória
tornar-se disponível.
• Alocar e desalocar espaço de memória conforme necessário.
Gerenciamento de arquivos.
O gerenciamento de arquivos é um dos componentes mais visíveis de um sistema operacional. Os
computadores podem armazenar informação em diferentes tipos de mídia física. Cada tipo de mídia tem suas
próprias características e sua própria organização física. Cada mídia é controlada por um dispositivo, como
um drive de disco ou de fita que também tem características únicas. Estas propriedades incluem velocidade
de acesso, capacidade, taxa de transferência de dados e método de acesso (sequencial ou randômico).
Para o uso adequado do sistema de computação, o sistema operacional oferece uma visão lógica e
uniforme do armazenamento da informação. O sistema operacional abstrai-se das propriedades físicas dos
seus dispositivos de armazenamento focalizando a definição de uma unidade de armazenamento lógico, o
arquivo. O sistema operacional organiza arquivos em mídias físicas e acessa estes arquivos via dispositivos
de armazenamento.
Um arquivo é uma coleção de informação relacionada, definida pelo seu criador. Comumente, os
arquivos contêm programas (em ambas as formas, fonte e objeto) e dados. Arquivos de dados podem ser
numéricos, alfabéticos ou alfanuméricos. Os arquivos podem ter formato livre ou podem ser rigidamente
formatados. Um arquivo consiste em uma sequência de bits, bytes, linhas ou registros cujos significados são
definidos por seus criadores. O conceito de arquivo é extremamente genérico.
O sistema operacional implementa o conceito abstrato de arquivo gerenciando mídias de
armazenamento de massa, como discos e fitas, e os dispositivos que as controlam. Além disso, os arquivos
são normalmente organizados em diretórios para facilitar seu uso. Finalmente, quando múltiplos usuários
fazem acesso aos arquivos, podemos querer exercer controle sobre quem pode acessar estes arquivos e de
que modos eles podem ser acessados.
O sistema operacional é responsável pelas seguintes atividades relacionada ao gerenciamento de
arquivos:
• Criar e apagar arquivos.
• Criar e apagar diretórios.
• Suportar primitivos para manipulação de arquivos e diretórios.
• Mapear arquivos em memória secundária.
• Criar cópias de arquivos em mídias de armazenamento não voláteis.
Gerenciamento do sistema de I/O.
Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012.
Introdução aos Sistemas Operacionais.
Um dos objetivos de um sistema operacional é tornar transparente para o usuário as peculiaridades
dos dispositivos específicos de hardware. Por exemplo no Unix, as peculiaridades dos dispositivos de I/O são
escondidas do corpo do sistema operacional em si pelo subsistema de I/O. Este subsistema consistem em:
• Um componente de gerenciamento de memória que inclui o armazenamento em buffers, o
armazenamento em memória cache e o spooling.
• Uma interface genérica para drivers de dispositivos.
• Drivers para dispositivos específicos de hardware.
Somente o drivers conhece as peculiaridades do dispositivo específico ao qual está associado.
Gerenciamento de memória secundária.
O principal objetivo de um sistema de computação é executar programas. Estes programas, com o
dados que acessam, devem estar na memória principal, ou memória primária, durante a execução. Com a
memória principal é muito pequena para acomodar todos os dados e programas, e como os dados que ela
mantém se perdem quando falta energia, o sistema de computação deve fornecer memória secundária para
copiar a memória principal. A maioria dos modernos sistemas de computadores utilizam discos como o
principal meio de armazenamento on-line tanto para programas quanto para dados. A maior parte dos
programas – incluindo compiladores, montadores, rotinas de classificação, editores e formatadores – é
armazenada em disco até que seja carregada na memória, e deste modo utilizam o disco tanto como fonte
quanto como destino de seu processamento. Assim, o monitoramento adequado da memória em disco é de
importância primordial para um sistema de computação.
O sistema operacional é responsável pelas seguintes atividades relacionadas ao gerenciamento de
disco:
• Gerenciamento de espaço livre.
• Alocação de espaço de armazenamento.
• Programação de alocação de disco.
Como a memória secundária é utilizada como frequência, precisa ser utilizada de modo eficiente. A
velocidade de operação de um computador pode depender das velocidades do subsistema de disco e dos
algoritmos que manipulam este subsistema.
Conexão em rede.
Um sistema distribuído é uma coleção de processadores que não compartilham memória,
dispositivos periféricos ou um relógio. Ao contrário, cada processador tem sua própria memória principal
local e seu relógio, comunicando-se uns com os outros por intermédio de diversas linhas de comunicação,
como barramento de alta velocidade ou redes. Os processadores em um sistema distribuído variam em
tamanho e função. Podem incluir pequenos microprocessadores, estações de trabalho, minicomputadores e
grandes sistemas de computadores de uso geral.
Os processadores no sistema são conectados por intermédio de uma rede de comunicações, que pode
ser configurada de diferentes modos. A rede pode ser total ou parcialmente conectada. O projeto da rede de
comunicações deve considerar o roteamento das mensagens e as estratégias de conexão, além dos problemas
de concorrência e segurança.
Um sistema distribuído integra, em um único sistema coerente, sistemas fisicamente separados e
possivelmente heterogêneos, proporcionando ao usuário o acesso aos vários recursos que o sistema possui. O
acesso a um recurso compartilhado permite aumentar a velocidade de processamento, a funcionalidade, a
disponibilidade dos dados e a confiabilidade. Os sistemas operacionais normalmente generalizam o acesso à
rede, considerando-o como uma forma de acesso a arquivo, com detalhes de conexão sendo incluídos no
driver do dispositivo de interface de rede. Os protocolos que dão origem aos sistema distribuídos podem ter
grande influência na utilidade e popularidade desses sistemas.
Sistema de proteção.
Se um sistema de computação tem múltiplos usuários e permite a execução concorrente de múltiplos
processos, então os vários processos precisam ser protegidos das atividades uns dos outros. Com este
objetivo, alguns mecanismos garantem que arquivos, segmentos de memória, CPU e outros recursos possam
ser operados somente por aqueles processos que tenham recebido autorização adequada do sistema
Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012.
Introdução aos Sistemas Operacionais.
operacional.
A proteção define-se por qualquer mecanismo que objetive controlar o acesso dos programas,
processos ou usuários aos recursos de um sistema de computação. Este mecanismo deve oferecer os meios
para especificação dos controles a serem impostos e os meios para sua imposição.
A proteção pode aumentar a confiabilidade identificando erros latentes nas interfaces entre os
subsistemas componentes. A identificação precoce de erros de interface pode, com frequência, prevenir a
contaminação de um subsistema saudável por outro que esteja com defeito. Um recurso desprotegido não
pode se defender do uso (ou do mau uso) feito por um usuário desautorizado ou incompetente. Um sistema
orientado para a proteção oferece meios para distinguir entre utilização autorizada e desautorizada.
Sistema interpretador de comandos.
Para um sistema operacional, um dos mais importantes programas de sistema é o interpretador de
comandos, que é a interface entre o usuário e o sistema operacional. Alguns sistemas operacionais incluem o
interpretador de comandos no kernel, outros sistemas tratam o interpretador de comandos como um
programa especial que está em operação quando um job é iniciado ou quando um usuário estabelece sua
primeira conexão (em sistemas de tempo compartilhado).
Muitos comandos são fornecidos ao sistema operacional por declarações de controle. Este programa
é algumas vezes denominado interpretador de cartões de controle ou interpretador de linhas de comando e é
frequentemente conhecido como shell. Sua função é simples: obter a próxima declaração de comando e
executá-la.
Os sistemas operacionais são muitas vezes diferenciados na área do shell, com um interpretador de
comandos amigável tornando o sistema mais agradável para alguns usuários. Shells mais poderosos,
complexos e difíceis de aprender são preferidos por outros usuários.
As próprias declarações de comandos lidam com a criação e o gerenciamento de memória
secundária, com o gerenciamento de memória principal, com o acesso ao sistema de arquivos, com a
proteção e com a conexão em rede.
Serviços do sistema operacional.
Um sistema operacional oferece um ambiente para a execução de programas. Ele fornece certos
serviços aos programas e aos usuários desses programas. Naturalmente, os serviços específicos fornecidos
diferem de um sistema operacional para outro, mas podemos identificar classes comuns. Esses serviços do
sistema operacional destinam-se a atender ao programador, tornando mais fácil a tarefa de programar.
• Execução do programa: o sistema deve ser capaz de carregar um programa na memória e executá-lo.
O programa deve poder terminar sua execução tanto no modo normal quanto anormal (indicando o
erro).
• Operações de I/O: um programa em execução pode requerer I/O. Este I/O pode envolver um arquivo
ou um dispositivo de I/O. Para dispositivos específicos, podem ser necessárias funções especiais.
Para obter eficiência e proteção, os usuários normalmente não podem controlar os dispositivos de
I/O diretamente. Portanto, o sistema operacional deve fornecer os meios para se fazer I/O.
• Manipulação dos sistema de arquivos: o sistema de arquivos é de particular interesse. Obviamente,
os programas precisam ler e gravar arquivos. Os programas necessitam também criar e apagar
arquivos pelo nome.
• Comunicações: em muitas circunstâncias, um processo precisa trocar informação com outro. Tal
comunicação pode ocorrer de dois modos mais expressivos. O primeiro ocorre entre processos que
estão sendo executados no mesmo computador, o segundo ocorre entre processos que estão sendo
executados em computadores diferentes interligados por uma rede. As comunicações podem ser
implementadas através da memória compartilhada ou pela técnica de troca de mensagens, na qual
pacotes de informação são movimentados entre processos pelo sistema operacional.
• Detecção de erros: o sistema operacional precisa estar constantemente atento a possíveis erros.
Podem ocorrer erros no hardware da CPU ou da memória, nos dispositivos de I/O, e no programa do
usuário. Para cada tipo de erro, o sistema operacional tem que executar a ação apropriada, de modo e
garantir o processamento correto e contínuo.
Além disso, existe um outro conjunto de funções do sistema operacional cujo objetivo não é auxiliar
Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012.
Introdução aos Sistemas Operacionais.
o usuário, mas assegurar a operação eficiente do próprio sistema operacional. Sistemas com múltiplos
usuários podem obter eficiência compartilhando os recursos do computador entre os usuários.
• Alocação de recursos: quando múltiplos usuários estão conectados ao sistema ou múltiplos jobs
estão em execução ao mesmo tempo, é necessário alocar recursos a cada um deles. Muitos tipos de
recursos diferentes são gerenciados pelo sistema operacional. Alguns podem ter associado um código
de alocação especial, enquanto outros podem ter um código muito mais geral para solicitação e
liberação.
• Contabilização: queremos ter controle sobre quais usuários utilizam os recursos computacionais e
quantos e quais tipos de recursos são utilizados. Os registros obtidos podem ser usados para
contabilizar (e assim os usuários podem ser cobrados) ou, simplesmente, para acumular estatísticas
de uso. As estatísticas de uso podem se constituir em ferramenta valiosa para os pesquisadores que
desejem reconfigurar o sistema com o objetivo de melhorar os serviços de computação.
• Proteção: os proprietários de informação armazenada em um sistema de computação multiusuário
podem desejar controlar o uso daquela informação. Quando diversos processos disjuntos são
executados concorrentemente, não deveria ser possível que um processo interferisse nos demais
processos ou no próprio sistema operacional. A proteção envolve a garantia de que todo acesso aos
recursos do sistema seja controlado. A segurança do sistema contra influências externas é também
importante. Esta segurança começa com cada usuário tendo que se autenticar junto ao sistema,
normalmente por meio de uma senha, para ter acesso autorizado aos recursos, continua com a defesa
dos dispositivos externos de I/O contra tentativas de acesso inválido, e como o registro de todas
essas conexões, para identificação de quebras de segurança. As precauções precisam ser
implementadas para que um sistema seja protegido e seguro. Uma cadeia é tão forte quanto o seu elo
mais fraco.
Chamada de sistema.
As chamadas de sistema constituem a interface entre um processo e o sistema operacional. Estas
chamadas estão em geral disponíveis como instruções em linguagem de montagem e são usualmente
incluídas nos diversos manuais usados pelos programadores.
Determinados sistemas permitem que as chamadas de sistema sejam feitas diretamente a partir de um
programa em linguagem de mais alto nível, caso em que as chamadas normalmente tomam a forma de uma
função predefinida ou de chamadas a sub-rotinas. Elas podem gerar uma chamada a uma rotina especial em
tempo de execução que faz a chamada de sistema, ou a chamada de sistema pode ser gerada diretamente.
Diversas linguagens foram adotadas em substituição à linguagem de montagem na programação de
sistemas. Essas linguagens permitem que as chamadas de sistema sejam diretamente realizadas.
Chamadas de sistema ocorrem de diferentes maneiras, dependendo do computador em uso. Com
frequência, faz-se necessária mais informações do que simplesmente o nome da chamada de sistema
desejado. O tipo exato e a quantidade de informação variam de acordo com o sistema operacional em
particular e com a chamada.
Três métodos gerais são utilizados para passar parâmetros. A solução mais simples é passar os
parâmetros em registradores. Entretanto, em alguns casos pode haver mais parâmetros do que registradores.
Nestes casos, os parâmetros são em geral armazenados em um bloco ou tabela na memória, e o endereço do
bloco é passado como um parâmetro em um registrador (Figura 5). Os parâmetros podem também ser
colocados, ou incluídos, na pilha pelo programa, e extraídos da pilha pelo sistema operacional. Alguns
sistemas operacionais preferem os métodos do bloco ou da pilha porque estas abordagens não limitam o
número ou o tamanho dos parâmetros que estão sendo passados.
Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012.
Introdução aos Sistemas Operacionais.
Figura 5 – Passagem de parâmetros em forma de tabela.
As chamadas de sistema podem ser classificadas, de modo geral, em cinco categoriais principais:
controle de processo, gerenciamento de arquivo, gerenciamento de dispositivo, manutenção de informação e
comunicações. Na lista abaixo temos um resumo dos principais tipos de chamadas de sistema normalmente
fornecidas por um sistema operacional.
• Controle de processo:
◦ end, abort, load, execute, create process, terminate process, get process atributes, set process
atributes, wait for time, wait event, signal event e allocate and free memory.
• Gerenciamento de arquivo:
◦ create file, delete file, open, close, read, write, reposition, get file attributes e set file attributes.
• Gerenciamento de dispositivo:
◦ request device, release device, read, write, reposition, get device attributes, set device attributes e
logically attach or detach devices.
• Manutenção de informação:
◦ get time or date, set time or date, get system data, set system data, get process, file, or device
attributes e set process, file, or device attributes.
• Comunicações:
◦ create, delete communication conection, send, receive messages, transfer status information e
attach or detach remote devices.
Estrutura do sistema.
Um sistema tão grande e complexo como um moderno sistema operacional deve ser cuidadosamente
desenvolvido para funcionar apropriadamente e ser facilmente modificado. Uma abordagem comum é
particionar a tarefa em pequenos componentes, em vez de desenvolver um sistema monolítico. Cada um
deste módulos deve ser uma porção bem definida do sistema, com entradas, saídas e funções cuidadosamente
definidas.
Estruturas simples.
Muitos sistemas comerciais não possuem uma estrutura bem definida. Frequentemente, tais sistemas
operacionais começam como sistemas pequenos, simples e limitados e depois crescem além do seu escopo
original. O MS-DOS é um exemplo de um sistema com esta característica. Ele foi originalmente projetado e
implementado por poucas pessoas que não tinham ideia de que ele se tornaria tão popular. Foi escrito para
oferecer o máximo de funcionalidades no menor espaço, e assim não foi cuidadosamente dividido. Podemos
ver sua estrutura na Figura 6.
Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012.
Introdução aos Sistemas Operacionais.
Figura 6 – A estrutura de camadas do MS-DOS.
Figura 7 – A estrutura do sistema UNIX
O UNIX é um outro sistema que foi inicialmente limitado pela funcionalidade do hardware. Ele
compõe-se de duas partes separadas: o kernel e os programas de sistema. O kernel é constituído de uma série
de interfaces e drivers de dispositivos, que foram adicionados e expandidos ao longo dos anos em que o
UNIX evoluiu. Na Figura 7 podemos visualizar o sistema operacional UNIX tradicional estruturado. Tudo
que está abaixo da interface de chamada de sistema e acima do hardware físico é o kernel. O kernel fornece o
sistema de arquivos, o agendamento da CPU, o gerenciamento de memória e outras funções do sistema
operacional até as chamadas do sistema. Tudo somado, trata-se de um enorme montante de funcionalidades
combinadas em um único nível. Isso torna o UNIX difícil de ser expandido, pois mudanças em uma seção
poderiam afetar outras áreas de modo adverso.
As chamadas de sistema definem a API para o UNIX, o conjunto de programas de sistema
comumente disponíveis define a interface do usuário. As interfaces de usuário e de programador definem o
contexto que o kernel deve suportar.
Novas versões do UNIX são projetadas para utilizar hardware mais avançado. Dado o suporte de
hardware próprio, os sistema operacionais podem ser divididos em peças menores e mais apropriadas do que
aquelas permitidas pelos sistemas UNIX ou MS-DOS originais. O sistema operacional pode, então, deter um
controle muito maior sobre o computador e sombre as aplicações que fazem uso desse computador. Os
implementadores têm mais liberdade para fazer mudanças nas funções internas do sistema e para criar
sistemas operacionais modulares. Sob a abordagem topdown, as funcionalidades e facilidades globais são
determinadas e separadas em componentes. Esta separação permite aos programadores ocultar informação,
eles ficam livres, portanto, para implementar as rotinas de baixo nível conforme lhes pareça melhor, contanto
que a interface externa da rotina permaneça inalterada e que a própria rotina desempenhe a tarefa esperada.
Abordagem em Camadas.
A modularização de um sistema pode ser feita de muitas maneiras. Um dos métodos é a abordagem
Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012.
Introdução aos Sistemas Operacionais.
em camadas, na qual o sistema operacional é particionado em um número de camadas (ou níveis), cada uma
delas construída sobre camadas mais baixas. A camada da base (camada 0) é o hardware, a mais alta (camada
N) é a interface com o usuário.
Uma camada do sistema operacional é uma implementação de um objeto abstrato definido como o
encapsulamento dos dados e das operações que podem manipular aqueles dados. Uma camada típica do
sistema operacional pode ser vista na Figura 8. Consiste em estruturas de dados e em um conjunto de rotinas
que podem ser invocadas por camadas de nível mais alto. A camada M, por sua vez, pode invocar operações
em camadas de nível mais baixo.
Figura 8 – Uma camada do sistema operacional.
A principal vantagem da abordagem em camada é a modularidade. As camadas são selecionadas de
tal modo que cada uma delas use apenas funções (ou operações) e serviços das camadas de nível mais baixo.
Este enfoque simplifica a depuração e a verificação do sistema.
Cada camada é implementada focalizando-se apenas aquelas operações supridas pelas camadas de
nível mais baixo. A camada não precisa saber como as operações de nível mais baixo estão implementadas,
ela precisa saber, somente, o que estas operações fazem. Deste modo, cada camada esconde das camadas de
nível mais alto, a existência de certas estruturas de dados, operações e hardware.
A principal dificuldade da abordagem em camadas diz respeito ao cuidado na definição das camadas,
porque uma camada só pode usar as que estão abaixo dela. Um outro problema concernente às
implementações em camadas é que elas tendem a ser menos eficientes do que outras opções.
Estas limitações têm provocado, nos últimos anos, algumas críticas contra a estruturação em
camadas. Ultimamente, tem-se preferido um número menor de camadas com mais funcionalidades,
mantendo-se a maior parte das vantagens do código modularizado e evitando-se os difíceis problemas de
definição e interação das camadas
Microkernels.
À medida que o sistema operacional UNIX expandiu-se, o kernel tornou-se grande e difícil de
gerenciar. Na metade dos anos 1980, pesquisas na Universidade de Carnegie Mellon desenvolveram um
sistema operacional chamado Mach que modularizou o kernel, utilizando o enfoque do microkernel. Este
método estrutura o sistema operacional removendo todos os componentes não essenciais do kernel e
implementando-os como programas de nível de sistema e de usuário. O resultado é um kernel menor. Há
pouco consenso sobre quais serviços deveriam permanecer no kernel e quais deveriam ser implementados no
espaço do usuário. Entretanto, os microkernels proveem, em geral, gerenciamento de processos e de
memória mínimos, adicionalmente a facilidade de comunicação.
A principal função do microkernel é proporcionar facilidade de comunicação entre o programa
cliente e os diversos serviços que estão também operando no espaço do usuário. A comunicação é fornecida
por transmissão de mensagens.
Os benefícios da opção microkernel incluem a facilidade de expandir o sistema operacional. Todos
os novos serviços são adicionados ao espaço do usuário e, consequentemente, não exigem a modificação do
kernel. Quando o kernel precisa ser modificado, as mudanças tendem a ser menores, porque o microkernel é
um kernel reduzido. O sistema operacional resultante é mais fácil de ser transportador de uma arquitetura de
Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012.
Introdução aos Sistemas Operacionais.
hardware para outra. O microkernel também proporciona maior segurança e confiabilidade, já que a maioria
dos serviços opera como processos de usuário. Se um serviço falhar, o restante do sistema permanecerá
intocável.
Projeto e implementação do sistema.
Objetivos de projeto.
O primeiro problema que enfrentamos ao projeto um sistema é a definição dos seus objetivos e
especificações. No nível mais alto, o projeto do sistema será afetado pela escolha do hardware e do tipo do
sistema: batch, tempo compartilhado, monousuário, multiusuário, distribuído, tempo real, ou de uso geral.
Além do nível de projeto mais alto, os requisitos podem ser muito difíceis de especificar. Eles podem
ser divididos em dois grupos básicos: objetivos do usuário e objetivos do sistema.
Os usuários desejam certa propriedades óbvias em um sistema: ele deve ser eficaz e fácil de usar,
fácil de aprender, confiável, seguro e rápido. Naturalmente, estas especificações não são particularmente
úteis ao projeto do sistema, já que não há consenso geral sobre como alcançar tais objetivos.
Um conjunto semelhante de requisitos pode ser definido por aquelas pessoas responsáveis por
projetar, criar, manter e operar o sistema: o sistema operacional deve ser fácil de projetar, implementar e
manter, deve ser flexível, confiável, livre de erros e eficiente. De novo, estes requisitos são vagos e não
possuem solução geral.
Não temos solução única para o problema de definir os requisitos para um sistema operacional. O
grande número de sistema mostra que requisitos diferentes podem resultar em uma grande variedade de
soluções para ambientes diferentes.
Mecanismos e políticas.
A especificação e o projeto de um sistema operacional é uma tarefa altamente criativa. Embora
nenhum livro possa dizer como fazê-lo, existem princípios gerais de engenharia de software especialmente
aplicáveis aos sistemas operacionais.
Um importante princípio é a separação entre política e mecanismo. Os mecanismos determinam
como fazer algo, as políticas determinam o que será feito. Por exemplo, o timer é um mecanismo para
assegurar a proteção da CPU, mas a decisão de por quanto tempo o timer deve ficar ativo, para um
determinado usuário, é uma decisão de política.
A separação entre política e mecanismo é importante para a flexibilidade. As políticas provavelmente
se modificam no espaço ou no tempo. No pior caso, cada mudança na política irá requerer alteração no
mecanismo subjacente. Um mecanismo geral seria mais desejável. Uma mudança na política iria, então,
exigir a redefinição de apenas alguns parâmetros do sistema.
Sistemas operacionais baseados em microkernel levam ao extermo a separação entre mecanismo e
política, implementando um conjunto básico de blocos de construção primitivos. Estes blocos são quase
independentes de política, permitindo que mecanismos e políticas mais avançados sejam adicionados via
módulos de kernel criados pelo usuário ou por meio dos próprios programas do usuário. No outro extremo
está um sistema como Apple MacOS, no qual tanto o mecanismo como a política são incluídos no sistema
para obrigar a percepção global do sistema. Todas as aplicações têm interfaces semelhantes porque a própria
interface é construída no kernel.
Devem ser realizadas decisões de política para todos os problemas de agendamento e de alocação de
recursos. Sempre que a questão for como em vez de o que, é um mecanismo que deve ser determinado.
Implementação.
Uma vez que um sistema operacional tenha sido projetado, ele deve ser implementado.
Tradicionalmente, os sistemas operacionais têm sido escritos em linguagem de montagem. Agora, entretanto,
eles têm sido, com frequência escritos em linguagens de mais alto nível.
As vantagens de usar uma linguagem de mais alto nível, ou pelo menos uma linguagem de
implementação de sistemas, para implementar sistemas operacionais são as mesmas levadas em conta
quando a linguagem é usada para programas aplicativos: o código pode ser escrito mais rapidamente, é mais
fácil de compreender e depurar. Além disso, os avanças na tecnologia de compiladores irão melhorar o
código gerado para o sistema operacional inteiro por meio de uma simples recompilação. Finalmente, um
sistema operacional é mais fácil de portar se for escrito em uma linguagem de alto nível.
Os que se opõem à implementação de um sistema operacional em linguagens de mais alto nível
alegam como desvantagens a redução da velocidade e o aumento dos requisitos de armazenamento. Embora
um programador experto em linguagem de montagem possa produzir rotinas pequenas e eficientes para
Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012.
Introdução aos Sistemas Operacionais.
grandes programas, um moderno compilador é capaz de desenvolver análises complexas e de aplicar
otimizações sofisticadas, produzindo excelente código. Os processadores modernos possuem fortes
interligações e múltiplas unidades funcionais, que podem manipular dependências complexas e sobrepujar a
limitada habilidade da mente humana em cuidar de detalhes.
Assim como é verdade para outros sistemas, as mais significativas melhorias de desempenho nos
sistemas operacionais parecem ser mais o resultado de estruturas de dados e algoritmos melhores do que da
excelência do código em linguagem de montagem. Além disso, embora os sistemas operacionais sejam
extensos, somente uma pequena quantidade de código é crítica para o alto desempenho. Depois que o
sistema é escrito e está funcionando corretamente, rotinas que representem gargalos podem ser identificadas
e substituídas por equivalentes em linguagem de montagem.

Mais conteúdo relacionado

Mais procurados

Aula 3 - Sistemas operacionais - Linux
Aula 3 - Sistemas operacionais - LinuxAula 3 - Sistemas operacionais - Linux
Aula 3 - Sistemas operacionais - LinuxLucasMansueto
 
Sistemas Operativos (Operating Systems)
Sistemas Operativos (Operating Systems)Sistemas Operativos (Operating Systems)
Sistemas Operativos (Operating Systems)Pepe Rocker
 
Apresentação de Linux Ubuntu
Apresentação de Linux UbuntuApresentação de Linux Ubuntu
Apresentação de Linux UbuntuCDP_Online
 
Funções e caracteristicas de um so
Funções e caracteristicas de um soFunções e caracteristicas de um so
Funções e caracteristicas de um soMiriamMiguel
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas OperativosPmpc10
 
Sistema Operativo Open Source
Sistema Operativo Open SourceSistema Operativo Open Source
Sistema Operativo Open SourceDiogo Silva
 
Sistema operacional
Sistema operacionalSistema operacional
Sistema operacionalMichael Soto
 
Sistemas operativos módulo2 - ms dos
Sistemas operativos   módulo2 -  ms dosSistemas operativos   módulo2 -  ms dos
Sistemas operativos módulo2 - ms dosteacherpereira
 
Linux - Sistema Operacional
Linux - Sistema Operacional Linux - Sistema Operacional
Linux - Sistema Operacional Carine Furlanetto
 
Linux Como Tudo Começou
Linux Como Tudo ComeçouLinux Como Tudo Começou
Linux Como Tudo Começouguestaa94fe
 
Noções básicas de Sistemas Operacionais
Noções básicas de Sistemas OperacionaisNoções básicas de Sistemas Operacionais
Noções básicas de Sistemas OperacionaisLuciano Crecente
 
Conceitos de sistemas operacionais
Conceitos de sistemas operacionaisConceitos de sistemas operacionais
Conceitos de sistemas operacionaisAparicio Junior
 
A evolução histórica dos sistemas operativos
A evolução histórica dos sistemas operativosA evolução histórica dos sistemas operativos
A evolução histórica dos sistemas operativosAndré Dias
 

Mais procurados (20)

Linux
LinuxLinux
Linux
 
Aula03 - Informática Básica
Aula03 - Informática BásicaAula03 - Informática Básica
Aula03 - Informática Básica
 
Aula 3 - Sistemas operacionais - Linux
Aula 3 - Sistemas operacionais - LinuxAula 3 - Sistemas operacionais - Linux
Aula 3 - Sistemas operacionais - Linux
 
Sistemas Operativos (Operating Systems)
Sistemas Operativos (Operating Systems)Sistemas Operativos (Operating Systems)
Sistemas Operativos (Operating Systems)
 
Apresentação de Linux Ubuntu
Apresentação de Linux UbuntuApresentação de Linux Ubuntu
Apresentação de Linux Ubuntu
 
Informática Básica - Aula 03 - Hardware
Informática Básica - Aula 03 - HardwareInformática Básica - Aula 03 - Hardware
Informática Básica - Aula 03 - Hardware
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
SO-04 Escalonamento de Processos
SO-04 Escalonamento de ProcessosSO-04 Escalonamento de Processos
SO-04 Escalonamento de Processos
 
Funções e caracteristicas de um so
Funções e caracteristicas de um soFunções e caracteristicas de um so
Funções e caracteristicas de um so
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
 
Trabalho linux
Trabalho linuxTrabalho linux
Trabalho linux
 
Sistema Operativo Open Source
Sistema Operativo Open SourceSistema Operativo Open Source
Sistema Operativo Open Source
 
Sistema operacional
Sistema operacionalSistema operacional
Sistema operacional
 
Sistemas operativos módulo2 - ms dos
Sistemas operativos   módulo2 -  ms dosSistemas operativos   módulo2 -  ms dos
Sistemas operativos módulo2 - ms dos
 
Barramentos
Barramentos Barramentos
Barramentos
 
Linux - Sistema Operacional
Linux - Sistema Operacional Linux - Sistema Operacional
Linux - Sistema Operacional
 
Linux Como Tudo Começou
Linux Como Tudo ComeçouLinux Como Tudo Começou
Linux Como Tudo Começou
 
Noções básicas de Sistemas Operacionais
Noções básicas de Sistemas OperacionaisNoções básicas de Sistemas Operacionais
Noções básicas de Sistemas Operacionais
 
Conceitos de sistemas operacionais
Conceitos de sistemas operacionaisConceitos de sistemas operacionais
Conceitos de sistemas operacionais
 
A evolução histórica dos sistemas operativos
A evolução histórica dos sistemas operativosA evolução histórica dos sistemas operativos
A evolução histórica dos sistemas operativos
 

Destaque

Introducao a Sistemas Operacionais
Introducao a Sistemas OperacionaisIntroducao a Sistemas Operacionais
Introducao a Sistemas OperacionaisIsaac Vieira
 
Questoesde fso
Questoesde fsoQuestoesde fso
Questoesde fsopaulocsm
 
Estruturas de Sistemas Operacionais
Estruturas de Sistemas OperacionaisEstruturas de Sistemas Operacionais
Estruturas de Sistemas OperacionaisIsaac Vieira
 
Questões de Sistemas Operacionais
Questões de Sistemas Operacionais Questões de Sistemas Operacionais
Questões de Sistemas Operacionais Joicy Souza
 
Sistemas Operacionais aula 02
Sistemas Operacionais  aula 02 Sistemas Operacionais  aula 02
Sistemas Operacionais aula 02 Diego Rodrigues
 
Sistemas operacionais aula 01
Sistemas operacionais   aula 01Sistemas operacionais   aula 01
Sistemas operacionais aula 01Professor Douglas
 
Fundamentos de Sistemas Operacionais - Aula 2 - Conceitos Iniciais
Fundamentos de Sistemas Operacionais - Aula 2 - Conceitos IniciaisFundamentos de Sistemas Operacionais - Aula 2 - Conceitos Iniciais
Fundamentos de Sistemas Operacionais - Aula 2 - Conceitos IniciaisHelder Lopes
 
Visão Geral: Estruturas do Sistema Operacional
Visão Geral: Estruturas do Sistema OperacionalVisão Geral: Estruturas do Sistema Operacional
Visão Geral: Estruturas do Sistema OperacionalAlexandre Duarte
 
Fundamentos de Sistemas Operacionais - Aula 3 - Arquiteturas de Sistemas Oper...
Fundamentos de Sistemas Operacionais - Aula 3 - Arquiteturas de Sistemas Oper...Fundamentos de Sistemas Operacionais - Aula 3 - Arquiteturas de Sistemas Oper...
Fundamentos de Sistemas Operacionais - Aula 3 - Arquiteturas de Sistemas Oper...Helder Lopes
 
Sistemas operacionais de computadores de grande porte
Sistemas operacionais de computadores de grande porteSistemas operacionais de computadores de grande porte
Sistemas operacionais de computadores de grande portetiagohinke
 
Sistemas Operacionais - 03 - Tipos e Estrutura dos SO
Sistemas Operacionais - 03 - Tipos e Estrutura dos SOSistemas Operacionais - 03 - Tipos e Estrutura dos SO
Sistemas Operacionais - 03 - Tipos e Estrutura dos SOMauro Duarte
 
Sistemas Operacionais - Introducao
Sistemas Operacionais - IntroducaoSistemas Operacionais - Introducao
Sistemas Operacionais - IntroducaoLuiz Arthur
 
Aula 3 sistema computacional (hardware e software)
Aula 3   sistema computacional (hardware e software)Aula 3   sistema computacional (hardware e software)
Aula 3 sistema computacional (hardware e software)Vitor Hugo Melo Araújo
 
Soi2011 parteii
Soi2011 parteiiSoi2011 parteii
Soi2011 parteiipaulocsm
 
Apresentação Semi-Final
Apresentação Semi-FinalApresentação Semi-Final
Apresentação Semi-FinalJordan Claussen
 

Destaque (20)

Introducao a Sistemas Operacionais
Introducao a Sistemas OperacionaisIntroducao a Sistemas Operacionais
Introducao a Sistemas Operacionais
 
Questoesde fso
Questoesde fsoQuestoesde fso
Questoesde fso
 
Estruturas de Sistemas Operacionais
Estruturas de Sistemas OperacionaisEstruturas de Sistemas Operacionais
Estruturas de Sistemas Operacionais
 
Questões de Sistemas Operacionais
Questões de Sistemas Operacionais Questões de Sistemas Operacionais
Questões de Sistemas Operacionais
 
Sistemas Operacionais aula 02
Sistemas Operacionais  aula 02 Sistemas Operacionais  aula 02
Sistemas Operacionais aula 02
 
Sistemas operacionais aula 01
Sistemas operacionais   aula 01Sistemas operacionais   aula 01
Sistemas operacionais aula 01
 
Fundamentos de Sistemas Operacionais - Aula 2 - Conceitos Iniciais
Fundamentos de Sistemas Operacionais - Aula 2 - Conceitos IniciaisFundamentos de Sistemas Operacionais - Aula 2 - Conceitos Iniciais
Fundamentos de Sistemas Operacionais - Aula 2 - Conceitos Iniciais
 
Visão Geral: Estruturas do Sistema Operacional
Visão Geral: Estruturas do Sistema OperacionalVisão Geral: Estruturas do Sistema Operacional
Visão Geral: Estruturas do Sistema Operacional
 
Fundamentos de Sistemas Operacionais - Aula 3 - Arquiteturas de Sistemas Oper...
Fundamentos de Sistemas Operacionais - Aula 3 - Arquiteturas de Sistemas Oper...Fundamentos de Sistemas Operacionais - Aula 3 - Arquiteturas de Sistemas Oper...
Fundamentos de Sistemas Operacionais - Aula 3 - Arquiteturas de Sistemas Oper...
 
Sistemas operacionais
Sistemas operacionaisSistemas operacionais
Sistemas operacionais
 
Fundamentos de SO
Fundamentos de SOFundamentos de SO
Fundamentos de SO
 
Sistemas operacionais de computadores de grande porte
Sistemas operacionais de computadores de grande porteSistemas operacionais de computadores de grande porte
Sistemas operacionais de computadores de grande porte
 
Sistemas Operacionais
Sistemas OperacionaisSistemas Operacionais
Sistemas Operacionais
 
Sistemas operacionais
Sistemas operacionaisSistemas operacionais
Sistemas operacionais
 
Sistemas Operacionais - 03 - Tipos e Estrutura dos SO
Sistemas Operacionais - 03 - Tipos e Estrutura dos SOSistemas Operacionais - 03 - Tipos e Estrutura dos SO
Sistemas Operacionais - 03 - Tipos e Estrutura dos SO
 
Sistemas Operacionais - Introducao
Sistemas Operacionais - IntroducaoSistemas Operacionais - Introducao
Sistemas Operacionais - Introducao
 
Tipos de Sistema operacional
Tipos de Sistema operacionalTipos de Sistema operacional
Tipos de Sistema operacional
 
Aula 3 sistema computacional (hardware e software)
Aula 3   sistema computacional (hardware e software)Aula 3   sistema computacional (hardware e software)
Aula 3 sistema computacional (hardware e software)
 
Soi2011 parteii
Soi2011 parteiiSoi2011 parteii
Soi2011 parteii
 
Apresentação Semi-Final
Apresentação Semi-FinalApresentação Semi-Final
Apresentação Semi-Final
 

Semelhante a Introdução aos Sistemas Operacionais

Silberschatz sistemas operacionais
Silberschatz   sistemas operacionaisSilberschatz   sistemas operacionais
Silberschatz sistemas operacionaisDeryk Sedlak
 
Apostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelApostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelPablo Mariano
 
Apostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelApostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelPablo Mariano
 
Apostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelApostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelPablo Mariano
 
Sistemas Operacionais parte 1
Sistemas Operacionais parte 1Sistemas Operacionais parte 1
Sistemas Operacionais parte 1Matheus Brito
 
Introdução aos Sistemas Operacionais
Introdução aos Sistemas OperacionaisIntrodução aos Sistemas Operacionais
Introdução aos Sistemas OperacionaisRodrigoMalara1
 
Sistemas Operacionais - 2 - Tipos de Sistemas Computacionais
Sistemas Operacionais - 2 - Tipos de Sistemas ComputacionaisSistemas Operacionais - 2 - Tipos de Sistemas Computacionais
Sistemas Operacionais - 2 - Tipos de Sistemas ComputacionaisMauro Duarte
 
Apostila Aplicativos informatizados
Apostila Aplicativos informatizadosApostila Aplicativos informatizados
Apostila Aplicativos informatizadosAndréia Santos
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas OperativosJoseVieira75
 
Trabalho de S.O.pptx
Trabalho de S.O.pptxTrabalho de S.O.pptx
Trabalho de S.O.pptxAmricoPessela
 
I Material de Apoio Sistemas Operacionais
I Material de Apoio Sistemas OperacionaisI Material de Apoio Sistemas Operacionais
I Material de Apoio Sistemas Operacionaisrodfernandes
 

Semelhante a Introdução aos Sistemas Operacionais (20)

Silberschatz sistemas operacionais
Silberschatz   sistemas operacionaisSilberschatz   sistemas operacionais
Silberschatz sistemas operacionais
 
Apostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelApostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgel
 
Apostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelApostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgel
 
Apostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgelApostila de sistemas operacionais emi mario gurgel
Apostila de sistemas operacionais emi mario gurgel
 
Sistemas Operacionais parte 1
Sistemas Operacionais parte 1Sistemas Operacionais parte 1
Sistemas Operacionais parte 1
 
Sistemas Operacionais
Sistemas OperacionaisSistemas Operacionais
Sistemas Operacionais
 
int a informatica.pptx
int a informatica.pptxint a informatica.pptx
int a informatica.pptx
 
Introdução aos Sistemas Operacionais
Introdução aos Sistemas OperacionaisIntrodução aos Sistemas Operacionais
Introdução aos Sistemas Operacionais
 
Aula 1
Aula 1Aula 1
Aula 1
 
Sistemas Operacionais - 2 - Tipos de Sistemas Computacionais
Sistemas Operacionais - 2 - Tipos de Sistemas ComputacionaisSistemas Operacionais - 2 - Tipos de Sistemas Computacionais
Sistemas Operacionais - 2 - Tipos de Sistemas Computacionais
 
Apostila Aplicativos informatizados
Apostila Aplicativos informatizadosApostila Aplicativos informatizados
Apostila Aplicativos informatizados
 
Aula 02
Aula 02Aula 02
Aula 02
 
So cap01
So cap01So cap01
So cap01
 
Sistemas Operativos
Sistemas OperativosSistemas Operativos
Sistemas Operativos
 
Trabalho de S.O.pptx
Trabalho de S.O.pptxTrabalho de S.O.pptx
Trabalho de S.O.pptx
 
02 04 2012__15_10_03resp_exercicios_sistema_operacional
02 04 2012__15_10_03resp_exercicios_sistema_operacional02 04 2012__15_10_03resp_exercicios_sistema_operacional
02 04 2012__15_10_03resp_exercicios_sistema_operacional
 
I Material de Apoio Sistemas Operacionais
I Material de Apoio Sistemas OperacionaisI Material de Apoio Sistemas Operacionais
I Material de Apoio Sistemas Operacionais
 
S.o aula 5678
S.o aula 5678S.o aula 5678
S.o aula 5678
 
sistemas_operacionais.ppt
sistemas_operacionais.pptsistemas_operacionais.ppt
sistemas_operacionais.ppt
 
Apostila SO
Apostila SOApostila SO
Apostila SO
 

Introdução aos Sistemas Operacionais

  • 1. Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012. Introdução aos Sistemas Operacionais. Um sistema operacional é um programa que gerencia o hardware do computador, ele também fornece uma base para os programas aplicativos e atua como intermediário entre o usuário e o hardware. Um aspecto interessante dos sistemas operacionais é, o quanto eles assumem diferentes abordagens ao cumprir estas tarefas. Os sistemas operacionais de mainframes são projetados basicamente para otimizar a utilização de hardware, os sistemas operacionais de computadores pessoais suportam jogos complexos, aplicações comerciais e tudo mais entre estes, já os sistemas de computadores do tipo palm são projetados de modo a oferecer um ambiente no qual o usuário possa interagir facilmente com o computador para executar seus programas. Assim, alguns sistemas operacionais são projetados para serem eficazes, outros para serem eficientes e outros para atender a alguma combinação de ambos os aspectos. Mas afinal o que é um Sistema Operacional? Um sistema operacional é uma parte importante de quase todos os sistemas de computação. Um sistema de computação pode ser grosseiramente dividido em quatro componentes: Hardware, sistema operacional, programas aplicativos e usuário. Na figura 1, vemos a relação entre esses componentes. Figura 1 - Visão abstrata dos componentes de um sistema computacional. O sistema operacional oferece os meios para a utilização apropriada dos recursos durante a operação do sistema de computação. Um sistema operacional é semelhante ao governo, ele não desempenha funções úteis para ele mesmo, apenas proporciona um ambiente no qual outros possam desempenhar tarefas úteis. Os sistemas operacionais podem ser compreendidos a partir de dois pontos de vistas: do usuário e do sistema. O ponto de vita do usuário. A perspectiva do usuário em relação ao computador varia dependendo da interface que estiver sendo utilizada. A maioria dos usuários de computador senta-se diante de um computador pessoal, tal sistema é projetado para que um único usuário monopolize seus recursos, de modo a maximizar o trabalho que o usuário esteja executados. Neste caso, o sistema operacional é projetado principalmente para facilidade de uso, com alguma atenção dada ao desempenho e nenhuma atenção à utilização de recursos. O desempenho é importante para o usuário, mas não importa se a maioria do sistema permanece ociosa, esperando pela baixa velocidade de I/O do usuário. Alguns usuários colocam-se diante de um terminal conectado a um mainframe ou a um minicomputador. Outros usuários fazem acesso ao mesmo computador por intermédio de outros terminais. Estes usuários compartilham recursos e podem trocar informação. O sistema operacional é projetado para maximizar a utilização dos recursos, assegurando que todo o tempo de CPU, memória e I/O disponíveis sejam utilizados eficientemente e que nenhum usuário individual ocupe mais do que sua cota justa. Outros usuários ocupam estações de trabalho, conectados em rede com outras estações de trabalho e servidores. Estes usuários possuem recursos dedicados à sua disposição, mas também compartilham recursos tais como a rede e os servidores. Neste ambiente, o sistema operacional é projetado para estabelecer um
  • 2. Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012. Introdução aos Sistemas Operacionais. compromisso entre usabilidade individual e utilização de recursos. Ultimamente, estão na moda muitas variedades de computadores do tipo palm. Estes dispositivos são na maioria monousuários, usados apenas por usuários individuais. Alguns são conectados a redes. Devido às limitações de energia e de interface, eles executam relativamente poucas operações remotas. Os sistemas operacionais são projetados principalmente objetivando usabilidade individual, embora o desempenho em relação ao tempo de vida da bateria também seja importante. Alguns computadores são pouco ou nada visíveis ao usuário, por exemplo os computadores de bordo de automóveis ou outros dispositivos. Basicamente eles e seus sistemas operacionais são projetados para operar sem intervenção do usuário. O ponto de vista do sistema. Do ponto de vista do computador, o sistema operacional é o programa mais íntimo do hardware. Podemos ver um sistema operacional como um alocador de recursos. Um sistema de computação tem muitos recursos que podem ser exigidos para resolver um problema: tempo de CPU, espaço de memória, espaço de armazenamento em arquivo, dispositivos de I/O, etc. O sistema operacional atua como o gerenciador destes recursos. Ao lidar com solicitações por recursos numerosas e possivelmente concorrentes, o sistema operacional precisa decidir como alocar tais recursos a programas e usuários específicos de modo que o sistema de computação possa ser operado com eficiência e justiça. Um enfoque ligeiramente diferente relacionado a um sistema operacional enfatiza a necessidade de controlar os diversos dispositivos de I/O e os programas de usuário. Um sistema operacional é um programa de controle que gerencia a execução dos programas de usuário para evitar erros e o uso impróprio do computador. Ele focaliza especialmente a operação e o controle dos dispositivos de I/O. Em geral, entretanto, não possuímos uma definição adequada de um sistema operacional. Sistemas operacionais, existem porque eles representam uma maneira razoável para resolver o problema de criar um sistema de computação utilizável. O objetivo fundamental dos sistemas de computação é executar os programas dos usuários e facilitar a resolução dos problemas. É com este objetivo que o hardware do computador é construído. Os programas aplicativos são desenvolvidos tendo em vista que o hardware puro não é particularmente fácil de ser utilizado. Estes programas requerem determinadas operações comuns, como as que controlam os dispositivos de I/O. As funções comuns de controle e alocação de recursos são então reunidas em um tipo de software: o sistema operacional. Além disso, não existe uma definição universalmente aceita sobre o que compõe o sistema operacional. Uma forma simplista de ver é que ele inclui tudo que um vendedor monta quando você encomenda “o sistema operacional”. Entretanto, os requisitos e facilidades de armazenamento incluídos variam muito entre os sistemas. Uma definição mais comum é que o sistema operacional é o programa (usualmente chamado de Kernel) que permanece em execução no computador durante todo o tempo e todos os demais são programas aplicativos. Objetivos do sistema. É mais fácil definir um sistema operacional pelo que ele faz do que pelo que ele é, mas mesmo isso pode ser complicado. O primeiro objetivo de qualquer sistema operacional é a eficácia para o usuário. Sistemas operacionais existem porque se espera que a computação seja mais fácil com eles do sem eles. Este ponto de vista fica mais claro quando você observa os sistemas operacionais de PCs de pequeno porte. O principal objetivo de outros sistemas operacionais é a operação eficiente do sistema de computação. Este é o caso dos grandes sistemas operacionais, compartilhados e com multiusuários. Tais sistemas são caros e portante é desejável fazê-los tão eficientes quanto possível. Estes dois objetivos são muitas vezes contraditório. No passado eficiência era muitas vezes mais importante que eficácia. Assim, muito da teoria dos sistemas operacionais concentrava-se no uso ótimo dos recursos computacionais. Os sistemas operacionais também evoluíram através dos tempos. Podemos dizer que os dois objetivos principais dos sistemas operacionais são: • Estender a máquina: tem como premissa garantir que haja um ambiente muito mais fácil de programa que o hardware, pois as formas que as chamadas de sistema são geradas para o sistema operacional são mais simples que as chamadas geradas para o hardware. • Gerenciar recursos: tem como premissa garantir que múltiplos usuários possam utilizar o sistema, gerenciando e protegendo a memória, os dispositivos de E/S e outros recursos. Para entendermos o que os sistemas operacionais são e o que eles fazem, devemos considerar a sua
  • 3. Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012. Introdução aos Sistemas Operacionais. evolução. Traçando tal evolução, podemos identificar os elementos comuns dos sistemas operacionais e perceber como e por que estes sistemas evoluíram do modo como fizeram. Podemos notar que os sistemas operacionais e a arquitetura de computador tiveram grande influência mútua, ou seja, o desenvolvimento dos sistemas operacionais se deu para facilitar o uso do hardware, depois os sistemas operacionais propuseram mudanças no projeto do hardware para simplificá-lo. Nesta pequena revisão, observe como a identificação de problemas típicos do sistema operacional levou à introdução de novas facilidades no hardware. Podemos classificar os sistemas operacionais com base no hardware utilizado, da seguinte forma: • Sistemas Mainframe; • Sistemas de desktops; • Sistemas multiprocessadores; • Sistemas distribuídos; • Sistemas agrupados; • Sistemas de tempo real; • Sistemas palmer; Sistemas Mainframe. Foram os primeiros computadores usados para atender a muitas aplicações comerciais e científicas. Estes sistemas evoluíram desde os simples sistemas batch, onde o computador opera uma aplicação, até os sistemas de tempo compartilhado, passando pelos sistemas multiprogramados. Sistemas Batch. Os computadores iniciais eram, fisicamente, máquinas enormes operadas a partir de uma console. Os dispositivos de entrada corriqueiros eram as leitoras de cartão e os drives de fita. Os dispositivos comuns de saída eram as impressoras de linha, os drives de fita e as perfuradoras de cartões. O usuário não interagia diretamente com os computadores. Preferencialmente, o usuário preparava um job, que constituía do programa, dados e de alguma informação de controle sobre a natureza do job, e o submetia ao operador do computador. O job estava usualmente sob forma de cartões perfurados. Algum tempo mais tarde a saída aparecia. A saída consistia no resultado do programa, bem como em uma imagem da memória final e do conteúdo dos registradores, para depuração. Os sistemas operacionais neste computadores iniciais era um tanto simples. Sua maior tarefa era transferir automaticamente o controle de um job ao seguinte. O sistema operacional estava sempre residente na memória (Figura 2). Figura 2 - Esquema da memória para um sistema batch simples. Para aumentar a velocidade de processamento, os operadores reuniam os jobs em lotes com requisitos semelhante e os operavam no computador como um grupo. Assim, os programadores tinham que deixar seus programas com o operador. O operador classificaria os programas em lotes com requisitos semelhantes e, à medida que o computador ficasse disponível, operaria cada lote. A saída de cada job seria enviada de volta ao respectivo programador. Neste ambiente de execução, a CPU estava frequentemente ociosa. As velocidades dos dispositivos mecânicos de I/O eram intrinsecamente mais baixas do que as dos dispositivos eletrônicos. Mesmo uma CPU lenta trabalha em escala de microssegundo, com milhões de instruções por segundo. Uma leitora de cartões rápida, por outro lado, pode ler 1200 cartões por minuto (ou 20 cartões por segundo). Desta forma, a
  • 4. Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012. Introdução aos Sistemas Operacionais. diferença de velocidade entre a CPU e seus dispositivos de I/O pode ser da magnitude de três ordens ou mais. Com o tempo, naturalmente, os avanças da tecnologia e a introdução dos discos resultaram em dispositivo de I/O mais rápidos. Entretanto, as velocidades da CPU aumentaram com maior expressão, e, assim, o problema não só não foi resolvido como foi exacerbado. A introdução da tecnologia de discos permitiu ao sistema operacional deixar todos os jobs em um disco, em vez de em uma leitora de cartões serial. Com acesso direto a vários jobs, o sistema operacional pode executar o agendamento de jobs de modo a utilizar os recurso e executar as tarefas eficientemente. Sistemas multiprogramados. O aspecto mais importante do agendamento dos jobs é a capacidade de multiprogramar. Um único usuário não pode, em geral, manter tanto a CPU como os dispositivos de I/O ocupados durante todo o tempo. A multiprogramação aumenta a utilizada da CPU organizando os jobs de modo que a CPU tenha sempre um deles para executar. Figura 3 - Esquema de memória para um sistema multiprogramável. A ideia é a seguinte: o sistema operacional mantém vários jobs na memória simultaneamente (Figura 3). Este conjunto de jobs é um subconjunto daqueles que estão agendados na fila, já que o número de jobs que pode ser mantidos ao mesmo tempo na memória é usualmente muito menor do que o número que pode estar na fila. O sistema operacional seleciona e começa a executar um dos jobs na memória. Em dado momento, o job pode ter que aguardar que alguma tarefa, como uma operação de I/O, seja completada. Em um sistema não multiprogramado, a CPU permaneceria ociosa. Em um sistema multiprogramado, o sistema operacional simplesmente redireciona para um novo job e o executa. Quando este job precisar aguardar, a CPU é redirecionada para um outro job, e assim por diante. Por fim, o primeiro job termina a espera e retoma a CPU. Considerando que pelo menos um job precise entrar em execução, a CPU nunca permanece ociosa. A multiprogramação é a primeira instância na qual o sistema operacional deve tomar decisões em favor dos usuários. Sistemas operacionais multiprogramados são, portanto, bastante sofisticados. Todos os jobs que entram no sistema são mantidos na fila de jobs. Esta fila compõe-se de todos os processos residentes em disco aguardando alocação na memória principal. Se diversos jobs estão prontos para serem carregados na memória e se não há espaço suficiente para todos, então o sistema deve escolher um dentre eles. A toma desta decisão corresponde ao agendamento de jobs. Quando o sistema operacional seleciona um job na fila, carrega-o na memória para execução. A manutenção de vários programas em memória ao mesmo tempo requer alguma forma de gerenciamento de memória, que iremos estudar mais à frente. Além disso, se diversos jobs estão prontos para execução ao mesmo tempo, o sistema deve escolher entre eles. Esta tomada de decisão é o agendamento da CPU. Finalmente, múltiplos jobs executando concorrentemente exigem que suas capacidades de afetar uns aos outros sejam limitadas em todas as fases do sistema operacional, incluindo o agendamento de processos, o armazenamento em disco e o gerenciamento de memória. Sistemas de tempo compartilhado. Sistemas batch multiprogramados propiciam um ambiente onde os diversos recursos do sistema são utilizados de forma eficiente, mas não propiciam a interação do usuário com o sistema computacional. Tempo compartilhado (ou multitarefa) é uma extensão da multiprogramação. A CPU executa múltiplos jobs permutando entre eles, mas as permutas ocorrem com tanta frequência que os usuários podem interagir com cada programa enquanto ele está em execução. Um sistema de computação interativo proporciona comunicação direta entre o usuário e o sistema. O
  • 5. Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012. Introdução aos Sistemas Operacionais. usuário fornece instruções para o sistema operacional ou para um programa, diretamente, usando um teclado ou um mouse, e aguarda resultados imediatos. Em contrapartida, o tempo de resposta precisa ser curto, geralmente menor que 1 segundo. Um sistema operacional de tempo compartilhado permite que muitos usuários compartilhem o computador simultaneamente. Como cada ação ou comando em um sistema de tempo compartilhado tende a ser breve, apenas um pequeno tempo de CPU é necessário para cada usuário. Como o sistema permuta rapidamente de um usuário para o seguinte, cada usuário tem a impressão de que o sistema de computação inteiro está dedicado ao seu uso, mesmo que ele esteja sendo compartilhado entre muitos usuários. Um sistema operacional de tempo compartilhado usa o agendamento da CPU e a multiprogramação para prover cada usuário com uma pequena porção do computador de tempo compartilhado. Cada usuário tem pelo menos um programa separado na memória. Um programa carregado na memória e em execução é comumente denominado um processo. Quando um processo entra em execução, ele normalmente é executado por apenas um curto tempo antes que termine ou necessite executar I/O. O I/O pode ser interativo, isto é, a saída é exibida para o usuário e a entrada vem do teclado ou outro dispositivo. Considerando que o I/O interativo é executado normalmente na velocidade do usuário, pode levar um longo tempo para se completar. Ao invés de deixar a CPU ociosa enquanto esta entrada interativa acontece, o sistema operacional rapidamente a direcionará para o programa de algum outro usuário. Sistemas operacionais de tempo compartilhado são mais complexos do que sistemas operacionais multiprogramados. Em ambos, diversos jobs devem ser mantidos simultaneamente na memória, logo o sistema precisa possuir gerenciamento e proteção de memória. Para obter um tempo de resposta razoável, os jobs podem ser permutados entre a memória principal e o disco, que então funciona como uma memória secundária. Um método comum para alcançar este objetivo é a memória virtual, uma técnica que permite a execução de jobs que pode não estar completamente na memória. A principal vantagem do esquema de memória virtual é que os programas podem ser maiores do que a memória física. Além disso, ela sintetiza a memória principal em um grande e uniforme vetor de armazenamento, separando da memória física a memória lógica visualizada pelo usuário. Este esquema libera os programadores da preocupação com as limitação de armazenamento de memória. Sistema de tempo compartilhado devem também prover um sistema de arquivos. O sistema de arquivos reside em uma coleção de discos, deste modo, o gerenciamento de discos precisa estar disponível. Além disso, os sistemas de tempo compartilhado proveem um mecanismo para execução concorrente, o que requer sofisticados esquemas de agendamento da CPU. Para garantir a execução ordenada, o sistema deve fornecer mecanismos para sincronização e comunicação de jobs e deve assegurar que os jobs não ficarão bloqueados em um deadlock, eternamente esperando um pelo outro. A ideia de tempo compartilhado foi demonstrada desde 1960, mas como os sistemas de tempo compartilhado são difíceis e de construção dispendiosa, não se tornaram comuns até o início dos anos 1970. Embora algum processamento batch ainda seja executado, a maioria dos sistemas atuais são de tempo compartilhado. Consequentemente, a multiprogramação e o tempo compartilhado são os temas centrais dos modernos sistemas operacionais. Sistemas de Desktop. Os computadores pessoais apareceram nos anos 1970. Durante sua primeira década, as CPUs dos PCs não possuíam as facilidades necessárias para proteger um sistema operacional dos programas do usuário. Os sistemas operacionais dos PCs não eram, portanto, nem multiusuário nem multitarefa. Entretanto, os objetivos destes sistemas operacionais mudaram com o tempo, em vez de maximizar a utilização da CPU e dos periféricos, os sistemas operacionais optaram por maximizar a eficácia e a capacidade de resposta para o usuário. Os sistemas operacionais para estes computadores beneficiaram-se, de diversas maneiras, do desenvolvimento dos sistemas operacionais para mainframes. Os microcomputadores tornaram-se logo capazes de adotar algumas das tecnologias desenvolvidas para os sistemas operacionais maiores. Por outro lado, os custo de hardware para os microcomputadores são suficientemente baixos para que indivíduos façam uso isolado do computador, e assim a utilização da CPU não é mais um problema primordial. Deste modo, algumas das decisões de projeto tomadas em relação aos sistemas operacionais de mainframes podem não ser apropriadas para sistemas menores. Outras decisões de projeto ainda se aplicam. Por exemplo, a proteção de arquivo não era, em
  • 6. Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012. Introdução aos Sistemas Operacionais. princípio, necessária para uma máquina pessoa. Entretanto, estes computadores agora estão interligados a outros computadores em redes locais ou a outras conexões da Internet. Quando outros computadores e outros usuários podem ter acesso aos arquivos de um PC, a proteção de arquivos torna-se novamente uma característica necessária ao sistema operacional. A falta de tal proteção tem facilitado a programas predadores a destruição de dados em sistemas menos robustos. Características avançadas de tempo compartilhado, como memória protegida e permissões de arquivos, não são suficientes, por si só, para salvaguardar de ataques um sistema. Recentes quebras de segurança tem demonstrado isso. Sistemas multiprocessadores. A maioria dos sistemas, até então, são sistemas de um único processador, isto é, eles têm somente uma CPU principal. Entretanto, os sistema multiprocessadores (ou sistemas paralelos ou sistemas fortemente acoplados) estão crescendo em importância. Tais sistemas possuem mais que um processador em íntima comunicação, compartilhando o barramento do computador, o relógio e, algumas vezes, a memória e os dispositivos periféricos. Os sistemas multiprocessadores têm três vantagens principais: • Throughput aumentado: com o aumento do número de processadores, espera-se obter mais trabalho executado em menor tempo. A taxa incremental de velocidade com N processadores não é N, antes, é menor do que N. Quando múltiplos processadores cooperam em uma tarefa, está implícita uma certa quantidade de overhead para que se mantenham todas as partes trabalhando corretamente. Este overhead, mais a concorrência por recursos compartilhados, diminui o ganho esperado dos processadores adicionais. Do mesmo modo, um grupo de N programadores trabalhando em íntima cooperação não dá, como resultado, um montante de trabalho realizado aumentado N vezes. • Economia de escala: sistemas multiprocessadores podem economizar mais dinheiro que múltiplos sistemas com um único processador, porque eles podem compartilhar periféricos, memória de massa e suprimentos de energia. Se vários programas operam sobre o mesmo conjunto de dados, é mais barato armazenar estes dados em um disco, fazendo com que todos os processadores os compartilhem, do que manter muitos computadores com discos locais e muitas cópias dos dados. • Confiabilidade aumentada: se as funções podem ser distribuídas apropriadamente entre vários processadores, então a falha de um processador não interrompe o sistema, apenas o torna mais lento. Se temos dez processadores e um falha, então cada um dos ove processadores remanescentes deve compartilhar o trabalho do processador que falhou. Assim, o sistema inteiro opera somente 10% mais devagar, em vez de falhar completamente. Esta capacidade de continuar fornecendo serviço proporcionalmente ao nível do hardware remanescente é chamada degradação limpa. Sistemas projetados para atender à degradação limpa são também chamados de sistemas tolerantes a falhas. A operação continuada em presença de falhas requer um mecanismo para permitir que a falha seja detectada, diagnosticada e, se possível, corrigida. Os sistemas multiprocessadores mais comuns hoje em dia usam multiprocessamento simétrico (SMP), no qual cada processador executa uma cópia idêntica do sistema operacional, e estas cópias comunicam-se umas com as outras quando necessário. Alguns sistemas usam multiprocessamento assimétrico, no qual a cada processador é designada uma tarefa específica. Um processador mestre controla o sistema, os demais processadores ou se dirigem ao mestre para instruções ou possuem tarefas predefinidas. Este esquema define um relacionamento mestre-escravo. O processador mestre planeja e aloca trabalho para os processadores escravos. O SMP significa que todos os processadores são pares, não existe um relacionamento mestre-escravo entre eles. Cada processador executa concorrentemente uma cópia do sistema operacional. O benefício deste modelo é que muitos processadores podem operar simultaneamente, N processos podem ser executados se houve N CPUs, sem causar uma deterioração de desempenho significativa. Entretanto, devemos controlar cuidadosamente o I/O para assegurar que os dados alcancem o processador apropriado. Além disso, como as CPUs estão separadas, uma pode ficar ociosa enquanto outra está sobrecarregada, resultando em ineficiência. Estas ineficiências podem ser evitadas se os processadores compartilharem determinadas estruturas de dados. Um sistema multiprocessador deste tipo possibilitará que processos e recursos sejam compartilhados dinamicamente entre os vários processadores. A diferença entre os multiprocessadores simétrico e assimétrico pode ser resultante tanto do hardware quando do software. Um hardware especial pode diferenciar os processadores múltiplos, ou o software pode ser escrito para permitir somente um mestre e vários escravos. À medida que os
  • 7. Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012. Introdução aos Sistemas Operacionais. microprocessadores tornam-se mais baratos e mais poderosos, funções de sistema operacional adicionais são atribuídas aos processadores escravos. Sistemas distribuídos. Uma rede é, simplesmente, uma via de comunicação entre dois ou mais sistemas. Sistemas distribuídos dependem da interconexão em rede para realizarem comunicação, os sistemas distribuídos conseguem compartilhar tarefas computacionais e oferecer um rico conjunto de facilidades aos usuários. Sistemas Cliente-Servidor. À medida que os PCs têm se tornado mais rápidos, mais poderosos e mais baratos, os projetistas têm se afastado da arquitetura de sistemas centralizados. Terminais conectados a sistemas centralizados estão agora sendo suplantados por PCs. Ao mesmo tempo, as funcionalidades de interface com usuário que costumavam ser manejadas diretamente por sistemas centralizados estão, cada vez mais, sendo manejados por PCs. Como resultado, os sistemas centralizados atuam, hoje, como sistemas servidores para satisfazer requisitos gerados por sistemas clientes. Sistemas paralelos. O crescimento das redes de computadores tem influenciado profundamente o desenvolvimento recente dos sistemas operacionais. Quando os PCs foram introduzidos nos anos 1970, eles eram projetados para uso pessoal e eram geralmente considerados computadores monousuários. No anos 1980, com o início da expansão do uso público da Internet para correio eletrônico, ftp, etc, muitos computadores se conectaram a redes de computadores. Com a introdução da Web, na metade dos anos 1990, a conectividade para rede tornou-se componente essencial de um sistema computacional. Em contraste com os sistemas fortemente acoplados vistos anteriormente, as redes de computadores usadas nestas aplicações compõem-se de uma coleção de processadores que não compartilham memória ou relógio. Em vez disso, cada processador tem sua memória local. Os processadores intercomunicam-se através de diversas linhas de comunicação, como barramentos de alta velocidade ou linhas telefônicas. Estes sistemas são usualmente conhecidos como sistemas fracamente acoplados. Alguns sistemas operacionais absorveram o conceito de redes e sistemas distribuídos além da noção de prover conectividade em rede. Um sistema operacional de rede é um sistema operacional que oferece facilidades como compartilhamento de arquivos e que inclui um esquema de comunicação que permite a troca de mensagens entre processos diferentes em computadores diferentes. Um computador que execute um sistema operacional de rede age autonomamente em relação a todos os outros computadores na rede. Um sistema operacional distribuído é um ambiente menos autônomo. Os diferentes sistemas operacionais comunicam-se suficientemente próximos para cria a ilusão de que somente um único sistema operacional controla a rede. Sistemas agrupados (clusters). Como os sistemas paralelos, os sistemas agrupados reúnem múltiplos PCs para desenvolver trabalho computacional. Entretanto, estes sistemas diferem dos sistemas paralelos no sentido de que são compostos de dois ou mais sistemas individuais acoplados. A definição do termo agrupamento não é correta, muitos pacotes comerciais divergem com relação ao que um sistema agrupado é, e por que uma forma é melhor do que outra. A definição geralmente aceita é que os sistemas agrupados compartilham memória e são proximamente conectados. O agrupamento é habitualmente utilizado para proporcionar alta disponibilidade ou então alto desempenho. Uma camada de software de agrupamento opera nos nós do agrupamento. Apesar dos avanços da computação distribuída, a maioria dos sistemas não oferece sistemas de arquivo distribuído de uso geral. Portanto, a maioria dos agrupamentos não permite acesso compartilhado aos dados no disco. Por isso, os sistemas de arquivos distribuídos devem oferecer controle e segurança de acesso aos arquivos para garantir que não ocorram operações conflitantes. Sistemas de tempo real. Uma outra forma de sistema operacional de uso específico é o sistema de tempo real. Um sistema de tempo real é usado quando requisitos de tempo rígidos são exigidos para a operação de um processador ou para o fluxo de dados, assim, ele é muito usado como dispositivo de controle em uma aplicação dedicada. Os sensores trazem dados para o computador. O computador deve analisar os dados e possivelmente ajustar os controles para modificar as entradas do sensor. Sistemas que controlam experimentos científicos, sistemas médicos de processamento de imagem, sistemas de controle industrial e certos sistemas de exibição são sistemas de tempo real. Alguns sistemas de injeção de combustível em automóveis, controladores de uso
  • 8. Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012. Introdução aos Sistemas Operacionais. doméstico e sistemas bélicos são também sistemas de tempo real. Um sistema de tempo real possui restrições de tempo fixas e bem definidas. O processamento tem que ser realizado dentro das restrições definidas, ou o sistema irá falhar. Um sistema de tempo real somente funciona corretamente quando retorna o resultado correto dentro das suas restrições de tempo. Os sistemas de tempo real são de duas espécies: rígidos e flexíveis. Um sistema de tempo real rígido garante que tarefas críticas sejam completadas em tempo. Esta meta requer que todos os retardos no sistema sejam confinados, desde a recuperação de dados armazenados até o tempo que o sistema operacional leva para concluir qualquer solicitação a ele dirigida. Tais restrições de tempo definem as facilidades que estão disponíveis em sistemas de tempo real rígidos. Sistemas de tempo real flexível são menos restritivos, visto que uma tarefa de tempo real crítica tem prioridade sobre outras tarefas e retém esta prioridade até que se complete. Como nos sistemas de tempo real rígidos, os retardos do kernel do sistema operacional precisam ser confinados: uma tarefa de tempo real não pode ser mantida indefinidamente em espera até que o kernel possa processá-la. O tempo real flexível é um objetivo alcançável que pode ser mesclado a outros tipos de sistemas. Sistemas palmer. Estes sistemas incluem celulares, PDAs, tablets, etc. Os desenvolvedores destes sistemas encontram inúmeras dificuldades, a maior parte devido à limitação do tamanho dos dispositivos e ao seu hardware, que na maioria das vezes é muito conflitante. Como decorrência, o sistema operacional e as aplicações precisam gerenciar eficientemente o uso do hardware. Nestes sistemas o maior objetivo é maximizar a duração da bateria. Migração de características. De modo geral, um exame dos sistemas operacionais para mainframes e microcomputadores mostra que características antes disponível somente em mainframes foram adotadas pelos microcomputadores. Os mesmos conceitos são apropriados para as diversas classes de computadores, como podemos ver na figura abaixo. Figura 4 – Migração de conceitos e características dos sistemas operacionais Estruturas do Sistema Operacional.
  • 9. Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012. Introdução aos Sistemas Operacionais. Um sistema operacional proporciona o ambiente dentro do qual os programas são executados. Internamente, os sistemas operacionais diferem grandemente em sua composição, sendo organizados de acordo com muitas linhas diferentes. O projeto de um novo sistema operacional é uma tarefa importante. Os objetivos do sistema devem estar bem definidos antes que o projeto se inicie. O tipo do sistema requerido é a base que orienta as escolhas entre vários algoritmos e estratégias. Um sistema operacional pode ser analisado segundo diversos critérios. Um deles é o exame dos serviços que ele oferece. Um outro é a avaliação da interface oferecida para usuários e programadores. Um terceiro é a desmontagem do sistema em seus componentes e interconexões. Vamos explorar estes três aspectos dos sistemas operacionais, analisando os pontos de vista de seus usuários, programadores e projetistas. Considerando quais serviços um sistema operacional oferece, como eles são oferecidos e que metodologias existem para o projeto de tais sistemas. Componentes do sistema. Podemos criar um sistema tão grande e complexo quanto um sistema operacional apenas particionando-o em módulos menores. Cada módulo deve ser uma porção bem delineada do sistema, com entradas, saídas, e funções cuidadosamente definidas. Obviamente, nem todos os sistemas têm a mesma estrutura. Entretanto, muitos sistemas modernos compartilham a função de suporte aos componentes apresentados a seguir. Gerenciamento de processos. Um programa não faz coisa alguma a menos que suas instruções sejam executadas por uma CPU. Um processo pode ser conceituado como um programa em execução. Um programa de usuário de tempo compartilhado, como um comilador, é um processo. Um programa de processamento de texto sendo operado por usuário individual em um PC é um processo. Uma tarefa do sistema, como enviar uma saída para uma impressora, é também um processo. Por ora, podemos considerar um processo como sendo um job ou um programa de tempo compartilhado, porém iremos entender que o conceito é mais geral. Um processo precisa de certos recursos – incluindo tempo de CPU, memória, arquivos e dispositivos de I/o – para desempenhar suas tarefas. Estes recursos podem ser fornecidos ao processo quando ele é criado ou podem ser a ele alocados durante a sua execução. Além dos vários recursos lógicos e físicos que um processo obtém quando é criado, diversos dados de inicialização (ou entradas) podem ser passados a ele durante sua execução. É importante enfatizar que um programa, por si só, não é um processo, um programa é uma entidade passiva, como os conteúdos de um arquivo armazenado em um disco, enquanto um processo é uma entidade ativa, com um contador de programa indicando a próxima instrução a ser executada. A execução de um processo deve ser sequencial. A CPU executa uma instrução do processo após a outra, até que o processo se complete. Além disso, em cada momento, no máximo uma instrução relacionada ao processo é executada. Assim, embora dois processos possam ser associados ao mesmo programa, eles não são jamais considerados duas sequências de execução separadas. É comum haver um programa que gera muitos processos enquanto está em execução. O processo é a unidade de trabalho de um sistema. Um sistema consiste em uma coleção de processos, alguns dos quais processos do sistema operacional (aqueles que executam código do sistema) e os demais processos de usuário (aqueles que executam código do usuário). Todos estes processos podem, em potencial, operar concorrentemente, multiplexando a CPU entre eles. O sistema operacional é responsável pelas seguintes atividades, juntamente com o gerenciamento de processos: • Criar e apagar os processos tanto do sistema como de usuário. • Suspender e recomeçar processos. • Fornecer mecanismos de sincronização de processos. • Fornecer mecanismos para comunicação entre processos. • Fornecer mecanismos para manipulação de deadlock. Gerenciamento de memória principal. Conforme já estudado a memória principal é essencial para a operação de um moderno sistema de computação. A memória principal é um grande vetor de palavras ou bytes que varia em tamanho, de centenas de milhares a bilhões. Cada palavra ou byte tem seu próprio endereço. A memória principal é um repositório
  • 10. Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012. Introdução aos Sistemas Operacionais. de dados rapidamente acessíveis, compartilhados entre a CPU e os dispositivos de I/O. O processador central lê instruções a partir da memória principal durante o ciclo de busca de instrução, e tanto lê como grava dados também a partir da memória principal durante o ciclo de busca de dados. As operações de I/O implementadas via DMA também leem e grava dados na memória principal. A memória principal é em geral o único grande dispositivo de armazenamento que a CPU é capaz de endereçar e acessar diretamente. Para que um programa seja executado, ele precisa ser mapeado para endereços absolutos e carregado na memória. Enquanto o programa executa, ele acessa instruções e dados na memória gerando esses endereços absolutos. Em dado momento, o programa termina sua execução, seu espaço de memória é declarado disponível, e o próximo programa pode ser carregado e executado. No sentido de melhorar tanto a utilização da CPU quanto a velocidade de resposta do computador para seus usuários, é desejável que se mantenham diversos programas em memória. Muitos esquemas diferentes de gerenciamento de memória estão disponíveis, e a eficiência dos diversos algoritmos depende da situação em particular. A seleção de um esquema de gerenciamento de memória para um sistema específico depende de muitos fatores – em especial, do projeto de hardware do sistema. Cada algoritmo requer seu próprio suporte de hardware. O sistema operacional é responsável pelas seguintes atividades relacionadas ao gerenciamento de memória: • Monitorar as porções de memória que estão sendo correntemente usadas e por quem estão sendo usadas. • Decidir que processos estão prontos para ser carregados na memória quando o espaço de memória tornar-se disponível. • Alocar e desalocar espaço de memória conforme necessário. Gerenciamento de arquivos. O gerenciamento de arquivos é um dos componentes mais visíveis de um sistema operacional. Os computadores podem armazenar informação em diferentes tipos de mídia física. Cada tipo de mídia tem suas próprias características e sua própria organização física. Cada mídia é controlada por um dispositivo, como um drive de disco ou de fita que também tem características únicas. Estas propriedades incluem velocidade de acesso, capacidade, taxa de transferência de dados e método de acesso (sequencial ou randômico). Para o uso adequado do sistema de computação, o sistema operacional oferece uma visão lógica e uniforme do armazenamento da informação. O sistema operacional abstrai-se das propriedades físicas dos seus dispositivos de armazenamento focalizando a definição de uma unidade de armazenamento lógico, o arquivo. O sistema operacional organiza arquivos em mídias físicas e acessa estes arquivos via dispositivos de armazenamento. Um arquivo é uma coleção de informação relacionada, definida pelo seu criador. Comumente, os arquivos contêm programas (em ambas as formas, fonte e objeto) e dados. Arquivos de dados podem ser numéricos, alfabéticos ou alfanuméricos. Os arquivos podem ter formato livre ou podem ser rigidamente formatados. Um arquivo consiste em uma sequência de bits, bytes, linhas ou registros cujos significados são definidos por seus criadores. O conceito de arquivo é extremamente genérico. O sistema operacional implementa o conceito abstrato de arquivo gerenciando mídias de armazenamento de massa, como discos e fitas, e os dispositivos que as controlam. Além disso, os arquivos são normalmente organizados em diretórios para facilitar seu uso. Finalmente, quando múltiplos usuários fazem acesso aos arquivos, podemos querer exercer controle sobre quem pode acessar estes arquivos e de que modos eles podem ser acessados. O sistema operacional é responsável pelas seguintes atividades relacionada ao gerenciamento de arquivos: • Criar e apagar arquivos. • Criar e apagar diretórios. • Suportar primitivos para manipulação de arquivos e diretórios. • Mapear arquivos em memória secundária. • Criar cópias de arquivos em mídias de armazenamento não voláteis. Gerenciamento do sistema de I/O.
  • 11. Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012. Introdução aos Sistemas Operacionais. Um dos objetivos de um sistema operacional é tornar transparente para o usuário as peculiaridades dos dispositivos específicos de hardware. Por exemplo no Unix, as peculiaridades dos dispositivos de I/O são escondidas do corpo do sistema operacional em si pelo subsistema de I/O. Este subsistema consistem em: • Um componente de gerenciamento de memória que inclui o armazenamento em buffers, o armazenamento em memória cache e o spooling. • Uma interface genérica para drivers de dispositivos. • Drivers para dispositivos específicos de hardware. Somente o drivers conhece as peculiaridades do dispositivo específico ao qual está associado. Gerenciamento de memória secundária. O principal objetivo de um sistema de computação é executar programas. Estes programas, com o dados que acessam, devem estar na memória principal, ou memória primária, durante a execução. Com a memória principal é muito pequena para acomodar todos os dados e programas, e como os dados que ela mantém se perdem quando falta energia, o sistema de computação deve fornecer memória secundária para copiar a memória principal. A maioria dos modernos sistemas de computadores utilizam discos como o principal meio de armazenamento on-line tanto para programas quanto para dados. A maior parte dos programas – incluindo compiladores, montadores, rotinas de classificação, editores e formatadores – é armazenada em disco até que seja carregada na memória, e deste modo utilizam o disco tanto como fonte quanto como destino de seu processamento. Assim, o monitoramento adequado da memória em disco é de importância primordial para um sistema de computação. O sistema operacional é responsável pelas seguintes atividades relacionadas ao gerenciamento de disco: • Gerenciamento de espaço livre. • Alocação de espaço de armazenamento. • Programação de alocação de disco. Como a memória secundária é utilizada como frequência, precisa ser utilizada de modo eficiente. A velocidade de operação de um computador pode depender das velocidades do subsistema de disco e dos algoritmos que manipulam este subsistema. Conexão em rede. Um sistema distribuído é uma coleção de processadores que não compartilham memória, dispositivos periféricos ou um relógio. Ao contrário, cada processador tem sua própria memória principal local e seu relógio, comunicando-se uns com os outros por intermédio de diversas linhas de comunicação, como barramento de alta velocidade ou redes. Os processadores em um sistema distribuído variam em tamanho e função. Podem incluir pequenos microprocessadores, estações de trabalho, minicomputadores e grandes sistemas de computadores de uso geral. Os processadores no sistema são conectados por intermédio de uma rede de comunicações, que pode ser configurada de diferentes modos. A rede pode ser total ou parcialmente conectada. O projeto da rede de comunicações deve considerar o roteamento das mensagens e as estratégias de conexão, além dos problemas de concorrência e segurança. Um sistema distribuído integra, em um único sistema coerente, sistemas fisicamente separados e possivelmente heterogêneos, proporcionando ao usuário o acesso aos vários recursos que o sistema possui. O acesso a um recurso compartilhado permite aumentar a velocidade de processamento, a funcionalidade, a disponibilidade dos dados e a confiabilidade. Os sistemas operacionais normalmente generalizam o acesso à rede, considerando-o como uma forma de acesso a arquivo, com detalhes de conexão sendo incluídos no driver do dispositivo de interface de rede. Os protocolos que dão origem aos sistema distribuídos podem ter grande influência na utilidade e popularidade desses sistemas. Sistema de proteção. Se um sistema de computação tem múltiplos usuários e permite a execução concorrente de múltiplos processos, então os vários processos precisam ser protegidos das atividades uns dos outros. Com este objetivo, alguns mecanismos garantem que arquivos, segmentos de memória, CPU e outros recursos possam ser operados somente por aqueles processos que tenham recebido autorização adequada do sistema
  • 12. Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012. Introdução aos Sistemas Operacionais. operacional. A proteção define-se por qualquer mecanismo que objetive controlar o acesso dos programas, processos ou usuários aos recursos de um sistema de computação. Este mecanismo deve oferecer os meios para especificação dos controles a serem impostos e os meios para sua imposição. A proteção pode aumentar a confiabilidade identificando erros latentes nas interfaces entre os subsistemas componentes. A identificação precoce de erros de interface pode, com frequência, prevenir a contaminação de um subsistema saudável por outro que esteja com defeito. Um recurso desprotegido não pode se defender do uso (ou do mau uso) feito por um usuário desautorizado ou incompetente. Um sistema orientado para a proteção oferece meios para distinguir entre utilização autorizada e desautorizada. Sistema interpretador de comandos. Para um sistema operacional, um dos mais importantes programas de sistema é o interpretador de comandos, que é a interface entre o usuário e o sistema operacional. Alguns sistemas operacionais incluem o interpretador de comandos no kernel, outros sistemas tratam o interpretador de comandos como um programa especial que está em operação quando um job é iniciado ou quando um usuário estabelece sua primeira conexão (em sistemas de tempo compartilhado). Muitos comandos são fornecidos ao sistema operacional por declarações de controle. Este programa é algumas vezes denominado interpretador de cartões de controle ou interpretador de linhas de comando e é frequentemente conhecido como shell. Sua função é simples: obter a próxima declaração de comando e executá-la. Os sistemas operacionais são muitas vezes diferenciados na área do shell, com um interpretador de comandos amigável tornando o sistema mais agradável para alguns usuários. Shells mais poderosos, complexos e difíceis de aprender são preferidos por outros usuários. As próprias declarações de comandos lidam com a criação e o gerenciamento de memória secundária, com o gerenciamento de memória principal, com o acesso ao sistema de arquivos, com a proteção e com a conexão em rede. Serviços do sistema operacional. Um sistema operacional oferece um ambiente para a execução de programas. Ele fornece certos serviços aos programas e aos usuários desses programas. Naturalmente, os serviços específicos fornecidos diferem de um sistema operacional para outro, mas podemos identificar classes comuns. Esses serviços do sistema operacional destinam-se a atender ao programador, tornando mais fácil a tarefa de programar. • Execução do programa: o sistema deve ser capaz de carregar um programa na memória e executá-lo. O programa deve poder terminar sua execução tanto no modo normal quanto anormal (indicando o erro). • Operações de I/O: um programa em execução pode requerer I/O. Este I/O pode envolver um arquivo ou um dispositivo de I/O. Para dispositivos específicos, podem ser necessárias funções especiais. Para obter eficiência e proteção, os usuários normalmente não podem controlar os dispositivos de I/O diretamente. Portanto, o sistema operacional deve fornecer os meios para se fazer I/O. • Manipulação dos sistema de arquivos: o sistema de arquivos é de particular interesse. Obviamente, os programas precisam ler e gravar arquivos. Os programas necessitam também criar e apagar arquivos pelo nome. • Comunicações: em muitas circunstâncias, um processo precisa trocar informação com outro. Tal comunicação pode ocorrer de dois modos mais expressivos. O primeiro ocorre entre processos que estão sendo executados no mesmo computador, o segundo ocorre entre processos que estão sendo executados em computadores diferentes interligados por uma rede. As comunicações podem ser implementadas através da memória compartilhada ou pela técnica de troca de mensagens, na qual pacotes de informação são movimentados entre processos pelo sistema operacional. • Detecção de erros: o sistema operacional precisa estar constantemente atento a possíveis erros. Podem ocorrer erros no hardware da CPU ou da memória, nos dispositivos de I/O, e no programa do usuário. Para cada tipo de erro, o sistema operacional tem que executar a ação apropriada, de modo e garantir o processamento correto e contínuo. Além disso, existe um outro conjunto de funções do sistema operacional cujo objetivo não é auxiliar
  • 13. Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012. Introdução aos Sistemas Operacionais. o usuário, mas assegurar a operação eficiente do próprio sistema operacional. Sistemas com múltiplos usuários podem obter eficiência compartilhando os recursos do computador entre os usuários. • Alocação de recursos: quando múltiplos usuários estão conectados ao sistema ou múltiplos jobs estão em execução ao mesmo tempo, é necessário alocar recursos a cada um deles. Muitos tipos de recursos diferentes são gerenciados pelo sistema operacional. Alguns podem ter associado um código de alocação especial, enquanto outros podem ter um código muito mais geral para solicitação e liberação. • Contabilização: queremos ter controle sobre quais usuários utilizam os recursos computacionais e quantos e quais tipos de recursos são utilizados. Os registros obtidos podem ser usados para contabilizar (e assim os usuários podem ser cobrados) ou, simplesmente, para acumular estatísticas de uso. As estatísticas de uso podem se constituir em ferramenta valiosa para os pesquisadores que desejem reconfigurar o sistema com o objetivo de melhorar os serviços de computação. • Proteção: os proprietários de informação armazenada em um sistema de computação multiusuário podem desejar controlar o uso daquela informação. Quando diversos processos disjuntos são executados concorrentemente, não deveria ser possível que um processo interferisse nos demais processos ou no próprio sistema operacional. A proteção envolve a garantia de que todo acesso aos recursos do sistema seja controlado. A segurança do sistema contra influências externas é também importante. Esta segurança começa com cada usuário tendo que se autenticar junto ao sistema, normalmente por meio de uma senha, para ter acesso autorizado aos recursos, continua com a defesa dos dispositivos externos de I/O contra tentativas de acesso inválido, e como o registro de todas essas conexões, para identificação de quebras de segurança. As precauções precisam ser implementadas para que um sistema seja protegido e seguro. Uma cadeia é tão forte quanto o seu elo mais fraco. Chamada de sistema. As chamadas de sistema constituem a interface entre um processo e o sistema operacional. Estas chamadas estão em geral disponíveis como instruções em linguagem de montagem e são usualmente incluídas nos diversos manuais usados pelos programadores. Determinados sistemas permitem que as chamadas de sistema sejam feitas diretamente a partir de um programa em linguagem de mais alto nível, caso em que as chamadas normalmente tomam a forma de uma função predefinida ou de chamadas a sub-rotinas. Elas podem gerar uma chamada a uma rotina especial em tempo de execução que faz a chamada de sistema, ou a chamada de sistema pode ser gerada diretamente. Diversas linguagens foram adotadas em substituição à linguagem de montagem na programação de sistemas. Essas linguagens permitem que as chamadas de sistema sejam diretamente realizadas. Chamadas de sistema ocorrem de diferentes maneiras, dependendo do computador em uso. Com frequência, faz-se necessária mais informações do que simplesmente o nome da chamada de sistema desejado. O tipo exato e a quantidade de informação variam de acordo com o sistema operacional em particular e com a chamada. Três métodos gerais são utilizados para passar parâmetros. A solução mais simples é passar os parâmetros em registradores. Entretanto, em alguns casos pode haver mais parâmetros do que registradores. Nestes casos, os parâmetros são em geral armazenados em um bloco ou tabela na memória, e o endereço do bloco é passado como um parâmetro em um registrador (Figura 5). Os parâmetros podem também ser colocados, ou incluídos, na pilha pelo programa, e extraídos da pilha pelo sistema operacional. Alguns sistemas operacionais preferem os métodos do bloco ou da pilha porque estas abordagens não limitam o número ou o tamanho dos parâmetros que estão sendo passados.
  • 14. Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012. Introdução aos Sistemas Operacionais. Figura 5 – Passagem de parâmetros em forma de tabela. As chamadas de sistema podem ser classificadas, de modo geral, em cinco categoriais principais: controle de processo, gerenciamento de arquivo, gerenciamento de dispositivo, manutenção de informação e comunicações. Na lista abaixo temos um resumo dos principais tipos de chamadas de sistema normalmente fornecidas por um sistema operacional. • Controle de processo: ◦ end, abort, load, execute, create process, terminate process, get process atributes, set process atributes, wait for time, wait event, signal event e allocate and free memory. • Gerenciamento de arquivo: ◦ create file, delete file, open, close, read, write, reposition, get file attributes e set file attributes. • Gerenciamento de dispositivo: ◦ request device, release device, read, write, reposition, get device attributes, set device attributes e logically attach or detach devices. • Manutenção de informação: ◦ get time or date, set time or date, get system data, set system data, get process, file, or device attributes e set process, file, or device attributes. • Comunicações: ◦ create, delete communication conection, send, receive messages, transfer status information e attach or detach remote devices. Estrutura do sistema. Um sistema tão grande e complexo como um moderno sistema operacional deve ser cuidadosamente desenvolvido para funcionar apropriadamente e ser facilmente modificado. Uma abordagem comum é particionar a tarefa em pequenos componentes, em vez de desenvolver um sistema monolítico. Cada um deste módulos deve ser uma porção bem definida do sistema, com entradas, saídas e funções cuidadosamente definidas. Estruturas simples. Muitos sistemas comerciais não possuem uma estrutura bem definida. Frequentemente, tais sistemas operacionais começam como sistemas pequenos, simples e limitados e depois crescem além do seu escopo original. O MS-DOS é um exemplo de um sistema com esta característica. Ele foi originalmente projetado e implementado por poucas pessoas que não tinham ideia de que ele se tornaria tão popular. Foi escrito para oferecer o máximo de funcionalidades no menor espaço, e assim não foi cuidadosamente dividido. Podemos ver sua estrutura na Figura 6.
  • 15. Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012. Introdução aos Sistemas Operacionais. Figura 6 – A estrutura de camadas do MS-DOS. Figura 7 – A estrutura do sistema UNIX O UNIX é um outro sistema que foi inicialmente limitado pela funcionalidade do hardware. Ele compõe-se de duas partes separadas: o kernel e os programas de sistema. O kernel é constituído de uma série de interfaces e drivers de dispositivos, que foram adicionados e expandidos ao longo dos anos em que o UNIX evoluiu. Na Figura 7 podemos visualizar o sistema operacional UNIX tradicional estruturado. Tudo que está abaixo da interface de chamada de sistema e acima do hardware físico é o kernel. O kernel fornece o sistema de arquivos, o agendamento da CPU, o gerenciamento de memória e outras funções do sistema operacional até as chamadas do sistema. Tudo somado, trata-se de um enorme montante de funcionalidades combinadas em um único nível. Isso torna o UNIX difícil de ser expandido, pois mudanças em uma seção poderiam afetar outras áreas de modo adverso. As chamadas de sistema definem a API para o UNIX, o conjunto de programas de sistema comumente disponíveis define a interface do usuário. As interfaces de usuário e de programador definem o contexto que o kernel deve suportar. Novas versões do UNIX são projetadas para utilizar hardware mais avançado. Dado o suporte de hardware próprio, os sistema operacionais podem ser divididos em peças menores e mais apropriadas do que aquelas permitidas pelos sistemas UNIX ou MS-DOS originais. O sistema operacional pode, então, deter um controle muito maior sobre o computador e sombre as aplicações que fazem uso desse computador. Os implementadores têm mais liberdade para fazer mudanças nas funções internas do sistema e para criar sistemas operacionais modulares. Sob a abordagem topdown, as funcionalidades e facilidades globais são determinadas e separadas em componentes. Esta separação permite aos programadores ocultar informação, eles ficam livres, portanto, para implementar as rotinas de baixo nível conforme lhes pareça melhor, contanto que a interface externa da rotina permaneça inalterada e que a própria rotina desempenhe a tarefa esperada. Abordagem em Camadas. A modularização de um sistema pode ser feita de muitas maneiras. Um dos métodos é a abordagem
  • 16. Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012. Introdução aos Sistemas Operacionais. em camadas, na qual o sistema operacional é particionado em um número de camadas (ou níveis), cada uma delas construída sobre camadas mais baixas. A camada da base (camada 0) é o hardware, a mais alta (camada N) é a interface com o usuário. Uma camada do sistema operacional é uma implementação de um objeto abstrato definido como o encapsulamento dos dados e das operações que podem manipular aqueles dados. Uma camada típica do sistema operacional pode ser vista na Figura 8. Consiste em estruturas de dados e em um conjunto de rotinas que podem ser invocadas por camadas de nível mais alto. A camada M, por sua vez, pode invocar operações em camadas de nível mais baixo. Figura 8 – Uma camada do sistema operacional. A principal vantagem da abordagem em camada é a modularidade. As camadas são selecionadas de tal modo que cada uma delas use apenas funções (ou operações) e serviços das camadas de nível mais baixo. Este enfoque simplifica a depuração e a verificação do sistema. Cada camada é implementada focalizando-se apenas aquelas operações supridas pelas camadas de nível mais baixo. A camada não precisa saber como as operações de nível mais baixo estão implementadas, ela precisa saber, somente, o que estas operações fazem. Deste modo, cada camada esconde das camadas de nível mais alto, a existência de certas estruturas de dados, operações e hardware. A principal dificuldade da abordagem em camadas diz respeito ao cuidado na definição das camadas, porque uma camada só pode usar as que estão abaixo dela. Um outro problema concernente às implementações em camadas é que elas tendem a ser menos eficientes do que outras opções. Estas limitações têm provocado, nos últimos anos, algumas críticas contra a estruturação em camadas. Ultimamente, tem-se preferido um número menor de camadas com mais funcionalidades, mantendo-se a maior parte das vantagens do código modularizado e evitando-se os difíceis problemas de definição e interação das camadas Microkernels. À medida que o sistema operacional UNIX expandiu-se, o kernel tornou-se grande e difícil de gerenciar. Na metade dos anos 1980, pesquisas na Universidade de Carnegie Mellon desenvolveram um sistema operacional chamado Mach que modularizou o kernel, utilizando o enfoque do microkernel. Este método estrutura o sistema operacional removendo todos os componentes não essenciais do kernel e implementando-os como programas de nível de sistema e de usuário. O resultado é um kernel menor. Há pouco consenso sobre quais serviços deveriam permanecer no kernel e quais deveriam ser implementados no espaço do usuário. Entretanto, os microkernels proveem, em geral, gerenciamento de processos e de memória mínimos, adicionalmente a facilidade de comunicação. A principal função do microkernel é proporcionar facilidade de comunicação entre o programa cliente e os diversos serviços que estão também operando no espaço do usuário. A comunicação é fornecida por transmissão de mensagens. Os benefícios da opção microkernel incluem a facilidade de expandir o sistema operacional. Todos os novos serviços são adicionados ao espaço do usuário e, consequentemente, não exigem a modificação do kernel. Quando o kernel precisa ser modificado, as mudanças tendem a ser menores, porque o microkernel é um kernel reduzido. O sistema operacional resultante é mais fácil de ser transportador de uma arquitetura de
  • 17. Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012. Introdução aos Sistemas Operacionais. hardware para outra. O microkernel também proporciona maior segurança e confiabilidade, já que a maioria dos serviços opera como processos de usuário. Se um serviço falhar, o restante do sistema permanecerá intocável. Projeto e implementação do sistema. Objetivos de projeto. O primeiro problema que enfrentamos ao projeto um sistema é a definição dos seus objetivos e especificações. No nível mais alto, o projeto do sistema será afetado pela escolha do hardware e do tipo do sistema: batch, tempo compartilhado, monousuário, multiusuário, distribuído, tempo real, ou de uso geral. Além do nível de projeto mais alto, os requisitos podem ser muito difíceis de especificar. Eles podem ser divididos em dois grupos básicos: objetivos do usuário e objetivos do sistema. Os usuários desejam certa propriedades óbvias em um sistema: ele deve ser eficaz e fácil de usar, fácil de aprender, confiável, seguro e rápido. Naturalmente, estas especificações não são particularmente úteis ao projeto do sistema, já que não há consenso geral sobre como alcançar tais objetivos. Um conjunto semelhante de requisitos pode ser definido por aquelas pessoas responsáveis por projetar, criar, manter e operar o sistema: o sistema operacional deve ser fácil de projetar, implementar e manter, deve ser flexível, confiável, livre de erros e eficiente. De novo, estes requisitos são vagos e não possuem solução geral. Não temos solução única para o problema de definir os requisitos para um sistema operacional. O grande número de sistema mostra que requisitos diferentes podem resultar em uma grande variedade de soluções para ambientes diferentes. Mecanismos e políticas. A especificação e o projeto de um sistema operacional é uma tarefa altamente criativa. Embora nenhum livro possa dizer como fazê-lo, existem princípios gerais de engenharia de software especialmente aplicáveis aos sistemas operacionais. Um importante princípio é a separação entre política e mecanismo. Os mecanismos determinam como fazer algo, as políticas determinam o que será feito. Por exemplo, o timer é um mecanismo para assegurar a proteção da CPU, mas a decisão de por quanto tempo o timer deve ficar ativo, para um determinado usuário, é uma decisão de política. A separação entre política e mecanismo é importante para a flexibilidade. As políticas provavelmente se modificam no espaço ou no tempo. No pior caso, cada mudança na política irá requerer alteração no mecanismo subjacente. Um mecanismo geral seria mais desejável. Uma mudança na política iria, então, exigir a redefinição de apenas alguns parâmetros do sistema. Sistemas operacionais baseados em microkernel levam ao extermo a separação entre mecanismo e política, implementando um conjunto básico de blocos de construção primitivos. Estes blocos são quase independentes de política, permitindo que mecanismos e políticas mais avançados sejam adicionados via módulos de kernel criados pelo usuário ou por meio dos próprios programas do usuário. No outro extremo está um sistema como Apple MacOS, no qual tanto o mecanismo como a política são incluídos no sistema para obrigar a percepção global do sistema. Todas as aplicações têm interfaces semelhantes porque a própria interface é construída no kernel. Devem ser realizadas decisões de política para todos os problemas de agendamento e de alocação de recursos. Sempre que a questão for como em vez de o que, é um mecanismo que deve ser determinado. Implementação. Uma vez que um sistema operacional tenha sido projetado, ele deve ser implementado. Tradicionalmente, os sistemas operacionais têm sido escritos em linguagem de montagem. Agora, entretanto, eles têm sido, com frequência escritos em linguagens de mais alto nível. As vantagens de usar uma linguagem de mais alto nível, ou pelo menos uma linguagem de implementação de sistemas, para implementar sistemas operacionais são as mesmas levadas em conta quando a linguagem é usada para programas aplicativos: o código pode ser escrito mais rapidamente, é mais fácil de compreender e depurar. Além disso, os avanças na tecnologia de compiladores irão melhorar o código gerado para o sistema operacional inteiro por meio de uma simples recompilação. Finalmente, um sistema operacional é mais fácil de portar se for escrito em uma linguagem de alto nível. Os que se opõem à implementação de um sistema operacional em linguagens de mais alto nível alegam como desvantagens a redução da velocidade e o aumento dos requisitos de armazenamento. Embora um programador experto em linguagem de montagem possa produzir rotinas pequenas e eficientes para
  • 18. Introdução aos Sistemas Operacionais – Aula 02 – 10/02/2012. Introdução aos Sistemas Operacionais. grandes programas, um moderno compilador é capaz de desenvolver análises complexas e de aplicar otimizações sofisticadas, produzindo excelente código. Os processadores modernos possuem fortes interligações e múltiplas unidades funcionais, que podem manipular dependências complexas e sobrepujar a limitada habilidade da mente humana em cuidar de detalhes. Assim como é verdade para outros sistemas, as mais significativas melhorias de desempenho nos sistemas operacionais parecem ser mais o resultado de estruturas de dados e algoritmos melhores do que da excelência do código em linguagem de montagem. Além disso, embora os sistemas operacionais sejam extensos, somente uma pequena quantidade de código é crítica para o alto desempenho. Depois que o sistema é escrito e está funcionando corretamente, rotinas que representem gargalos podem ser identificadas e substituídas por equivalentes em linguagem de montagem.