SistemaOperacional(Materia_Eng_sofware)

Propaganda
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
1. Introdução
Um Sistema Computacional consiste fundamentalmente em duas partes, que são o seu
Hardware e o seu Software.
Mas muitas pessoas vêem um computador apenas como um gabinete de circuitos eletrônicos,
cabos e fontes de alimentação (hardware), se isto fosse verdade não teria nenhuma utilidade, porque é
através de programas (softwares) que o computador consegue armazenar dados em discos, imprimir
relatórios, gerar gráficos, realizar cálculos, entre outras funções. O hardware é o responsável pela
execução das instruções de um programa, com a finalidade de realizar alguma tarefa.
Podemos afirmar que uma operação efetuada pelo software pode ser implementada pelo
hardware, enquanto que uma instrução executada pelo hardware não pode ser simulada em software.
Nos primeiros computadores, a programação era realizada em painéis, através de fios, exigindo
um grande conhecimento do hardware e de sua linguagem de máquina.
A solução para este problema foi o surgimento do sistema operacional, que tornou a interação
do usuário com o computador mais simples, confiável e eficiente.
Partindo deste principio, podemos considerar o computador como uma máquina de níveis ou
camadas, onde inicialmente existem dois níveis: o nível 0 (Hardware) e o nível 1 (Sistema Operacional).
Os sistemas operacionais realizam basicamente duas funções não relacionadas: estender a
máquina e gerenciar recursos.
Como máquina estendida (fig. 1.1) ele tem como função apresentar uma máquina virtual mais
fácil de ser programada do que a programação direta sobre o hardware.
Desta maneira teremos uma plataforma intermediária entre o hardware e o programa de
aplicação.
Usuários
Aplicação
Aplicação
Aplicação
Sistema Operacional
Hardware
Fig. 1.1 - Sistema Operacional como máquina estendida
Como gerenciador de recursos (Fig. 1.2) prove uma interface adequada com os usuários e
gerencia todos os dispositivos de hardware.
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
Aplicação
Aplicação
Sistema Operacional
Fig. 1.2 – Sistema Operacional como gerenciador de recursos
Mas na realidade, um computador não possui apenas dois níveis, e sim tantos níveis quantos
forem necessários para adequar o usuário às diversas aplicações.
Atualmente, a maioria dos computadores possui a estrutura mostrada abaixo (fig. 1.3), podendo
conter mais ou menos camadas.
A linguagem utilizada em cada um desses níveis é diferente, variando da mais elementar
(Baixo Nível) a mais sofisticada (Alto Nível).
Aplicativos
Utilitários
Sistema Operacional
Linguagem de Máquina
Micropragramação
Hardware
Dispositivos Físicos
Fig. 1.3 – Camadas atuais nos computadores
2. Histórico
A evolução dos sistemas operacionais está, em grande parte, relacionada ao desenvolvimento
de equipamentos cada vez mais velozes, compactos e de custos baixos, e à necessidade de um melhor
gerenciamento do hardware ou o compartilhamento deste recurso, e criando uma interface mais
amigável com o usuário, por meio de ícones e automatização de tarefas.
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
Mas como sabemos nem sempre foi assim que as máquinas trabalharam. Os primeiros
computadores não possuíam sistema operacional e sua operação era realizada por técnicos
especializados.
2.1 Primeira Geração (1945 – 1955)
A primeira geração dos computadores utilizava válvulas e painéis de programação. Um grupo
de pessoas projetava, programava, operava e realizava a manutenção do computador. A programação
era feita em código absoluto e, muitas vezes, conectado plugs em painéis para controlar as funções
básicas da maquina. Não existia linguagem de programação nem sistema operacional.
Quando um programador necessitasse utilizar a máquina ela deveria ser reservada, assim
inseria-se o painel de programação no computador com um programa pré-montado.
No inicia da década de 50 surgiu os cartões perfurados assim tornou-se possível escrever
programas em cartões e posteriormente carregá-los através de uma leitora de cartões.
2.2 Segunda Geração
Nesta geração foi introduzidos o transistor e o sistema em lote (batch). O uso dos transistores
tornou o computador confiável para que pudessem ser fabricados e comercializados. Estas máquinas são
conhecidas como mainframes. Ficavam localizadas em ambientes especiais com ar-condicionado e eram
operadas por profissionais especializados. Somente as grandes corporações ou importantes órgãos do
governo ou universidades tinham recursos pra arcar com seu preço, na casa dos milhões de dólares,
Os seguintes passos eram necessários para a execução dos programas:
1. O programador escreve o programa em um papel em Assembly ou Fortram.
2. Posteriormente é reescrito em cartões perfurados.
3. O conjunto de cartões era levado para a sala do computador para o operador.
4. O operador coloca na ordem para processamento.
5. Ao termino da execução do programa ou job o operador pega na impressora os
resultados e o conjunto de cartões e coloca a disposição para o programador.
6. O operador pega novo conjunto de cartões e retorna ao passo 4.
Com isso a perda de tempo era considerável. Uma vez que o computador era um produto cara
desenvolveu-se um sistema para melhorar seu tempo de uso. Surge então o processamento (batch). O
processo consistia em utilizar um computador menor e mais barato cuja função era ler vários conjuntos
de cartões e armazenar em uma fita magnética, a seqüência de programas que finalmente eram lidos
pelo computador principal.
Os principais sistemas operacionais eram FMS (FORTRAM Monitor System) e o IBSYS da
IBM.
2.3 Terceira Geração (1965 – 1980)
Nesta geração os fabricantes possuíam duas linhas de maquinas totalmente incompatíveis. Uma
linha era a dos computadores científicos, utilizados para cálculos numéricos e a outra era a dos
computadores comerciais, utilizados para classificar e imprimir informações.
Com isso ficava caro á comercialização dos mesmos e reduzia a possibilidade de clientes. A
IBM veio com uma solução por meio do desenvolvimento do System/360. Era uma serie de maquinas
compatíveis em nível de software que variavam em termos de capacidade. As principais diferenças
estavam no preço e no desempenho (memória máxima, velocidade de processamento, numero de
dispositivos de E/S permitidos, etc). Uma vez que todas as máquinas possuíam a mesma arquitetura e
conjunto de instruções todos os programas desenvolvidos para uma máquina podiam ser aproveitados
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
nas demais maquinas da serie possibilitando uma melhor adequação às necessidades de cada cliente e a
expansão futura.
O /360 foi o primeiro computador em escala comercial a utilizar circuitos integrados em baixa
escala o que proporcionou uma melhor relação preço/desempenho. Assim todos os outros fabricantes
resolveram seguir a mesma estratégia.
Entretanto criar uma família de computadores que rodassem o mesmo software e o mesmo
sistema operacional resultou em um sistema operacional complexo e grande uma vez que:
• Tinha que ser eficiente em maquinas com poucos periféricos e com muitos periféricos.
• Tinha que funcionar em ambientes comerciais e científicos.
• Tinha que ser eficiente para qualquer uso.
Então assim surgiu o SO/360 e os sistemas operacionais semelhantes de 3ª geração.
Surgiu o conceito de multiprogramação, para evitar a ociosidade do Processador quando se fazia
uma pausa para troca de fitas ou outra operação, dividia-se a memória em varias partições, com um job
diferente em cada uma delas.
Outro importante recurso da geração foi a capacidade de ler jobs de cartões para disco assim que
chegavam na sala do computador.
A necessidade de tempo de resposta rápido abriu caminho para uma variante de técnica de
multiprogramação chamado compartilhamento de tempo (time sharing).
Houve também o crescimento fenomenal dos minicomputadores dando origem a toda uma nova
industria.
Também nesta geração um cientista da Bell Labs, Ken Thompson, descobriu um pequeno
minicomputador que ninguém estava usando e começou a escrever uma versão simplificada
monousuária que evolui para o SCO UNIX, que se tornou popular no mundo acadêmico, entre órgãos
do governo e entre muitas empresas.
2.4 Quarta Geração (1980 – presente)
Com o desenvolvimento dos circuitos LSI (Large Scale Integration – Integração em Larga
Escala), deu-se inicio a era do computador pessoal. Assim como o minicomputador da terceira geração
possibilitou que cada departamento em uma empresa ou uma universidade tivesse seu computador, o
microprocessador possibilitou que as pessoas tivessem seu computador pessoal.
Os primeiros foram chamados estações de trabalho. Na realidade são computadores pessoais de
menor portes, normalmente conectados por uma rede. Com isso abriu o caminho para o crescimento da
industria de software, principalmente aqueles que ignoravam tudo sobre computadores como também
não tinham nenhuma intenção de aprender.
Dois sistemas operacionais dominaram a cena do computador pessoal e das estações de trabalho
no seu inicio, respectivamente o MS-DOS da Microsoft e o UNIX.
O MS-DOS era amplamente utilizado na IBM-PC e em outras maquinas que empregavam CPU
8088 e seus sucessores 80286, 80386 e 80486. Mais tarde o Pentium e o Pentium PRO, até chegar o
sucessor Windows.
Os UNIX já em sua versão multiusuário dominavam as estações de trabalho e em outros
computadores topo de linha, como os servidores de rede.
Nesta geração houve um crescimento de redes de computadores pessoais, executando sistemas
operacionais de rede e sistemas operacionais distribuídos.
3. Classificação
Os sistemas operacionais podem ser classificados em:
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
3.1 Quanto ao Tipo de serviços Oferecidos ao Usuário
Sistema de Processamento de Lotes (Batch): neste sistema em lote as varias tarefas a serem
executadas são organizadas num dispositivo de entrada. Estas são lidas e processadas em ordem
seqüencial de leitura;
Sistema de Tempo Compartilhado (Time-Sharing): trabalha com multiprogramação, isto é,
aceita várias tarefas residentes na memória ao mesmo tempo, para serem processadas concorrentemente,
através de um mecanismo de divisão do tempo do Processador entre os processos;
Sistema de Temp Real (Real-Time): são, em geral, sistemas dedicados a um tipo determinado
de aplicação. Seus módulos são construídos de forma a atender requisitos de tempo.
3.2 Quanto ao Número de Usuários
Mono Usuário: apenas um usuário utiliza todo o sistema de cada vez;
Multi Usuário: vários usuários podem estar utilizando o sistema de modo compartilhado num
dado instante.
3.3 Quanto do Tipo de Interação
Batch: por submissão de tarefas (jobs) em lotes, através de uma linguagem de controle de jobs
(JCL), sem interação Usuário X Computador;
Interativo: pela interação direta do usuário com o sistema, via terminal de entrada e saída (do
tipo teleimpressora ou teclado e display);
Transacional: Chegada de uma transação (ou comando, ou mensagem) que “acorda” um
módulo, de tratamento ou execução apropriado.
3.4 Quanto a Aplicação
Dedicado: tem uso restrito a determinada aplicação (ex. controle de processos);
De uso Geral: tem uso indeterminado para qualquer aplicação, isto é, executa todos os tipos de
programas;
Híbrido: combina os dois anteriores.
4. Conceitos de hardware e software
4.1 Hardware
Todos os componentes de um computador são agrupados em três subsistemas básicos: unidade
central de processamento, memória principal e dispositivo de entrada e saída.
4.1.1 Unidade Central de Processamento
A unidade central de processamento (UCP), ou processador, tem como função principal
unificar todo o sistema, controlando as funções realizadas por cada unidade funcional. A UCP também é
responsável pela execução de todos os programas do sistema que, obrigatoriamente deverão estar
armazenados na memória principal.
A UCP é composta por dois componentes básicos: unidade de controle e unidade lógica e
aritmética. A unidade de controle (UC) é responsável por controlar as atividades de todos os
componentes do computador, mediante a emissão de pulsos elétricos (sinais de controle) gerado por um
dispositivo denominado clock. Este controle pode ser a gravação de um dado no disco ou a busca de
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
uma instrução da memória. A unidade lógica e aritmética (ULA), como o nome indica, é responsável
pela realização de operações lógicas (testes e comparações) e aritméticas (somas e subtrações).
A especificação da velocidade de processamento de uma UCP é determinada pelo número de
instruções que o processador executa por unidade de tempo, normalmente segundo.
4.1.2 Clock
É um dispositivo, localizado na UCP, que gera pulsos elétricos síncronos em um determinado
intervalo de tempo (sinal de clock). A quantidade de vezes que este pulso se repete em um segundo
define a freqüência do clock. O sinal de clock é utilizado pela unidade de controle para a execução das
instruções. A sua freqüência é medida em Hertz (Hz), que significa o número de pulsos elétricos
gerados em um segundo de tempo.
4.1.3 Registradores
Os registradores são dispositivos de alta velocidade, localizados fisicamente dentro da UCP,
para armazenamento temporário de dados. O número de registradores varia em função da arquitetura de
cada processador. Alguns registradores são de uso específico e têm propósitos especiais, enquanto
outros são ditos de uso geral. Podemos destacar alguns deles:
• PC (program counter) – armazena o endereço da memória que contem a instrução que
está em execução.
• SP (stack pointer) – armazena o endereço da memória que contem o endereço de
retorno de uma subrotina.
• F (flag) – armazena as informações sobre o estado do processamento.
4.1.4 Memória Principal
A memória principal, também conhecida como memória primária ou real, é a parte do
computador onde são armazenados instruções e dados. Ela é composta por unidades de acesso chamada
células, sendo que cada célula é composta por um determinado número de bits (binary digit). O bit é a
unidade básica de memória, podendo assumir o valor 0 ou 1. Atualmente, a grande maioria dos
computadores utiliza o byte (8 bits) como tamanho de célula, porém encontramos computadores de
gerações passadas com células de 16, 32 e até mesmo 60 bits. Podemos concluir, então, que a memória é
formada por um conjunto de células, onde cada célula possui um determinado número de bits.
A memória principal pode ser classificada em função de sua volatilidade, que é a capacidade da
memória preservar o seu conteúdo mesmo sem uma fonte de alimentação ativa. As memórias chamadas
voláteis se caracterizam por poderem ser lidas ou gravadas, como o tipo RAM (random Access
memory), que constitui quase que a totalidade da memória principal de um computador. O outro tipo,
conhecido como ROM (real-only memory), já vem pré-gravado do fabricante, geralmente com algum
programa, e seu conteúdo é preservado mesmo quando a alimentação é desligada. Uma variação da
ROM é a EPROM (erasable programmable ROM), onde podemos gravar e regravar a memória através
da exposição de luz ultravioleta por um dispositivo especial, atualmente chamada de EPROM.
4.1.5 Memória Cachê
A memória cachê é uma memória volátil de alta velocidade. O tempo de acesso a um dado nela
contido é muito menor que se o mesmo estivesse na memória principal.
Toda vez que o processador faz referência a um dado armazenado na memória principal ele
“olha” antes na memória cachê.
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
4.1.6 Memória Secundária ou Auxiliar
A memória secundária é um meio permanente (não volátil) de armazenamento de programas e
dados. Enquanto a memória principal precisa estar sempre energizada para manter suas informações, a
memória secundária não precisa de alimentação.
O acesso à memória secundária é lento, se comparado com o acesso à memória cachê ou à
principal, porém seu custo é baixo e sua capacidade de armazenamento é bem superior à da memória
principal. Enquanto a unidade de acesso à memória secundária é de milissegundos, o acesso à memória
principal é de nanossegundos.
4.1.7 Dispositivos de Entrada e Saída
Os dispositivos de entrada e saída (E/S) são utilizados para permitir a comunicação entre o
computador e o mundo externo. Através desses dispositivos, a UCP e a memória principal podem se
comunicar, tanto com usuários quanto com memórias secundárias, a fim de realizar qualquer tipo de
processamento.
Os dispositivos de E/S podem ser divididos em duas categorias: os que são utilizados como
memória secundária e os que servem para a interface homem-máquina.
4.1.8 Barramento
A UCP, a memória principal e os dispositivos de E/S são interligados através de linhas de
comunicação denominadas barramento, barras ou vias. Um barramento (bus) é um conjunto de fios
paralelos (linhas de transmissão), onde trafegam informações, como dados, endereços ou sinais de
controle. Ele pode ser classificado como unidirecional (transmissão em um só sentido) ou bidirecional
(transmissão em ambos os sentidos).
Na ligação entre UCP e memória principal, são utilizados três barramentos para que a
comunicação seja realizada.
• O barramento de dados transmite informações entre a memória principal e a UCP.
• O barramento de endereços é utilizado pela UCP para especificar o endereço da célula
de memória que será acessada.
• O barramento de controle é por onde a UCP envia os pulsos de controle relativos às
operações de leitura e gravação.
4.1.9 Pipelining
O conceito de processamento pipeline se assemelha muito a uma linha de montagem, onde uma
tarefa é dividida em uma seqüência de subtarefas, executadas em diferentes estágios, dentro da linha de
produção.
A técnica de pipelining pode ser empregada em sistemas com um ou mais processadores, em
diversos níveis, e tem sido a técnica de paralelismo mais utilizada para maior desempenho dos sistemas
de computadores.
4.1.10 Ativação/Desativação do Sistema
O sistema operacional é essencial para o funcionamento de um computador. Sem ele, grande
parte dos recursos do sistema não estaria disponível ou se apresentaria de uma forma complexa para
utilização pelos usuários.
Toda vez que um computador é ligado, é necessário que o sistema operacional seja carregado
da memória secundária para a memória principal. Esse processo denomina-se ativação do sistema (boot)
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
e é realizado por um programa localizado em uma posição especifica do disco (boot block), geralmente
o primeiro bloco. O procedimento de ativação varia em função do equipamento, podendo ser realizado
através do teclado, de um terminal ou por manipulação de chaves de um painel.
Além da carga do sistema operacional, a ativação do sistema também consiste na execução de
arquivos de inicialização. Nestes arquivos são especificados procedimentos de inicialização e
configuração de hardware e software específicos para cada ambiente.
Na maioria dos sistemas, também existe o processo de desativação (shutdown). Este
procedimento permite que as aplicações e componentes do sistema sejam desativados de forma
ordenada, garantindo a integridade do sistema.
4.2 Software
O hardware sozinho não tem utilidade. Para que seja útil, é necessário um conjunto de
programas, que será usado como interface entre as necessidades do usuário e as capacidades do
hardware. Como utilizamos software’s adequados para diversas tarefas tornam o trabalho do usuário
mais simples e eficiente.
4.2.1 Tradutor
Antigamente para programar era complicado, pois deveríamos possuir conhecimento do
hardware e programar em painéis através de fios. Os programas eram desenvolvidos em linguagem de
máquina e carregados diretamente na memória principal.
Com o surgimento das linguagens de programação os programadores deixaram de se preocupar
com o hardware, em que região da memória o programa deveria ser carregado e assim por diante, mas
os programas não estavam prontos para serem executados pela UCP, assim foi criado o tradutor que
altera os programas para a linguagem de máquina, mesmo assim ainda não poderíamos executar os
programas, pois o tradutor não tinha o poder de chamar as sub-rotinas, para isso tínhamos outro
utilitário que chamava linker.
O tradutor pode ser chamado de montador ou compilador:
• O montador (assembler) é um utilitário responsável por gerar, depois de uma programa
escrito em linguagem de montagem, um programa em linguagem de máquina não
executável.
• A linguagem de montagem é um conjunto de símbolos (mnemônicos) associado às
instruções da linguagem de máquina do processador.
Programa Fonte
Tradutor
Linguagem de
Montagem
Montador
Linguagem de
Alto Nível
Compilador
Programa Objeto
Módulo Objeto
Módulo Objeto
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
•
•
O compilador é o utilitário que gera, a partir de um programa escrito em alto nível,
um programa em linguagem de máquina não executável.
Um compilador é o utilitário que interage de modo integrado com os componentes do
sistema de programação disponível, sob a supervisão do sistema operacional. Então
podemos dizer que o compilador age como uma interfase entre o usuário e o sistema
operacional.
4.2.2 Interpretador
O interpretador é um tradutor que não gera código-objeto. Ele traduz, interpreta cada instrução
e a executa em seguida, depois do programa-fonte, que foi escrito em linguagem de alto nível ser
apresentado.
A desvantagem do Interpretador é o tempo gasto na tradução. A vantagem é que se os dados
mudarem durante a execução do programa ele implementa fazendo assim que exista uma flexibilidade
nos tipos de dados dinâmicos que estão sendo executados pelo programa.
4.2.3 Linker
O linker (ligador), também chamado de linkage editor (editor de ligação), é responsável, a
partir de um ou mais módulos-objetos, fazer um único programa executável. Ele pode pesquisar em
bibliotecas do sistema ou do próprio usuário.
Outra função do linker é determinar em que lugar da memória o programa será instalado para
ser executado.
Módulo-objeto
Módulo-objeto
Linker
Programa
executável
Módulo-objeto
Em sistemas multiprogramáveis antigos, a relocação é inviável, devido à memória ser
compartilhada por diversos programas, e sendo assim no momento que o sistema carrega um programa é
difícil que a área de memória esteja disponível.
4.2.4 Loader
O loader, também chamado carregador, é responsável por colocar fisicamente na memória um
programa para execução. Dependendo do código gerado pelo linker o procedimento de carga varia,
assim sendo o loader é classificado como sendo do tipo absoluto ou relocável.
Se o código for absoluto, o loader necessita apenas de saber o endereço da memória inicial e o
tamanho do módulo. (loader absoluto)
No outro caso, o relocável, do programa pode ser carregado em qualquer parte da memória.
(loader relocável)
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
4.2.5 Depurador
Todos os programas podem conter erros e para isso usamos o utilitário chamado de depurador
(deburgger), que permite controlar toda a execução de um programa em busca de erros na estrutura.
• Acompanha a execução de um programa instrução por instrução;
• Possibilita a alteração e visualização do conteúdo de variáveis;
• Implementa pontos de parada dentro do programa, para que durante a execução o
programa de parada nestes pontos;
• Especificar que cada vez que o conteúdo de uma variável sofra uma mudança, uma
mensagem seja enviada.
4.2.6 Linguagem de Controle
Todos os sistemas operacionais oferecem está linguagem, que também é conhecida como
linguagem de comando, faz com que ao usuário, através de comandos simples, possa ter acesso a rotinas
especificas do sistema.
Algumas linguagens de controle são poderosas chegando a ponto de poderem ser criados
programas com estrutura de decisão e interação.
4.2.7 Linguagem de Máquina
É a linguagem de programação que o processador realmente reconhece e faz com que os
comandos sejam executados de forma correta. Cada processador possui sua instrução de máquina,
definido pelo próprio fabricante.
Um programa escrito em linguagem de máquina é totalmente codificado em códigos binários,
que para os usuários fica muito difícil de se entender. Ele pode ser diretamente processado pela UCP,
não requerendo qualquer tipo de interpretador.
4.2.8 Microprogramação
Define a linguagem de máquina de cada computador. Apesar de cada computador ter níveis de
microprogramação diferentes.
Os processadores chamados microprogramáveis são aqueles que permitem novas instruções de
máquina através da criação de microprograma.
Os programas em linguagem de máquina são executados diretamente no hardware nos
processadores de arquitetura das máquinas RISC, o mesmo não acontecendo com as máquinas CISC.
5. Tipos de Sistemas Operacionais
Os Sistemas Operacionais evoluíram juntos com o hardware e as aplicações por ele suportadas,
assim foram popularizados vários conceitos junto aos computadores pessoais e os de estação de
trabalho.
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
Tipos de Sistemas
Operacionais
Sistema
Monoprogramáveis/
Monotarefa
Sistema
Multiprogramáveis
/Multitarefa
Sistema com
Múltiplos
Processadores
5.1 Sistemas Monoprogramáveis/Monotarefa
Este tipo de sistema era aquele que apenas um programa (job) poderia ser utilizado, se
necessitássemos de executar outro programa deveríamos aguardar o término do primeiro para poder
executar o segundo e assim por diante.
Estes Sistemas foram criados para trabalharem especificamente com os Mainframes, mas
devido à evolução dos computadores eles também passaram a serem desenvolvidos para eles.
Como estes Sistemas são simples não necessitamos de muita preocupação quanto a proteção.
Programa/
Tarefa
UCP
Memória
Dispositivos
de E/S
5.2 Sistemas Multiprogramáveis/Multitarefa
Os sistemas multiprogramáveis vieram substituir os monoprogramáveis e enquanto os monos
trabalhavam apenas com um programa sendo executado utilizando todos os recursos da máquina o
multiprogramável trabalha com vários programas sendo executados ao mesmo tempo e dividindo os
mesmos recursos.
A vantagem é que este sistema tem é que vários usuários podem trabalhar fazendo suas funções
aumento a produtividade e reduzindo custos para a empresa.
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
Programa/
Tarefa
Programa/
Tarefa
UCP
Memória
Dispositivo
de E/S
Programa/
Tarefa
Programa/
Tarefa
Programa/
Tarefa
Neste sistema podemos determinar se ele esta trabalhando como monousuário ou multiusuário,
para isso vai depender do número de pessoas que estejam trabalhando.
Os sistemas multiprogramáveis/multitarefa podem ser classificados de três maneiras,
dependendo da forma que suas aplicações são gerenciadas, ele pode ser dividido em sistema batch, de
tempo compartilhado ou de tempo real.
Sistema
Multiprogramáveis/Multitarefa
Sistemas Batch
Sistemas de Tempo
Compartilhado
Sistema de
Tempo Real
5.2.1 Sistema Batch
Estes sistemas também conhecidos por Lote, foram os primeiros programas multiprogramáveis
a serem implementados e quando submetidos à execução, seus programas são armazenados em disco ou
fitas.
Quando elas são bem projetadas, sua eficiência é muito grande, devido à melhor utilização do
processador, mas o tempo de resposta é muito mais elevado.
5.2.2. Sistema de Tempo Compartilhado
Este sistema também conhecido como Time-sharing, permite a interação dos usuários com o
sistema, basicamente através de terminais que incluem vídeos, teclado e mouse.
Estes sistemas trabalham com um espaço reservado para cada usuário, conhecido como fatia de
tempo (time-slice) do processador. Isso significa que se o programa de um determinado usuário (1) não
terminar no tempo determinado ele o substitui por outro programa de outro usuário (2), pelo mesmo
tempo utilizado pelo usuário (1), caso também não seja terminado o trabalho do usuário (2) ele retoma o
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
programa do usuário (1) e o termina, caso o tempo seja adequado, se houver outros usuários trabalhando
eles entraram na fila para utilizarem o tempo necessário determinado a eles.
t1
t2
t3
t4
t5
t6
Usuário (1)
Usuário (2)
Usuário (3)
Usuário (4)
Usuário (1)
Usuário (2)
t
Sistemas de tempo compartilhado são de implementação complexa, mas se levarmos em conta
o tempo de desenvolvimento e depuração de uma aplicação, aumenta consideravelmente a
produtividade dos usuários, reduzindo assim custos de utilização do sistema.
5.2.3 Sistema de Tempo Real
Estes sistemas também conhecidos como real-time são bem semelhantes em implementação
aos sistemas de tempo compartilhado, sua diferença é o tempo de resposta exigido no processamento
das aplicações. Isso quer dizer que o tempo de resposta do sistema de tempo compartilhado pode variar
sem comprometer as aplicações em execução, nos sistemas de tempo real os tempos de resposta devem
estar dentro de limites rígidos, que devem ser obedecidos, caso contrario poderão causar problemas
irreparáveis.
Esse sistema de tempo real está presente em controle de processos, como ex.: monitoramento
de refinaria de Petróleo, controle de trafego aéreo, de usinas termoelétricas e nucleares.
5.3 Sistema com Múltiplos Processadores
Estes sistemas se caracterizam por possuir duas ou mais UCPs interligadas, trabalhando em
conjunto. Um fator-chave nestes sistemas é a forma de comunicação entre as UCPs e o grau de
compartilhamento da memória e dos dispositivos de entrada e saída. Em função disso podemos
classificá-los como fortemente acoplados e fracamente acoplados.
Sistemas com Múltiplos
Processadores
Sistemas
Fortemente
Acoplados
Sistemas
Simétricos
Sistemas
Assimétricos
Sistemas
Fracamente
Acoplados
Sistemas Operacionais
de Rede
Sistemas Operacionais
Distribuídos
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
5.3.1 Sistemas Fortemente Acoplados
Neste sistema existem dois ou mais processadores compartilhando a mesma memória e
controlados por apenas um único sistema operacional. Isso possibilita a execução de múltiplas tarefas
simultaneamente ou a divisão de uma tarefa em pequenas subtarefas. Desta forma podemos ampliar a
capacidade do sistema introduzindo novos processadores que possuem um custo menor que um novo
computador.
Memória
UCP
UCP
Dispositivos
de E/S
Dispositivos
de E/S
A preocupação, neste tipo de sistema é o problema de concorrência, pois vários processadores
podem acessar o mesmo espaço de memória, além do fato de como organizar de forma eficiente os
processadores a memória e os periféricos.
Os sistemas fortemente acoplados podem ser divididos conforme a simetria existente entre seus
processadores, ou seja, se todos os processadores podem executar ou não as mesmas funções. E são
Classificados em Assimétricos e Simétricos.
5.3.1.1 Sistemas Fortemente Acoplados Assimétricos
Os sistemas assimétricos (mestre / escravo) têm como característica o fato de que somente um
processador (mestre) tem a capacidade de executar os serviços do Sistema Operacional tais como as
operações de Entrada e Saída. Sempre que o processador escravo necessitar realizar estas operações terá
que solicitar ao processador mestre.
O sistema pode tornar-se ineficiente caso ocorra um número excessivo de interrupções do
processador escravo devido ao elevado índice de operações de I/O. Outro problema, que pode ser
percebido nesta configuração, está no fato de que se o processador mestre falhar, todo o sistema ficará
inoperante.
UCP Master
Dispositivos
de E/S
SO
UCP Slave
Usuário
Usuário
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
5.3.1.2 Sistemas Fortemente Acoplados Simétricos
Os sistemas simétricos são mais poderosos que os assimétricos, permitindo um melhor
balanceamento do processamento e das operações de entrada / saída, apesar de sua implementação ser
bastante complexa, neste sistema não existe hierarquia entre os processadores. Todas as tarefas podem
ser executadas em qualquer CPU, ficando o sistema Operacional responsável pelo gerenciamento dos
recursos compartilhados. O mesmo processo pode ser executado simultaneamente em mais de uma
CPU, aproveitando possíveis recursos de paralelismo existentes na linguagem.
UCP
Dispositivos
de E/S
UCP
SO
Usuário
A falha de uma CPU não afeta o funcionamento do sistema como um todo, além de permitir um
melhor balanceamento de carga e menor tempo de gerenciamento, entretanto com menor capacidade.
Apenas poucas funções ficam a cargo de um único processador, como, por exemplo, a
inicialização do sistema.
5.3.2 Multiprocessamento em sistemas fortemente acoplados
Sistemas com múltiplos processadores possibilitam o aumento da capacidade computacional
com menor custo (escalabilidade), além de permitir a reconfiguração e o balanceamento do sistema.
Reconfiguração é a capacidade de um sistema poder continuar o processamento mesmo que um
dos processadores esteja falhando ou parem de funcionar.
Os sistemas fortemente acoplados (tightly coupled) podem ser divididos conforme a simetria
existente entre seus processadores, ou seja, se todos os processadores podem executar ou não as mesmas
funções.
Os computadores são vistos como máquinas seqüenciais, onde a UCP executa uma por uma as
instruções de um programa, mas na realidade isso não é totalmente verdadeiro, pois no Hardware,
múltiplos sinais estão ativos simultaneamente, o que pode ser entendido como um paralelismo.
Agora com a implementação de sistemas com múltiplos processadores, o conceito de
simultaneidade ou paralelismo pode ser expandido a um nível mais amplo, onde uma tarefa pode ser
dividida e executada ao mesmo tempo, por mais de um processador.
5.3.2.1 Processamento Vetorial
As maiorias dos computadores trabalham com dados escalares (elementares) e, sendo assim
processam vetores seqüencialmente. Este processamento permite a manipulação de vetores inteiros,
fazendo assim a execução da mesma operação sobre diferentes elementos de um ou mais vetores.
Trabalham combinando dois vetores produzindo um vetor de saída.
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
Um processador escalar faz a soma dos vetores A e B correspondente às fases de busca e
execução, ao cálculo dos endereços dos operandos e à execução das instruções de controle da repetição
(FOR), para cada soma dos n elementos dos vetores.
Para fazer a mesma conta os processadores vetoriais utilizam uma única instrução vetorial,
onde o vetor A é somado ao vetor B e o resultado é atribuído ao C. A vantagem é que apenas uma
instrução é executada.
FOR i := 1 TO N DO
C[i] := A[i] + B[i];
Computadores vetoriais possuem, além do processador vetorial o escalar, para que a unidade de
controle verifique a instrução e a execute no processador adequado.
A única vantagem de se usar um processador vetorial é quando as aplicações executadas têm
um elevado grau de código vetorial, como problemas numéricos, processamento de imagens, estudos
meteorológicos e de física nuclear.
5.3.2.2 Processamento Paralelo
Possibilita que a aplicação seja executada por mais de um processador ao mesmo tempo. Neste
caso só existirá ganho quando a aplicação puder ser dividida em partes independentes para execução
simultânea.
Vejamos um exemplo com uma máquina que tenha três processadores.
X := Cos(gama) + (Delta/4) - (Alfa * 3,14);
Um Processo Vetorial também pode ser implementado através de múltiplos processadores.
Vejamos um exemplo com uma repetição onde inicializamos um vetor de 100 posições.
FOR i := 1 TO 100 DO
Vetor[i] := 0;
Se um sistema possuir 100 processadores e todos estejam dedicados à mesma aplicação, cada
processador pode inicializar uma posição diferente do vetor ao mesmo tempo, torrnando o
processamento mais rápido que uma execução seqüencial.
Vetor [1]
Vetor [2]
:= 0;
:= 0;
Vetor [99] := 0;
Vetor [100] := 0;
Processador 1
Processador 2
Processador 99
Processador 100
O grande problema é justamente determinar quando existe a possibilidade de implementarmos
o paralelismo em um programa. O paralelismo pode ser indicado pelo programador (paralelismo
explícito) através de comandos da linguagem utilizada.
Atualmente muito se tenta desenvolver um compilador junto com sistema operacional que
detectaria automaticamente o paralelismo nos programas (paralelismo implícito). Isso faria que,
provavelmente, tenhamos programas mais eficientes e confiáveis.
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
Apesar disso ainda não surgiu a linguagem de programação própria para o desenvolvimento de
aplicações paralelas, sendo utilizadas, atualmente, as linguagens Ada, Pascal Concorrente, FORTRAN e
Modula 2.
5.3.2.3 Organização Funcional
A comunicação interna das UCPs, memória e dispositivos de E/S (unidades funcionais) é
fundamental no projeto de sistemas com múltiplos processadores, pois determina quantas UCPs o
sistema poderá ter e como será o aceso à memória.
A memória é dividida em módulos para que múltiplos acessos simultâneos sejam permitidos,
podendo assim ser compartilhada por varias unidades funcionais. As organizações funcionais podem ser
divididas, basicamente, em três: barramento comum, barramento cruzado e memória multiport.
5.3.2.3.1 Barramento comum
Esta é a forma mais simples de se fazer comunicação entre múltiplos processadores e outras
unidades funcionais.
O maior problemas dessa organização é que somente uma unidade funcional pode estar
utilizando o barramento em um determinado instante. Quando várias unidades tentam acessar o
barramento pode ocasionar um gargalo e se ocorrer um problema no barramento todo o sistema ficara
comprometido.
UCP
Memória
Memória
UCP
Processamento
de E/S
Processamento
de E/S
Memória
UCP
Processamento
de E/S
Apesar de simples, econômico e flexível, sistemas assim estão limitados a poucos
processadores, dependendo da velocidade de transmissão do barramento.
5.3.2.3.2 Barramento cruzado
Este tipo de barramento foi criado para evitar o gargalo existente no barramento comum,
criando uma rede de interconexão, os barramentos cruzados também são conhecidos como: crossbarswitch matrix.
Assim fica para o hardware a solução de prováveis conflitos de acesso a uma mesma unidade,
pois é possível a comunicação simultânea entre diferentes unidades funcionais.
A principio o número de processadores que podem ser adicionados ao sistema é ilimitado. O
preço de seu alto desempenho está no custo e complexidade do sistema.
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
Memória
Memória
Memória
UCP
Processador de E/S
UCP
Processador de E/S
UCP
Processador de E/S
5.3.2.3.3 Memória Multiport
Enquanto no esquema de barramento cruzado não são possíveis dois processadores terem
acesso a um módulo de memória no mesmo instante, a memória multiport permite acessos simultâneos a
um mesmo módulo de memória.
Nesse esquema, os acessos simultâneos são realizados através de múltiplas portas, existentes
em cada módulo de memória. Os possíveis conflitos de acesso são resolvidos pelos próprios módulos
através de prioridades a cada porta.
UCP
Memória
Memória
Processador de E/S
UCP
UCP
Memória
Processador de E/S
Memória
Processador de E/S
5.4 Sistemas Fracamente Acoplados
Em sistemas fracamente acoplados existem dois ou mais sistemas de computação, conectados
através de linhas de comunicação. Cada sistema funciona de maneira independente, possuindo seu(s)
próprio(s) processador (es), memória e dispositivos.
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
Link de Comunicação
UCP
UCP
Dispositivos
de E/S
Memória
Dispositivos
de E/S
Memória
A grande diferença entre os dois sistemas é que no fortemente acoplado existe apenas um
espaço de endereçamento (memória) compartilhado por todos os processadores, enquanto no fracamente
acoplado cada sistema tem sua própria memória individual.
5.4.1 Multiprocessasmento em Sistemas Fracamente Acoplados
Tem a característica de possuir dois ou mais sistemas de computação interligados, sendo que
cada um tem seu sistema operacional, gerenciando seus recursos.
Nos anos 80 os sistemas operacionais e suas aplicações eram tipicamente concentradas em
sistemas de grande porte com um ou mais processadores. Nos sistemas centralizados os operadores
utilizavam terminais não inteligentes conectados a linhas serias dedicadas ou linha telefônicas públicas
para a comunicação interativa com esses sistemas.
Com a evolução da tecnologia em todos os ramos, surgiu uma nova configuração de
computação, chamado de rede de computadores (computer network).
Em uma rede existem dois ou mais sistemas independentes, também chamados de hosts ou
estações, com capacidade de processamento próprio e interligados através de linhas de comunicação.
Dependendo do grau de interligação dos nós da rede podemos dividir os sistemas entre dois: sistemas
operacionais de rede e sistemas operacionais distribuídos.
Nó
Nó
Nó
Rede
Nó
Nó
5.4.1.1 Sistemas Operacionais de Rede (SOR)
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
No SOR, cada máquina possui seu sistema, hardware e software que permite ter acesso a outros
componentes da rede, compartilhando seus recursos, além disso, o SOR permite:
•
•
•
•
•
Cópia remota de arquivos;
Emulação de terminal;
Impressão remota;
Gerência remota;
Correio eletrônico.
Cada nó é independente do outro, sendo que o sistema operacional pode ser diferente, fazendo
com que as máquinas continuem a trabalhar mesmo quando a conexão entre os nós sofra qualquer
problema.
Um exemplo de SOR são as redes locais (Local Área Network – LAN).
5.4.1.2 Sistemas Operacionais Distribuídos (SOD)
A princípio o Sistema Operacional Distribuído e o Sistema Operacional Rede são iguais, os que
diferem um do outro, é que no Sistema Operacional Distribuído existe um relacionamento mais forte
entre seus componentes, fazendo com que todos os computadores tenham o mesmo sistema operacional.
Para os usuários e suas aplicações é como se não existisse uma rede, mas um único sistema centralizado.
Usuário
A grande vantagem é a possibilidade do balanceamento de carga, quando um programa é
admitido para execução, a carga de processamento de cada sistema é avaliada e o processador mais livre
é escolhido, depois de aceito o programa roda no mesmo processador até o término.
No Sistema Operacional Distribuído também é permitido o compartilhamento dos periféricos,
discos e fitas, podemos considerar que ele é como uma evolução dos sistemas fortemente acoplados.
Outra vantagem do Sistema Operacional Distribuído é a da implementação de aplicações
distribuídas é a capacidade de redundância do sistema. Isso significa que se um dos componentes falhar
outro poderá assumir o sistema defeituoso. Em aplicações de missão crítica, como controle de tráfego
aéreo, existem sistemas especialmente desenvolvidos para essa finalidade, conhecidos como sistema de
tolerância a falhas (fault tolerance),
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
Alguns fabricantes juntamente com os órgãos de padronização, definiram padrões para a
implementação de sistemas distribuídos. O Distributed Computing Enviroment (DCE), o Common
Object Request Broker Architecture (COBRA) e o Object Linking and Embedding (OLE) são alguns
dos padrões para o desenvolvimento de aplicações em ambiente distribuídos.
COMP 1
COMP 2
5.4.2.1 Organização Funcional
A organização funcional dos sistemas fracamente acoplados ou topologia define como
interligados fisicamente os diversos sistemas da rede.
5.4.2.2 Barramento
Os sistemas são conectados a uma única linha de comunicação e todos compartilham o mesmo
meio, tanto para receber como para enviar mensagens. Esta configuração se usa geralmente em redes
locais e nessa topologia, caso haja algum problema com o meio de transmissão todos os nós da rede
ficarão incomunicáveis.
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
5.4.2.3 Organização distribuída
Neste tipo existem linhas de comunicação ponto-a-ponto que ligam os sistemas e caminhos
alternativos entre os diversos nós da rede. Caso uma linha de comunicação apresente problema, linhas
alternativas permitirão que a rede continue em funcionamento. Este tipo de organização é utilizado
geralmente em redes distribuídas.
6. Sistemas Multiprogramáveis
A possibilidade de periféricos e dispositivos funcionarem simultaneamente entre si, juntamente
com a CPU, permitiu a execução de tarefas concorrentes, que é o principio básico para projeto e
implementação de sistemas multiprogramáveis. Este sistema surgiu de um problema existente nos
sistemas monoprogramáveis, que é a baixa utilização de recursos do sistema.
No sistema monoprogramáveis, somente um programa pode ser residente em memória, e o
Processador permanece dedicado, exclusivamente, à execução desse programa, com isso há um
desperdício na utilização do Processador. Outro aspecto que devemos observar é a subutilização da
memória, pois se um programa não utiliza totalmente a memória ocasiona a existência de áreas livres,
sem utilização.
Nos sistemas multiprogramáveis, vários programas podem estar residentes em memória,
concorrendo pela utilização da UCP. Assim enquanto um programa solicita uma operação de Entrada /
saída, outros programas poderão estar disponíveis para utilizar o processador.
E/S
UCP
E/S
Livre
UCP
1
1
1
2
Tempo
Tempo
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
Nos programas que são executados concorrentemente o ganho na utilização do processador,
memória, periféricos e no tempo de resposta é considerável.
A eficiência proporcionada por um sistema multiprogramável resulta em maior complexidade
do sistema operacional, já que alguns problemas surgem com esse tipo de implementação e a
responsabilidade de resolução é do sistema operacional.
•
•
•
Quais os programas que devem estar residentes em memória;
Qual a ordem que os programas utilizarão a UCP;
Que um programa não pode destruir dados ou códigos de outro programa.
6.1 Interrupção e Exceção
Enquanto um programa é executado pode ocorrer algum evento no seu processamento, fazendo
com que haja uma intervenção do sistema operacional e esta intervenção é camada de interrupção ou
exceção e pode ser resultado da execução de instruções do próprio programa, gerado pelo sistema
operacional ou por algum dispositivo de hardware. Nestas situações o fluxo do programa é desviado
para uma rotina especial de tratamento.
Quando a interrupção é gerada pelo sistema operacional ou por algum dispositivo a UCP deve
interromper o programa para atender a solicitação do dispositivo, fazendo com que o controle seja
desviado para uma rotina responsável pelo tratamento da interrupção. Logo em seguida ao término desta
interrupção o controle deve voltar ao programa que, anteriormente, estava sendo processado. Com isso é
necessário que, no momento da interrupção, um conjunto de informações sobre a execução do programa
seja preservado. Essas informações consistem no conteúdo de alguns registradores, que deverão ser
restaurados posteriormente para continuação do programa.
Não existe apenas um único tipo de interrupção e sim diferentes tipos que devem ser atendidos
por diversas rotinas de tratamento. Quando uma interrupção acontece a UCP deve saber o tipo de
interrupção que ocorreu, para fazer o desvio do fluxo da execução. Essa informação esta em uma
estrutura chamada vetor de interrupção.
Salva os
registradores
Identifica a origem
da interrupção
Rotina de
Tratamento
Interrupção
Obtém o endereço da
rotina de tratamento
Restaura os
registrador
Mecanismo de Interrupção
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
As interrupções podem ser classificadas como mascaráveis e não mascaráveis. As mascaráveis
podem ser desabilitadas pelo processador, isto quer dizer que não receberam tratamento. No caso das
não mascaráveis o tratamento é sempre obrigatório.
Caso ocorram múltiplas interrupções, o processador deve saber qual a interrupção deverá ser
tratada em primeiro. Para isso, as interrupções devem conter prioridades, em função da necessidade de
atendimento a cada uma. Quem tem essa função, normalmente, é o hardware, pois tem um dispositivo
denominado controlador de pedidos de interrupção que é responsável por avaliar as interrupções geradas
e suas prioridades de atendimento.
Inicialmente os sistemas operacionais apenas implementavam o mecanismo de interrupção.
Com a evolução dos sistemas foi introduzido o conceito de exceção, que é resultado direto da execução
de uma instrução do próprio programa.
O mecanismo de tratamento de exceções é semelhante ao de interrupções, porém muitas vezes,
podem ser escritas pelo próprio programador.
A diferença fundamental entre elas é que a primeira é gerada por um evento síncrono, enquanto
a segunda é gerada por eventos assíncronos. Um evento é síncrono quando é resultado direto da
execução do programa corrente.
Um evento é dito assíncrono quando ocorre independentemente da execução do programa
corrente e como esses eventos são imprevisíveis, podem ocorrer múltiplas vezes simultaneamente.
6.2 Operações de Entrada / Saída
Antigamente a comunicação entre UCP e periféricos era controlada por um conjunto de
instruções especiais, denominadas instruções de entrada/saída, executadas pela própria UCP.
A implementação de um dispositivo chamado controlador ou interface permitiu à UCP agir de
maneira independente dos dispositivos de E/S. Com isso a UCP passou a não se comunicar diretamente
com os periféricos e sim através do controlador.
Com a nova implementação, existem duas maneiras básicas pelas quais o processador
controlava as operações de E/S. A primeira a UCP sincronizava-se com o periférico para inicio da
transferência de dados e, após iniciava a transferência, e o sistema ficava permanentemente testando o
estado do periférico para saber quando a operação se encerraria.
A outra era mais inteligente permitia que após o início da transferência dos dados, a UCP
ficasse livre para se ocupar de outras tarefas. Assim em determinados intervalos de tempo o sistema
deveria realizar um teste para saber do termino ou não da operação de E/S em cada dispositivo (polling).
Com a implementação do mecanismo de interrupção no hardware as operações de E/S puderam
ser realizadas de uma forma mais eficiente. Em vez de o sistema verificar periodicamente o estado de
uma operação pendente, o próprio controlador interrompia a UCP para avisar do termino da operação.
UCP
Memória
Principal
Controlador
A operação de E/S controlada por interrupção é muito mais eficiente que a operação de E/S
controlada por programa, já que elimina a necessidade de a UCP esperar pelo término da operação, além
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
de permitir que várias operações de E/S sejam executadas simultaneamente. Mesmo assim a UCP era
sobrecarregada. A solução para esse problema foi a implantação, por parte do controlador de uma
técnica de transferência de dados denominada DMA (Direct Memory Access).
A DMA permite que um bloco de dados seja transferido entre memória e periféricos, sem a
intervenção da UCP, exceto no início e no final da transferência. Quando o sistema deseja ler ou gravar
um bloco de dados, são passadas da UCP para o controlador informações como: onde o dado está
localizado, qual o dispositivo de E/S envolvido na operação, etc...
No momento em que a transferência de DMA é realizada, o controlador assume
momentaneamente, o controle do barramento. Por sua vez a UCP suspende o acesso ao bus, esse
procedimento não gera uma interrupção e a UCP fica livre para executar outras tarefas, claro que sem a
utilização do barramento.
Memória
Principal
UCP
Canais de
E/S
Controlador
Controlador
6.3 Buffering
Esta técnica consiste na utilização de uma área de memória para a transferência de dados entre
os periféricos e a memória principal denominada buffer.
Esta Técnica permite que quando um dado for transferido para o Buffer, após uma operação de
leitura, o dispositivo de entrada possa fazer uma nova leitura.
Ela é outra implementação para minimizar o problema de disparidade da velocidade do
processamento existente entre a UCP e os dispositivos de E/S. O objetivo do buffering é manter, na
maior parte do tempo a UCP e os dispositivos de E/S ocupados.
A unidade de transferência usada é o registro. O tamanho do registro pode ser especificado em
função da natureza do dispositivo ou da aplicação.
O buffer deve possuir a capacidade de armazenar diversos registros, de maneira que existam
dados lidos nele, mas não processados, ou processados, mas não gravados.
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
Memória Principal
Gravação
Buffer
Gravação
UCP
Leitura
Controlador
de E/S
Leitura
6.4 Spooling (simultaneous peripheral operation on-line).
Essa técnica foi introduzida no final dos anos 50 para aumentar a produtividade e a eficiência
dos sistemas operacionais.
Jobs é a forma de armazenar os vários programas e seus dados.
A técnica de buffering, permite que um job utilize um buffer concorrente com um dispositivo
de E/S. O spooling, basicamente, utiliza o disco como um grande buffer, permitindo que dados sejam
lidos e gravados em disco, enquanto outros jobs são processados.
Sistema
Operacional
Programa
Arquivo de Spool
Impressão
Atualmente, a técnica de spooling é implementada na maioria dos sistemas operacionais,
fazendo com que tanto a UCP quanto os dispositivos de E/S sejam aproveitados de forma mais eficiente.
6.5 Reentrância
É a capacidade de um código de programa (código reentrante) poder ser compartilhado por
diversos usuários, exigindo que apenas uma cópia do programa esteja na memória. Uma característica
da reentrância é que o código não pode ser modificado por nenhum usuário no momento em que está
sendo executado.
A reentrância permite que cada usuário possa estar em um ponto diferente do código reentrante,
manipulando dados próprios, exclusivos de cada usuário.
6.6 Proteção do sistema
A proteção do sistema faz com que nenhum utilitário, acidentalmente, acesse uma área de outro
utilitário para poder manter a integridade dos dados pertencentes a cada usuário. Para isso todo sistema
operacional implementa algum tipo de proteção aos diversos recursos que são compartilhados.
Um programa mal escrito, ao ganhar a UCP, pode possuir no seu código um loop infinito, de
forma a alocar o processador por tempo indeterminado. Para evitar este tipo de problema, a UCP possui
um mecanismo denominado timer, que interromperá o processamento em determinados intervalos de
tempo.
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
7. Estrutura do Sistema Operacional
O Sistema Operacional não é como uma aplicação tipicamente seqüencial, com início, meio e
fim, por isso sua compreensão é complicada. Pois muitos dos eventos estão associados ao hardware e as
tarefas internas do próprio sistema operacional.
O Sistema Operacional é formado por um conjunto de rotinas (procedimentos) que oferecem
serviços aos usuários do sistema e sua aplicações, bem como a outras rotinas do próprio sistema. Esse
conjunto de rotinas é chamado núcleo do sistema ou kernel (cérebro). As principais funções do núcleo
são:
• Tratamento de interrupções;
• Criação e eliminação de processos;
• Sincronização e comunicação entre processos;
• Escalonamento e controle dos processos;
• Gerência de memória;
• Gerência do sistema de arquivos;
• Operações de entrada e saída;
• Contabilização e segurança do sistema.
A estrutura do SO, ou seja, a maneira como o código do sistema é organizado e o interrelacionamento entre seus diversos componentes, pode variar conforme a concepção do projeto.
7.1 System Calls
Uma preocupação na grande maioria dos projetos de SO é a implementação de mecanismo de
proteção ao núcleo do sistema e de acesso aos seus serviços.
O usuário (ou aplicação), quando deseja solicitar algum serviço do sistema, realiza uma
chamada a uma de suas rotinas (ou serviços) através de system calls (chamadas ao sistema), que são as
portas de entrada para se ter acesso ao núcleo do SO. Para cada serviço existe uma system calls
associada e cada SO tem o seu próprio conjunto (biblioteca) de chamadas, com nomes, parâmetros e
formas de ativação específica.
H
a
System Call
Aplicação
Núcleo
r
d
w
a
r
e
As system calls podem ser divididas em grupos de funções:
•
Gerência de processos
o Criação e eliminação de processos
o Alteração das características do processo
o Sincronização e comunicação entre processos
•
Gerência de memória
o Alocação e desalocação de memória
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
•
Gerência de entrada/saída
o Operações de entrada/saída
o Manipulação de arquivos e diretórios
7.2 Modos de Acesso
Certas Instruções não podem ser colocadas diretamente à disposição da aplicação, pois a sua
utilização indevida ocasionaria sérios problemas à integridade do sistema.
As instruções que têm o poder de comprometer o sistema são conhecidas como instruções
privilegiadas, e as que não oferecem perigo são conhecidas como instruções não privilegiadas.
Para que uma aplicação execute uma instrução privilegiada, o processador implementa o
mecanismo de modos de acesso, esses modos são divididos em dois o modo usuário, que executa as
aplicações não privilegiadas e o modo kernel, que executa as privilegiadas.
Quem determina o modo de acesso é um conjunto de bits, que fica em um registrador especial
da UCP. Através desse registrador, o hardware verifica se a instrução pode ou não ser executada pela
aplicação.
O núcleo do SO sempre é executado em modo kernel, porque tem que possuir a capacidade de
gerenciar e compartilhar todos os recursos, solucionando, em diversos níveis, os problemas de acesso às
instruções privilegiadas.
Programa
Usuário A
Memória
Principal
System Call
Rotina do
Sistema
Programa
Usuário B
Programas dos
usuários executam no
modo usuário
Sistema Operacional
executa no modo kernel
7.3 Sistemas Monolíticos
A organização mais comum de ser encontrada é aquela que estrutura o sistema como um
conjunto de rotinas que podem interagir livremente umas com as outras. A estrutura monolítica pode ser
comparada com uma aplicação formada por vários programas que são compilados e depois linkados,
formando um grande e único programa executável.
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
Aplicação
Aplicação
Modo Usuário
System Calls
Modo Kernel
Hardware
7.4 Sistemas em Camadas
Um sistema em camadas divide o sistema operacional em camadas sobrepostas. Cada módulo
oferece um conjunto de funções que podem ser utilizadas por outros módulos. Módulos de uma camada
podem fazer referência apenas a módulos das camadas inferiores.
5
Operador
4
Programas de usuário
3
Entrada / Saída
2
Comunicação
1
Gerência de memória
0
Multiprogramação
A vantagem da estruturação em camadas é isolar as funções do SO, facilitando sua alteração e
depuração, além de criar uma hierarquia de níveis de modos de acesso, protegendo as camadas mais
internas.
Usuário
Supervisor
Executivo
Kernel
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Sistemas Operacionais
Prof. Antonio Apparecido Oliveira dos Santos
7.5 Sistema Cliente-Servidor
Na atualidade a idéia é tornar o núcleo do sistema operacional o menor e mais simples possível.
Por isso o sistema é dividido em processos, sendo cada um responsável por oferecer um conjunto de
serviços, como serviços de arquivo, serviços de criação de processos, serviços de memória, serviços de
escalonamento etc.
Quando um serviço é solicitado ao processo responsável à aplicação que solicita o serviço é
conhecida como cliente, enquanto o processo que responde à solicitação é chamado de servidor. A
solicitação é feita através de mensagem para o servidor, que responde também através de mensagem e
esta função de comunicação é realizado pelo núcleo do sistema, ou seja, a troca de mensagens entre o
cliente e o servidor.
Servidor
de
Memoria
Cliente
Servidor
de
Arquivo
Servidor
de rede
Servidor
de
Processo
Modo Usuário
Modo Kernel
Núcleo
Hardware
Neste modelo os servidores executam o pedido em modo usuário, ou seja, não têm acesso
direto a certos componentes do sistema. Apenas o núcleo do sistema, responsável pela comunicação
entre clientes e servidores, executa no modo kernel. Com isso se ocorrer um problema o serviço pode
parar sem ocasionar um comprometimento total do sistema. Além disso, a implementação de sistemas
cliente-servidor permite isolar as funções do SO por diversos processos (servidores) pequenos e
dedicados a serviços específicos. Como conseqüência, o SO passa a ser de mais fácil manutenção.
Como servidores se comunicam por mensagens não interessa quantos processadores estão
trabalhando, se um ou múltiplos (fortemente acoplados) ou ainda em ambiente de sistema distribuído
(fracamente acoplados). A implementação de sistemas cliente-servidor em um ambiente distribuído
permite que um cliente solicite um serviço e a resposta seja processada remotamente.
Apesar de todas as vantagens deste sistema, sua implementação, na prática é difícil devido a
certas funções do SO exigirem acesso direto ao hardware, como operações de entrada e saída. Então o
que é implementado usualmente é uma combinação do modelo de camadas com o modelo clienteservidor. O núcleo do sistema, além de ser responsável pela comunicação entre cliente e servidor, passa
a incorporar outras funções críticas do sistema, como escalonamento e gerência de memória, além das
funções dos divice drivers.
Copyright – Fevereiro de 2004 – Todos os direitos reservados para Antonio Apparecido Oliveira dos Santos
Download