SOFTWARE DE SISTEMA – SISTEMA OPERACIONAL Introdução

Propaganda
SOFTWARE DE SISTEMA – SISTEMA OPERACIONAL
AULA 12 – Arquitetura de Computadores
Gil Eduardo de Andrade
O conteúdo deste documento é baseado no livro “Princípios Básicos de Arquitetura e
Organização de Computadores” – Linda Null e Julia Labur
Introdução
Nas aulas anteriores foram introduzidos os principais conceitos sobre a organização dos
computadores. Esses conceitos se caracterizaram, de uma forma simplista, em visualizar o
computador como um conjunto de máquinas virtuais divididas em vários níveis, cada qual
fornecendo uma abstração para o nível logo abaixo. Também foram discutidas linguagens
simbólicas com a arquitetura da máquina (software didático SAVON).
Esta aula, tem por objetivo, estudar o software encontrado no nível 3 (ver aula 02),
ligando-o com o software encontrado no quarto e quinto níveis dessa hierarquia. Esse conjunto
de softwares é executado abaixo dos programas de aplicação e logo acima da arquitetura do
conjunto de instruções. Estes são os componentes de software, as “máquinas” com os quais seu
código fonte de aplicação interage. Os programas nestes níveis trabalham juntos para garantir o
acesso aos recursos de hardware que realizam os comandos contidos nos programas de
aplicação.
Embora nosso modelo de sistema de computação coloque somente o sistema operacional
no nível de “software de sistema”, o estudo deste, muitas vezes inclui compiladores e outros
utilitários, assim como uma categoria de programas complexos algumas vezes chamados de
middleware. O middleware, de forma geral, nada mais é do que uma camada de software acima
do sistema operacional que fornece serviços para as aplicações, que se localizam na camada logo
acima.
Quando estudamos a hierarquia de níveis vimos que havia um grande intervalo entre as
linguagens de alto nível/aplicações e os componentes físicos do sistema, este intervalo deve ser
imperceptível para o usuário, e o responsável por essa característica, criando essa invisibilidade é
o middleware. Sendo o sistema operacional o suporte a todo o software de sistema, praticamente
todos os sistemas de software interagem com o sistema operacional de alguma maneira.
Sistemas Operacionais
Originalmente, o principal papel de um sistema operacional era auxiliar as diversas
aplicações a interagir com o hardware do computador. Sistemas operacionais fornecem um
conjunto de funções necessárias para permitir aos pacotes de software controlar o hardware do
computador. Sem um sistema operacional, cada programa que você executa necessitaria de seu
próprio controlador para a placa de vídeo, para placa de som, para o disco rígido e assim por
diante.
Embora sistemas operacionais modernos ainda executem esta função, as expectativas de
usuários a respeito deles têm mudado consideravelmente. Eles acreditam que um sistema
operacional vai tornar ainda mais fácil gerenciar o sistema e seus recursos. Essa expectativa
gerou o controle de arquivos “arrastar e largar”, bem como o controle de dispositivos “ligar e
usar”. Olhando pela perspectiva do programador, o sistema operacional obscurece os detalhes
dos níveis mais baixos da arquitetura do sistema, permitindo um foco maior na solução de alto
nível de problemas.
Os sistemas operacionais criam um ambiente mais amigável, no qual os recursos do
sistema são utilizados efetivamente e eficientemente e onde não é exigido programar em código
de máquina. Ele não apenas fornece esta interface ao programador, mas também atua como uma
camada entre o software de aplicação e o hardware real da máquina. Lida com dispositivos reais
e hardware real, de modo que os programas de aplicação e os usuários não tenham que fazer
isso.
O sistema operacional é um pouco mais que uma peça de software, ele difere dos outros
pelo fato de que é carregado na inicialização do computador e posteriormente executado
diretamente pelo processador, sendo assim cabe a ele controlar o processador (bem como a
outros recursos) e a execução de instruções no mesmo.
Sistemas operacionais para computadores pessoais
Sistemas operacionais para computadores pessoais possuem um objetivo diferente
daqueles para sistemas maiores. Enquanto sistemas maiores querem fornecer uma excelente
performance e utilização de hardware (ao mesmo tempo tornando o sistema mais fácil de usar),
sistemas operacionais para computadores pessoais tem um objetivo principal: tornar o sistema
amigável para o usuário.
Quando a Intel trouxe o microprocessador 8080 em 1974, a empresa solicitou a Gary
Kildall que escrevesse um sistema operacional. Kildall construiu um controlador para um disco
flexível, conectou o disco ao 8080 e escreveu o software do sistema operacional para controlar
os dispositivos. Ele chamou esses sistema baseado em disco de CP/M (Control Program for
Microcomputers). O BIOS (basic input/output system) permitiu que o CP/M fosse facilmente
exportado para diferentes tipos de PCs porque fornecia as interações necessárias com
dispositivos de entrada/saída. Como dispositivos de E/S são componentes mais prováveis de
variar de sistema para sistema, o empacotamento das interfaces para estes dispositivos em um
módulo fez com que o sistema operacional pudesse permanecer mesmo para diversas máquinas.
A Intel erroneamente assumiu que as máquinas baseadas em disco teriam um futuro
triste. Depois de decidir não usar mais o novo sistema operacional, a Intel deu os direitos sobre o
PC/M para Kildall. Em 1980 a IBM necessitou de um sistema operacional para o IBM PC.
Embora a IBM tivesse entrado em contato com Kildall primeiro, o negócio terminou indo para a
Microsoft, que havia comprado um sistema operacional baseado em disco denominado QDOS
(Quick and Dirty Qperating System), da Seatle Computer Products Company, por $15.000,00.
O software foi renomeado de MS-DOS e o resto é história.
Os sistemas operacionais para os primeiros computadores pessoais operavam sob
comandos digitados via teclado. Alan Key, inventor da GUI (graphical user interface) e Doug
Engelbart, inventor do mouse, ambos do centro de pesquisas da Xerox, mudaram para sempre a
face dos sistemas operacionais quando suas ideias foram incorporadas aos mesmos. Por meio
dos seus esforços, os símbolos de comandos foram substituídos por janelas, ícones e menus
drop-down. A Microsoft popularizou as ideias (mas não as inventou) por intermédio de suas
séries de sistemas operacionais Windows: Windows 1.x, 2.x, 3.x, 95, 98, ME, NT, 2000, XP,
Vista, Seven. O sistema operacional gráfico do Macintosh, MacOS, que precedeu o Windows
GUI em muitos anos, também teve numerosas versões. O Unix tem ganho popularidade também
no mundo dos computadores pessoais através do Linux e OpenBSD.
Projeto de Sistemas Operacionais
O sistema operacional controla as funções básicas do computador, incluindo
gerenciamento de memória e E/S. Um sistema operacional difere da maioria dos outros
softwares no sentido de ser guiado por eventos, significando que ele realiza tarefas em resposta
a comandos, programas de aplicações, dispositivos de E/S e interrupções.
Quatro fatores principais guiam o projeto de um sistema operacional: performance,
potência, custo e compatibilidade. A maioria dos sistemas operacionais possuem interfaces
similares, mas variam enormemente no modo de realizar tarefas. Alguns são minimalistas no
projeto, enquanto outros tentam incluir todos os recursos concebíveis. Alguns têm interfaces
superiores, mas deixam a desejar em outras áreas, preferindo cobrir funções mais básicas
(Windows – na minha opinião [Gil Eduardo de Andrade]), enquanto outros são superiores em
gerenciamento de memória e E/S, mas se descuidam da tarefa de ser amigável para o usuário
(Linux, até tempos atrás – minha opinião [Gil Eduardo de Andrade]). Nenhum sistema
operacional único é superior em todos os aspectos.
Dois componentes são cruciais no projeto de sistemas operacional: o núcleo (kernel) e os
programas do sistema. O kernel é o centro do sistema operacional. Ele é usado pelo gerente de
processos, pelo escalonador, pelo gerente de recursos e pelo gerente de E/S. O núcleo é
responsável por escalonamento, sincronismo, proteção/segurança, gerência de memória e
tratamento de interrupções. Ele tem o controle primário do hardware do sistema, incluindo
registradores de controle e temporizadores. Ele carrega todos os controladores de dispositivos,
fornece os utilitários comuns e coordena toda a atividade de E/S. O núcleo deve conhecer as
especificidades do hardware para combinar todas estas peças em um sistema que funcione.
Os dois extremos do projeto do núcleo são as arquiteturas microkernel e núcleos
monolíticos. Microkernels fornecem a funcionalidade rudimentar do sistema operacional,
apoiando-se em outros módulos para realizar tarefas específicas, transferindo assim muitos
serviços típicos do sistema operacional para o espaço do usuário. Isto permite que muitos
serviços sejam reiniciados ou reconfigurados sem a necessidade de reiniciar todo o sistema
operacional. Microkernels fornecem segurança porque os serviços que são executados em nível
de usuário têm acesso restrito aos recursos do sistema. Suas principais características são seu
pequeno tamanho, sua fácil portabilidade e seu conjunto de serviços executados um nível abaixo
do núcleo. Contudo, é necessária uma comunicação adicional entre o núcleo e os outros
módulos, resultando muitas vezes em sistemas mais lentos e menos eficientes. Exemplos de
microkernel incluem Windows 2000 e Mach.
Núcleos monolíticos fornecem a sua funcionalidade essencial por meio de um único
processo. Consequentemente, eles são significativamente maiores do que os microkernels.
Geralmente orientados para um hardware em específico, núcleos monolíticos interagem
diretamente com o hardware, de modo que podem ser otimizados mais facilmente do que
sistemas operacionais microkernel. É por esta razão que núcleos monolíticos não são facilmente
portáveis. Exemplos de sistemas operacionais de núcleo monolítico incluem Linux, MacOS e
DOS.
Visto que um sistema operacional consome recursos, além de gerenciá-los, os projetistas
devem considerar o tamanho total do produto pronto. Por exemplo, o Solaris da Sun
Microsystem (versões antigas) requer cerca de 8 MB de espaço em disco para uma instalação
completa; o Windows 2000 requer cerca do dobro desta quantidade. Isso mostra o grande
aumento da funcionalidade de sistemas operacionais nas últimas décadas. O MS-DOS 1.0 cabia
confortavelmente em um único disquete de 100 KB.
Serviços do Sistemas Operacionais
Durante as seções anteriores foram mencionados alguns serviços mais importantes que o
sistema operacional fornece. O SO supervisiona todas as tarefas críticas de gerenciamento do
sistema, incluindo gerência de memória e processos, proteção e interação com dispositivos de
E/S. Em seu papel de interface, o sistema operacional determina como o usuário interage com o
computador, servindo como um isolador entre o ele e o hardware.
Cada uma dessas funções é um fator importante na determinação da performance geral
do sistema e de sua usabilidade. De fato, algumas vezes poderemos aceitar uma performance
reduzida se o sistema for fácil de usar. Em nenhum lugar este compromisso é mais aparente do
que na área de interfaces gráficas.
A Interface Humana
O sistema operacional fornece um nível de abstração entre o usuário e o hardware da
máquina. Nem usuários nem aplicações veem o hardware diretamente porque o sistema
operacional providencia uma interface para esconder os detalhes da máquina nua.
As interfaces de usuário do sistema operacional podem ser divididas em duas categorias
gerais: interfaces de linha de comando e interfaces gráficas com usuário (GUIs). Interfaces de
linha de comando fornecem um prompt para o usuário entrar com diversos comandos, incluindo
aqueles para copiar arquivos, eliminar arquivos, fornecer listagem de diretório e de manipulação
da estrutura de diretórios. As interfaces de linha de comando exigem que o usuário conheça a
sintaxe do sistema, que muitas vezes é demasiado complicada para o usuário médio. GUIs, por
outro lado, fornecem uma interface mais acessível para o usuário casual. GUIs modernas
consistem de janelas colocadas em uma superfície. Elas incluem características tais como ícones
e outras representações gráficas de arquivos que são manipuladas usando mouse. Exemplos de
interfaces de linha de comando incluem shell do Unix e o DOS. Exemplos de GUIs incluem as
diversas variantes do Microsoft Windows e MacOS.
A interface de usuário é um programa, ou um pequeno conjunto de programas, que
constituem o gerenciador de exibição. Esse módulo é normalmente separado das funções
básicas do sistema operacional encontradas no kernel do sistema operacional.
Gerenciamento de Processos
O gerenciamento de processos repousa no coração dos serviços do sistema operacional.
Ele inclui tudo, desde a criação dos processos (configurando as estruturas apropriadas para
armazenar informações sobre cada um) e o escalonamento dos diversos recursos usados pelos
processos até a eliminação dos processos e a limpeza após o seu término. O sistema operacional
mantém um olhar cuidadoso sobre as atividades de cada processo para evitar problemas de
sincronização, os quais ocorrem quando processos concorrentes têm acesso a recursos
compartilhados. Estas atividades devem ser monitoradas cuidadosamente para evitar
inconsistências nos dados e interferência acidental.
O escalonamento de processos é uma grande parte da rotina normal do sistema
operacional. Primeiro, o sistema operacional deve determinar quais são os processos a serem
admitidos no sistema. Depois ele deve determinar quais terão acesso à UCP a qualquer dado
instante. Se um processo em execução necessita de E/S ou de outros recursos, ele
voluntariamente libera a UCP e se coloca em uma lista de espera e outro processo é escalado
para execução. Esta sequência de eventos provoca a chamada troca de contexto. Durante uma
troca de contexto, todas as informações pertinentes a respeito dos processos atualmente em
execução são salvas, de modo que quando aquele processo retorna, ele pode ser restaurado ao
estado exato no qual ele foi interrompido.
Gerenciamento de Recursos
Além de gerenciar processos, o sistema operacional gerencia os recursos do sistema.
Visto que estes recursos são relativamente caros, é preferível permitir que eles sejam
compartilhados. Por exemplo, vários processos podem compartilhar um processador, vários
programas podem compartilhar memória física e diversos usuários e arquivos podem
compartilhar o disco. Existem três recursos que constituem a preocupação principal do sistema
operacional: a UCP, a memória e a E/S. O acesso à UCP é controlado pelo escalonador. O acesso
à memória e à E/S requerem um conjunto diferente de controles e funções.
Relembrando a aula de memórias, sabemos que a maior parte dos sistemas modernos tem
algum tipo de memória virtual que estende a RAM. Isto implica que partes de diversos
programas coexistam na memória e que cada processo deva ter uma tabela de páginas.
Originalmente, antes de sistemas operacionais serem projetados para lidar com memória virtual,
o programador implementava a memória virtual usando uma técnica de sobreposição. Se um
programa era muito grande grande para caber na memória, o programador o dividia em partes,
carregando apenas os dados e as instruções necessárias para serem executadas em um dado
momento. O programador era responsável por gerenciar a memória. Agora os sistemas
operacionais tomaram para si esta tarefa. O sistema operacional traduz endereços virtuais para
endereços físicos, transfere páginas de e para o disco e mantém as tabelas de página de memória.
Segurança e Proteção
Em seu papel de gerenciador de recursos e processos, o sistema operacional tem de
assegurar que tudo funcione de forma correta, suave e eficiente. O compartilhamento de
recursos, entretanto, cria muitas situações, tais como possibilidade de acesso não autorizado ou a
modificação de dados. Portanto, o sistema operacional também atua como protetor de recursos,
assegurando que “usuários e aplicativos maliciosos” e software com defeito não arruíne as coisas
para todos os outros. Os processos concorrentes devem ser protegidos uns dos outros, e
processos do sistema operacional devem ser protegidos contra todos os processos de usuário.
Download