Escolar Documentos
Profissional Documentos
Cultura Documentos
As notas de aulas são referências para estudo. Portanto não devem ser adotadas como material didático absoluto!
Versão 0.1 – 30/08/2008
Romildo Martins Bezerra
• CPU (unidade central de processamento) composto de uma unidade de controle (UC), unidade
lógico-aritmética (ULA) e registradores;
• Memória Principal, onde os programas estão armazenados (veremos detalhes a seguir);
• Dispositivos de E/S, responsáveis em transferir dados de dentroÙfora do computador
Pontos Importantes:
Atualmente os computadores (a maior parte deles) utilizam uma arquitetura composta dos
seguintes componentes vistos na figura 01.
Memória Principal
endereço dados/instruções
CPU
Registradores ULA
PC
Unidade de Controle
Dispositivos E/S
Figura 01 – Modelo Conceitual dos computadores atuais, baseados no IAS de Von Neumann
Processadores
Correspondem ao cérebro do computador, pois é o responsável em executar todas as tarefas
referentes à busca/execução dos programas e dados. Para modularizar seu funcionamento, será
apresentado o modelo didático com as seguintes componentes:
2y
Romildo Martins Bezerra
• Memória Cache – Atualmente para melhorar o desempenho, os processadores atuais possuem uma
memória de altíssima velocidade (quando comparada a memória RAM ou disco rígido) para
arquivar os dados de maior utilização, evitando acessos constantes à memória. Veremos mais
detalhes no decorrer desta apostila.
Vamos analisar novamente a figura 02 e imaginemos que um computador vai executar diferentes
operações simples (soma, por exemplo). Seria interessante se ele pudesse fazer parte das instruções em
paralelo de forma a otimizar sua utilização, sendo pelos menos duas tarefas executadas no mesmo tempo.
Isso pode ser feito de duas formas:
• Paralelismo a nível de instruções – A divisão das instruções em partes menores sendo essas
executadas em um hardware específico. (lembrem-se do exemplo da soma dado em sala!)
[ E1 ] [ E2 ] [ E3 ] [ E4 ] [ E5 ]
Unidade de Unidade de Unidade de Unidade de Unidade
busca de decodificação busca de execução de de escrita
instrução de instrução operando instrução
3y
Romildo Martins Bezerra
E1 P1 P2 P3 P4 P5 P6 P7 P8
E2 P1 P2 P3 P4 P5 P6 P7
E3 P1 P2 P3 P4 P5 P6
E4 P1 P2 P3 P4 P5
E5 P1 P2 P3 P4
tempo 1 2 3 4 5 6 7 8
Memória Principal
A memória principal é uma das partes essenciais para o funcionamento do computador, uma vez
que é nela que os programas e dados são executados. O que se esperar da memória? Tamanho infinito,
ultra-rápida (não atrase o processador) e barata (afinal ninguém quer gastar dinheiro!). É possível
conciliar isso? Isso será discutido mais tarde.
A memória é organizada através de células, unidades elementares de memória, que compõem
segmentos (pedaços alocados por um programa que podem conter mais de uma célula). Vamos imaginar
uma memória de 1Megabyte (220 bytes = 1024*1024) com células de 32 bits (22 bytes), retemos então:
Ou seja teríamos 218 células a serem endereçadas. Vamos supor agora que o sistema operacional
precisa de 26 bytes para executar uma determinada instrução (IX) de um programa em Pascal (compilador
de alto nível). O sistema operacional ficará responsável em alocar segmentos de memória (contínuos ou
não) para que esta informação possa ser trabalhada pelo processador.
Vazio IY IX IX IX IX IX IX IX Vazio
199 200 201 202 203 204 205 206 207 208
Que problemas vocês enxergam que o SO terá com este particionamento da memória?
• Controle da fragmentação
• Falta de espaços
• Movimentação constante
Memória Cache
Devido a uma diferença história entre processadores e memórias, o processador acaba esperando
(apenas por definição!) ciclos de clock até que a memória entregue (aloque) sua requisição. Algumas
técnicas para melhorar esta solução podem ser utilizadas, destacamos aqui a utilização de memórias
cache.
Os projetistas de HW construíram uma memória mais rápida capaz de operar na velocidade dos
processadores, mas devido ao seu custo elevado (fruto de aumento do tamanho do processador) é
necessário restringir o tamanho da memória cache. Esta apresentação segue o conceito de hierarquia de
memória, onde quanto mais rápido a memória, menor será seu tamanho (devido ao custo de fabricação).
4y
Romildo Martins Bezerra
cache
preço
principal
discos rígidos
velocidade
unidades de fita
Para se ter uma idéia, diversos processadores atuais trabalham com velocidades superiores a
3.0GHz (3 bilhões de ciclos por segundo) e possui cache interna (L1) de 512Kbytes, enquanto a memória
RAM trabalha a 333Mhz e tem tamanho de 256MB, sendo assim 512 vezes maior e 9 vezes mais lenta. Como
não é possível trabalhar com apenas uma delas, a proposta é a seguinte:
Cache 256MB
Esta memória ultra-rápida, cache, deve ser sempre as informações mais requisitadas pelo
processador, e este terá que sempre consultar a cache antes de perguntar memória principal. Mas como
“adivinhar” que parte da memória será utilizada? Como calcular se o tempo médio de acesso com a cache
tornará o sistema mais eficiente?
Cálculos matemáticos e algoritmos complexos são desenvolvidos no projeto de cada arquitetura.
Para os mais interessados pesquisem o principio da localidade, base teórica para o funcionamento de
sistemas com utilização intensiva de cache.
Memória Secundária
“Por maior que seja a memória principal, ela será sempre pequena.” Tanenbaum em Organização
Estruturada de Computadores, página 40. Apesar de a afirmação parecer (e é!) forte demais, não é
possível enxergar uma estrutura computacional moderna sem a utilização de memória secundária. Do
mesmo modo que a cahe é muito mais rápida que a memória principal, essa é muito mais rápida que a
memória secundária.
Aqui serão explicados apenas os discos magnéticos, vistos que o foco é apresentar uma introdução
para sistemas operacionais. A composição básica de um disco magnético é vista abaixo.
5y
Romildo Martins Bezerra
Nota-se que esta composição mecânica dos discos não pode superar, em velocidade, o método
digital dos semicondutores utilizados na memória RAM e memória cache.
6y
Romildo Martins Bezerra
Os sistemas operacionais vêm passando por um processo gradual de operação. A evolução dos SO é
diretamente ligada a evolução dos computadores e passou por algumas gerações:
Arquitetura de um SO Chamadas de
Esta arquitetura é simples e intuitiva de ser Sistema Programas
entendida. O kernel presta serviço aos programas de Kernel
usuários e recebe serviços do microkernel. A Dados
separação entre estes dois níveis diz respeito a Microkernel Solicitados
separação dos serviços básicos oferecidos.
Hardware
Figura 11 – Arquitetura de um SO
Um sistema operacional pode oferecer serviços também na
C:\ dir /s Interpretador
de Comandos camda de utilitários (programas de usuário) confundindo muitas vezes
o usuário, uma vez que tais serviços são distribuídos pelo próprio
forncedor do software. O Windows Explorer e o task manager -
manipulador de arquivos e diretórios e gerenciador de tarefas,
respectivamente – são exemplos no Microsoft Windows. Já o comando
Kernel top e time são bons exemplos no Linux. Talvez o mais importante eles
seja o interpretador de comandos, uma vez que o usuário começa sua
seção de trabalhos (sem interface visual!).
Figura 12 – Interpretador de comandos
Arquitetura Interna de um SO
7y
Romildo Martins Bezerra
• Chamada de sistema – é uma solicitação de recurso por parte de um programa que está sendo
executado. Diversas preocupações associadas podem ser listadas, como por exemplo: permissão do
usuário a este recurso.
• Interrupção de periférico – o processador para o processador que está executando para atender a
um retorno de um periférico (controladora dele) informando que o recurso está disponível.
Processos
B C
D E F G
Quando estão em operação, dois ou mais processos podem entrar em uma situação da qual mão
conseguem sair, esta situação é chamada de deadlock.
Memória
Todo computador tem uma memória principal para guardar o estado dos programas em execução.
Em sistemas operacionais muito simples, somente um programa por vez ocupa a memória.
Sistemas operacionais modernos permitem que múltiplos programas residam na memória principal
ao mesmo tempo. Para que não haja conflito com outros programas ou com o sistema operacional é
necessário construir um mecanismo de proteção a ser controlado pelo sistema operacional.
Outro ponto importante é como gerenciar e distribuir os espaços de endereçamento dos processos
guardados em memória principal? O que pode ser feito para que um processo que requer mais memória
que o computador dispõe? Sistemas operacionais modernos utilizam memória virtual.
Arquivos
Como uma das funções do sistema operacional é deixar transparente o aceso aos recursos (entre
eles o disco!) serão necessárias criação de chamadas de sistema para facilitar o acesso aos arquivos
gravados no disco.
Para poder guardar organizadamente os arquivos, vários sistemas operacionais utilizam o conceito
de diretório. Cada arquivo dentro desta hierarquia de diretórios pode se acessado fornecendo-se o
caminho (path name) a partir do topo da hierarquia, chamado de diretório raiz.
8y
Romildo Martins Bezerra
Multiprogramação
Como os programas que estão em execução provavelmente precisarão de acesso aos dispositivos
de E/S e acesso a disco, neste momento o processador “ficaria ocioso” (o que não é verdade, pois o mouse
se mexe e você o vê no monitor!). Nota-se uma necessidade de otimizar a eficiência de utilização do
computador. Uma solução seria manter mais de um programa (ou parte dele) na memória principal e
escalonar a utilização do processador dividindo o tempo de utilização de forma a não deixá-lo ocioso e
atendendo todos os processos.
Com a multiprogramação, a execução dos processos passa por diversas fases, alternando a
utilização do processador de forma que reduza o tempo ocioso do processador e o distribua de forma justa
entre processos. Além disso, muitos processos (quase todos) não precisam de toda memória virtual, logo
se um processo ficasse exclusivo na memória, isto acarretaria um desperdício.
Sistemas em camadas
Criação de uma hierarquia de níveis, onde cada um é construído exatamente sobre o nível abaixo.
Ex: THE – Dijkstra – 6 níveis
MULTICS – Kernel circular
Máquina Virtual
Uma cópia exata do hardware é feita para criar um ambiente único para execução do programa.
Pode-se rodar mais de uma MV em um mesmo hardware ou criar n MV diferentes para hardware diferentes
mantendo acima dela uma única interface.
Modelo cliente/servidor
A comunicação entre os módulos do kernel do SO é feita através de solicitações de serviços através
de mensagens de processos clientes a processos servidores (memória, arquivo, terminal...).
A divisão do sistema operacional em várias partes facilita o desenvolvimento e evolução de um
sistema operacional, além de permitir que uma falha em um servidor – por exemplo, o de arquivos – não
afete toda a máquina.
Este modelo oferece fácil adaptabilidade a sistemas distribuídos.
Gerência de Processos
Um processo é um programa em execução incluindo os valores armazenados nos registradores e o
valor das variáveis.
As máquinas atuais utilizam o Conceito de pseudoparalelismo – paralelismo aparente – forma de
chavear o processador em diferentes processos (programas) criando a alusão de simultaneidade de
execução. Para tal é necessário o rápido chaveamento do processador entre diversos programas em
execução, chamado de Multiprogramação.
Como o processador está sendo chaveado entre diversos processos pode-se observar que a
velocidade de execução não é constante, por isso a programação de processos não pode ter restrições de
tempo.
9y
Romildo Martins Bezerra
Estados do processo
Embora cada processo seja uma entidade independente, muitas vezes os processos precisam
interagir com os outros. Para gerenciar esta interação e o escalonamento dos processos é necessário
definir os possíveis estados que um processo pode ficar:
Nota-se que o escalonador está num nível mais baixo do sistema operacional que os processos para
que possa fazer este controle sobre eles.
1 2 ... n-1 n
Escalonador
Comunicação interprocessos
Como visto acima, freqüentemente os processos precisam se comunicar com outros processos,
preferencialmente de maneira estrutura e sem interrupções (nem sempre é possível). Neste tópico
devemos nos preocupar com 3 pontos: a troca de informações entre processos; a garantia de que um
processo não invada o espaço físico do outro; e a garantia de que um processo não altere os dados que
estão sendo trabalhados por outro (que deve estar no estado pronto neste momento).
O Sistema Operacional deve então evitar que quando dois ou mais processos que acessam dados
compartilhados o resultado destes processos não dependa do escalonamento, ou seja, um processo não
interferiu no outro. Isto é chamado de condição de corrida.
Uma forma de se isolar este problema é a definição e tratamento das regiões que possam levar à
condições de corrida, tais regiões são chamadas de regiões críticas. Para tal 4 regras foram definidas:
10 y
Romildo Martins Bezerra
Escalonamento
Quando um computador é multiprogramado, ele muitas vezes possui diversos processos que
competem pela CPU, surgindo assim a necessidade de alguma entidade para escalonar a CPU entre os
processos, que é chamada de escalonador.
Algoritmos de Escalonamento
Com Prioridade • Cada processo possui uma prioridade e o de maior prioridade executa
primeiro
• Para evitar que os processos de maior prioridade tomem conta do
processador, a prioridade é decrementada
Menor Job Primeiro • Só conduz ao resultado ótimo quando todos os jobs tiverem prontos ao
mesmo tempo
• Difícil estimar o tempo
• Utilização de Média ponderada (aging)
11 y
Romildo Martins Bezerra
Gerência de Memória
Alguns sistemas operacionais mais simples não trabalham com multiprogramação, ou seja, alocam
um processo na memória o executam até que seja terminado. Porém a troca de processos entre memória
e disco para sistemas multiprogramados é uma realidade. Para este caso, em que a soma dos espaços de
memória requeridos por todos os processos é maior que a memória primária, é necessário levar os dados
não utilizados para o disco, sendo necessário um controle através de mapa de bits.
A utilização de memorial virtual é recomendada, mas o algoritmo de substituição de páginas deve
ser eficiente para garantir o desempenho do processo. Recomenda-se o uso do algoritmo do
envelhecimento (aging) e o WSClock. Um resumo dos algoritmos de substituição de páginas segue abaixo:
Relógio • Realista
12 y
Romildo Martins Bezerra
Windows
Microsoft Windows é um sistema operacional extremamente popular, criado pela Microsoft,
empresa fundada por Bill Gates e Paul Allen. O Windows é um produto comercial, com preços
diferenciados para cada versão, embora haja uma enorme quantidade de cópias ilegais instaladas, porque
ele é o sistema operacional mais copiado do mundo. Apesar do sistema ser conhecido pelas suas falhas
críticas na segurança e como plataforma de vírus de computador e programas-espiões (spywares), o
impacto deste sistema no mundo atual é simplesmente incalculável devido ao enorme número de cópias
instaladas. Conhecimentos mínimos desse sistema, do seu funcionamento, da sua história e do seu
contexto são, na visão de muitos, indispensáveis, mesmo para os leigos em informática.
Os primeiros Windows, como o 1.0, 2.0 e 3.x, só são compatíveis em partições formatadas com o
sistema de ficheiros FAT, ou como é chamado, FAT16. No salto do 3.1 para o 95B (Windows 95 OSR 2/OSR
2.1), os HD's poderiam ser formatados em FAT32. Inicialmente lançado com o Windows NT, a tecnologia
NTFS é agora o padrão de facto para esta classe. Com a convergência de ambos sistemas, o Windows XP
passou também a preferir este formato.
A principal linguagem de programação usada para se escrever o código-fonte das várias versões do
Windows é a linguagem C++. Até à versão 3.11, o sistema rodava em 16 bits, daí em diante, em 32 bits. As
últimas versões (como o XP, o 2003 e o futuro Windows Vista (nome de código Longhorn) está preparado
para a tecnologia 64 bits. Esse sistema deverá incluir o sistema de arquivos WinFS, que acabou retirado do
Windows Vista.
Amoeba
O sistema operacional distribuído Amoeba é o fruto da investigação de Andrew S. Tanenbaum, na
Universidade Vrije na Holanda, . O objetivo do projeto era construir um sistema de timesharing que
aparentasse ao utilizador que uma tarefa seria executada numa única máquina mesmo que estivesse
realmente a correr em múltiplas máquinas. A última versão do projeto foi a 5.3 em 12 de fevereiro de
2001. Depois de seu desenvolvimento, o Amoeba precisava de uma linguagem de programação de scripts,
foi então que começou o desenvolvido do Python, evolucionado do ABC e Modula.
Minix
O Minix é uma versão do Unix, porém, gratuita e com o código fonte disponível. Isso significa que
qualquer programador experiente pode fazer alterações nele. Ele foi criado originalmente para uso
educacional, para quem quisesse estudar o Unix "em casa". No entanto, vale citar que ele foi escrito do
“zero” e apesar de ser uma versão do Unix, não contém nenhum código da AT&T e por isso pode ser
distribuído gratuitamente.
Características
o Multiprogramação por completo (múltiplos programas podem rodar ao mesmo tempo ).
o Roda em 286, 386, 486, Pentium.
o Suporta memória estendida (16MB no 286 e 4GB no 386, 486 e Pentium).
o RS-232 serial line suporte com terminal emulation, kermit, zmodem, etc.
13 y
Romildo Martins Bezerra
Pesquise
1. Problema dos Filósofos
2. Diferença entre paginação e segmentação de memória.
3. Algoritmos de substituição de páginas.
4. O funcionamento passo a passo de uma falta de página.
5. Como a memória virtual é implementada no Windows e Linux.
Bibliografia
[1] TANENBAUM, A., Organização Estruturada de Computadores, 5ª Edição, 2006.
[2] TANENBAUM, A. Sistemas Operacionais Modernos. 2ª Edição 2006.
[3] TOSCANI, S.; OLIVEIRA, R.; CARISSIMI, A. Sistemas operacionais. 3ª Edição Sagra Luzzatto, 2004.
14 y