(3 Nota de Avaliao)
Critrios para avaliao:
O seminrio ser realizado em duplas escolhidas pelo professor desta disciplina. Ter nota de
avaliao do contedo apresentado e entregue, tambm ser avaliada a postura e clareza
apresentada aos demais colegas de sala. Cada apresentao ser filmada pelo professor
responsvel pela avaliao.
1.1 Introduo:
Sistema Operacional nada mais do que um conjunto de instrues executadas pelo processador. Sua funo
controlar o funcionamento de um computador, gerenciando a utilizao e o compartilhamento dos seus diversos
recursos, como processadores, memrias e dispositivos de entrada e sada.
Sem SO, usurio deveria conhecer profundamente o computador para poder interagir com ele. Implicaria em
trabalho lento e com possibilidade de erros.
A diferena entre um SO e aplicaes convencionais a maneira como as rotinas so executadas em funo
do tempo. O SO no tem incio, meio e fim como as aplicaes. Dependem de eventos assncronos. Tambm pode ser
chamado de Programa monitor, Executivo, supervisor ou Controlador.
- Facilidade de acesso aos recursos do sistema: Usurio no precisa se preocupar como feita a
comunicao com monitores, discos, impressoras, etc. O SO uma interface entre o usurio e os recursos do sistema.
Este conceito de ambiente simulado pelo SO tambm chamado de Mquina Virtual (figura 1.1)
Compiladores, linkers, bibliotecas, depuradores e outras ferramentas so utilitrios que facilitam a interao
do usurio com o computador.
- Compartilhamento de recursos de forma organizada e protegida: Em sistemas onde diversos usurios
compartilham recursos, necessrio controlar o uso concorrente destes recursos. Ex: Impressora, a impresso de um
usurio no deve interferir na do outro. O SO controla estes acessos concorrentes. O compartilhamento tambm
permite reduo de custos, quando diversos usurios podem compartilhar perifricos como impressoras, discos, etc.
Dependendo do SO, podemos executar diversas tarefas ao mesmo tempo, como imprimir um documento e
baixar um arquivo da Internet. E o SO que controla estas atividades concorrentes.
p ro g ra m a d o re s
e a n a li s ta s
u su rio s
p ro g ra m a s,
s is te m a s e
a p l i c a ti v o s
U s u r io s
S is te m a O p e r a c io n a l
m e m r ia
d is c o s
H a rd w a re
fi t a s
U CP
im p r e ss o ra s
m o n i to r e s
1.3 Mquina de nveis: Uma mquina, do ponto de vista do hardware, tem pouca utilidade. atravs do
software que esta mquina ganha utilidade (como armazenamento de dados, impresso, etc.) Uma operao efetuada
por software pode ser implementada em hardware, bem como uma funo executada pelo hardware pode ser simulada
via software.
Os primeiros computadores eram programados atravs de fios ligados em painis, criando grandes
dificuldades e exigindo grande conhecimento da mquina.
A soluo veio com o surgimento do SO, tornando a interao com o usurio mais simples, confivel e
eficiente. (Figura 1.2)
u su rio s
S is te m a O p e r a c i o n a l
H a r d w a re
Fig. 1.2 - Viso do computador pelo usurio
O computador pode ser visualizado como uma mquina de nveis ou mquina de camadas. Inicialmente
vemos apenas dois nveis: hardware (nvel 0) e SO (nvel 1). Assim, o usurio pode enxergar a mquina como sendo
apenas o SO, como se o hardware no existisse. Esta viso chamada de mquina virtual.
Na verdade no existem apenas dois nveis, e sim tanto quantos forem necessrios para adequar o usurio s
suas diversas aplicaes. A figura 1.3 representa a estrutura da maioria dos computadores, podendo conter mais ou
menos camadas. A linguagem utilizada em cada um destes nveis diferente, variando da mais elementar (baixo
nvel) mais sofisticada (alto nvel).
A p l ic a ti v o s
U ti li t r i o s
S is te m a O p e r a cio n a l
Lin g u a g e m d e M q u in a
M ic r o p ro g r a m a o
C i r c u i to s E l e tr n ic o s
T ip o s d e
S is te m a s O p e r a c io n a is
S is te m a s
M o n o p r o g r a m v e is /
M o n o ta r e f a
S is te m a s
M u l ti p r o g r a m v e i s /
M u l ti t a r e f a
S is te m a s
c o m M lti p l o s
P ro ce ssa d o re s
U CP
M e m r ia
P r in c ip a l
p ro g ra m a /
ta r e f a
D is p o s itiv o s
de E/S
p ro g ra m a /
ta r e f a
p ro g ra m a /
ta r e f a
U CP
M e m r ia
P r in c ip a l
D i s p o s itiv o s
d e E/S
p ro g ra m a /
ta r e f a
p ro g ra m a /
ta r e fa
p ro g ra m a /
ta r e f a
A vantagem deste tipo de SO a reduo do tempo de resposta das aplicaes processadas no ambiente e de
custos, a partir do compartilhamento de recursos do sistema entre diferentes aplicaes. Apesar de mais eficientes, os
SO multiprogramvel tem implementao muito mais complexa.
Baseado no nmero de usurios que interagem com o sistema, o SO multiprogramvel pode ser classificado
como monousurio ou multiusurio. Os sistemas multiprogramveis monousurio so encontrados em computadores
pessoais e estaes de trabalho, onde apenas um usurio interage com o sistema. Por exemplo, um usurio pode
executar um editor de texto, ao mesmo tempo em que acessa a Internet e imprime um documento. Nos sistemas
multiusurios, permite-se que diversos usurios conectarem-se ao sistema simultaneamente. A tabela 1.1 relaciona os
tipos de sistemas em funo do nmero de usurios.
Monoprogramao / Monotarefa
Multiprogramao / Multitarefa
Um usurio
Monousurio
Monousurio
Os SO multiprogramveis ou multitarefa, podem ainda ser classificados pela forma com que suas aplicaes
so gerenciadas, podendo ser divididos em sistemas batch, de tempo compartilhado ou de tempo real. Um SO pode
suportar um ou mais destes tipos de processamento, dependendo de sua implementao (Figura 1.7).
S is te m a s
M u l ti p r o g r a m v e i s /
M u l tita r e f a
S is te m a s
B a tch
S is te m a s d e
Te m p o C o m p a r tilh a d o
S is te m a s d e
Te m p o R e a l
O uso de mltiplos processadores permitiu a criao de sistemas voltados para processamento cientfico (como a
criao do mapa gentico), no desenvolvimento aeroespacial, prospeco de petrleo, simulaes, processamento de
imagens, CAD e previso do tempo. Pode-se afirmar que qualquer aplicao que faca uso intensivo do processador,
ser beneficiada pelo acrscimo de processadores ao sistema. A evoluo destes sistemas se deve em grande parte, ao
elevado custo de desenvolvimento de processadores de alto desempenho. menos custoso interligar diversos
processadores menores do que desenvolver um mais poderoso.
Alm dos mesmos benefcios dos sistemas multiprogramveis, o sistema com mltiplos processadores
apresentam vantagens como:
Escalabilidade: a possibilidade de se aumentar o poder computacional do sistema, adicionando-se novos
processadores.
Disponibilidade: a capacidade de manter o sistema em operao mesmo em caso de falha de uma ou mais
maquinas. No caso de uma falha, as outras mquinas assumem suas funes de maneira transparente ao usurio,
embora com menor poder de computao.
Balanceamento de carga: a possibilidade de distribuir o processamento entre os diversos processadores,
melhorando assim o desempenho do sistema como um todo.
Um fator-chave na criao de SOs com mltiplos processadores a forma de comunicao entre eles e o
grau de compartilhamento da memria e dos dispositivos de entrada e sada. Assim, podemos classificar os sistemas
com mltiplos processadores em fortemente acoplados ou fracamente acoplados (Figura 1.8).
Sistemas
Com Mltiplos
Processadores
Sistemas
Fortemente
Acoplados
Sistemas
Fracamente
Acoplados
U CP
M e m r ia
P r in c ip a l
D i s p o s itiv o s
de E/S
U CP
D is p o s itiv o s
de E/S
Fig 1.9 Sistemas fortemente acoplados
sistemas NUMA apresentam diversos conjuntos reunindo processadores e memria principal, sendo que cada conjunto conectado
aos outros atravs de uma rede de interconexo. O tempo de acesso memria pelos processadores varia em funo da sua
localizao fsica.
Nos sistemas SMP e NUMA todos processadores tm as mesmas funes. Inicialmente, os sistemas multiprocessadores
limitavam-se a sistemas de grande porte. Com a evoluo dos computadores pessoais, os sistemas multitarefa tambm evoluram
para permitir a existncia de vrios processadores no modelo simtrico. Atualmente, sistemas como Unix, Linux, Windows 200 e
Windows XP implementam esta funcionalidade.
lin k d e co m u n ic a o
U CP
M e m r ia
P r in c ip a l
U CP
D is p o s itiv o s
d e E/S
M e m r ia
P r in cip a l
D i s p o s itiv o s
de E/S
P ro ce ssa d o r / U C P
U n id a d e L g ic a
e A r i tm t i c a
U n id a d e d e
C o n tr o le
M e m r ia
P r in c ip a l
R e g is tr a d o r e s
D is p o s itiv o s
de E/S
Fig. 2.1 Sistema Computacional
2.2.1 Processador
Um processador composto por unidade de controle, unidade lgica e aritmtica, e registradores. A unidade
de controle (UC) responsvel por gerenciar as atividades de todos os componentes do computador, como a gravao
de dados em discos ou a busca de instrues na memria. A unidade lgica e aritmtica (ULA), como o nome indica,
responsvel pela realizao de operaes lgicas (testes e comparaes) e aritmticas (somas e subtraes).
2.2.2 Memria
A memria composta por unidades de acesso chamadas clulas, sendo cada clula composta por um
determinado nmero de bits. Atualmente, a grande maioria dos computadores utiliza o byte (8 bits) como tamanho de
clula.
Memrias volteis precisam estar sempre energizadas para manter suas informaes, o que no acontece
com as no-volteis.
in s tr u o o u d a d o
e n d e re o s
16
2 -1
c lu la = 8 b its
R e g i s tr a d o r e s
M e m r ia C a c h e
m a io r
ca p a cid a d e d e
a r m a z e n a m e n to
M e m r ia P r in c ip a l
m a io r c u s to e
v e lo cid a d e
d e a ce sso
M e m r ia S e c u n d r ia
10
M e m r ia
P r in c ip a l
U C P
B a r r a m e n to p r o ce s sa d o r - m e m r ia
A d a p ta d o r
B a r r a m e n to d e E / S
B a r r a m e n to d e E / S
A d a p ta d o r
11
M e m r ia
P r in c ip a l
U CP
B a r r a m e n to p r o c e s s a d o r - m e m r i a
B a r r a m e n to
d e b a ck p la n e
A d a p ta d o r
A d a p ta d o r
B a r r a m e n to d e E / S
B a r r a m e n to d e E / S
A d a p ta d o r
2.2.7 Pipeline
uma tcnica que permite ao processador executar mltiplas instrues paralelamente em estgios
diferentes.
P1
P2
P3
P4
U n id a d e d e
b u sca d a
in s tr u o
A n a lis a d o r
da
in stru o
U n id a d e d e
b u sca d o s
dados
U n id a d e d e
e xe cu o d a
in stru o
P1
P2
P3
P4
I n s t r. 1 I n s t r. 2
I n s t r. 3
I n s t r. 4
I n s t r. 5
I n s t r. 6
I n s t r. 7
I n s t r. 1 I n s t r. 2
I n s t r. 3
I n s t r. 4
I n s t r. 5
I n s t r. 6
I n s tr. 1 I n s t r. 2
I n s t r. 3
I n s t r. 4
I n s t r. 5
I n s tr. 1 I n s t r. 2
I n s t r. 3
I n s t r. 4
te m p o
12
E/S
U CP
E/S
U C P
liv r e
(a ) S i s te m a M o n o p r o g r a m v e l
te m p o
( b ) S i s te m a M u l ti p r o g r a m v e l
te m p o
A tabela 3.1 apresenta um exemplo de um programa que l registros de um arquivo e executa, em mdia, 100
instrues por registro lido. Neste caso, o processador gasta cerca de 93% do tempo esperando o dispositivo de E/S
concluir sua operao para ento continuar o processamento.
Leitura de um registro
0,0015 s
Execuo de 100 instrues
0,0001 s
Total
0,0016 s
% utilizao da CPU (0,0001 / 0,0015) = 0,066 = 6,6 %
Tabela 3.1 Exemplo de utilizao do sistema
A memria principal tambm subutilizada se o programa no a ocupa totalmente, deixando reas livres.
Nos SOs multiprogramveis, vrios programas podem estar residentes em memria, concorrendo pela utilizao do
processador. Assim, o processador permanece menos tempo ocioso (Figura 3.1 b) e a memria utilizada de forma
mais eficiente, pois vrios programas se revezam na utilizao do processador.
A utilizao concorrente do processador deve ser implementada de forma que, quando um programa perde o
uso do processador, e depois retorna sua execuo, dever continu-la na instruo seguinte quela em que fora
interrompido. Para o usurio, parece que nada aconteceu. Em sistemas de tempo compartilhado, existe a impresso de
o sistema est inteiramente dedicado a ele.
Em sistema monoprogramveis, temos perifricos (como impressoras e discos) parados por grandes perodos
de tempo esperando aes de um nico usurio.
Na tabela 3.2 temos as vantagens de um sistema multiprogramvel, com um disco, um terminal e uma
impressora. Nesta configurao, so executados trs programas distintos (Prog1, Prog2 e Prog3).
Pela tabela, percebemos que Prog1 no realiza operaes de E/S, ao contrrio de Prog2 e Prog3.
13
Caractersticas
Utilizao do processador
Operaes de E/S
Tempo de processamento
Memria utilizada
Utilizao de disco
Utilizao de terminal
Utilizao de impressora
Prog1
Alta
Poucas
5 min
50 Kb
No
No
No
Prog2
Baixa
Muitas
15 min
100 Kb
No
Sim
No
Prog3
Baixa
Muitas
10 min
80 Kb
Sim
No
Sim
Caractersticas
Utilizao do processador
Utilizao da memria
Utilizao de disco
Utilizao de impressora
Tempo total de processamento
Taxa de processamento
Monoprogramao
17 %
30 %
33%
33 %
30 min.
6 progr. / hora
Multiprogramao
33 %
67 %
67 %
67%
15 min.
12 progr. / hora
14
A tabela 3.4 descreve o mecanismo de interrupo, que pode ser realizado por hardware ou software.
Para cada tipo de interrupo existe uma rotina de tratamento associada. A identificao do tipo de
interrupo fundamental para determinar o endereo da rotina de tratamento.
Existem dois mtodos utilizados no tratamento das interrupes. O primeiro utiliza uma estrutura de dados
chamada de vetor de interrupo, que contem o endereo inicial de todas as rotinas de tratamento existentes,
associadas a cada evento. Um segundo mtodo utiliza um registrador de status que armazena o tipo do evento
ocorrido. Neste mtodo, s existe uma nica rotina de tratamento, que no seu inicio testa o registrador para identificar
o tipo de interrupo e trat-la de maneira adequada.
Via Hardware
Via Software
Assim como a interrupo, o programa interrompido desviado para uma rotina de tratamento de exceo
(Figura 3.2). O mecanismo de tratamento de excees muitas vezes pode ser escrito pelo prprio programador. Assim,
possvel evitar que um programa seja encerrado de ocorrer, por exemplo, um overflow.
3.3 Operaes de Entrada/Sada
Nos primeiros SOs, existiam instrues especiais para controlar perifricos, denominadas de instrues de
entrada/sada. Estas instrues continham detalhes de cada perifrico, como por exemplo, na gravao de um bloco
de dados em disco, deveria se especificar em qual trilha e setor ocorreria a gravao. Isto provocava uma forte
dependncia entre processador e os dispositivos de E/S.
O controlador de interface surgiu para permitir que o processador fique mais independente dos perifricos.
Desta forma, o processador no se comunica mais diretamente com os dispositivos de E/S, mas sim atravs do
controlador (Figura 3.3).
M e m r ia
P r in c ip a l
U CP
C o n tr o la d o r
D is p o s itiv o s d e E / S
inicia da memria onde os dados sero lidos ou gravados e o tamanho do bloco. Com estas informaes, o
controlador realiza a transferncia entre o perifrico e a memria principal, e o processador ser interrompido
somente no final da operao. A rea de memria utilizada pelo controlador na tcnica de DMA chamada de buffer
de entrada/sada.
Na tcnica de DMA, o controlador assume momentaneamente o controle do barramento. Neste caso, a
utilizao do barramento passa ser exclusiva do perifrico, e o processador suspende temporariamente o acesso ao
barramento. O processador pode nestas horas, realizar tarefas que no dependa, do barramento, como por exemplo,
acesso memria cache.
3.4 Buffering
A tcnica de buffering consiste na utilizao de uma rea na memria principal, denominada buffer, para a
transferncia de dados entre os dispositivos de E/S e a memria. Esta tcnica permite que em uma operao de leitura,
o dado seja primeiramente transferido para o buffer, liberando imediatamente o dispositivo para uma nova leitura.
Assim, enquanto o processador processa o dado localizado no buffer, o perifrico realiza outra operao de leitura,
simultaneamente. O mesmo mecanismo pode ser aplicado s gravaes (Figura 3.4)
M e m r ia
P r in c ip a l
g ra v a o
U CP
g ra v a o
C o n tr o la d o r
B u ff e r
l e i tu r a
l e itu r a
O objetivo desta tcnica manter, na maior parte do tempo, processador e dispositivos de E/S ocupados, pois
minimiza o problema da disparidade da velocidade de processamento entre o processador e os dispositivos.
A unidade de transferncia utilizada no buffering o registro, que tem seu tamanho definido em funo:
- Da natureza do dispositivo. Por exemplo, uma linha gerada por uma impressora, ou um caractere de um
teclado.
- Da aplicao, definido em arquivo.
Logicamente o buffer deve permitir armazenar diversos registros, de forma que hajam dados lidos e ainda
no processados, ou processados mas ainda no gravados. Isto torna o processo bastante eficiente, pois possvel
compatibilizar a diferena existente entre o tempo em que o processador executa instrues e o tempo em que o
dispositivo de E/S realiza suas operaes de leitura e gravao.
3.5 Spooling
A tcnica de spooling (simultaneous peripheral operation on-line), introduzida no final dos anos 50, visa
aumentar o grau de concorrncia e a eficincia dos SOs.
Semelhante tcnica de buffering, a tcnica de spooling utiliza uma rea em disco como se fosse um grande
buffer. Neste caso, os dados podem ser lidos ou gravados em disco, enquanto programas so executados
concorrentemente.
Esta tcnica esta presente na maioria dos SOs, utilizada no gerenciamento de impresso. No momento em
que um comando de impresso executado, as informaes a serem impressas so gravadas antes em um arquivo em
disco, conhecido como arquivo de spool, liberando o programa para outras atividades. Posteriormente, o SO se
encarrega de direcionar o contedo do arquivo de spool para a impressora (Figura 3.5).
S is te m a O p e r a c io n a l
Pro g ra m a
A r q u iv o
de Spoo l
Im p re sso ra
17
Esta tcnica desvincula o programa do dispositivo impressor, impedindo que um programa reserve a
impressora para uso exclusivo. O SO gerencia a seqncia de impresses solicitadas pelos programas, seguindo
critrios de segurana e de uso eficiente das impressoras.
3.6 Reentrncia
Em sistemas multiprogramveis, vrios usurios podem utilizar o mesmo aplicativo simultaneamente. Se
cada um deles trouxesse o programa para uma rea de memria, haveria desperdcio de recursos (espao em
memria).
Chamamos de reentrncia, a capacidade de um cdigo executvel (cdigo reentrante) ser compartilhado
entre vrios usurios, exigindo apenas uma cpia do programa em memria. Esta tcnica permite que cada usurio
possa estar em um ponto diferente do cdigo reentrante, manipulando dados prprios e exclusivos de cada usurio
(Figura 3.6).
u s u r io A
u s u r io C
c d i g o r e e n tr a n te
u s u r io B
u s u r io D
r e a d e d a d o s d o u s u r io A
r e a d e d a d o s d o u su r io B
r e a d e d a d o s d o u s u r io C
r e a d e d a d o s d o u s u r io D
M e m r ia P r in ci p a l
Fig. 3.6 Reentrncia
18
A p l ic a ti v o s
U tilit r io s
N c le o d o
S is te m a O p e r a c i o n a l
H a rd w a re
Uma das dificuldades de se compreender o funcionamento de um SO, devido ao fato que ele no possui um
incio, um meio e um fim, como outras aplicaes. Suas aes dependem de eventos que no ocorrem em uma ordem
pr-definida. Muitos eventos esto relacionados ao hardware e ao prprio sistema.
As principais funes do ncleo na maioria dos SOs esto listadas a seguir:
Tratamento de interrupes e excees;
Criao e eliminao de processos e threads;
Sincronizao e comunicao entre processos e threads;
Escalonamento e controle dos processos e threads;
Gerncia de memria;
Gerncia do sistema de arquivos;
Gerncia de dispositivos de E/S;
Suporte a redes locais e distribudas;
Contabilizao do uso do sistema;
Auditoria e segurana do sistema.
A forma como o cdigo do sistema organizado e o relacionamento com seus diversos componentes varia de
acordo com o projeto do SO.
4.2 System Calls
19
Uma grande preocupao no projeto de um SO, quanto a sua integridade, ou seja, a proteo do ncleo do
sistema contra possveis acessos no-autorizados.
As system calls (chamadas ao sistema) podem ser entendidas como uma porta de entrada para o acesso ao ncleo
do sistema e seus servios. Quando um usurio ou aplicao necessitar de algum servio do sistema, feita uma
chamada a uma de suas rotinas atravs de uma system call. O termo system call tpico de ambientes Unix, no
ambiente Windows conhecida como API (Application Program Inteface).
Para cada servio disponvel existe uma system call associada. Cada SO tem seu prprio conjunto de chamadas
diferentes (Figura 4.2). Isto explica o fato de uma aplicao desenvolvida para um SO, no pode ser executada em
outro.
S y s te m C a l l
A p lic a o
N c le o d o
S is te m a O p e r a c io n a l
B ib li o te c a
H a rd w a re
Algumas tentativas foram feitas para padronizar uma biblioteca de chamadas. O padro POSIX (Portable
Operating System Interface for Unix), por exemplo, foi estabelecido com a inteno de unificar as diversas verses
do Unix existentes.
Atravs de parmetros fornecidos nas system calls, a solicitao processada e uma resposta retornada
aplicao, junto com um status indicando erro ou no. A ativao e comunicao entre programas e o SO,
semelhante a uma sub-rotina de um programa.
As system calls podem ser divididas em grupos de funes (Tabela 4.1)
Muitos usurios e mesmo programadores no imaginam os detalhes que envolvem um simples comando de
leitura de um arquivo, quando se utiliza uma linguagem de programao de alto nvel. O compilador converte este
comando de alto nvel para uma system call especfica, que quando executada, verifica a ocorrncia de erros e retorna
os dados ao programa, de forma transparente ao usurio.
Funes
System Calls
Gerncia de memria
Gerncia de dispositivos
Portanto, fica claro que certas instrues s devem ser executadas pelo SO ou sob sua superviso, impedindo
assim riscos de segurana e integridade. As instrues que possuem o poder de comprometer o sistema so
conhecidas como instrues privilegiadas, enquanto que as no-privilegiadas no oferecem estes riscos.
Para que uma aplicao no execute uma instruo privilegiada, deve ser implementado no processador um
mecanismo de proteo, conhecido como modos de acesso. So basicamente dois os modos de acesso implementados
pelo processador. O primeiro o modo usurio, onde a aplicao s poder executar instrues no-privilegiadas,
tendo acesso a um numero reduzido de instrues. O segundo modo o modo kernel ou supervisor, onde a aplicao
tem acesso ao conjunto total de instrues do processador.
O modo de acesso de uma aplicao determinado por um registrador de status do processador (chamado de
PSW), Dependendo do contedo deste registrador, o hardware verifica se a instruo pode ou no ser executada pela
aplicao.
Apenas o SO deve ter acesso s instrues privilegiadas. Portanto, se uma aplicao necessitar executar uma
instruo privilegiada, deve solicitar sua execuo atravs de uma system call. A system call altera o status do PSW
para modo kernel, e ao termino de sua execuo retorna ao modo usurio (Figura 4.3). Caso uma aplicao tente
executar uma instruo privilegiada em modo usurio, o processador sinaliza um erro, uma exceo ser gerada e o
programa ser interrompido.
No mesmo exemplo do acesso ao disco, para o programa atualizar um arquivo, a aplicao deve solicitar a
operao ao SO por meio de uma system call, que altera o modo de acesso para kernel. Aps efetuar a atualizao,
retorna-se ao modo usurio.
O mecanismo de modos de acesso tambm uma boa forma de proteger o prprio ncleo do sistema residente
em memria. Por exemplo, se uma aplicao tivesse acesso rea de memria onde est o SO, um programador malintencionado ou um erro de programao poderia ter acessar esta rea e acabar danificando o sistema. Com os modos
de acesso, apenas em modo kernel poderia se efetuar tal tarefa.
21
a p li c a o
a p lica o
M o d o u su rio
M o d o kern el
S y s te m c a l l
H a rdw a re
22
A vantagem da arquitetura em camadas isolar as funes do SO, facilitando sua manuteno e depurao,
alem de criar uma hierarquia de nveis de modos de acesso, protegendo as camadas mais internas. Porm, seu
desempenho inferior ao modelo monoltico. Cada nova camada implica uma mudana no modo de acesso. Por
exemplo, no caso do OpenVMS, para ter acesso aos servios oferecidos pelo kernel preciso passar por trs camadas
ou trs mudanas no modo de acesso.
Atualmente, a maioria dos SOs utiliza o modelo de duas camadas, onde existem mdulos de acesso usurio
(no-privilegiado) e kernel (privilegiado). A maioria das verses do Unix e do Windows 2000 baseiam-se neste
modelo.
4.6 Mquina Virtual
Um sistema computacional formado por nveis, onde a camada de nvel mais baixo o hardware. Acima dele,
encontramos o SO, que oferece suporte para as aplicaes, como visto na Figura 4.1. O modelo de mquina virtual,
ou virtual machine (VM), cria um nvel intermedirio entre o hardware e o SO, denominado gerncia de mquinas
virtuais (Figura 4.6). Este nvel cria diversas maquinas virtuais independentes, onde cada uma oferece uma cpia
virtual do hardware, incluindo os modos de acesso, interrupes, dispositivos de E/S, etc.
Como cada VM independente das demais, possvel que cada uma tenha seu prprio SO e que seus usurios
executem suas aplicaes como se todo o computador estivesse dedicado a cada um deles, Na dcada de 60, a IBM
implantou este modelo no VM/370, permitindo aplicaes batch, desenvolvidas em antigos sistemas OS/360 e
aplicaes de tempo compartilhado pudessem conviver na mesma mquina de forma transparente aos usurios e
aplicaes.
Alm de permitir SOs diferentes no mesmo computador, este modelo cria o isolamento total entre cada VM,
oferecendo grande segurana para cada uma delas. Por exemplo, se uma VM executar uma aplicao que
comprometa o funcionamento de seu SO, as demais VMs no sofrero qualquer problema. A maior desvantagem
desta arquitetura sua complexidade, que necessita compartilhar e gerenciar os recursos de hardware entre as
diversas VMs.
23
VM
VM
VM
Ap
Ap
Ap
SO
SO
SO
H V
H V
H V
G e r n c i a d e M q u in a s V i r tu a i s
H a rd w a re
Temos outro exemplo desta arquitetura, na linguagem Java, criada pela Sun Microsystems. Para executar um
programa em Java, necessrio uma mquina virtual Java (ou Java Virtual Machine JVM). Qualquer SO pode
suportar uma aplicao Java, desde que exista uma JVM desenvolvida para ele. Assim, a aplicao no precisa ser
compilada para cada sistema, tornando-se independente do hardware e SO utilizado (Figura 4.7).
A p lic a o
M q u in a V ir tu a l J a v a
S is te m a O p e r a c io n a l
H a rd w a re
M o d o u s u rio
M o do kernel
M ic r o k e r n e l
H a rd w a re
Fig. 4.8 Arquitetura Microkernel
Este conceito de Arquitetura Microkernel surgiu na dcada de 80, com o sistema operacional Mach. O ncleo
do Mach oferece basicamente quatro servios: gerncia de processos, gerncia de memria, comunicao por troca de
mensagens e operaes de E/S, todos em modo usurio.
A utilizao deste modelo permite que os servidores executem em modo usurio, ou seja, no tenham acesso
direto a certos componentes do sistema. Apenas o ncleo do SO, responsvel pela comunicao entre clientes e
servidores, executa no modo kernel. Assim, se um erro ocorrer em um servidor, este poder parar, mas o sistema no
ficar inteiramente comprometido, aumentando sua disponibilidade (tempo em que est acessvel).
Como os servidores se comunicam atravs de troca de mensagens, no importa se os clientes e servidores
so processados em um sistema com um processador, com mltiplos processadores (fortemente acoplados) ou ainda
em um ambiente de sistema distribudo (fracamente acoplados). A implementao de sistemas microkernel em
ambientes distribudos permite que um cliente solicite um servio e a resposta seja processada remotamente. Isso
permite acrescentar novos servidores medida que aumenta o numero de clientes, conferindo uma grande
escalabilidade ao SO.
Outra vantagem que a arquitetura microkernel permite isolar as funes do sistema operacional por
diversos processos servidores pequenos e dedicados a servios especficos, tornado o ncleo menor, mais fcil de
depurar e, conseqentemente, aumentando sua confiabilidade. Na arquitetura microkernel, o sistema operacional
passa a ser de mais fcil manuteno, flexvel e de maior portabilidade. Apesar de todas as vantagens deste modelo,
sua implementao, na prtica, muito difcil. Primeiro existe o problema de desempenho, devido necessidade de
mudana de modo de acesso a cada comunicao entre clientes e servidores. Outro problema que certas funes do
sistema operacional exigem acesso direto ao hardware, como operaes de E/S.
Na verdade, o que se implanta normalmente a combinao do modelo de camadas com a arquitetura de
microkernel. O ncleo do sistema, alm de ser responsvel pela comunicao entre cliente e servidor, passa a
incorporar outras funes crticas, como escalonamento, tratamento de interrupes e gerncia de dispositivos.
4.8 Projeto do Sistema
O projeto de um SO bastante complexo e deve atender inmeros requisitos, algumas vezes conflitantes,
como confiabilidade, portabilidade e facilidade de manuteno. O projeto ir depender muito da arquitetura do
hardware utilizado e do tipo de sistema que se deseja construir: batch, tempo compartilhado, mono usurio ou
multiusurio, tempo real, etc.
Os primeiros SOs foram desenvolvidos em assembly e seus cdigos possuam cerca de um milho de
instrues (ex.: IBM OS/360). Com a evoluo dos SOs e conseqentemente o aumento do numero de linhas de
25
cdigo (cerca de 20 milhes no sistema MULTICS), novas tcnicas de programao modular foram incorporadas ao
projeto, alm do uso de linguagens de alto nvel, como PL/1 e Algol. Nos SOs atuais, o nmero de linhas de cdigo
chega perto dos 40 milhes (Windows 2000), sendo escrito grande parte em linguagem C/C++, utilizando em alguns
casos, programao orientada a objetos.
Existe uma srie de vantagens na utilizao de programao por objetos no projeto e na implementao de
sistemas operacionais. Os principais benefcios so:
- melhoria na organizao das funes e recursos do sistema;
- reduo no tempo de desenvolvimento;
- maior facilidade na manuteno e extenso do sistema e
- facilidade de implementao do modelo de computao distribuda.
Alm disso, o uso de uma linguagem de alto nvel permite maior portabilidade, ou seja, o SO pode ser
adaptado para outra arquitetura de hardware. Por outro lado, o uso de linguagens de alto nvel em relao
programao assembly, apresenta perda de desempenho. Por isso, partes crticas do sistema, como device drivers, o
escalonador e as rotinas de tratamento de interrupes, so ainda desenvolvidas em assembly.
Um princpio fundamental no projeto de SOs a separao no projeto do sistema das polticas e dos
mecanismos. A poltica define o que deve ser feito, e o mecanismo define como implementar esta poltica.
26
27
C o n te x t o d e
S o f tw a r e
C o n te x t o d e
H a rd w a re
Pro g ra m a
E sp a o d e
E n d e r e a m e n to
28
S iste m a O p e r a cio n a l
P ro ce sso A
Pro ce sso B
e x e c u ta n d o
S a lv a r e g is tra d o r e s d o
P ro ce ss o A
C a r r e g a r e g is tr a d o r e s d o
P r o ce ss o B
e x e c u ta n d o
S a lv a r e g is tra d o r e s d o
P r o ce ss o B
C a r r e g a r e g is tr a d o r e s d o
P ro ce ss o A
e x e c u ta n d o
O contexto de software composto por trs grupos de informaes sobre o respectivo processo:
identificao, quotas e privilgios.
Identificao
Cada processo criado pelo sistema recebe uma identificao nica (chamada de PID Process
IDentification), representada por um nmero e em alguns casos tambm atravs de um nome.
atravs do PID que o SO e outros processos podem fazer referncia a qualquer processo existente,
consultando e at alterando suas caractersticas.
O processo possui tambm a identificao do usurio ou do processo que o criou (owner). Cada
usurio possui uma identificao tambm nica no sistema (representada pelo UID User
Identification), que atribuda ao processo no momento de sua criao. A UID permite implementar
modelos de segurana, onde apenas os objetos (processos, arquivos, reas de memria, etc) que
possuam um UID autorizado, podem ser acessados.
Quotas
As quotas so os limites de cada recurso do sistema que um processo pode alocar. Caso uma quota
seja insuficiente, o processo poder ser executado lentamente, interrompido ou mesmo no ser
executado. Alguns exemplos de quotas presentes nos SOs modernos:
- nmero mximo de arquivos abertos simultaneamente;
- tamanho mximo de memria principal e secundaria que o processo pode alocar;
- nmero mximo de operaes de E/S pendentes;
- tamanho mximo do buffer para operaes de E/S;
- numero mximo de processos, subprocessos e threads que podem ser criados.
Privilgios
Os privilgios ou direitos definem as aes que um processo pode fazer em ralao a ele mesmo,
aos demais processos e ao SO.
29
Privilgios que afetam o prprio processo permitem que suas caractersticas possam ser alteradas,
como prioridade de execuo, limites alocados na memria principal e secundaria, etc. J os
privilgios que afetam os demais processos permitem, alem da alterao de suas prprias
caractersticas, alterar as de outros processos.
Privilgios que afetam o sistema so mais amplos e poderosos, pois esto relacionados gerncia do
ambiente, como a desativao do sistema, alterao de regras de segurana, criao de outros
processos privilegiados, modificao de parmetros de configurao do sistema, entre outros. A
maioria dos SOs possui uma conta de acesso com todos privilgios disponveis, afim de o
administrador gerenciar o SO. Nos sistemas Unix, existe a conta root, no Windows 2000 a conta
administrador e no Open VMS a conta system.
5.2.3 Espao de endereamento
O espao de endereamento a rea de memria pertencente ao processo onde as instrues e dados do
programa so armazenados para execuo. Cada processo possui seu prprio espao de endereamento, que deve ser
devidamente protegido do acesso dos demais processos. A Figura 5.3 ilustra as caractersticas da estrutura de um
processo.
nom e
P ID
o w n e r (U ID )
r e g i s tr a d o r e s
g e r a is
p rio r id a d e d e
e xe cu o
d a ta / h o r a
d e cr ia o
r e g i s tr a d o r P C
C o n te x t o d e
S o f tw a r e
C o n te x to d e
H a rd w a re
r e g i s tr a d o r S P
te m p o d e
p ro ce ssa d o r
q u o ta s
Pro gra m a
p r iv il g io s
r e g i s tr a d o r
d e s ta tu s
E sp a o d e
E n d e r e a m e n to
e n d e r e o s d e m e m r ia
p r in c ip a l a lo ca d o s
Fig. 5.3 Caractersticas da estrutura de um processo
30
p o n te ir o s
E s ta d o d o p r o c e s s o
N o m e d o p ro ce sso
P r io r id a d e d o p r o c e s s o
R e g i s tr a d o r e s
L i m i te s d e m e m r ia
L i s ta d e a r q u iv o s a b e r to s
..
..
..
..
Fig. 5.4 Bloco de controle do processo (PCB)
Execuo (running) Um processo dito no estado de execuo quando est sendo processado
pela CPU. Em sistemas com apenas um processador, somente um processo estar sendo executado
em um dado instante. Os processos se alternam na utilizao do processador, seguindo uma poltica
estabelecida pelo SO. Em sistemas com multi-processadores, existe a possibilidade de mais de um
processo ser executado ao mesmo tempo, como tambm possvel um mesmo processo ser
executado simultaneamente em mais de um processador (processamento paralelo).
Pronto (ready) Um processo est no estado de pronto quando aguarda apenas para ser executado.
O SO que determina a ordem e o critrio pelos quais os processos neste estado devem utilizar o
processador. Este mecanismo conhecido como escalonamento.
Em geral, existem vrios processos no estado de pronto, organizados em listas encadeadas. Os
processos devem estar ordenados pela sua importncia (Figura 5.5).
L i s ta d e
p ro ce sso s
e m e s ta d o
d e p r o n to
..
..
..
..
..
..
..
..
PCB# 5
PCB# 1
..
..
..
..
..
..
..
..
L i s ta d e
p ro ce sso s
e m e s ta d o
d e e sp e ra
PCB# 9
PCB# 2
..
..
..
..
PCB#4
31
Espera (wait) Um processo no estado de espera aguarda por algum evento externo ou por algum
recurso para prosseguir seu processamento. Por exemplo, o trmino de uma operao de E/S ou a
espera de uma data ou hora para continuar sua execuo. Em alguns SOs, este estado tambm pode
ser chamado de bloqueado (blocked).
O sistema organiza os vrios processos no estado de espera tambm em listas encadeadas. Em geral
os processos so separados em listas de espera associadas a cada tipo de evento (Figura 5.5). Neste
caso, quando um evento acontece, todos processos da lista associada ao evento so transferidos para
o estado de pronto.
Pronto Execuo Aps a criao de um processo, o sistema o coloca em uma lista de processos
no estado de pronto, aguardando para ser executado (Figura 5.6 a). Cada SO tem sua poltica de
escalonamento.
Execuo Espera Um processo passa a estado de espera por eventos gerados pelo prprio
processo, como uma operao de E/S, ou por eventos externos (Figura 5.6 b). Um evento externo
gerado, por exemplo, quando o SO suspende por um perodo de tempo a execuo de um processo
Espera Pronto Ocorre quando uma operao solicitada atendida ou o recurso esperado
concedido. No existe a mudana de espera para execuo diretamente (Figura 5.6 c).
Execuo Pronto Ocorre atravs de eventos gerados pelo sistema, como o termino da fatia de
tempo que o processo possui para sua execuo (Figura 5.6 d). Ento, aguarda nova oportunidade
para continuar seu processamento.
Quando no houver espao suficiente para todos os processos na memria principal, um processo em estado
de pronto ou espera pode ser encontrado na memria secundria. Uma tcnica conhecida como swapping retira
processos da memria principal e os traz de volta segundo seus prprios critrios. Portanto, os processos em estado de
espera e pronto, podem estar ou no residentes em memria principal (Figura 5.7).
E s ta d o d e E x e c u o
b
a
E s ta d o d e E s p e r a
E s ta d o d e P r o n to
32
E s ta d o d e E x e cu o
E s ta d o d e E s p e r a
E s ta d o d e P r o n to
E s ta d o d e E s p e r a
E s ta d o d e P r o n to
r e s i d e n te
n o r e s id e n te
E s ta d o d e E x e c u o
E s ta d o d e E s p e r a
E s ta d o d e T r m i n o
E s ta d o d e P r o n to
E s ta d o d e C r ia o
33
Criao (new) Um processo considerado em estado de criao, quando o SO j criou um novo PCB,
porm ainda no pode coloc-lo na lista de processos do estado de pronto. Alguns SOs limitam o nmero de
processos ativos em funo dos recursos disponveis ou de desempenho. Esta limitao pode ocasionar que
os processos criados permaneam no estado de criao at que possam passar a ativos.
A criao de processos pode ocorrer por razes como:
- logon interativo: um processo criado atravs do estabelecimento de uma sesso interativa por um usurio
a partir de um terminal.
- criao por um outro processo: um processo j existente pode criar outros processos, sendo estes novos
independentes ou subprocessos.
- criao pelo SO: o SO pode criar novos processos para oferecer algum servio.
Terminado (exit) Um processo no estado terminado no poder ter mais nenhum programa executado em
seu contexto, porm, o SO ainda mantm suas informaes de controle na memria. Neste estado, o
processo no mais considerado ativo, mas como o PCB ainda existe, o SO pode recuperar informaes
sobre a contabilizao de uso de recursos do processo, como o tempo total do processador. Aps a extrao
das informaes, o processo pode deixar de existir.
O trmino de um processo pode ocorrer devido a:
- trmino normal da execuo;
- eliminao por um outro processo;
- eliminao forcada por ausncia de recursos disponveis no sistema.
34
P ro ce sso A
P ro ce sso C
Pro ce sso B
P ro ce sso E
P ro ce sso D
Cada thread possui seu prprio contexto de hardware, porm compartilha o mesmo contexto de software e
espao de endereamento. O compartilhamento deste ltimo permite que a comunicao de threads dentro de um
mesmo processo seja feita de forma simples e rpida. Este assunto ser melhor detalhado no captulo seguinte.
C o n te x t o
d e h a rd w a re
C o n te x t o
d e h a rd w a re
Th re a d 1
Th re a d 2
Th rea d 3
C o n te x t o d e
s o f tw a r e
C o n te x to
d e h a rd w a re
E sp a o d e
e n d e r e a m e n to
Um processo foreground aquele que permite a comunicao direta do usurio com o processo durante sua
execuo. Assim, ambos os canais esto associados a um terminal com teclado, mouse e monitor, permitindo
portanto, a interao com o usurio (Figura 5.11a). O processamento interativo tem com base processos foreground.
Um processo background aquele onde no existe a comunicao com o usurio durante seu processamento
(Figura 5.11b). Aqui, os canais de E/S no esto associados a nenhum dispositivo de E/S interativo, mas em geral a
arquivos de E/S. O processamento batch, por exemplo, realizado atravs de processos background.
Quando o canal de sada de um processo estiver associado ao canal de entrada de outro processo, dizemos
que existe um pipe ligando ambos os processos. Por exemplo, se um processo A gera uma listagem e o processo B
tem como funo orden-la, basta associar o canal de sada do processo A ao canal de entrada do processo B (Figura
5.12).
(a ) P r o c e s s o F o r e g r o u n d
e n tr a d a
s a d a
te r m in a l
te r m in a l
(b ) P r o c e s s o B a c k g r o u n d
e n tr a d a
s a d a
a r q u iv o
d e e n tr a d a
a r q u iv o
d e s a d a
Fig. 5.11 Processos foreground e background
s a d a d o
P ro ce sso A
e n tr a d a d o
P ro ce sso A
s a d a d o
Pro ce sso B
e n tr a d a d o
P ro ce sso B
P ro ce sso A
P ro ce sso B
auditoria e segurana;
servios de rede;
36
E/S
E/S
U CP
U C P
(a ) C P U - b o u n d
te m p o
(b ) I / O - b o u n d
te m p o
in te r r u p o
s in a l
S is te m a O p e r a c i o n a l
[c tr l- C ]
Fig. 5.14 Uso de Sinais
Pro ce sso
Os sinais podem ser usados em conjunto com temporizadores com a inteno de sinalizar ao processo algum
evento associado ao tempo. Por exemplo, um processo que deve ser avisado periodicamente sobre uma tarefa a
realizar, como monitorar uma fila de pedidos. Aps a realizao da tarefa, o processo retorna espera do prximo
sinal.
37
A maior parte dos eventos associados a sinais so gerados pelo SO ou pelo hardware, como as excees,
interrupes, limites de quotas excedidos e alarmes de tempo. Em outros casos, os eventos so gerados a partir de
outros processos com o propsito de sincronizar suas execues.
A gerao de um sinal ocorre quando o SO, a partir da ocorrncia de eventos sncronos ou assncronos,
notifica o processo atravs de bits de sinalizao localizados no seu PCB. Um processo no responde
instantaneamente a um sinal. Os sinais ficam pendentes at que o processo seja escalonado, quando ento sero
tratados. Por exemplo, na eliminao de um processo, o sistema ativa o bit associado a este evento. O processo s
ser excludo do sistema quando for selecionado para execuo. Assim, possvel que o processo demore algum
tempo at ser eliminado de fato.
O tratamento de um sinal bem semelhante ao de uma interrupo. Quando um sinal tratado, o contexto do
processo salvo e a execuo desviada para um cdigo de tratamento de sinal (signal handler), geralmente no ncleo
do SO. Aps a execuo do tratador de sinais, o programa pode voltar a ser processado do ponto onde foi
interrompido. s vezes, o prprio processo pode tratar o sinal atravs de um tradutor de sinais definido no cdigo do
programa. possvel tambm que um processo bloqueie temporariamente ou ignore por completo alguns sinais.
Apesar do mecanismo ser parecido com o do tratamento de interrupes e excees, os propsitos so
diferentes. O sinal est para o processo assim como as interrupes e excees esto para o sistema operacional
(Figura 5.15)
P r o ce ss o
P ro ce ss o
S in a i s
S is te m a O p e r a c io n a l
I n te r r u p e s
E xce e s
H a rdw are
38
39
S u b p ro ce sso s
P r o c e s s o s I n d e p e n d e n te s
Th re a d
Th re a d
T h re a d
C o n te x to
d e h a rd w a re
C o n te x to
d e h a rd w a re
Th rea d 1
Th re a d 2
Th re a d 3
C o n te x to d e
s o f tw a r e
C o n te x t o
d e h a rd w a re
Esp a o d e
e n d e r e a m e n to
De forma simplificada, um thread pode ser definido como uma sub-rotina de um programa que pode ser
executada de forma assncrona, ou seja, executada paralelamente ao programa chamador. O programador deve
especificar os threads, associando-os s sub-rotinas assncronas. Assim, um ambiente multithread possibilita a
execuo concorrente de sub-rotinas dentro de um mesmo processo.
Na Figura 6.4 existe um programa principal que realiza a chamada de suas sub-rotinas assncronas (Sub_1 e
Sub_2). Inicialmente, o processo criado apenas com o Thread_0 para a execuo do programa principal. Quando o
programa principal chama as duas sub-rotinas, so criados os Thread_1 e Thread_2, e executados independentemente
do programa principal. Neste processo, os trs threads so executados concorrentemente.
No ambiente multithread, cada processo pode responder a varias solicitaes concorrentemente ou mesmo
simultaneamente, caso haja mais de um processador. A grande vantagem no uso de threads a possibilidade de
minimizar a alocao de recursos do sistema, alem de diminuir o overhead na criao, troca e eliminao de
processos.
Threads compartilham o processador da mesma maneira que processos e passam pelas mesmas mudanas de
estado (execuo, espera e pronto). Por exemplo, enquanto um thread espera por uma operao de E/S, outro thread
pode ser executado. Para permitir a troca de contexto entre os diversos threads, cada um possui seu prprio contexto
de hardware, com o contedo dos registradores gerais, PC e SP. Quando um thread est sendo executado, seu
contexto hardware est armazenado nos registradores do processador. No momento em que o thread perde a
utilizao do processador, as informaes so atualizadas no seu contexto de hardware.
P r o ce ss o
V a r i v e is
T h re a d _ 1
PC
SP
P r o g r a m a P r in c ip a l
C a ll Su b _ 1
C o n te x to d e
H a r d w a re
...
E sp a o d e
e n d e r e a m e n to
T h re a d _ 2
PC
SP
Sub_1
Ret
T h re a d _ 3
Sub_2
PC
SP
C o n te x to d e
H a rd w a re
F im
C o n te x to d e
H a rd w a re
C a ll Su b _ 2
...
Ret
Control Block TCB). O TCB armazena, alm do contexto de hardware, mais algumas informaes relacionadas
exclusivamente ao thread, como prioridade, estado de execuo e bits de estado.
Em ambientes monothread, o processo ao mesmo tempo a unidade de alocao de recursos e a unidade de
escalonamento. A independncia entre os conceitos de processo e thread permite separar a unidade de alocao de
recursos da unidade de escalonamento, que em ambientes monothread esto fortemente relacionadas. Em um
ambiente multithread, a unidade de alocao de recursos o processo, onde todos os seus threads compartilham o
espao de endereamento, descritores de arquivos de dispositivos de E/S. Por outro lado, cada thread representa uma
unidade de escalonamento independente. Neste caso, o sistema no seleciona um processo para a execuo, mas sim
um de seus threads.
A grande diferena entre aplicaes mono e multithread est no uso do espao de endereamento. Processos
independentes e subprocessos possuem espaos de endereamento individuais e protegidos, enquanto threads
compartilham o espao dentro de um mesmo processo. Isso permite que o compartilhamento de dados entre threads
de um mesmo processo seja mais simples e rpido, se comparado a ambientes monothreads.
Como threads de um mesmo processo compartilham o mesmo espao de endereamento, no existe qualquer
proteo no acesso memria, permitindo que um thread possa alterar facilmente dados de outros. Para que os
threads trabalhem de forma cooperativa, fundamental que a aplicao implemente mecanismos de comunicao e
sincronizao entre threads, a fim de garantir o acesso seguro aos dados compartilhados na memria.
O uso de multithreads proporciona uma serie de benefcios. Programas concorrentes com mltiplos threads
so mais rpidos do que programas concorrentes implementados com mltiplos processos, pois operaes de criao,
troca de contexto e eliminao dos threads geram menor overhead (Tabela 6.1). Como os threads dentro de um
processo dividem o mesmo espao de endereamento, a comunicao entre eles pode ser realizada de forma rpida e
eficiente. Alm disso, threads em um mesmo processo podem compartilhar facilmente outros recursos, como
descritores de arquivos, temporizadores, sinais, atributos de segurana, etc.
Implementao
Processo
Processo Lightweight
Thread
42
T h re a d d e
e n tr a d a
B u ff e r
T h re a d d e
e xi b i o
T h re a d d e
g ra v a o
S o l ic i ta e s
Th re a d
Th re a d
Th re a d
P r o c e s s o c lie n te
P r o c e s s o c lie n te
P r o ce s s o c lie n te
43
No apenas aplicaes tradicionais podem fazer uso dos benefcios do multithreading. O ncleo do SO
tambm pode ser implementado com o uso desta tcnica de forma vantajosa, como na arquitetura microkernel,
apresentada em captulo anterior.
6.4 Arquitetura e Implementao
O conjunto de rotinas disponveis para que uma aplicao utilize as facilidades dos threads chamado de
pacote de threads. Existem diferentes abordagens na implementao deste pacote em um SO, o que influenciar no
desempenho, na concorrncia e na modularidade das aplicaes multithread.
Threads podem ser oferecidos por uma biblioteca de rotinas fora do ncleo do SO (modo usurio), pelo
prprio ncleo do sistema (modo kernel), por uma combinao de ambos (modo hbrido) ou por um modelo
conhecido como scheduler activations. A Tabela 6.2 resume as diversas arquiteturas para diferentes ambientes
operacionais.
Ambientes
Arquitetura
Distributed Computing Environment (DCE)
Modo Usurio
Compaq Open VMS verso 6
Modo Usurio
MS Windows 2000
Modo Kernel
Compaq Unix
Modo Kernel
Compaq Open VMS verso 7
Modo Kernel
Sun Solaris verso 2
Modo Hbrido
University of Washington FastThreads
Scheduler Activations
Tabela 6.2 Arquitetura de threads para diversos ambientes operacionais
Uma das grandes dificuldades para a utilizao de threads foi a ausncia de um padro. Em 1995, o padro
POSIX P1003.1c foi aprovado e posteriormente atualizado para a verso POSIX 1003.4 a. Com este padro, tambm
conhecido como Pthreads, aplicaes comerciais multithreading tornaram-se mais simples e de fcil implementao.
O padro Pthreads largamente utilizado em ambientes Unix, como o Sun Solaris Pthreads e o DECthreads para
Digital OSF/1.
6.4.1 Threads em Modo Usurio
Threads em modo usurio (TMU) so implementados pela aplicao e no pelo SO. Para isso, deve existir
uma biblioteca de rotinas que possibilite a aplicao realizar tarefas como criao/eliminao de threads, troca de
mensagens entre threads e uma poltica de escalonamento. Neste modo, o SO no sabe da existncia de mltiplos
threads, sendo responsabilidade exclusiva da aplicao gerenciar e sincronizar os diversos threads existentes.
A vantagem deste modelo a possibilidade de implementar aplicaes multithreads mesmo em SOs que no
suportem threads. Utilizando biblioteca, mltiplos threads podem ser criados, compartilhando o mesmo espao de
endereamento do processo, alm de outros recursos (Figura 6.7). TMU so rpidos e eficientes por dispensarem
acessos ao kernel do SO, evitando assim a mudana de modo de acesso (usurio-kernel-usurio).
Os TMU possuem uma grande limitao, pois o SO gerencia cada processo como se existisse apenas um
thread. Quando o thread chama uma rotina do sistema que o coloca em estado de espera (rotina bloqueante), todo o
processo colocado no estado de espera, mesmo havendo outros threads prontos para execuo. Para contornar esta
limitao, a biblioteca tem que possuir rotinas que substituam as rotinas bloqueantes por outras que no possam
causar o bloqueio de um thread (rotinas no-bloqueantes). Todo este controle transparente para o usurio e para o
SO.
44
Th rea d 4
Th rea d 3
Th re a d 2
Th re a d 1
Th rea d 0
M odo
u su rio
B ib lio te c a
M odo
k ern el
K ern el
Th rea d 4
Th rea d 3
Th re a d 2
Th rea d 1
Th rea d 0
M odo
u su rio
B ib lio te c a
K ernel
M odo
kernel
45
Implementao
Subprocessos
Threads em Modo Kernel
Threads em Modo Usurio
Operao 1 (s)
11.300
948
34
Operao 2 (s)
1.840
441
37
TM U 5
TM U 4
TM U 3
TM U 2
TM U 1
TM U 0
M odo
u su rio
B ib li o te c a
TM K 0
TM K 1
TM K 2
TM K 3
M odo
k ern el
K ern el
46
Thread 4
Thread 3
Th rea d 2
T h re a d 1
Thread 0
M odo
u su rio
B ib li o te c a
K e rn el
M odo
kern el
47
Captulo 7
Sincronizao e Comunicao entre processos
7.1 Introduo
Com o surgimento dos SOs multiprogramveis, tornou-se possvel estruturar aplicaes de maneira que
partes diferentes do cdigo do programa pudessem ser executadas concorrentemente. Este tipo de aplicao foi
denominada de aplicao concorrente.
Em sistemas com um nico processador, os processos alternam sua execuo segundo escalonamento
estabelecido pelo SO e mesmo assim aplicaes concorrentes obtm melhoras em seu desempenho. Em sistemas com
mltiplos processadores, estendem-se estas vantagens com a possibilidade do paralelismo na execuo de instrues.
Os processos de uma aplicao concorrente podem compartilhar recursos, como arquivos registros,
dispositivos de E/S e reas de memria. Este compartilhamento pode gerar situaes indesejveis, capazes de
comprometer a execuo das aplicaes. Para evitar este tipo de problema, os processos devem ter suas aes
sincronizadas, atravs de mecanismos oferecidos pelo SO.
7.2 Aplicaes Concorrentes
Em aplicaes concorrentes, pode ser necessrio que os processos comuniquem-se entre si. Esta
comunicao pode ser implementada atravs de variveis compartilhadas na memria principal ou trocas de
mensagens. Mais uma vez, necessrio que haja sincronizao entre a execuo dos processos concorrentes.
A figura 7.1 apresenta um exemplo onde dois processos concorrentes compartilham um buffer para troca de
informaes. Aqui, um processo s poder gravar dados no buffer se ele estiver vazio, e s poder ler um dado do
buffer caso haja um dado a ser lido. Em ambos os casos, os processos devero esperar at que o buffer esteja pronto
para as operaes de gravao e leitura.
S in c r o n iz a o
P ro ce sso
g ra v a d o r
P ro ce ss o
l e i to r
dado
B u ff e r
PROGRAMA B;
.
.
.
.
.
END.
48
O Programa A comea a ser executado e, ao encontrar o comando FORK, faz com que seja criado um outro
processo para execuo do Programa B, concorrentemente ao Programa A. O comando JOIN faz com que o Programa
A sincronize-se com o B, ou seja, o Programa A s continuar a ser executado aps o trmino da execuo de B. Os
comandos FORK e JOIN so poderosos e prticos, sendo utilizados de forma semelhante no Sistema Unix.
Outra forma mais clara e simples de expressar concorrncia em um programa com o uso dos comandos
PARBEGIN e PAREND (1965), que posteriormente foram chamados de COBEGIN e COEND. Aqui continuaremos
a utilizar os comandos PARBEGIN e PAREND.
A figura 7.2 demonstra o uso dos comandos PARBEGIN e PAREND.
P ro ce sso
p rin cip a l
PARBEGIN
Comando_1;
Comando_2;
.
.
Comando_n;
PAREND
P ro ce sso 1
P ro ce sso 2
P ro ce ss o n
P ro ce sso
p rin cip a l
49
Comando
READ
READLN
:=
READ
READLN
:=
WRITE
WRITE
Saldo Arquivo
1.000
1.000
1.000
1.000
1.000
1.000
800
1.300
Valor Dep/Ret
*
-200
-200
*
+300
+300
-200
+300
Saldo Memria
1.000
1.000
800
1.000
1.000
1.300
800
1.300
Outro exemplo simples a situao onde dois processos (A e B) executam um comando de atribuio. O
processo A soma 1 varivel X e o processo B subtrai 1 da mesma varivel. Suponha que inicialmente a varivel X
possua o valor 2.
Processo A
X: = X + 1 ;
Processo B
X: = X 1;
Seria razovel pensar que no final das operaes a varivel continuasse valendo 2, porem nem sempre isso
ser verdade. Decompondo em operaes mais elementares, usando uma linguagem de alto nvel, temos:
Processo A
Load x, Ra
Add 1,Ra
Store Ra,x
Processo B
Load x, Rb
Sub 1,Rb
Store Rb,x
Considere que o Processo A carregue o valor de X no Registrador Ra, some 1, e no momento em que vai
armazenar o novo valor de X, seja interrompido. Neste instante, inicia-se o Processo B, que carrega o valor de X em
Rb e subtrai o valor 1. Agora o Processo B interrompido e o A volta a ser executado, atribuindo o valor 3 varivel
X e finalizando sua execuo. O Processo B retorna sua execuo, atribui o valor 1 a X e sobrepe o valor
anteriormente gravado pelo Processo O resultado final ser inconsistente. Resumindo:
50
Processo
A
A
B
B
A
B
Comando
Load X,Ra
Add 1,Ra
Load X,Rb
Sub 1,Rb
Store Ra,X
Store Rb,X
X
2
2
2
2
3
1
Ra
2
3
*
*
3
*
Rb
*
*
2
1
*
1
Atravs destes exemplos, conclui-se que quando dois ou mais processos compartilham um mesmo recurso,
alguns mecanismos devem evitar que este tipo de problema ocorra (conhecidos como race conditions condies de
corrida).
7.5 Excluso Mtua
Para que sejam evitados problemas desta natureza, onde dois processos manipulem o mesmo arquivo ou a
mesma varivel de memria simultaneamente, enquanto um processo estiver acessando determinado recurso, todos os
outros que queiram acessar esse mesmo recurso devero esperar. Isso se chama EXCLUSO MUTUA (Mutual
Exclusion).
A excluso mtua dever agir apenas sobre os processos que esto concorrendo em um determinado recurso.
Quando desenvolvemos um programa, que faa tratamento de excluso mtua, este dever ter uma seo chamada
REGIO CRTICA (Critical Region). Nesta regio existe uma srie de procedimentos e protocolos que o programa
dever fazer para que o sistema operacional libere o recurso para o mesmo. Toda vez que um processo desejar
executar instrues de sua regio crtica, obrigatoriamente devera executar antes um protocolo de entrada nessa
regio. Da mesma forma, ao sair da regio crtica um protocolo de sada dever ser executado. A regio critica deve
ser sempre usada quando seu programa for fazer uso de recursos que so passiveis de compartilhamento com algum
outro suposto programa na memria. nela tambm que os processos encontram-se em um momento mais critico,
pois qualquer erro ocorrido ali dentro pode fazer com que dois ou mais processos colidam gerando falhas e
derrubando o sistema.
Assim, para garantir a implementao da excluso mtua, os processos envolvidos devem fazer acesso aos
recursos de forma sincronizada. Diversas solues foram criadas com este propsito; porm, ainda existem duas
situaes que devem ser evitadas
.
7.5.A Starvation
A primeira situao indesejada conhecida como starvation (ou espera indefinida).
Quem determina as prioridades dos processos o sistema operacional. Neste caso existem duas formas do
sistema operacional determinar qual ser a vez de quem. Ou por escolha aleatria ou por prioridades. Quando a
escolha aleatria, existir a probabilidade de um processo nunca ser escolhido. Quando for uma escolha por
prioridades, um processo de menor prioridade nunca receber o acesso ao recurso, e ai este processo nunca executar
sua rotina.
Uma soluo bastante simples a criao de filas de pedidos de alocao para cada recurso, utilizando o
esquema FIFO (First In First Out). Sempre que um processo solicita um recurso, o pedido colocado no final da fila
associada ao recurso. Quando o recurso liberado, o sistema seleciona o primeiro processo da fila.
7.5.B Sincronizao condicional
Sincronizao Condicional uma situao onde o acesso a um recurso compartilhado exige a sincronizao
de processos vinculada a uma condio de acesso.
Quando um recurso no est pronto para ser utilizado, o processo que vai acessar o recurso ficar em estado
de espera at que o mesmo esteja pronto. Existe o risco deste recurso nunca ficar pronto por j estar com problemas.
Ai todo o sistema fica esperando o recurso resolver sua vida. Um exemplo disto o caso do uso de Buffers para
leitura e gravao de dados feita pelos processos. Uma possvel falha na memria que impea o acesso aos buffers e
todo o sistema estar parado...
Diversas solues foram propostas para garantir a excluso mtua de processos concorrentes. A seguir,
algumas solues de hardware e software sero apresentadas, com comentrios sobre suas vantagens e desvantagens.
7.5.1 Solues de Hardware
Desabilitao de interrupes
Faz com que o processo, antes de entrar em sua regio crtica desabilite todas as interrupes externas e a
reabilite aps deixar a regio critica. Como a mudana de contexto de processos s pode ser realizada atravs de
interrupes, o processo que as desabilitou ter acesso exclusivo garantido.
51
Instruo test-and-set
Muitos processadores possuem uma instruo especial onde um processo apenas l o contedo de uma
varivel, e armazena seu valor em outra rea podendo neste caso fazer todas as manipulaes necessrias e devidas
sem precisar de prioridades ou esperar que a varivel original seja liberada. Esta instruo chamada de test-and-set e
tem como caracterstica ser executada sem interrupo, ou seja, trata-se de uma instruo invisvel. Assim garante-se
que dois processos no manipulem uma varivel compartilhada ao mesmo tempo, possibilitando a implementao da
excluso mtua.
O uso desta instruo especial oferece vantagens, como a simplicidade de implementao da excluso mtua
em mltiplas regies crticas e o uso da soluo em arquiteturas com mltiplos processadores. A principal
desvantagem a possibilidade do starvation, pois a seleo do processo para o acesso ao recurso arbitrria.
7.5.2 Solues de software
Diversos algoritmos foram propostos na tentativa de implementar a excluso mtua atravs de solues de
software. As primeiras solues tratavam apenas da excluso mtua para dois processos e, inicialmente,
apresentavam alguns problemas. A evoluo ocorreu at uma soluo definitiva para a excluso mtua para N
processos.
Alm da excluso mtua, que soluciona os problemas de compartilhamento de recursos, existem outros
fatores fundamentais para a soluo de problemas de sincronizao:
- O nmero de processadores e o tempo de execuo dos processos.
- Um processo fora de sua regio crtica no pode impedir que outros processos entrem em suas prprias regies
crticas.
- Um processo no pode permanecer indefinidamente esperando para entrar em sua regio crtica.
Todas as solues que foram apresentadas para contornar estes inconvenientes apresentavam problemas da
ESPERA OCUPADA, Na espera ocupada, todas vezes que um processo tenta entrar em sua regio crtica ele so
impedidas por j existir um outro processo usando o recurso, fazendo o sistema ficar parado esperando que o mesmo
tenha acesso a este respectivo recurso.
7.7 Semforos
O conceito de semforos foi proposto em 1965, sendo apresentado como um mecanismo de sincronizao
que permitia implementar, de forma simples, a excluso mtua sincronizao condicional entre processos.
O semforo uma varivel que fica associada a um recurso compartilhado, indicando quando este est sendo
acessado por um outro processo. Ela ter seu valor alterado quando o processo entra e quando sai da regio crtica de
forma que se um outro processo entrar em sua regio critica ele possa checar antes este valor para saber se o recurso
esta ou no disponvel. Quando o processo tiver seu acesso impedido, ele ser colocado em uma fila de espera
associada ao semforo aguardando sua vez de utilizar o recurso. Todos os processos da fila tero acesso ao recurso na
ordem de chegada. O semforo pode ser usado tambm para implementar sincronizaes condicionais. Isto consiste
em um processo que necessita ser notificado sobre a ocorrncia de um evento. Pode-se usar o semforo para notificar
este processo sobre a ocorrncia deste evento.
Outro tipo de semforo usado SEMFORO CONSUMIDOR onde ele pode informar ao processo se o
buffer est cheio ou est vazio.
SEMFORO CONTADOR aquele que notifica os processos sobre o uso dos recursos. Sempre que um
processo usa um recurso qualquer, este semforo incrementado sempre que um processo liberar um recurso ele ser
decrementado. Este semforo til para evitar que um processo na regio crtica sem que haja recursos disponveis
no sistema.
O uso de semforos exige do programador muito cuidado, pois qualquer engano pode gerar bugs em seu
programa que o levem a falhas de sincronizao ocasionando quedas e travamento geral do sistema.
52
P r o c e s s o d e s e ja e n tr a r
n a r e g i o c r ti c a
U P (S ) - p r o c e s s o s a i
d a r e g i o c r ti c a
L ib e ra p r o ce ss o
d a fi l a d e e s p e r a
Pro ce sso a ce ssa
a r e g i o c r tic a
F ila d e e s p e r a
d e p ro ce sso s
D e c la r a o d e
v a r i v e is g lo b a is
P r o c e d im e n to s
M o n i to r
Pro c. 1
P r o c. 2
F ila d e e n tra d a
P r o c. n
I n i c ia li z a o
d e v a r i v e is
53
P ro ce sso A
P ro ce ss o B
Pro cesso B
M a ilb o x
o u Po rt
54
P ro ce ss o A
P ro ce sso A
s o li c ita o
R e cu rso 2
R e cu rso 1
a lo ca d o a o
Pro ce sso A
R e cu rso 2
R e cu rso 1
P ro ce ss o B
R e cu rso 2
a lo ca d o a o
Pro ce sso B
P ro ce sso B
s o licita o
R e cu rso 1
Abaixo vemos a caixa de dialogo do Windows que tentar fechar o processo que pode estar parado por falta
de comunicao com o sistema.
56