You are on page 1of 56

2° Seminário de Avaliação da disciplina de Sistemas Operacionais

(3ª Nota de Avaliação)
Critérios para avaliação:
O seminário será realizado em duplas escolhidas pelo professor desta disciplina. Terá nota de
avaliação do conteúdo apresentado e entregue, também será avaliada a postura e clareza
apresentada aos demais colegas de sala. Cada apresentação será filmada pelo professor
responsável pela avaliação.

Grupo 01 – Visão Geral
Discentes: Fábio e Raquel
Grupo 02 – Conceitos de Hardware e Software
Discentes: Ivanete e Renata
Grupo 03 – Concorrência
Discentes: Bruna e Ana
Grupo 04 – Estrutura do Sistema Operacional
Discentes: Ângela e Laura
Grupo 05 – Processos
Discentes: Thábata e Claudinéia
Grupo 06 – Thead
Discentes: Cleyton e Everton
Grupo 07 – Sincronização e Comunicação entre processos
Discentes: Adriana e Leidiany

1

Material de apoio para a realização do Segundo Seminário
Arquitetura de Sistemas Operacionais
Capítulo 1
VISÃO GERAL

1.1 Introdução:

Sistema Operacional nada mais é do que um conjunto de instruções executadas pelo processador. Sua função
é controlar o funcionamento de um computador, gerenciando a utilização e o compartilhamento dos seus diversos
recursos, como processadores, memórias e dispositivos de entrada e saída.
Sem SO, usuário deveria conhecer profundamente o computador para poder interagir com ele. Implicaria em
trabalho lento e com possibilidade de erros.
A diferença entre um SO e aplicações convencionais é a maneira como as rotinas são executadas em função
do tempo. O SO não tem início, meio e fim como as aplicações. Dependem de eventos assíncronos. Também pode ser
chamado de Programa monitor, Executivo, supervisor ou Controlador.

1.2 Funções básicas:

- Facilidade de acesso aos recursos do sistema: Usuário não precisa se preocupar como é feita a
comunicação com monitores, discos, impressoras, etc. O SO é uma interface entre o usuário e os recursos do sistema.
Este conceito de ambiente simulado pelo SO também é chamado de Máquina Virtual (figura 1.1)
Compiladores, linkers, bibliotecas, depuradores e outras ferramentas são utilitários que facilitam a interação
do usuário com o computador.
- Compartilhamento de recursos de forma organizada e protegida: Em sistemas onde diversos usuários
compartilham recursos, é necessário controlar o uso concorrente destes recursos. Ex: Impressora, a impressão de um
usuário não deve interferir na do outro. O SO controla estes acessos concorrentes. O compartilhamento também
permite redução de custos, quando diversos usuários podem compartilhar periféricos 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

Fig. 1.1 - Visão do Sistema Operacional

2

• 1.3 Máquina de níveis: Uma máquina, do ponto de vista do hardware, tem pouca utilidade. É através do
software que esta máquina ganha utilidade (como armazenamento de dados, impressão, etc.) Uma operação efetuada
por software pode ser implementada em hardware, bem como uma função executada pelo hardware pode ser simulada
via software.
Os primeiros computadores eram programados através de fios ligados em painéis, criando grandes
dificuldades e exigindo grande conhecimento da máquina.
A solução veio com o surgimento do SO, tornando a interação com o usuário mais simples, confiável 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 - Visão do computador pelo usuário

O computador pode ser visualizado como uma máquina de níveis ou máquina de camadas. Inicialmente
vemos apenas dois níveis: hardware (nível 0) e SO (nível 1). Assim, o usuário pode enxergar a máquina como sendo
apenas o SO, como se o hardware não existisse. Esta visão é chamada de máquina virtual.
Na verdade não existem apenas dois níveis, e sim tanto quantos forem necessários para adequar o usuário às
suas diversas aplicações. A figura 1.3 representa a estrutura da maioria dos computadores, podendo conter mais ou
menos camadas. A linguagem utilizada em cada um destes níveis é diferente, variando da mais elementar (baixo
nível) à mais sofisticada (alto nível).

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

Fig. 1.3 - Máquina de Níveis

1.4 Tipos de Sistemas Operacionais
Os tipos de SOs e sua evolução estão diretamente relacionados com a evolução do hardware e das aplicações
por ele suportadas. A figura 1.4 sintetiza os diversos tipos de SOs, cujas características, vantagens e desvantagens
serão abordadas em seguida.
3

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

Fig. 1.4 - Tipos de Sistemas Operacionais

1.4.1 SOs monoprogramáveis/monotarefa
Os primeiros SOs eram voltados para a execução de um único programa. Qualquer outra aplicação deveria
aguardar a aplicação concorrente terminar, para ser executada. Estes sistemas vieram a ser conhecidos como sistemas
monoprogramáveis e se caracterizavam por permitir que o processador, a memória e os periféricos estejam
exclusivamente dedicados à execução de um único programa.
Este tipo de SO está relacionado aos primeiros computadores da década de 60. Voltou a ser utilizado na
década de 70 em estações de trabalho. Nos sistemas monotarefas, como também são conhecidos, todos recursos do
sistema ficam exclusivamente dedicados a uma única tarefa.
Neste tipo de SO, o processador fica ocioso, por exemplo, quando espera a digitação de um dado. A memória
é sub-utilizada caso não seja preenchida totalmente, e os periféricos, como discos e impressoras, estão dedicadas a um
único usuário, nem sempre de forma integral (Figura 1.5).

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

Fig. 1.5 - Sistemas monoprogramáveis / monotarefa.

1.4.2 SOs multiprogramáveis / multitarefa
Os SOs multiprogramáveis ou multitarefas são uma evolução do SO monoprogramáveis. Neste tipo de SO
os recursos computacionais são compartilhados entre diversos usuários e aplicações. Aqui várias aplicações
compartilham esses mesmos recursos.
Aqui também, enquanto um programa espera por uma operação de leitura ou gravação em disco, outros
programas podem estar sendo processados neste intervalo de tempo. Neste exemplo, observamos o compartilhamento
da memória e do processador. O SO se preocupa em gerenciar o acesso concorrente a seus diversos recursos, de
forma ordenada e protegida, entre os diversos programas (Figura 1.6).

4

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

Fig. 1.6 – Sistemas multiprogramáveis / multitarefa

A vantagem deste tipo de SO é a redução do tempo de resposta das aplicações processadas no ambiente e de
custos, a partir do compartilhamento de recursos do sistema entre diferentes aplicações. Apesar de mais eficientes, os
SO multiprogramável tem implementação muito mais complexa.
Baseado no número de usuários que interagem com o sistema, o SO multiprogramável pode ser classificado
como monousuário ou multiusuário. Os sistemas multiprogramáveis monousuário são encontrados em computadores
pessoais e estações de trabalho, onde apenas um usuário interage com o sistema. Por exemplo, um usuário pode
executar um editor de texto, ao mesmo tempo em que acessa a Internet e imprime um documento. Nos sistemas
multiusuários, permite-se que diversos usuários conectarem-se ao sistema simultaneamente. A tabela 1.1 relaciona os
tipos de sistemas em função do número de usuários.
Monoprogramação / Monotarefa
Multiprogramação / Multitarefa

Um usuário
Monousuário
Monousuário

Dois ou mais usuários
Não disponível
Multiusuário

Tabela 1.1 – Sistemas x Usuários

Os SO multiprogramáveis ou multitarefa, podem ainda ser classificados pela forma com que suas aplicações
são 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 implementação (Figura 1.7).

5

a verificar arquivos armazenados num disco. é possível por exemplo.3 Sistemas com Múltiplos Processadores Os sistemas com múltiplos processadores caracterizam-se por possuir dois ou mais processadores interligados e trabalhando em conjunto. os sistemas de tempo compartilhado também são chamados de sistemas on-line. Estes sistemas possuem uma linguagem de controle própria. Os programas. o tempo de resposta pode variar sem comprometer as aplicações em execução. Nos sistemas de tempo compartilhado. Atualmente não existem sistemas exclusivamente batch. • 1.7 – Tipos de sistemas multiprogramáveis / multitarefa. chamados de fatia de tempo (time-slice). A diferença é o tempo de resposta exigido no processamento das aplicações. eram executados através de cartões perfurados e armazenados em discos ou fitas. caso contrario poderão ocorrer sérios problemas.4. enquanto fica aguardando por uma nova fatia de tempo. também chamados de jobs. ou que um único programa seja subdividido em partes para serem executados simultaneamente em mais de um processador.3 Sistemas de Tempo Real Os sistemas de tempo real (real-time) são implementados de forma semelhante à dos sistemas de tempo compartilhado. onde aguardavam para serem processados. A maioria das aplicações comerciais atuais são processadas em sistemas de tempo compartilhado.2. em função da utilização compartilhada de diversos recursos.4.4. ou qualquer outra onde o tempo de resposta é fator fundamental.1 Sistemas Batch Os sistemas batch foram os primeiros SOs multiprogramáveis implantados na década de 60. entretanto. para cada usuário. ou ate que apareça outro mais prioritário. que devem ser obedecidos. pois oferecem tempos baixos de resposta aos usuários e menores custos. Caso o tempo disponibilizado não seja suficiente para a conclusão do programa. como no monitoramento de refinarias de petróleo. os jobs eram executados. compilações.2.2. em função da disponibilidade de espaço na memória principal. Este tipo de sistema permite que vários programas sejam executados ao mesmo tempo. permitem que diversos programas sejam executados a partir da divisão de tempo do processador em pequenos intervalos. de usinas termoelétricas e nucleares. Devido a este tipo de interação. permitindo ao usuário comunicar-se diretamente com o SO através de comandos. controle de trafego aéreo. Estes sistemas podem ser bastante eficientes.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 Fig. por utilizar melhor o processador. sendo executados através de simulações quando necessário. Nos de tempo real. teclado e mouse. Cálculos numéricos. Este tipo de processamento se caracteriza por não exigir a atenção do usuário com a aplicação. produzindo uma saída em disco ou fita. A prioridade de execução é definida pela própria aplicação e não pelo SO. nestes sistemas a interação com o usuário se dá através de terminais de vídeo. Posteriormente. ordenações e backups são exemplos de aplicações batch. ou cancelar a execução de um programa. No sistema de tempo real não existe a idéia de fatia de tempo. Geralmente.2 Sistemas de Tempo compartilhado Os sistemas de tempo compartilhado (time-sharing). geralmente discos. os tempos de resposta devem estar dentro de limites rígidos. Assim. • 1. • 1. 1. este é interrompido pelo SO e substituído por um outro.4. • 1. 6 . Todas entradas e saídas eram implementadas por algum tipo de memória secundaria. exclusivamente. Este ambiente dá a impressão que todo o sistema esta dedicado. podem oferecer tempos de resposta longos. Um programa utiliza o processador o tempo que necessitar. Estes sistemas podem ser encontrados em aplicações de controle de processos.

este tipo de sistema também é chamado de multiprocessador. simulações. Assim. Os 7 . processamento de imagens. sendo gerenciados por um único SO (Figura 1. 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. melhorando assim o desempenho do sistema como um todo. No caso de uma falha. Os sistemas multiprocessadores dividem-se ainda em SMP (Symmetric MultiProcessor) e NUMA (Non-Uniform Memory Access).4. prospecção de petróleo. embora com menor poder de computação. o sistema com múltiplos processadores apresentam vantagens como: Escalabilidade: é a possibilidade de se aumentar o poder computacional do sistema. as outras máquinas assumem suas funções de maneira transparente ao usuário. ao elevado custo de desenvolvimento de processadores de alto desempenho. Além dos mesmos benefícios dos sistemas multiprogramáveis. Balanceamento de carga: é a possibilidade de distribuir o processamento entre os diversos processadores. Os sistemas SMP possuem tempo uniforme de acesso à memória principal pelos diversos processadores. será beneficiada pelo acréscimo de processadores ao sistema. CAD e previsão do tempo. 1. adicionando-se novos processadores. É menos custoso interligar diversos processadores menores do que desenvolver um mais poderoso. no desenvolvimento aeroespacial.O uso de múltiplos processadores permitiu a criação de sistemas voltados para processamento científico (como a criação do mapa genético).8 – Tipos de Sistemas com múltiplos processadores • 1. Disponibilidade: é a capacidade de manter o sistema em operação mesmo em caso de falha de uma ou mais maquinas.3. Sistemas Com Múltiplos Processadores Sistemas Fortemente Acoplados Sistemas Fracamente Acoplados Fig. Um fator-chave na criação de SOs com múltiplos processadores é a forma de comunicação entre eles e o grau de compartilhamento da memória e dos dispositivos de entrada e saída.9). podemos classificar os sistemas com múltiplos processadores em fortemente acoplados ou fracamente acoplados (Figura 1.1 Sistemas fortemente acoplados Nos sistemas fortemente acoplados (tightly coupled) vários processadores compartilham uma única memória física (shared memory) e dispositivos de entrada e saída. Pode-se afirmar que qualquer aplicação que faca uso intensivo do processador.9 – Sistemas fortemente acoplados Em virtude disso. A evolução destes sistemas se deve em grande parte.8).

cada sistema computacional também pode ser formado por um ou mais processadores.10). com os demais hosts da rede. Cada sistema funciona de forma independente. Um exemplo disto são as redes locais. Windows 200 e Windows XP implementam esta funcionalidade. Atualmente. Baseando-se no grau de integração dos hosts da rede. é como se não existisse a rede de computadores. como processador. os terminais não tem poder de processamento. Nos sistemas distribuídos. O tempo de acesso à memória pelos processadores varia em função da sua localização física. Em uma rede existem dois ou mais sistemas independentes (hosts). O usuário não conhece os nomes dos membros do cluster e não sabe quantos são. Assim. Para os usuários e suas aplicações. e sim um único sistema centralizado. os sistemas multitarefa também evoluíram para permitir a existência de vários processadores no modelo simétrico. Basta solicitar um serviço ao cluster para obtê-lo. garantindo alta disponibilidade. 8 . A solicitação de uma tarefa ao sistema é feita através de linhas de comunicação. os sistemas fracamente acoplados também são conhecidos como multicomputadores. Nos sistemas distribuídos o sistema operacional esconde os detalhes dos hosts individuais e passa a tratá-los como um conjunto único. escalabilidade e balanceamento de carga à solução. com um ou mais processadores. 1. Até meados dos anos 80.3. Com a evolução dos computadores pessoais. interligados através de linhas de comunicação.sistemas NUMA apresentam diversos conjuntos reunindo processadores e memória principal. Inicialmente.10 Sistemas fracamente acoplados Em função destas características. 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 Fig. os sistemas multiprocessadores limitavam-se a sistemas de grande porte. fez com que um novo modelo de computação surgisse. Neste modelo. sendo que cada conjunto é conectado aos outros através de uma rede de interconexão. Este tipo de sistema é usado atualmente em sistemas de banco de dados e Web. como se fosse um sistema fortemente acoplado. uma aplicação pode ser dividida em partes e cada parte pode ser executada por hosts diferentes da rede de computadores. oferecendo algum tipo de serviço aos demais. a informação deixa de ser centralizada em sistemas de grande porte e passa a ser distribuída pelos diversos sistemas da rede.4. possuindo seu próprio sistema operacional e gerenciando seus próprios recursos. memória e dispositivos de entrada e saída (Figura 1. Nos sistemas SMP e NUMA todos processadores têm as mesmas funções. A diferença básica entre eles é a capacidade do SO criar uma imagem única dos serviços disponibilizados pela rede. Os sistemas operacionais de rede (SORs) permitem que um host compartilhe seus recursos como impressora ou disco. através de uma conexão de alto desempenho. No modelo centralizado. Linux. sistemas como Unix. Nesta configuração. A evolução dos computadores pessoais e também das telecomunicações. os usuários utilizavam terminais não-inteligentes conectados a linhas seriais dedicadas ou mesmo a linhas telefônicas públicas para comunicação interativa com estes sistemas. chamado de modelo de rede de computadores. as aplicações eram centralizadas em sistemas de grande porte. Outro exemplo de sistema distribuído são os clusters.2 Sistemas fracamente acoplados Os sistemas fracamente acoplados (loosely coupled). caracterizam-se por possuir dois ou mais sistemas computacionais conectados através de linhas de comunicação. • 1. dividimos os sistemas fracamente acoplados em sistemas operacionais de rede e sistemas distribuídos. Em um cluster existem dois ou mais servidores ligados.

2. para compreensão dos capítulos seguintes. conceitos básicos de hardware e software. Atualmente. o que não acontece com as não-voláteis. unidade lógica e aritmética. 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. como a gravação de dados em discos ou a busca de instruções na memória. como o nome indica.2.2 Memória A memória é composta por unidades de acesso chamadas células. 9 . e registradores. 2.2. memória principal e dispositivos de entrada/saída. formado por Processador ou unidade central de processamento.1 Sistema Computacional 2.Material de apoio para a realização do Segundo Seminário Arquitetura de Sistemas Operacionais Capítulo 2 CONCEITOS DE HARDWARE E SOFTWARE 2. A unidade de controle (UC) é responsável por gerenciar as atividades de todos os componentes do computador.1 Processador Um processador é composto por unidade de controle. sendo cada célula composta por um determinado número de bits. é responsável pela realização de operações lógicas (testes e comparações) e aritméticas (somas e subtrações).2 Hardware Um sistema computacional é um conjunto de circuitos eletrônicos interligados.1 Introdução: Neste capítulo serão apresentados brevemente. 2. Memórias voláteis precisam estar sempre energizadas para manter suas informações. A unidade lógica e aritmética (ULA). a grande maioria dos computadores utiliza o byte (8 bits) como tamanho de célula.

A memória secundária é um dispositivo nãovolátil com maior capacidade de armazenamento.2 – Memória principal com 64 Kbytes 2.4 Memória Principal e Secundaria A memória principal é um dispositivo de armazenamento. porém com menor velocidade de acesso aos seus dados armazenados.2.2. O tempo de acesso a um dado nela contido é muito menor que se o mesmo estivesse na memória principal.3 – Relação entre dispositivos de armazenamento 10 . 2. 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 Fig.3 Memória Cache A memória cache é uma memória volátil de alta velocidade. porém com pequena capacidade de armazenamento. 2. onde são armazenados instruções e dados utilizados pelo processador durante a execução de programas.0 in s tr u çã o o u d a d o 1 e n d e re ço s 2 16 2 -1 c é lu la = 8 b its Fig. O propósito do uso da memória cache é minimizar a disparidade existente entre a velocidade com que o processador executa instruções e a velocidade com que dados são acessados na memória principal. 2. em geral volátil.

6 Barramentos ou Bus Barramentos é o meio físico de comunicação entre as unidades funcionais de um sistema computacional.4 – Barramentos processador-memória e de E/S 11 . como teclados. impressoras e plotters. são mais lentos e permitem a conexão de diferentes dispositivos.5 Dispositivos e Entrada/Saída Os dispositivos de entrada e saída podem ser divididos em duas categorias: os que são utilizados como memória secundária e os que servem para a interface usuário-máquina. 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 . Os barramentos de E/S possuem maior extensão. Os dispositivos utilizados como memória secundária (discos e fitas magnéticas) caracterizam-se por ter capacidade de armazenamento bastante superior ao da memória principal. Seu custo é relativamente baixo. 2.2. Os barramentos processador-memória são de curta extensão e alta velocidade para que seja otimizada a transferência de informação entre processadores e memórias. O barramento de backplane tem a função de integrar os dois barramentos anteriores.2.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 Fig. monitores de vídeo. Outros dispositivos têm como finalidade a comunicação usuário-máquina.2. 2. porém o tempo de acesso à memória secundária é bem superior ao da memória principal.

2. 2.2.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 Fig. 4 I n s t r. 3 I n s t r. 3 I n s t r.7 Pipeline É uma técnica que permite ao processador executar múltiplas instruções paralelamente em estágios diferentes. 2 I n s t r.5 – Barramento de Backplane 2. 6 I n s t r. 4 I n s t r. 1 I n s t r. 5 I n s t r.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 . 1 I n s t r. 3 I n s t r. 4 I n s t r. 2 I n s t r. 2 I n s t r. 4 te m p o Fig. 7 I n s t r. 3 I n s t r. 1 I n s t r. 6 I n s tr. 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. 5 I n s tr.6 – Arquitetura pipeline com quatro estágios 12 . 5 I n s t r.

Prog2 e Prog3).1 Introdução: Os sistemas operacionais podem ser vistos como um conjunto de rotinas que executam concorrentemente de forma ordenada. quando um programa perde o uso do processador. Em sistema monoprogramáveis. Em sistemas de tempo compartilhado.0015) = 0. percebemos que Prog1 não realiza operações de E/S. E/S U CP 1 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 1 te m p o 2 1 ( 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 Fig. existe a impressão de o sistema está inteiramente dedicado a ele.2 temos as vantagens de um sistema multiprogramável. em média.066 = 6. 13 . Pela tabela. Nesta configuração. pois vários programas se revezam na utilização do processador.1 apresenta um exemplo de um programa que lê registros de um arquivo e executa. Neste caso. parece que nada aconteceu. o processador permanece menos tempo ocioso (Figura 3. ao contrário de Prog2 e Prog3. O tempo de espera é relativamente longo. o processador gasta cerca de 93% do tempo esperando o dispositivo de E/S concluir sua operação para então continuar o processamento. o processador permanece ocioso. pois enquanto uma leitura em disco é realizada. deixando áreas livres. 100 instruções por registro lido. concorrendo pela utilização do processador.0016 s % utilização da CPU (0. A utilização concorrente do processador deve ser implementada de forma que. permaneciam ociosos por longos períodos de tempo. vários programas podem estar residentes em memória. e depois retorna sua execução. limitando seu desempenho. Os SOs monoprogramáveis eram limitados por seus recursos não serem utilizados de forma eficiente. temos periféricos (como impressoras e discos) parados por grandes períodos de tempo esperando ações de um único usuário.0001 / 0.1 b) e a memória é utilizada de forma mais eficiente. deverá continuá-la na instrução seguinte àquela em que fora interrompido.0015 s Execução de 100 instruções 0.1 – Sistema monoprogramável x sistema multiprogramável A tabela 3. Muitos recursos (alguns de alto custo). Para o usuário. Nos SOs multiprogramáveis. são executados três programas distintos (Prog1. com um disco.1a. Assim. pois as operações de E/S são lentas comparadas às operações dos processadores.6 % Tabela 3. Leitura de um registro 0. Concorrência é o princípio básico para projeto e implementação dos sistemas operacionais multiprogramáveis. um terminal e uma impressora. Na tabela 3. O disperdício dos SOs monoprogramáveis pode ser representado na Figura 3.1 Exemplo de utilização do sistema A memória principal também é subutilizada se o programa não a ocupa totalmente. 3.0001 s Total 0. A possibilidade de o processador executar instruções em paralelo com operações de E/S permite que diversas tarefas sejam executadas concorrentemente.Material de apoio para a realização do Segundo Seminário Arquitetura de Sistemas Operacionais Capítulo 3 CONCORRÊNCIA 3.

ocasionando um desvio forcado em seu fluxo de execução. a unidade de controle verifica a ocorrência de algum tipo de interrupção. Ao final da execução de cada instrução.3 – Comparação entre Mono e multiprogramação A seguir. nem sempre é feita esta distinção. 6 progr. o processador interrompe o programa e trata o término da operação. conforme mostra a tabela 3.Características Utilização do processador Operações de E/S Tempo de processamento Memória utilizada Utilização de disco Utilização de terminal Utilização de impressora Prog1 Alta Poucas 5 min 50 Kb Não Não Não Prog2 Baixa Muitas 15 min 100 Kb Não Sim Não Prog3 Baixa Muitas 10 min 80 Kb Sim Não Sim Tabela 3. 3. 12 progr. A diferença entre interrupção e exceção e dada pelo tipo de evento ocorrido. será apresentado técnicas de implementação da concorrência. as informações do programa executado são armazenadas em registradores no processador (Figura 3. os ganhos são consideráveis. Um exemplo de interrupção ocorre quando um disco avisa ao processador que uma operação de leitura ou escrita está completa. Para o programa prosseguir posteriormente. Neste caso. Estes tipos de eventos são conhecidos por interrupção ou exceção e podem ser conseqüência da sinalização de algum hardware externo ou da execução de instruções do próprio programa. o programa é desviado para uma rotina de tratamento de interrupção. o SO sincroniza a execução de todas suas rotinas e dos programas dos usuários. A interrupção permitiu a implementação da concorrência nos computadores.2 Interrupção e Exceção Durante a execução de um programa. Uma interrupção é gerada por algum evento externo ao programam e independe da instrução que esta sendo executada. Neste caso. eventos inesperados podem ocorrer. / hora Tabela 3. Porém. Se fossem executados em ambiente multiprogramável.2 – Características de execução do programas Se fossem realizados num ambiente monoprogramável.3. / hora Multiprogramação 33 % 67 % 67 % 67% 15 min. seriam executados em seqüência. além de controlar dispositivos.2). totalizando 30 minutos. 14 . Características Utilização do processador Utilização da memória Utilização de disco Utilização de impressora Tempo total de processamento Taxa de processamento Monoprogramação 17 % 30 % 33% 33 % 30 min. Com este mecanismo. essencial num sistema multiprogramável.

Isso possibilitaria a ocorrência de múltiplas interrupções simultâneas. a exceção é gerada por um evento síncrono. A rotina de tratamento salva o conteúdo dos demais registradores na pilha de controle de programas 6. Para isso. Um segundo método utiliza um registrador de status que armazena o tipo do evento ocorrido. Assim. o processador identifica o pedido de interrupção 3. como a divisão de um número por zero. que contem o endereço inicial de todas as rotinas de tratamento existentes. associadas a cada evento. O processador identifica qual a rotina de tratamento que será executada e carrega um registrador com o endereço inicial desta rotina 5. é o responsável por avaliar as interrupções geradas e suas prioridades. ou a ocorrência de um “overflow” e operações aritméticas. em função de sua importância. Alguns processadores não permitem que interrupções sejam desabilitadas. Tais eventos são portanto previsíveis e só podem ocorrer um único de cada vez. retomando a execução do programa interrompido Tabela 3. Neste método. Os conteúdos dos registradores apropriados são salvos 4. 15 . as interrupções posteriores seriam ignoradas durante a execução da rotina de tratamento. que no seu inicio testa o registrador para identificar o tipo de interrupção e tratá-la de maneira adequada. Par evitar esta situação. é a rotina de tratamento inibir as demais interrupções. Portanto. 3. não receberiam tratamento. sendo a principal diferença. só existe uma única rotina de tratamento. Após o termino da execução da instrução corrente. A identificação do tipo de interrupção é fundamental para determinar o endereço da rotina de tratamento. Existem dois métodos utilizados no tratamento das interrupções.4 descreve o mecanismo de interrupção. um dispositivo denominado controlador déb pedidos de interrupção. o motivo pelo qual o evento é gerado. Um programa com este tipo de evento que seja reexecutado a exceção ocorrera sempre na mesma instrução.4 – Mecanismo de interrupção As interrupções são decorrentes de eventos assíncronos (não relacionados à instrução do programa). Após o termino da execução da rotina. os registradores são restaurados. Um sinal de interrupção é gerado para o processador 2.Fig. Estes eventos podem ser imprevisíveis e podem ocorrer múltiplas vezes.2 – Mecanismos de interrupção e exceção A tabela 3. as interrupções devem possuir prioridades. Para cada tipo de interrupção existe uma rotina de tratamento associada. o processador precisa saber a ordem em que ocorreram as interrupções concorrentes. A rotina de tratamento é executada 7. que pode ser realizado por hardware ou software. Normalmente. O primeiro utiliza uma estrutura de dados chamada de vetor de interrupção. A exceção é resultado direto da execução de uma instrução do próprio programa. Neste caso. Interrupções com estas características são chamadas de interrupções mascaráveis. Via Hardware Via Software 1. ou seja. Uma exceção é semelhante a uma interrupção.

O único inconveniente desta técnica. Esta técnica permitiu um tipo de paralelismo. o processador não se comunica mais diretamente com os dispositivos de E/S. Com o mecanismo de interrupção. mantinha o processador ocupado até o fim da operação de E/S (busy wait). o SO deve testar os dispositivos para saber do término da operação de E/S (polling).Na segunda. o dispositivo de E/S. o programa interrompido é desviado para uma rotina de tratamento de exceção (Figura 3. a posição 16 . um overflow. Neste caso. Isto provocava uma forte dependência entre processador e os dispositivos de E/S.3 – Controlador de dispositivos de E/S O controlador simplificou as instruções de E/S. Assim. O mecanismo de tratamento de exceções muitas vezes pode ser escrito pelo próprio programador. o processador sincroniza-se com o periférico para o inicio da troca de dados entre eles. 3. Com a utilização do controlador. Uma solução pensada para este problema. na gravação de um bloco de dados em disco. por exemplo. e depois de iniciada a transferência. Estas instruções continham detalhes de cada periférico. é que caso haja muitos periféricos. foi a técnica de transferência de dados chamada de DMA (Direct Memory Address). há uma evolução do modo anterior. ao invés do processador ficar constantemente verificando as operações pendentes (E/S controlada por interrupção). Ainda existe um outro inconveniente neste processo. mas sim através do controlador (Figura 3. É o caso em que há uma grande quantidade de dados. O controlador de interface surgiu para permitir que o processador fique mais independente dos periféricos. deveria se especificar em qual trilha e setor ocorreria a gravação. o processamento será interrompido freqüentemente. sem a intervenção do processador. existiam duas maneiras básicas pelas quais o processador gerenciava as operações de E/S: . as operações de E/S se tornaram mais eficientes.Assim como a interrupção. A técnica DMA permite que um bloco de dados seja transferido entre a memória principal e um dispositivo de E/S. Esta última técnica é mais eficiente do que a controlada por programa. alem de permitir varias operações de E/S simultâneas. 3. o processador informa ao controlador sua localização. o processador permanece livre para realizar outras tarefas. sendo a base dos sistemas multiprogramáveis. Este tipo de controle.3). onde uma vez iniciada a transferência de dados. Quando o sistema deseja ler ou gravar um bloco de dados. em determinados intervalos de tempo. . onde as muitas intervenções do processador acabam por reduzir sua eficiência.3 Operações de Entrada/Saída Nos primeiros SOs. denominadas de instruções de entrada/saída. Isto provocava um desperdício de tempo. é possível evitar que um programa seja encerrado de ocorrer.2). 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 Fig. uma vez que o controlador interrompe o processador para avisar o fim de uma operação. o sistema ficava permanentemente testando o estado dos periféricos para saber quando a operação de E/S terminaria. chamado de E/S controlada por programa. exceto no inicio e no fim da transferência. como por exemplo. . Desta forma. pois elimina a necessidade do processador esperar pelo término da operação. pois o processador não necessitaria utilizar instruções detalhadas. pois o processador executa uma instrução muito mais rapidamente que a realização de uma operação de E/S. existiam instruções especiais para controlar periféricos.Na primeira.

Na técnica de DMA. Neste caso. que tem seu tamanho definido em função: . definido em arquivo. O mesmo mecanismo pode ser aplicado às gravações (Figura 3. de forma que hajam dados lidos e ainda não processados. pois minimiza o problema da disparidade da velocidade de processamento entre o processador e os dispositivos. Esta técnica permite que em uma operação de leitura. uma linha gerada por uma impressora. enquanto o processador processa o dado localizado no buffer. a técnica de spooling utiliza uma área em disco como se fosse um grande buffer. Semelhante à técnica de buffering. Neste caso. No momento em que um comando de impressão é executado. 3.4 – Operações de E/S utilizando buffer O objetivo desta técnica é manter. na maior parte do tempo. como por exemplo.5 Spooling A técnica de spooling (simultaneous peripheral operation on-line). o periférico realiza outra operação de leitura. e o processador suspende temporariamente o acesso ao barramento. introduzida no final dos anos 50.5). Com estas informações.Da aplicação. Isto torna o processo bastante eficiente. a utilização do barramento passa ser exclusiva do periférico. conhecido como arquivo de spool. visa aumentar o grau de concorrência e a eficiência dos SOs. Logicamente o buffer deve permitir armazenar diversos registros. o controlador realiza a transferência entre o periférico e a memória principal. simultaneamente. o controlador assume momentaneamente o controle do barramento. acesso à memória cache.Da natureza do dispositivo. 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 Fig. 3. o SO se encarrega de direcionar o conteúdo do arquivo de spool para a impressora (Figura 3. Posteriormente. Esta técnica esta presente na maioria dos SOs. 3. processador e dispositivos de E/S ocupados. ou processados mas ainda não gravados. liberando o programa para outras atividades. O processador pode nestas horas. A unidade de transferência utilizada no buffering é o registro. pois é possível compatibilizar a diferença existente entre o tempo em que o processador executa instruções e o tempo em que o dispositivo de E/S realiza suas operações de leitura e gravação. ou um caractere de um teclado. . os dados podem ser lidos ou gravados em disco. Por exemplo.inicia da memória onde os dados serão lidos ou gravados e o tamanho do bloco. as informações a serem impressas são gravadas antes em um arquivo em disco. enquanto programas são executados concorrentemente. do barramento. liberando imediatamente o dispositivo para uma nova leitura. realizar tarefas que não dependa. denominada buffer. para a transferência de dados entre os dispositivos de E/S e a memória.5 – Técnica de Spooling 17 . Assim. 3. o dado seja primeiramente transferido para o buffer. utilizada no gerenciamento de impressão. A área de memória utilizada pelo controlador na técnica de DMA é chamada de buffer de entrada/saída.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 Fig.4 Buffering A técnica de buffering consiste na utilização de uma área na memória principal. e o processador será interrompido somente no final da operação.

Se cada um deles trouxesse o programa para uma área de memória. Portanto. deve existir uma preocupação com a confiabilidade e integridade dos dados e programas dos usuários. cada usuário possui uma área reservada onde seus dados e código são armazenados. como memória e processador. a capacidade de um código executável (código reentrante) ser compartilhado entre vários usuários. o SO deve implementar diversos mecanismos de proteção que controlem o acesso concorrente aos diversos recursos do sistema. manipulando dados próprios e exclusivos de cada usuário (Figura 3. um erro indicando a violação deve ocorrer. Considerando que diversos usuários compartilham os mesmos recursos. o controle da utilização do processador. Semelhante ao compartilhamento de memória. 3. 18 . um disco armazena arquivos de diferentes usuários. exigindo apenas uma cópia do programa em memória.Esta técnica desvincula o programa do dispositivo impressor. Assim.6 – Reentrância 3. No sistema multiprogramável. seguindo critérios de segurança e de uso eficiente das impressoras.7 Proteção do Sistema A complexidade de um sistema multiprogramável resulta em alguns problemas de proteção. 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. evitando que algum programa monopolize seu uso. vários usuários podem utilizar o mesmo aplicativo simultaneamente. 3. O SO gerencia a seqüência de impressões solicitadas pelos programas. alem do próprio SO. deve ser tarefa do SO também. Caso um programa tente acessar uma posição de memória fora de sua área. Esta técnica permite que cada usuário possa estar em um ponto diferente do código reentrante. O compartilhamento de arquivos em disco permite que dois ou mais usuários acessem um mesmo arquivo simultaneamente pelo SO. O SO deve preservar estas informações. haveria desperdício de recursos (espaço em memória). diversos programas compartilham o processador. Chamamos de reentrância. Estes mecanismos serão abordados em capítulos posteriores. impedindo que um programa reserve a impressora para uso exclusivo. Como vários programas ocupam a memória simultaneamente. Novamente o SO deve garantir a integridade e confidencialidade dos dados de cada usuário.6 Reentrância Em sistemas multiprogramáveis.6).

 Contabilização do uso do sistema.1 – Sistema Computacional Uma das dificuldades de se compreender o funcionamento de um SO.  Sincronização e comunicação entre processos e threads.  Escalonamento e controle dos processos e threads. 4. (Figura 4. utilitários ou interpretadores de comando. como compiladores e editores de texto. que acompanham o SO.  Auditoria e segurança do sistema.  Suporte a redes locais e distribuídas.  Gerência do sistema de arquivos. As principais funções do núcleo na maioria dos SOs estão listadas a seguir:  Tratamento de interrupções e exceções. às suas aplicações. e os interpretadores de comando.  Gerência de memória. uma interação amigável com o sistema.1 Introdução: O Sistema Operacional é formado por um conjunto de rotinas que oferecem serviços aos usuários. A forma como o código do sistema é organizado e o relacionamento com seus diversos componentes varia de acordo com o projeto do SO. Não confundir o núcleo do sistema com aplicações.Material de apoio para a realização do Segundo Seminário Arquitetura de Sistemas Operacionais Capítulo 4 ESTRUTURA DO SISTEMA OPERACIONAL 4. e ao próprio sistema. administradores e desenvolvedores. As aplicações são utilizadas pelos usuários e não mostram os detalhes da interação com o sistema.  Criação e eliminação de processos e threads.  Gerência de dispositivos de E/S.1). 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 Fig.2 System Calls 19 . Este conjunto de rotinas é denominado núcleo do sistema ou kernel. Muitos eventos estão relacionados ao hardware e ao próprio sistema. como outras aplicações. permitem aos usuários. Suas ações dependem de eventos que não ocorrem em uma ordem pré-definida. Os utilitários. é devido ao fato que ele não possui um início. um meio e um fim. 4.

por exemplo. Quando um usuário ou aplicação necessitar de algum serviço do sistema. foi estabelecido com a intenção de unificar as diversas versões do Unix existentes. verifica a ocorrência de erros e retorna os dados ao programa. Cada SO tem seu próprio conjunto de chamadas diferentes (Figura 4. é feita uma chamada a uma de suas rotinas através de uma system call. Para cada serviço disponível existe uma system call associada.1) Muitos usuários e mesmo programadores não imaginam os detalhes que envolvem um simples comando de leitura de um arquivo. O termo system call é típico de ambientes Unix. uma aplicação que atualize um arquivo em disco. 20 . pois sua utilização indevida poderia ocasionar problemas à integridade do sistema. Como o disco é um recurso compartilhado. 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 Fig. a solicitação é processada e uma resposta é retornada à aplicação.2). As system calls (chamadas ao sistema) podem ser entendidas como uma porta de entrada para o acesso ao núcleo do sistema e seus serviços. ou seja. Funções System Calls Gerência de processos e threads Criação e eliminação de processos e threads Alteração das características de processos e threads Sincronização e comunicação entre processos e threads Obtenção de informação sobre processos e threads Gerência de memória Alocação e desalocação de memória Gerência de sistema de arquivos Criação e eliminação de arquivos e diretórios Alteração das características de arquivos e diretórios Abrir e fechar arquivos Obtenção de informações sobre arquivos e diretórios Gerência de dispositivos Alocação e desalocação de dispositivos Operações de entrada/saída em dispositivos Obtenção de informações sobre dispositivos Tabela 4. é semelhante a uma sub-rotina de um programa. não pode especificar diretamente as instruções que acessam seus dados no disco. quando se utiliza uma linguagem de programação de alto nível. Isto explica o fato de uma aplicação desenvolvida para um SO. Através de parâmetros fornecidos nas system calls. quem gerencia exclusivamente sua utilização é o SO. não pode ser executada em outro. Por exemplo. de forma transparente ao usuário.1 – Funções das system calls 4. junto com um status indicando erro ou não. O padrão POSIX (Portable Operating System Interface for Unix). O programa por si só. a proteção do núcleo do sistema contra possíveis acessos não-autorizados. Assim se evita que a aplicação acesse qualquer parte do disco indiscriminadamente.2 System call Algumas tentativas foram feitas para padronizar uma biblioteca de chamadas. que quando executada.3 Modos de Acesso Algumas instruções não podem ser colocadas diretamente à disposição das aplicações. O compilador converte este comando de alto nível para uma system call específica.Uma grande preocupação no projeto de um SO. é quanto a sua integridade. A ativação e comunicação entre programas e o SO. no ambiente Windows é conhecida como API (Application Program Inteface). As system calls podem ser divididas em grupos de funções (Tabela 4. o que poderia comprometer a segurança e integridade do sistema de arquivos. 4.

O primeiro é o modo usuário. As instruções que possuem o poder de comprometer o sistema são conhecidas como instruções privilegiadas. e ao termino de sua execução retorna ao modo usuário (Figura 4. deve solicitar sua execução através de uma system call.4 Arquitetura Monolítica A arquitetura monolítica pode ser comparada com uma aplicação formada por vários módulos que são compilados separadamente e depois linkados. No mesmo exemplo do acesso ao disco. onde a aplicação tem acesso ao conjunto total de instruções do processador. a aplicação deve solicitar a operação ao SO por meio de uma system call. um programador malintencionado ou um erro de programação poderia ter acessar esta área e acabar danificando o sistema. 4.3 – Chamada a uma rotina do sistema 4. deve ser implementado no processador um mecanismo de proteção.Portanto. Os primeiros SOs baseavam-se neste modelo. Apenas o SO deve ter acesso às instruções privilegiadas. enquanto que as não-privilegiadas não oferecem estes riscos. São basicamente dois os modos de acesso implementados pelo processador. fica claro que certas instruções só devem ser executadas pelo SO ou sob sua supervisão. o hardware verifica se a instrução pode ou não ser executada pela aplicação. tornando seu desenvolvimento e sua manutenção bastante difíceis. Portanto. Dependendo do conteúdo deste registrador. O mecanismo de modos de acesso também é uma boa forma de proteger o próprio núcleo do sistema residente em memória.4). o processador sinaliza um erro. se uma aplicação necessitar executar uma instrução privilegiada. A estrutura monolítica apresenta simplicidade e bom desempenho. Por exemplo. onde os módulos podem interagir livremente. Caso uma aplicação tente executar uma instrução privilegiada em modo usuário. se uma aplicação tivesse acesso à área de memória onde está o SO. formando um grande e único programa executável. O segundo modo é o modo kernel ou supervisor. A system call altera o status do PSW para modo kernel.3). 21 . conhecido como modos de acesso. retorna-se ao modo usuário. tendo acesso a um numero reduzido de instruções. apenas em modo kernel poderia se efetuar tal tarefa. O modo de acesso de uma aplicação é determinado por um registrador de status do processador (chamado de PSW). que altera o modo de acesso para kernel. Com os modos de acesso. onde a aplicação só poderá executar instruções não-privilegiadas. por isso foi usada no projeto do MS-DOS e nos primeiros sistemas Unix (Figura 4. uma exceção será gerada e o programa será interrompido. Fig. impedindo assim riscos de segurança e integridade. Para que uma aplicação não execute uma instrução privilegiada. para o programa atualizar um arquivo. Após efetuar a atualização.

O primeiro SO a usar este conceito. o sistema é dividido em níveis sobrepostos. Posteriormente. surgiu em 1968 na Holanda e utilizava seis camadas. 4.4 – Arquitetura monolítica 4. agora sob forma concêntrica (Figura 4. Na arquitetura de camadas.5). por isso.5 Arquitetura de Camadas Os sistemas operacionais tornaram-se mais complexos e maiores em tamanho. 22 . Cada camada oferece um conjunto de funções que podem ser utilizadas apenas pelas camadas superiores.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 Fig. Neste formato. as camadas mais internas são mais privilegiadas que as externas. sistemas como MULTICS e OpenVMS também implementaram o conceito de camadas. novas técnicas de programação estruturada e modular foram incorporadas ao seu projeto.

a IBM implantou este modelo no VM/370. Atualmente. Cada nova camada implica uma mudança no modo de acesso. Além de permitir SOs diferentes no mesmo computador. Porém. A maior desvantagem desta arquitetura é sua complexidade. como visto na Figura 4. denominado gerência de máquinas virtuais (Figura 4. Este nível cria diversas maquinas virtuais independentes. que oferece suporte para as aplicações. incluindo os modos de acesso. O modelo de máquina virtual. que necessita compartilhar e gerenciar os recursos de hardware entre as diversas VMs. seu desempenho é inferior ao modelo monolítico. se uma VM executar uma aplicação que comprometa o funcionamento de seu SO. Acima dele.1. 4.5 – Arquitetura em camadas do OpenVMS A vantagem da arquitetura em camadas é isolar as funções do SO. 4. interrupções. Como cada VM é independente das demais. alem de criar uma hierarquia de níveis de modos de acesso. cria um nível intermediário entre o hardware e o SO. Por exemplo. a maioria dos SOs utiliza o modelo de duas camadas. A maioria das versões do Unix e do Windows 2000 baseiam-se neste modelo. encontramos o SO. onde a camada de nível mais baixo é o hardware. protegendo as camadas mais internas. 23 . as demais VMs não sofrerão qualquer problema. etc. onde existem módulos de acesso usuário (não-privilegiado) e kernel (privilegiado). desenvolvidas em antigos sistemas OS/360 e aplicações de tempo compartilhado pudessem conviver na mesma máquina de forma transparente aos usuários e aplicações. no caso do OpenVMS.6). oferecendo grande segurança para cada uma delas. Na década de 60. Por exemplo. facilitando sua manutenção e depuração. onde cada uma oferece uma cópia virtual do hardware. ou virtual machine (VM). este modelo cria o isolamento total entre cada VM. para ter acesso aos serviços oferecidos pelo kernel é preciso passar por três camadas ou três mudanças no modo de acesso.Fig. dispositivos de E/S. é possível que cada uma tenha seu próprio SO e que seus usuários executem suas aplicações como se todo o computador estivesse dedicado a cada um deles.6 – Máquina Virtual Um sistema computacional é formado por níveis. permitindo aplicações batch.

de memória e escalonamento.7 – Máquina Virtual Java 4. A principal função do núcleo é realizar esta comunicação entre cliente e servidor (Figura 4. Se uma aplicação desejar algum serviço. é necessário uma máquina virtual Java (ou Java Virtual Machine – JVM). Qualquer SO pode suportar uma aplicação Java.8). onde cada um é responsável por oferecer um conjunto específico de funções.VM n 2 VM 1 VM Ap 1 Ap 2 Ap n SO 1 SO 2 SO n H V 1 H V 2 H V n 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 Fig. 4. como gerência de arquivos. 24 . Para implementar esta idéia. é realizada uma solicitação ao processo responsável. os serviços do sistema são disponibilizados através de processos. Assim. tornando-se independente do hardware e SO utilizado (Figura 4. criada pela Sun Microsystems. de processos. desde que exista uma JVM desenvolvida para ele. 4.7).6 – Máquina Virtual Temos outro exemplo desta arquitetura.7 Arquitetura Microkernel Uma tendência nos SOs modernos é tornar o núcleo do sistema operacional o menor e mais simples possível. 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 Fig. Neste caso. a aplicação não precisa ser compilada para cada sistema. a aplicação é chamada de cliente e o processo que responde é chamado de servidor. Para executar um programa em Java. que responde com outra mensagem. na linguagem Java. A solicitação é feita enviando-se uma mensagem ao servidor.

o que se implanta normalmente é a combinação do modelo de camadas com a arquitetura de microkernel. Assim. gerência de memória. este poderá parar. como operações de E/S. se um erro ocorrer em um servidor. com o sistema operacional Mach. comunicação por troca de mensagens e operações de E/S. tratamento de interrupções e gerência de dispositivos. O núcleo do Mach oferece basicamente quatro serviços: gerência de processos.8 Projeto do Sistema O projeto de um SO é bastante complexo e deve atender inúmeros requisitos.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. mono usuário ou multiusuário. o sistema operacional passa a ser de mais fácil manutenção. além de ser responsável pela comunicação entre cliente e servidor. Na arquitetura microkernel. conferindo uma grande escalabilidade ao SO. conseqüentemente. todos em modo usuário. O núcleo do sistema. na prática. é muito difícil. Os primeiros SOs foram desenvolvidos em assembly e seus códigos possuíam cerca de um milhão de instruções (ex. tempo compartilhado. Isso permite acrescentar novos servidores à medida que aumenta o numero de clientes. responsável pela comunicação entre clientes e servidores. Apesar de todas as vantagens deste modelo. ou seja.8 – Arquitetura Microkernel Este conceito de Arquitetura Microkernel surgiu na década de 80. como escalonamento. Apenas o núcleo do SO. mas o sistema não ficará inteiramente comprometido. Com a evolução dos SOs e conseqüentemente o aumento do numero de linhas de 25 . Como os servidores se comunicam através de troca de mensagens. Primeiro existe o problema de desempenho. Outra vantagem é que a arquitetura microkernel permite isolar as funções do sistema operacional por diversos processos servidores pequenos e dedicados a serviços específicos. portabilidade e facilidade de manutenção. como confiabilidade. Outro problema é que certas funções do sistema operacional exigem acesso direto ao hardware. sua implementação. não tenham acesso direto a certos componentes do sistema. Na verdade. 4.: IBM OS/360). algumas vezes conflitantes. A implementação de sistemas microkernel em ambientes distribuídos permite que um cliente solicite um serviço e a resposta seja processada remotamente. devido à necessidade de mudança de modo de acesso a cada comunicação entre clientes e servidores. flexível e de maior portabilidade. etc. não importa se os clientes e servidores são processados em um sistema com um processador. aumentando sua confiabilidade. com múltiplos processadores (fortemente acoplados) ou ainda em um ambiente de sistema distribuído (fracamente acoplados). A utilização deste modelo permite que os servidores executem em modo usuário. 4. passa a incorporar outras funções críticas. tempo real. aumentando sua disponibilidade (tempo em que está acessível). executa no modo kernel. O projeto irá depender muito da arquitetura do hardware utilizado e do tipo de sistema que se deseja construir: batch. mais fácil de depurar e. tornado o núcleo menor.

partes críticas do sistema. sendo escrito grande parte em linguagem C/C++. programação orientada a objetos.redução no tempo de desenvolvimento. utilizando em alguns casos. o número de linhas de código chega perto dos 40 milhões (Windows 2000).facilidade de implementação do modelo de computação distribuída. 26 . o escalonador e as rotinas de tratamento de interrupções. apresenta perda de desempenho. . ou seja.código (cerca de 20 milhões no sistema MULTICS).maior facilidade na manutenção e extensão do sistema e . além do uso de linguagens de alto nível. Os principais benefícios são: . Além disso.melhoria na organização das funções e recursos do sistema. o SO pode ser adaptado para outra arquitetura de hardware. o uso de linguagens de alto nível em relação à programação assembly. novas técnicas de programação modular foram incorporadas ao projeto. A política define o que deve ser feito. . e o mecanismo define como implementar esta política. Nos SOs atuais. Um princípio fundamental no projeto de SOs é a separação no projeto do sistema das políticas e dos mecanismos. Por outro lado. são ainda desenvolvidas em assembly. Por isso. como device drivers. como PL/1 e Algol. Existe uma série de vantagens na utilização de programação por objetos no projeto e na implementação de sistemas operacionais. o uso de uma linguagem de alto nível permite maior portabilidade.

Através dos processos. os processos são executados concorrentemente. o processador executa o programa de um usuário durante um intervalo de tempo. existe também a execução simultânea de processos nos diferentes processadores. é necessário que as informações do programa interrompido sejam guardadas. denominadas contexto de hardware. como espaço de memória. pode-se entender um processo. entre outros recursos. O processador executa instruções. sem distinguir qual programa se encontra em execução. Assim. Imaginemos como os SOs multiprogramáveis atendem os diversos usuários e ainda mantém informações a respeito dos vários programas executados ao mesmo tempo.1). um programa pode alocar recursos. como um programa em execução. Ao executar um programa. além da concorrência de processos pelo uso do processador. O SO deve controlar os processos. contexto de software e espaço de endereçamento. tempo do processador e área em disco. Um processo é formado por três partes. Um processo também pode ser definido como o ambiente em que o programa é executado. em função dos recursos disponíveis. um programa deve estar associado a um processo.Material de apoio para a realização do Segundo Seminário Arquitetura de Sistemas Operacionais Capítulo 5 PROCESSO 5. Por exemplo. o usuário tem a impressão de possuir o processador e demais recursos exclusivamente para si. A execução de um mesmo programa pode variar dependendo do processo no qual ele é executado.1 Introdução O processo é a base para implantação de um SO multiprogramável. Em um sistema multiusuário. ou seja. Este ambiente possui informações sobre a execução. 5. Em sistemas multiprocessados. 27 . compartilhar dados. A gerência de um ambiente multiprogramável é uma função exclusiva do SO. que juntas mantêm todas informações necessárias à execução de um programa (Figura 5. o SO deve interromper sua execução por falta de recursos. Todas informações importantes e necessárias à execução de um programa fazem parte de um processo. porém. cada usuário é associado a um processo. por grande parte da literatura técnica. Para que esta troca ocorra sem traumas. nada seja perdido.2 Estrutura do Processo Inicialmente. compartilhando. trocar informações e sincronizar sua execução. da memória e dos dispositivos de E/S. e no instante seguinte poderá estar executando um outro programa de outro usuário. caso um programa precise utilizar uma área em disco superior ao seu limite. Aqui abordaremos os principais conceitos relacionados aos processos. que deve controlar a execução dos diversos programas e o uso concorrente do processador. O termo processo surgiu após os SOs multiprogramáveis. Nos SOs multiprogramáveis. A falta de recursos pode impedir um programa de ser executado com sucesso. o uso do processador. sendo utilizado no lugar de tarefa ou job. Na verdade. para que no seu retorno. de quanto de recursos do sistema cada programa pode utilizar. com um conceito mais abrangente.

28 . Quando o processo perde a utilização da CPU. como o numero Maximo de arquivos abertos simultaneamente.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 Fig.2.2. é chamada de mudança de contexto. O contexto de hardware é fundamental nos sistemas multiprogramáveis. A troca de um processo por outro no processador. e consiste em salvar o conteúdo dos registradores do processo que esta saindo e carregá-los com os valores referentes ao do novo processo que será executado (Figura 5.1 – Estrutura do processo 5. A maior parte das informações do contexto de software do processo são provenientes de um arquivo do SO. Quando um processo está em execução. o seu contexto de hardware está armazenado nos registradores do processador. enquanto outras podem ser alteradas posteriormente. Neste arquivo.2 Contexto de software No contexto de software são especificadas as características e limites dos recursos que podem ser alocados pelo processo.1 Contexto de hardware O contexto de hardware guarda o conteúdo dos registradores do processador. o sistema salva as informações no contexto de hardware do processo. 5. gerenciado pelo SO.2). Muitas destas características são determinadas no momento da criação do processo. 5. prioridade de execução e tamanho do buffer dos dispositivos de E/S. são especificados os limites dos recursos que cada processo pode alocar. conhecido como arquivo de contas. executada pelo SO. Outras informações presentes no contexto de software são geradas dinamicamente ao longo da execução dos processos. onde o revezamento da CPU permite que os processos sejam interrompidos e posteriormente restaurados.

.  Privilégios Os privilégios ou direitos definem as ações que um processo pode fazer em ralação a ele mesmo.número máximo de arquivos abertos simultaneamente. arquivos. Caso uma quota seja insuficiente.2 – Mudança de contexto O contexto de software é composto por três grupos de informações sobre o respectivo processo: identificação. Alguns exemplos de quotas presentes nos SOs modernos: . .  Identificação Cada processo criado pelo sistema recebe uma identificação única (chamada de PID – Process IDentification). aos demais processos e ao SO. podem ser acessados. representada por um número e em alguns casos também através de um nome.número máximo de operações de E/S pendentes.tamanho máximo do buffer para operações de E/S. A UID permite implementar modelos de segurança.tamanho máximo de memória principal e secundaria que o processo pode alocar. que é atribuída ao processo no momento de sua criação. . Cada usuário possui uma identificação também única no sistema (representada pelo UID – User Identification). É através do PID que o SO e outros processos podem fazer referência a qualquer processo existente. 5. onde apenas os objetos (processos. . áreas de memória. o processo poderá ser executado lentamente. interrompido ou mesmo não ser executado. 29 . consultando e até alterando suas características. etc) que possuam um UID autorizado. subprocessos e threads que podem ser criados. quotas e privilégios.  Quotas As quotas são os limites de cada recurso do sistema que um processo pode alocar.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 Fig. O processo possui também a identificação do usuário ou do processo que o criou (owner).numero máximo de processos.

o SO mantém todas as informações sobre o contexto de hardware.Privilégios que afetam o próprio processo permitem que suas características possam ser alteradas. 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. contexto de software e espaço de endereçamento de cada processo (Fig. Privilégios que afetam o sistema são mais amplos e poderosos. entre outros. pois estão relacionados à gerência do ambiente. alteração de regras de segurança.2. 5. Já os privilégios que afetam os demais processos permitem. A Figura 5.2. que deve ser devidamente protegido do acesso dos demais processos.3 – Características da estrutura de um processo 5. A partir do PCB. no Windows 2000 a conta “administrador” e no Open VMS a conta “system”. Cada processo possui seu próprio espaço de endereçamento. A maioria dos SOs possui uma conta de acesso com todos privilégios disponíveis. modificação de parâmetros de configuração do sistema. limites alocados na memória principal e secundaria. como prioridade de execução.4 Bloco de controle do processo O processo é implementado pelo SO através de uma estrutura de dados chamada Bloco de controle de processos (Process Control Block – PCB). existe a conta “root”. alterar as de outros processos. alem da alteração de suas próprias características. 5. como a desativação do sistema. criação de outros processos privilegiados. etc. Nos sistemas Unix.3 Espaço de endereçamento O espaço de endereçamento é a área de memória pertencente ao processo onde as instruções e dados do programa são armazenados para execução. afim de o administrador gerenciar o SO.4). 5. 30 .3 ilustra as características da estrutura de um processo.

somente um processo estará sendo executado em um dado instante..5 – Lista de PCBs nos estados de pronto e espera. Fig.4 – Bloco de controle do processo (PCB) 5... ... existem vários processos no estado de pronto. Em geral. 5. existe a possibilidade de mais de um processo ser executado ao mesmo tempo.. . um processo não deve alocar o processador com exclusividade. seguindo uma política estabelecida pelo SO. Em sistemas com multi-processadores. 5. . . PCB# 5 PCB# 1 . O SO que determina a ordem e o critério pelos quais os processos neste estado devem utilizar o processador. .. ... 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 . ... Um processo ativo pode encontra-se em três estados diferentes:    Execução (running) – Um processo é dito no estado de execução quando está sendo processado pela CPU. Pronto (ready) – Um processo está no estado de pronto quando aguarda apenas para ser executado. . .. em função de eventos gerados pelo SO ou pelo próprio processo. ..5). .. . de forma que possa ser compartilhado. Em sistemas com apenas um processador.. Os processos passam por diferentes estados ao longo de seu processamento.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 . . PCB#4 Fig. .. Os processos devem estar ordenados pela sua importância (Figura 5.....3 Estados do Processo Em um estado multiprogramável. Os processos se alternam na utilização do processador. Este mecanismo é conhecido como escalonamento. . como também é possível um mesmo processo ser executado simultaneamente em mais de um processador (processamento paralelo).. . . . .. 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 . . 31 .. organizados em listas encadeadas..

Não existe a mudança de espera para execução diretamente (Figura 5. Portanto. Quando não houver espaço suficiente para todos os processos na memória principal. como o termino da fatia de tempo que o processo possui para sua execução (Figura 5. Uma técnica conhecida como swapping retira processos da memória principal e os traz de volta segundo seus próprios critérios.6 – Mudanças de estados do processo 32 . E s ta d o d e E x e c u ç ã o d b a c 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 Fig. Basicamente apenas quatro mudanças de estados podem ocorrer:     Pronto → Execução – Após a criação de um processo. quando o SO suspende por um período de tempo a execução de um processo Espera → Pronto – Ocorre quando uma operação solicitada é atendida ou o recurso esperado é concedido. Um evento externo é gerado. Neste caso. Execução → Espera – Um processo passa a estado de espera por eventos gerados pelo próprio processo. aguarda nova oportunidade para continuar seu processamento. Cada SO tem sua política de escalonamento. quando um evento acontece. podem estar ou não residentes em memória principal (Figura 5. 5. o término de uma operação de E/S ou a espera de uma data ou hora para continuar sua execução.4 Mudanças de Estado de Processo Um processo muda de estado durante seu processamento em função de eventos originados por ele próprio (eventos voluntários) ou pelo SO (eventos involuntários). O sistema organiza os vários processos no estado de espera também em listas encadeadas. os processos em estado de espera e pronto. Em alguns SOs. todos processos da lista associada ao evento são transferidos para o estado de pronto.7). Então. como uma operação de E/S. Por exemplo.5). 5. um processo em estado de pronto ou espera pode ser encontrado na memória secundária. aguardando para ser executado (Figura 5. Execução → Pronto – Ocorre através de eventos gerados pelo sistema.6 b).6 c).6 d). por exemplo. Em geral os processos são separados em listas de espera associadas a cada tipo de evento (Figura 5.6 a). o sistema o coloca em uma lista de processos no estado de pronto. Espera (wait) – Um processo no estado de espera aguarda por algum evento externo ou por algum recurso para prosseguir seu processamento. ou por eventos externos (Figura 5. este estado também pode ser chamado de bloqueado (blocked).

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 Fig. A partir da criação do PCB.8 – Mudanças de estado do processo (3) 33 .5 Criação e Eliminação de Processos Processos são criados e eliminados por diversas razões. Além destes três processos.8). No caso da eliminação de um processo. 5. todos recursos associados a ele são desalocados e o PCB eliminado pelo SO. o SO já reconhece a existência do processo. A criação de um processo ocorre quando o SO adiciona um novo PCB à sua estrutura e reserva espaço na memória para uso. passando a gerenciá-lo e associar programas ao seu contexto para serem executados. 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 Fig. 5.7 – Mudanças de estado do processo (2). a maioria dos SOs estabelece mais dois estados para os momentos de criação e eliminação de um processo (Figura 5. 5.

O conceito de thread foi estabelecido com a intenção de reduzir o tempo gasto na criação. Após a extração das informações. a concorrência na aplicação proporciona um tempo de espera menor entre consultas. e também tempo do processador é utilizado para este trabalho.término normal da execução. O uso de processos independentes é a maneira mais simples de se implementar a concorrência em sistemas multiprogramáveis. sendo estes novos independentes ou subprocessos. o processo pode deixar de existir.logon interativo: um processo é criado através do estabelecimento de uma sessão interativa por um usuário a partir de um terminal. A criação de um processo independente exige a locação de um PCB. .6 Processos Independentes. não existe vínculo entre o processo criado e seu criador. . o processo pai cede parte de suas quotas a ele. a comunicação e sincronização entre processos é considerada pouco eficiente.eliminação por um outro processo.  Criação (new) – Um processo é considerado em estado de criação. Subprocessos são criados dentro de uma estrutura hierárquica. quando o SO já criou um novo PCB. porém ainda não pode colocá-lo na lista de processos do estado de pronto. um banco de dados que recebe consultas constantes e freqüentes.criação pelo SO: o SO pode criar novos processos para oferecer algum serviço. Mais ainda. Além disso.9 ilustra cinco processos numa estrutura hierárquica.10). visto que cada processo possui seu próprio espaço de endereçamento. A criação de processos pode ocorrer por razões como: . . os subprocessos também podem compartilhar quotas com o processo pai. subprocessos e threads são maneiras diferentes de implementar a concorrência dentro de uma aplicação. Num ambiente multithread. Neste caso. os subprocessos também exigem seu próprio PCB. melhorando o desempenho da aplicação e beneficiando os usuários. software e espaço de endereçamento próprios. O subprocesso pode criar outros subprocessos. como o tempo total do processador. enquanto espera por uma operação de E/S. Ou seja. um único processo pode suportar múltiplos threads. mas como o PCB ainda existe. possuindo contextos de hardware. o SO pode recuperar informações sobre a contabilização de uso de recursos do processo. Esta limitação pode ocasionar que os processos criados permaneçam no estado de criação até que possam passar a ativos. uma vez que recursos são alocados toda vez que um processo é criado. Por exemplo. bem como economizar recursos do sistema como um todo.eliminação forcada por ausência de recursos disponíveis no sistema. O uso de processos independentes e subprocessos demanda consumo de recursos. Neste caso. também os subprocessos o farão. outro thread pode ser executado. porém. cada qual com seus contextos e espaços de endereçamento.criação por um outro processo: um processo já existente pode criar outros processos. ou seja. 5. Terminado (exit) – Um processo no estado terminado não poderá ter mais nenhum programa executado em seu contexto. O término de um processo pode ocorrer devido a: . 34 . Alguns SOs limitam o número de processos ativos em função dos recursos disponíveis ou de desempenho. quando o subprocesso é criado. Threads compartilham o processador da mesma maneira que um processo. Assim como os processos independentes. busca-se dividir o código em partes para trabalharem de forma cooperativa. A Figura 5. o SO ainda mantém suas informações de controle na memória. Se o processo deixar de existir. . Uma característica desta implementação é a de criar dependência entre processo criador e subprocesso. o processo criador é denominado processo pai e o novo processo é chamado de subprocesso ou processo filho. Aqui. Assim também ocorre no seu término (desalocação de recursos). Neste estado. cada qual associado a uma parte do código da aplicação (Figura 5. Subprocessos e Threads Processos. Neste caso não é necessário haver diversos processos para implementação da concorrência. E neste caso. o processo não é mais considerado ativo. eliminação e troca de contexto de processos nas aplicações concorrentes.

10 – Processo Multithread 5. Este assunto será melhor detalhado no capítulo seguinte. porém compartilha o mesmo contexto de software e espaço de endereçamento. impressoras e ate mesmo outros processos.7 Processos Foreground e Background Um processo possui sempre associado à sua estrutura. 35 .9 – Estrutura de Processos e Subprocessos Cada thread possui seu próprio contexto de hardware. Os canais de entrada (input) e de saída (output) de dados podem estar associados a terminais. pelo menos dois canais de comunicação por onde são realizadas todas as entradas e saídas de dados ao longo do seu processamento. 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 Fig.P ro ce sso A P ro ce sso C Pro ce sso B P ro ce sso E P ro ce sso D Figura 5. O compartilhamento deste último permite que a comunicação de threads dentro de um mesmo processo seja feita de forma simples e rápida. arquivos. 5.

12). Como visto em capítulo anterior. tornando-o menor e mais estável. Quando o canal de saída de um processo estiver associado ao canal de entrada de outro processo. 5. ambos os canais estão associados a um terminal com teclado.12 – Pipe 5. basta não ativar os processos responsáveis. é realizado através de processos background. se um processo A gera uma listagem e o processo B tem como função ordená-la. além de estar associado a aplicações de usuários. a interação com o usuário (Figura 5. Assim.Um processo foreground é aquele que permite a comunicação direta do usuário com o processo durante sua execução.11a). permitindo portanto.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 Figura 5. serviços de rede. 36 . o que permitirá liberar memória para os processos dos usuários. O processamento interativo tem com base processos foreground.8 Processos do Sistema Operacional O conceito de processo. os canais de E/S não estão associados a nenhum dispositivo de E/S interativo. Por exemplo. basta associar o canal de saída do processo A ao canal de entrada do processo B (Figura 5. (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. estamos retirando códigos de seu núcleo. No caso de um ou mais serviços não serem desejados. Aqui. O processamento batch. mouse e monitor. dizemos que existe um pipe ligando ambos os processos. Quando processos são utilizados para a implementação de serviços do sistema. mas em geral a arquivos de E/S.11b). a arquitetura microkernel implementa uso intensivo de processos que disponibilizam serviços para processos das aplicações e do próprio SO. por exemplo. podem também ser implementados na própria arquitetura do SO. Um processo background é aquele onde não existe a comunicação com o usuário durante seu processamento (Figura 5. Alguns serviços que o SO pode implementar através de processos são:   auditoria e segurança.

o processo retorna à espera do próximo sinal. ou seja. gerência de impressão. Um processo é definido como CPU-Bound (ligado à CPU). que se baseiam em leitura. O uso de sinais é fundamental para a gerência de processos. o SO gera um sinal ao processo. para interromper um programa. Aplicações comerciais. 5. pela forma de comunicação entre o usuário e o sistema. um processo que deve ser avisado periodicamente sobre uma tarefa a realizar. como monitorar uma fila de pedidos. uma rotina especial de tratamento é executada (Figura 5. 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. Este tipo de processo realiza poucas operações de leitura e gravação e é encontrado em aplicações científicas que efetuam muitos cálculos. E/S E/S U CP U C P (a ) C P U . 5. Após a realização da tarefa.b o u n d te m p o Fig. além de possibilitar a comunicação e sincronização entre processos. pois realiza grande número de operações de E/S (Figura 5.14 – Uso de Sinais Pro ce sso Os sinais podem ser usados em conjunto com temporizadores com a intenção de sinalizar ao processo algum evento associado ao tempo. gerência de jobs match. 5.13a). sinalizando a ocorrência do evento. quando passa a maior parte do tempo no estado de execução. normalmente lenta. contabilização de erros.9 Processos CPU-Bound e I/O-Bound Os processos podem ser classificados como CPU-Bond ou I/O-Bond. utilizando o processador (Figura 5. Por outro lado.13 – Processos CPU-bound x I/O-bound 5. Por exemplo. comunicação de eventos. Por exemplo.       contabilização do uso de recursos. 37 . O processo identificando o sinal. temporização.b o u n d te m p o (b ) I / O . de acordo dom a utilização do processador e dos dispositivos de E/S.14). ao se teclar simultaneamente as teclas Ctrl e C.10 Sinais Sinais são um mecanismo que permite notificar processos de eventos gerados pelo sistema operacional ou por outros processos. interface de comandos.C ] Fig.13b). devido ao uso de terminais. assim como também os processos interativos. um processo I/O-Bound (ligado à E/S) passa a maior parte do tempo no estado de espera. processamento e gravação são exemplos de processos deste tipo.

5. geralmente no núcleo do SO. os eventos são gerados a partir de outros processos com o propósito de sincronizar suas execuções. Apesar do mecanismo ser parecido com o do tratamento de interrupções e exceções. 38 . como as exceções. O tratamento de um sinal é bem semelhante ao de uma interrupção. interrupções. notifica o processo através de bits de sinalização localizados no seu PCB.15 – Sinais. Assim. o contexto do processo é salvo e a execução desviada para um código de tratamento de sinal (signal handler). O sinal está para o processo assim como as interrupções e exceções estão para o sistema operacional (Figura 5. Quando um sinal é tratado.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 Fig. A geração de um sinal ocorre quando o SO. é possível que o processo demore algum tempo até ser eliminado de fato. Os sinais ficam pendentes até que o processo seja escalonado. quando então serão tratados. o próprio processo pode tratar o sinal através de um tradutor de sinais definido no código do programa. limites de quotas excedidos e alarmes de tempo. O processo só será excluído do sistema quando for selecionado para execução. É possível também que um processo bloqueie temporariamente ou ignore por completo alguns sinais. na eliminação de um processo.A maior parte dos eventos associados a sinais são gerados pelo SO ou pelo hardware. Após a execução do tratador de sinais. Às vezes. Em outros casos. o programa pode voltar a ser processado do ponto onde foi interrompido. os propósitos são diferentes. interrupções e exceções. a partir da ocorrência de eventos síncronos ou assíncronos. o sistema ativa o bit associado a este evento. Por exemplo. Um processo não responde instantaneamente a um sinal.

O uso de processos independentes e subprocessos permite dividir uma aplicação em partes que podem trabalhar de forma concorrente. os SOs suportavam processos com apenas um thread (monothread). Outro problema a ser considerado é quanto ao compartilhamento do espaço de endereçamento. esta idéia não foi utilizada comercialmente. 6. não é simples. ao mesmo tempo em que estaria enviando e recebendo e-mails atuais. pois um processo pode ter diferentes partes de seu código sendo executadas em paralelo. Existem diferentes modelos para a implementação de threads em um SO. introduziu-se o conceito de processos “ligthweight” (peso leve). com o SO Mach. um processo com apenas um programa fazendo parte de seu contexto. o sistema dispensa tempo para desalocar recursos previamente alocados. aumentando o desempenho da aplicação (Figura 6. de software e espaço de endereçamento. sinais. A utilização comercial de sistemas multithreads tem crescido devido ao aumento de popularidade de sistemas com multiprocessadores. Na Figura 6. No caso do término do processo. ou seja. repetições e chamadas a procedimentos e funções.1). Além disso. cada funcionalidade do software implicaria na criação de um novo processo para atendê-lo. A presença do paralelismo introduz um novo conjunto de problemas. cada um com seu próprio contexto de hardware. aplicações concorrentes são implementadas apenas com o uso de múltiplos processos independentes ou subprocessos. um processo suporta apenas um programa em seu espaço de endereçamento. como memória e arquivos abertos. Em 1979. flexibilidade e custos devem ser avaliados.2 existem três processos monothread. Sempre que um novo processo é criado. como a comunicação e sincronização de threads. um usuário pode estar lendo seus e-mails antigos. Por exemplo. consumindo tempo de processador neste trabalho. e apenas na metade da década de 80. Em um ambiente monothread. memória compartilhada ou troca de mensagem. O desenvolvimento de programas que exploram os benefícios da programação multithread não é simples. onde o espaço de endereçamento de um processo era compartilhado por vários programas. Co o uso de múltiplos processos. ficou clara a separação entre os conceitos de processo e thread. Como os threads de um mesmo processo compartilham o mesmo espaço de endereçamento. Porém. Com o conceito de múltiplos threads (multithread). pode-se projetar aplicações concorrentes de forma eficiente. o compartilhamento de recursos comuns aos processos concorrentes. Atualmente. onde desempenho. Como cada processo possui seu próprio espaço de endereçamento.Material de apoio para a realização do Segundo Seminário Arquitetura de Sistemas Operacionais Capítulo 6 THREAD 6. o conceito de multithread pode ser encontrado em sistemas como Sun Solaris e Windows 2000. aumentando assim o desempenho da comunicação.1 Introdução Até o final dos anos 70. pois utiliza mecanismos como pipes. o sistema deve alocar recursos para cada processo. Neste ambiente. a comunicação entre threads não envolve mecanismos lentos de intercomunicação entre processos. semáforos.2 Ambiente Monothread Um programa é uma seqüência de instruções. Um problema é que o uso de processos no desenvolvimento de aplicações concorrentes demanda consumo de diversos recursos do sistema. compostas de desvios. do modelo cliente-servidor w dos sistemas distribuídos. 39 . a comunicação entre processos torna-se difícil e lenta.

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 Fig. encontra-se exemplos de implementações monothread. tem pelo menos um thread em execução. 6. O processo. neste ambiente. ou seja. como nas versões mais antigas dos sistemas VAX/VMS e Unix. 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 Fig. mas pode compartilhar o seu espaço de endereçamento com inúmeros outros threads. mas sim a threads. Mesmo em ambientes multiprogramáveis e multiusuários.3 existe apenas um processo com três threads de execução compartilhando o mesmo espaço de endereçamento.3 Ambiente Multithread Em um ambiente multithread. não existe a idéia de programas associados a processos. 6.2 – Ambiente monothread 6. com múltiplos threads. Th re a d Th re a d T h re a d Fig.1 – Concorrência com subprocessos e processos independentes São exemplos de sistemas monothread o MS-DOS e as primeiras versões do Windows. Na Figura 6.3 – Ambiente Multithread 40 . 6.

Quando o programa principal chama as duas sub-rotinas. 6. ou seja. caso haja mais de um processador. associando-os às sub-rotinas assíncronas. os três threads são executados concorrentemente. são criados os Thread_1 e Thread_2. Threads são implementados internamente através de uma estrutura de dados denominada bloco de controle do thread (Thread 41 . troca e eliminação de processos. porém cada thread possui seu contexto de hardware individual. threads compartilham o mesmo contexto de software e espaço de endereçamento com os demais threads.. Na Figura 6. e executados independentemente do programa principal. seu contexto hardware está armazenado nos registradores do processador. Ret Fig. um thread pode ser definido como uma sub-rotina de um programa que pode ser executada de forma assíncrona. com o conteúdo dos registradores gerais.. PC e SP.De forma simplificada. Para permitir a troca de contexto entre os diversos threads. executada paralelamente ao programa chamador.4 existe um programa principal que realiza a chamada de suas sub-rotinas assíncronas (Sub_1 e Sub_2). as informações são atualizadas no seu contexto de hardware. Neste processo. 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 . No momento em que o thread perde a utilização do processador. Por exemplo. cada um possui seu próprio contexto de hardware. No ambiente multithread. Inicialmente. enquanto um thread espera por uma operação de E/S. A grande vantagem no uso de threads é a possibilidade de minimizar a alocação de recursos do sistema. o processo é criado apenas com o Thread_0 para a execução do programa principal. alem de diminuir o overhead na criação.. Quando um thread está sendo executado. O programador deve especificar os threads.. 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 . um ambiente multithread possibilita a execução concorrente de sub-rotinas dentro de um mesmo processo. Threads compartilham o processador da mesma maneira que processos e passam pelas mesmas mudanças de estado (execução.4 – Aplicação Multithread (a) Dentro de um mesmo processo. outro thread pode ser executado. cada processo pode responder a varias solicitações concorrentemente ou mesmo simultaneamente. Assim. espera e pronto).

que em ambientes monothread estão fortemente relacionadas. Em ambientes cliente-servidor. múltiplos threads permitem que diversos pedidos sejam atendidos simultaneamente (Figura 6. enquanto aguarda pelo resultado. mais algumas informações relacionadas exclusivamente ao thread. Programas concorrentes com múltiplos threads são mais rápidos do que programas concorrentes implementados com múltiplos processos. enquanto a aplicação pode continuar realizando outras atividades.Control Block – TCB). enquanto threads compartilham o espaço dentro de um mesmo processo. ela pode ficar esperando indefinidamente. se comparado a ambientes monothreads. troca de contexto e eliminação dos threads geram menor overhead (Tabela 6. Em um ambiente multithread. Por outro lado. o processo é ao mesmo tempo a unidade de alocação de recursos e a unidade de escalonamento. sinais. Em um ambiente multithread. é fundamental que a aplicação implemente mecanismos de comunicação e sincronização entre threads. A grande diferença entre aplicações mono e multithread está no uso do espaço de endereçamento. 42 . atributos de segurança. como descritores de arquivos. onde todos os seus threads compartilham o espaço de endereçamento. o sistema não seleciona um processo para a execução. dos discos e outros periféricos pode ser feita de forma concorrente pelos diversos threads. permitindo que um thread possa alterar facilmente dados de outros. a comunicação entre eles pode ser realizada de forma rápida e eficiente. Como os threads dentro de um processo dividem o mesmo espaço de endereçamento. Aplicações como editores de texto. temporizadores. como prioridade. a unidade de alocação de recursos é o processo. A independência entre os conceitos de processo e thread permite separar a unidade de alocação de recursos da unidade de escalonamento. O uso de multithreads proporciona uma serie de benefícios. além do contexto de hardware. a fim de garantir o acesso seguro aos dados compartilhados na memória. Já para o processo que atende a solicitação.1). Como threads de um mesmo processo compartilham o mesmo espaço de endereçamento. Para que os threads trabalhem de forma cooperativa. a utilização de threads pode melhorar o desempenho da aplicação apenas executando tarefas em background enquanto operações E/S estão sendo processadas (Figura 6. Processos independentes e subprocessos possuem espaços de endereçamento individuais e protegidos. etc. Neste caso. planilhas. significando melhor utilização dos recursos computacionais disponíveis. Implementação Processo Processo Lightweight Thread Tempo de criação (μs) 1700 350 52 Tempo de sincronização (μs) 200 390 66 Tabela 6. Em algumas aplicações. Além disso. descritores de arquivos de dispositivos de E/S.6). Isso permite que o compartilhamento de dados entre threads de um mesmo processo seja mais simples e rápido. O TCB armazena. se uma aplicação solicita um serviço remoto. um thread pode solicitar o serviço remoto. Em um ambiente monothread. não existe qualquer proteção no acesso à memória. mas sim um de seus threads. threads são essenciais para solicitação de serviços remotos. aplicativos gráficos e processadores de imagem são especialmente beneficiados quando desenvolvidos com base em threads.5). pois operações de criação. Em ambientes monothread. estado de execução e bits de estado. cada thread representa uma unidade de escalonamento independente. threads em um mesmo processo podem compartilhar facilmente outros recursos.1 – Latência de Processos e Threads A utilização do processador.

6.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 Fig.6 – Aplicação multithread (c) 43 .5 – Aplicação Multithread (b) P ro ce sso se rvid o r 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 Fig. 6.

como o Sun Solaris Pthreads e o DECthreads para Digital OSF/1. Ambientes Arquitetura Distributed Computing Environment (DCE) Modo Usuário Compaq Open VMS versão 6 Modo Usuário MS Windows 2000 Modo Kernel Compaq Unix Modo Kernel Compaq Open VMS versão 7 Modo Kernel Sun Solaris versão 2 Modo Híbrido University of Washington FastThreads Scheduler Activations Tabela 6. Em 1995. Com este padrão. por uma combinação de ambos (modo híbrido) ou por um modelo conhecido como “scheduler activations”. deve existir uma biblioteca de rotinas que possibilite a aplicação realizar tarefas como criação/eliminação de threads.1 Threads em Modo Usuário Threads em modo usuário (TMU) são implementados pela aplicação e não pelo SO. todo o processo é colocado no estado de espera. o padrão POSIX P1003. TMU são rápidos e eficientes por dispensarem acessos ao kernel do SO. Para contornar esta limitação.4 a. 6. troca de mensagens entre threads e uma política de escalonamento.7). como na arquitetura microkernel.Não apenas aplicações tradicionais podem fazer uso dos benefícios do multithreading. o que influenciará no desempenho. pois o SO gerencia cada processo como se existisse apenas um thread. sendo responsabilidade exclusiva da aplicação gerenciar e sincronizar os diversos threads existentes. 6. A vantagem deste modelo é a possibilidade de implementar aplicações multithreads mesmo em SOs que não suportem threads. a biblioteca tem que possuir rotinas que substituam as rotinas bloqueantes por outras que não possam causar o bloqueio de um thread (rotinas não-bloqueantes). 44 . compartilhando o mesmo espaço de endereçamento do processo. Utilizando biblioteca. evitando assim a mudança de modo de acesso (usuário-kernel-usuário). Threads podem ser oferecidos por uma biblioteca de rotinas fora do núcleo do SO (modo usuário).2 – Arquitetura de threads para diversos ambientes operacionais Uma das grandes dificuldades para a utilização de threads foi a ausência de um padrão.1c foi aprovado e posteriormente atualizado para a versão POSIX 1003. Todo este controle é transparente para o usuário e para o SO. apresentada em capítulo anterior. além de outros recursos (Figura 6. na concorrência e na modularidade das aplicações multithread. O núcleo do SO também pode ser implementado com o uso desta técnica de forma vantajosa. o SO não sabe da existência de múltiplos threads. A Tabela 6.2 resume as diversas arquiteturas para diferentes ambientes operacionais.4. O padrão Pthreads é largamente utilizado em ambientes Unix. também conhecido como Pthreads.4 Arquitetura e Implementação O conjunto de rotinas disponíveis para que uma aplicação utilize as facilidades dos threads é chamado de pacote de threads. Os TMU possuem uma grande limitação. Neste modo. Existem diferentes abordagens na implementação deste pacote em um SO. Quando o thread chama uma rotina do sistema que o coloca em estado de espera (rotina bloqueante). mesmo havendo outros threads prontos para execução. Para isso. aplicações comerciais multithreading tornaram-se mais simples e de fácil implementação. pelo próprio núcleo do sistema (modo kernel). múltiplos threads podem ser criados.

conseqüentemente.O. várias mudanças no modo de acesso. Enquanto nos pacotes em modo usuário todo tratamento é feito sem ajuda do SO.8). Esta restrição limita drasticamente o grau de paralelismo da aplicação. Neste caso. execução e eliminação de um processo/thread. já que os threads de um mesmo processo podem ser executados em somente um processador de cada vez. ou seja. fundamental para implementação do tempo compartilhado.8 – Threads em Modo Kernel 45 . 6. os sinais enviados para um processo devem ser reconhecidos e encaminhados a cada thread para tratamento. escalonamento. através de chamadas a rotinas do sistema que oferecem todas as funções de gerenciamento e sincronização (Fig. Th rea d 4 Th rea d 3 Th re a d 2 Th rea d 1 Th rea d 0 6. O S. No caso de múltiplos processadores. sabe da existência de cada thread e pode escaloná-los individualmente. pacotes em modo kernel utilizam chamadas a rotinas do sistema e. não é possível que múltiplos threads de um processo possam ser executados em diferentes processadores simultaneamente. sem a mudança do modo de acesso (usuário-kernelusuário). Como o sistema reconhece apenas processos e não threads.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 Figura 6. os threads de um mesmo processo podem ser executados simultaneamente.4. No caso do recebimento de interrupções de clock. M odo u su á rio B ib lio te c a K ernel M odo kernel Figura 6. O grande problema para pacotes em modo kernel é o seu baixo desempenho. Em relação ao escalonamento em ambientes com múltiplos processadores.2 Threads em Modo Kernel Threads em Modo Kernel (TMK) são implementados diretamente pelo núcleo do SO. pois o sistema seleciona apenas processos para execução e não threads. para que se possa interromper o thread em execução e realizar a troca de contexto. A Tabela 6.7 – Threads em modo usuário Talvez um dos maiores problemas na implementação de TMU seja o tratamento individual de sinais.3 compara o desempenho de duas operações distintas envolvendo a criação. os sinais de temporização devem ser interceptados. esta limitação é crítica.

mas em vez de dividir os threads em modo usuário entre os de modo kernel. apresenta problemas herdados de ambas as implementações. Por exemplo. um TMK pode ter vários TMUs.9 – Threads em modo híbrido 6.840 441 37 Tabela 6. Cada camada implementa seu escalonamento de forma independente. não é necessário que o kernel seja ativado. 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 Figura 6. A maneira de alcançar um melhor desempenho é evitar as mudanças de modos de acesso desnecessárias (usuário-kernel-usuário). o que influenciará no desempenho. Caso um thread utilize uma chamada ao sistema que o coloque no estado de espera. este pacote combina o melhor das duas arquiteturas. em um determinado momento. Um TMU pode ser executado em um TMK.4.9). o núcleo do sistema troca informações com a biblioteca de threads utilizando uma estrutura de dados chamada scheduler activations (Figura 6. bastando que a própria biblioteca em modo usuário escalone outro thread.4 Scheduler Activations Os problemas apresentados no pacote de threads em modo híbrido existem devido à falta de comunicação entre threads em modo usuário e em modo kernel. O núcleo do SO reconhece os TMKs e pode escaloná-los individualmente. apesar de maior flexibilidade. e no instante seguinte ser executado em outro. e por sua vez. porem trocando informações quando necessário.Implementação Subprocessos Threads em Modo Kernel Threads em Modo Usuário Operação 1 (μs) 11. Os TMUs são mapeados em TMK enquanto o processo está sendo executado. O programador desenvolve a aplicação em termos de TMU e especifica quantos TMK estão associados ao processo.3 Threads em Modo Híbrido A arquitetura de threads em modo híbrido combina as vantagens de threads implementados em modo usuário (TMU) e threads em modo kernel (TMK). todos os TMUs são colocados no estado de espera.300 948 34 Operação 2 (μs) 1. O modo híbrido. TMU ou uma combinação de ambos (Figura 6. 46 . Introduzido no início dos anos 90.3 – Comparação entre tempos de latência TM U 5 TM U 4 TM U 3 TM U 2 TM U 1 TM U 0 6. O modelo ideal deveria utilizar as facilidades do pacote em modo kernel com o desempenho e flexibilidade do modo usuário. TMUs que desejam utilizar vários processos deve utilizar diferentes TMKs. O programador pode utilizar apenas TMK. Um processo pode ter vários TMKs.4.10). quando um TMK realiza uma chamada bloqueante. Isto é possível porque a biblioteca em modo usuário e o kernel se comunicam e trabalham de forma cooperativa.

oferecendo grande flexibilidade. Além das dificuldades naturais no desenvolvimento de aplicações concorrentes.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 Figura 6. Se um aplicativo realiza várias operações de E/S e trata eventos assíncronos. pois exige que a comunicação e o compartilhamento de recursos entre os diversos threads seja feito de forma sincronizada para evitar problemas de inconsistências e deadlock.5 Modelos de Programação O desenvolvimento de aplicações multithread não é simples. Já em ambientes estáticos. os threads são criados/eliminados conforme a demanda da aplicação. poderá ocorrer um overhead no sistema. Dependendo da implementação. Quando a criação/eliminação é dinâmica. a programação multithread aumenta seu desempenho até mesmo em ambientes com um fraco processador. uma aplicação deve permitir que partes diferentes de seu código sejam executadas em paralelo de forma independente. Um fator importante em aplicações multithread é o numero total de threads e a forma como são criados e eliminados. o número de threads é definido na criação do processo onde a aplicação será executada. Sistemas gerenciadores de banco de dados (SGBDs).10 – Scheduler activations 6. 47 . a definição do numero de threads pode ser dinâmica ou estática. servidores de arquivo ou impressão são exemplos onde o uso de múltiplos threads proporciona grandes vantagens e benefícios. Para obter os benefícios do uso de threads. ocasionando uma queda de desempenho. Se uma aplicação cria um numero excessivo de threads. o procedimento de depuração é bastante complexo.

. tornou-se possível estruturar aplicações de maneira que partes diferentes do código do programa pudessem ser executadas concorrentemente. PROGRAMA A. dispositivos de E/S e áreas de memória.1 apresenta um exemplo onde dois processos concorrentes compartilham um buffer para troca de informações. Em sistemas com múltiplos processadores. 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 Figura 7. Em sistemas com um único processador. . pode ser necessário que os processos comuniquem-se entre si. estendem-se estas vantagens com a possibilidade do paralelismo na execução de instruções. As primeiras notações para especificar uma concorrência em um programa foram os comandos FORK e JOIN. . Em ambos os casos. Mais uma vez. Em SOs multiprogramáveis estes mecanismos são fundamentais para garantir a integridade e confiabilidade na execução de aplicações concorrentes. . FORK B. .1 – Sincronização e Comunicação entre processos Os mecanismos que realizam a comunicação entre processos concorrentes e o acesso a recursos compartilhados são chamados de mecanismos de sincronização. 48 . . Para evitar este tipo de problema. os processos alternam sua execução segundo escalonamento estabelecido pelo SO e mesmo assim aplicações concorrentes obtêm melhoras em seu desempenho. JOIN B. 7. como arquivos registros. os processos deverão esperar até que o buffer esteja pronto para as operações de gravação e leitura. END. e só poderá ler um dado do buffer caso haja um dado a ser lido. END. através de mecanismos oferecidos pelo SO. Esta comunicação pode ser implementada através de variáveis compartilhadas na memória principal ou trocas de mensagens. capazes de comprometer a execução das aplicações. Este compartilhamento pode gerar situações indesejáveis.2 Aplicações Concorrentes Em aplicações concorrentes. O exemplo abaixo exemplifica de forma simplificada este uso. .1 Introdução Com o surgimento dos SOs multiprogramáveis. é necessário que haja sincronização entre a execução dos processos concorrentes.3 Especificação de Concorrência em Programas Existem varias notações para especificar quais partes de um programa que devem ser executadas concorrentemente. um processo só poderá gravar dados no buffer se ele estiver vazio. Aqui. 7. Este tipo de aplicação foi denominada de aplicação concorrente. A figura 7. PROGRAMA B.Capítulo 7 Sincronização e Comunicação entre processos 7. Os processos de uma aplicação concorrente podem compartilhar recursos. Técnicas mais recentes tentam expressar a concorrência no código dos programas de uma forma mais clara e estruturada. . . os processos devem ter suas ações sincronizadas. . .

2 – Concorrência em programas Para exemplificar o uso destes comandos. Temp2 := 35. Os comandos FORK e JOIN são poderosos e práticos. sendo utilizados de forma semelhante no Sistema Unix. PROGRAM Expressao.4 * 0.O Programa A começa a ser executado e.23) – (302 / 7) Os comandos situados entre PARBEGIN e PAREND são executados concorrentemente. PAREND. A figura 7. P ro ce sso p rin cip a l PARBEGIN Comando_1. que posteriormente foram chamados de COBEGIN e COEND. faz com que seja criado um outro processo para execução do Programa B. concorrentemente ao Programa A. ou seja. o Programa A só continuará a ser executado após o término da execução de B. VAR X. Aqui continuaremos a utilizar os comandos PARBEGIN e PAREND. Temp3 := 302 / 7. 49 . ao encontrar o comando FORK. O cálculo final de X só poderá ser realizado quando todas as variáveis dentro da estrutura estiverem sido calculadas. Comando_2. Temp2. . Temp3 : REAL.23. o programa chamado EXPRESSAO realiza um cálculo do valor da expressão descrita a seguir: X := SQRT (1024) + (35. WRITELN ('x = '. X). BEGIN PARBEGIN Temp1 := SQRT (1024). O comando JOIN faz com que o Programa A sincronize-se com o B. .4 * 0. END. Comando_n. Outra forma mais clara e simples de expressar concorrência em um programa é com o uso dos comandos PARBEGIN e PAREND (1965).2 demonstra o uso dos comandos PARBEGIN e PAREND. X := Temp1 + Temp2 .Temp3. 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 Figura 7. Temp1.

WRITE (Arq_Contas. que está sendo atualizado.300 Outro exemplo simples é a situação onde dois processos (A e B) executam um comando de atribuição. desta vez de crédito. Rb Sub 1. são apresentados alguns exemplos-problema de compartilhamento de recursos. que carrega o valor de X em Rb e subtrai o valor 1. Independente de qual processo atualize primeiro o saldo no arquivo.000 1. PROGRAM Conta_Corrente.000 1. Neste instante. lê o valor a ser depositado ou retirado (Valor_Dep_Ret) e.000 1.000 1. .x Considere que o Processo A carregue o valor de X no Registrador Ra.Ra Store Ra.7. O programa lê o registro do cliente no arquivo (Reg_Cliente). inicia-se o Processo B. o processo do segundo funcionário (Caixa 2) lê o registro do mesmo cliente. some 1. atribui o valor 1 a X e sobrepõe o valor anteriormente gravado pelo Processo ª O resultado final será inconsistente. Agora o Processo B é interrompido e o A volta a ser executado.Saldo := Reg_Cliente. Seria razoável pensar que no final das operações a variável continuasse valendo 2. READLN (Valor_Dep_Ret). . Antes de gravar o novo saldo no arquivo. porem nem sempre isso será verdade. o dado gravado estará inconsistente. temos: Processo A Load x. . Neste arquivo são armazenados os saldos de todos os correntistas do banco.000 1. e no momento em que vai armazenar o novo valor de X. Considerando processos concorrentes pertencentes a dois funcionários do banco que atualizam o saldo de um mesmo cliente simultaneamente. Reg_Cliente. Reg_Cliente). que atualiza o saldo bancário de um cliente após o lançamento de débito ou crédito no arquivo de contas-correntes Arq_Contas.000 800 1.000 1. Acompanhe: Caixa 1 1 1 2 2 2 1 2 Comando READ READLN := READ READLN := WRITE WRITE Saldo Arquivo 1. O processo do primeiro funcionário (Caixa 1) lê o registro do cliente e soma ao campo Saldo o valor do lançamento de débito.300 800 1. Reg_Cliente).x Processo B Load x. Processo A X: = X + 1 .4 Problemas de Compartilhamento de Recursos Para melhor compreensão da importância da sincronização entre processos concorrentes. atribuindo o valor 3 à variável X e finalizando sua execução.000 1. O primeiro problema é analisado a partir do programa Conta_Corrente. Processo B X: = X – 1.000 1. Suponha que inicialmente a variável X possua o valor 2. O Processo B retorna sua execução. para realizar outro lançamento. Decompondo em operações mais elementares.Rb Store Rb. usando uma linguagem de alto nível. Ra Add 1. seja interrompido. Resumindo: 50 . END.Saldo + Valor_Dep_Ret.000 800 1. READ (Arq_Contas. em seguida atualiza o saldo no arquivo de contas. a situação de compartilhamento do recurso pode ser analisada. O processo A soma 1 à variável X e o processo B subtrai 1 da mesma variável. .300 Valor Dep/Ret * -200 -200 * +300 +300 -200 +300 Saldo Memória 1.

Quando a escolha é aleatória. Uma solução bastante simples é a criação de filas de pedidos de alocação para cada recurso. para garantir a implementação da exclusão mútua.X X 2 2 2 2 3 1 Ra 2 3 * * 3 * Rb * * 2 1 * 1 Através destes exemplos. algumas soluções de hardware e software serão apresentadas. Isso se chama EXCLUSÃO MUTUA (Mutual Exclusion). 51 . Neste caso existem duas formas do sistema operacional determinar qual será a vez de quem. todos os outros que queiram acessar esse mesmo recurso deverão esperar. que faça tratamento de exclusão mútua.Rb Sub 1. Quando for uma escolha por prioridades. Da mesma forma. um processo de menor prioridade nunca receberá o acesso ao recurso.5.Processo A A B B A B Comando Load X. o processo que as desabilitou terá acesso exclusivo garantido. 7.X Store Rb.Ra Add 1. Diversas soluções foram criadas com este propósito. Ou por escolha aleatória ou por prioridades. Quando desenvolvemos um programa. ao sair da região crítica um protocolo de saída deverá ser executado. Sempre que um processo solicita um recurso. Quando o recurso é liberado. onde dois processos manipulem o mesmo arquivo ou a mesma variável de memória simultaneamente. este deverá terá uma seção chamada REGIÃO CRÍTICA (Critical Region). e ai este processo nunca executará sua rotina. Toda vez que um processo desejar executar instruções de sua região crítica. Quem determina as prioridades dos processos é o sistema operacional.Rb Store Ra. Existe o risco deste recurso nunca ficar pronto por já estar com problemas. Nesta região existe uma série de procedimentos e protocolos que o programa deverá fazer para que o sistema operacional libere o recurso para o mesmo. 7. antes de entrar em sua região crítica desabilite todas as interrupções externas e a reabilite após deixar a região critica.Ra Load X. Assim. conclui-se que quando dois ou mais processos compartilham um mesmo recurso. Uma possível falha na memória que impeça o acesso aos buffers e todo o sistema estará parado.. A região critica deve ser sempre usada quando seu programa for fazer uso de recursos que são passiveis de compartilhamento com algum outro suposto programa na memória.A Starvation A primeira situação indesejada é conhecida como starvation (ou espera indefinida). A exclusão mútua deverá agir apenas sobre os processos que estão concorrendo em um determinado recurso. alguns mecanismos devem evitar que este tipo de problema ocorra (conhecidos como race conditions – condições de corrida). A seguir. ainda existem duas situações que devem ser evitadas . Quando um recurso não está pronto para ser utilizado.1 Soluções de Hardware  Desabilitação de interrupções Faz com que o processo. com comentários sobre suas vantagens e desvantagens. existirá a probabilidade de um processo nunca ser escolhido. Diversas soluções foram propostas para garantir a exclusão mútua de processos concorrentes. enquanto um processo estiver acessando determinado recurso. É nela também que os processos encontram-se em um momento mais critico. o pedido é colocado no final da fila associada ao recurso.5.. obrigatoriamente devera executar antes um protocolo de entrada nessa região. 7.5 Exclusão Mútua Para que sejam evitados problemas desta natureza.B Sincronização condicional Sincronização Condicional é uma situação onde o acesso a um recurso compartilhado exige a sincronização de processos vinculada a uma condição de acesso. Ai todo o sistema fica esperando o recurso resolver sua vida. Um exemplo disto é o caso do uso de Buffers para leitura e gravação de dados feita pelos processos. pois qualquer erro ocorrido ali dentro pode fazer com que dois ou mais processos colidam gerando falhas e derrubando o sistema.5. porém. o sistema seleciona o primeiro processo da fila. os processos envolvidos devem fazer acesso aos recursos de forma sincronizada. o processo que vai acessar o recurso ficará em estado de espera até que o mesmo esteja pronto. Como a mudança de contexto de processos só pode ser realizada através de interrupções. utilizando o esquema FIFO (First In First Out). 7.

O uso desta instrução especial oferece vantagens. 52 . Este semáforo é útil para evitar que um processo na região crítica sem que haja recursos disponíveis no sistema. Primeiramente. o sistema pode garantir que não ocorrerão problemas de inconsistência em suas estruturas de dados durante a execução de algumas rotinas. Todos os processos da fila terão acesso ao recurso na ordem de chegada.O número de processadores e o tempo de execução dos processos. portanto esta solução deve ser implementada com muito critério.  Instrução test-and-set Muitos processadores possuem uma instrução especial onde um processo apenas lê o conteúdo de uma variável. existem outros fatores fundamentais para a solução de problemas de sincronização: . e armazena seu valor em outra área podendo neste caso fazer todas as manipulações necessárias e devidas sem precisar de prioridades ou esperar que a variável original seja liberada. Sempre que um processo usa um recurso qualquer. Todas as soluções que foram apresentadas para contornar estes inconvenientes apresentavam problemas da ESPERA OCUPADA. As primeiras soluções tratavam apenas da exclusão mútua para dois processos e. indicando quando este está sendo acessado por um outro processo. o mecanismo de clock do sistema é implementado através de interrupções. o sistema provavelmente teria seu funcionamento comprometido. Em sistemas com múltiplos processadores esta solução torna-se ineficiente devido ao tempo de propagação quando um processador sinaliza aos demais que as interrupções devem ser habilitadas ou desabilitadas. 7. inicialmente. Na espera ocupada.Um processo fora de sua região crítica não pode impedir que outros processos entrem em suas próprias regiões críticas.Um processo não pode permanecer indefinidamente esperando para entrar em sua região crítica. Outro tipo de semáforo usado é SEMÁFORO CONSUMIDOR onde ele pode informar ao processo se o buffer está cheio ou está vazio. apresentavam alguns problemas. trata-se de uma instrução invisível. ele será colocado em uma fila de espera associada ao semáforo aguardando sua vez de utilizar o recurso. Ela terá seu valor alterado quando o processo entra e quando sai da região crítica de forma que se um outro processo entrar em sua região critica ele possa checar antes este valor para saber se o recurso esta ou não disponível. pois a seleção do processo para o acesso ao recurso é arbitrária. fazendo o sistema ficar parado esperando que o mesmo tenha acesso a este respectivo recurso. . esta solução pode ser útil quando se deseja que a execução de parte do núcleo do SO ocorra sem que haja interrupção. pois qualquer engano pode gerar bugs em seu programa que o levem a falhas de sincronização ocasionando quedas e travamento geral do sistema. Assim garante-se que dois processos não manipulem uma variável compartilhada ao mesmo tempo. O semáforo pode ser usado também para implementar sincronizações condicionais. Quando o processo tiver seu acesso impedido.7 Semáforos O conceito de semáforos foi proposto em 1965. Além da exclusão mútua. SEMÁFORO CONTADOR é aquele que notifica os processos sobre o uso dos recursos. ou seja. todas vezes que um processo tenta entrar em sua região crítica ele são impedidas por já existir um outro processo usando o recurso. 7. Desta forma. possibilitando a implementação da exclusão mútua. que soluciona os problemas de compartilhamento de recursos. sendo apresentado como um mecanismo de sincronização que permitia implementar. . A evolução ocorreu até uma solução definitiva para a exclusão mútua para N processos. Esta instrução é chamada de test-and-set e tem como característica ser executada sem interrupção. esta solução apresenta limitações.2 Soluções de software Diversos algoritmos foram propostos na tentativa de implementar a exclusão mútua através de soluções de software. de forma simples. Isto consiste em um processo que necessita ser notificado sobre a ocorrência de um evento.5. Apesar destas limitações. a multiprogramação fica comprometida. a exclusão mútua sincronização condicional entre processos. Pode-se usar o semáforo para notificar este processo sobre a ocorrência deste evento.Apesar de simples. Ainda. uma vez a concorrência entre processos entre processos tem como base o uso da interrupção. A principal desvantagem é a possibilidade do starvation. este semáforo é incrementado sempre que um processo liberar um recurso ele será decrementado. O semáforo é uma variável que fica associada a um recurso compartilhado. O uso de semáforos exige do programador muito cuidado. Neste caso. Um caso mais grave poderia ocorrer caso um processo desabilitasse as interrupções e não tornasse a habilitá-las. como a simplicidade de implementação da exclusão mútua em múltiplas regiões críticas e o uso da solução em arquiteturas com múltiplos processadores.

Basicamente.8 Monitores Monitores são mecanismos de sincronização de alto nível que tornam mais simples o desenvolvimento de aplicações concorrentes. 7. São raras as linguagens que permitem tal implementação criando uma limitação para o uso deste recurso. Este conceito foi proposto em 1972.4 – Estrutura do monitor 53 . o monitor verifica se já existe outro processo executando algum procedimento do monitor. o compilador das outras demais linguagens deverão ser capazes de reconhecê-la e implementá-la. Como ele é escrito em uma linguagem de programação. variáveis e estrutura de dados definidos dentro de um módulo cuja finalidade é a implementação automática da exclusão mútua entre seus procedimentos. Toda vez que um processo chamar um destes procedimentos. Somente um processo pode estar executando um dos procedimentos do monitor em um determinado instante. 7. ficarão aguardando em uma fila de espera e enquanto isto. eles poderão executar outros procedimentos. quando não puderem acessar estes procedimentos. Para isto ele irá colocar todas as regiões críticas do programa em forma de procedimentos no monitor e o compilador se encarregará de garantir a exclusão mútua destes procedimentos.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 Fig. A implementação da exclusão mútua nos monitores é realizada pelo compilador do programa e não mais pelo programador. 2 F ila d e e n tra d a P r o c. são mecanismos de sincronização compostos de um conjunto de procedimentos.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 ) . 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.3 – Utilização do semáforo binário na exclusão mútua 7. Caso exista. A comunicação do processo com o monitor passa a ser feita através de chamadas a seus procedimentos e dos parâmetros passados para eles. n I n i c ia li z a ç ã o d e v a r iá v e is Fig. 1 P r o c. o processo fica aguardando a sua vez ate que tenha permissão para executá-lo. Outra característica do monitor é que os processos.

Para isto foi implementado o recurso de que o processo receptor ao recebê-la deverá enviar ao processo transmissor uma mensagem de recebimento. Existem duas formas de comunicação entre os processos: COMUNICAÇÃO SINCRONA e COMUNICAÇÃO ASSINCRONA. P ro ce sso A P ro ce sso A P ro ce ss o B Fig. 7. Existe também o ENDEREÇAMENTO INDIRETO que é um mecanismo que consiste no uso de uma área compartilhada. Dizemos que um processo está em Deadlock quando este para de responder porque está esperando por um evento que nunca ocorrerá.5 – Comunicação direta Pro cesso B M a ilb o x o u Po rt Fig. No sistema de troca de mensagens. Esta situação é conseqüência do problema da exclusão mútua. 7. Caso o transmissor não receber esta mensagem em um certo espaço de tempo ele irá retransmitir esta mensagem. pode estar esperando por outros recursos. Uma comunicação assíncrona é aquela em que o processo que envia a mensagem não espera notificação de recebimento. Esta característica chama-se ENDEREÇAMENTO DIRETO e só é permitida à comunicação entre dois processos.9 Troca de mensagens A troca de mensagens é um mecanismo de comunicação e sincronização entre os processos. A rotina SEND é a responsável pelo envio de uma mensagem para o processo receptor enquanto a rotina RECEIVE por receber a mensagem do processo transmissor.Um recurso não pode ser liberado de um processo porque outros processos desejam o mesmo recurso (Nãopreempção) . existe a possibilidade da mensagem se perder. implementado pelo sistema operacional através de duas rotinas do sistema SEND e RECEIVE. Existem as condições onde o Deadlock irá ocorrer: .6 – Comunicação indireta 7.Um processo pode ter de esperar por um recurso alocado a outro processo e vice-versa (Espera circular). onde as mensagens podem ser colocadas pelo processo transmissor e retiradas por qualquer processo.10 Deadlock O Deadlock existe em qualquer sistema multiprogramável.Cada recurso só pode estar alocado a um único processo em um determinado instante. Uma comunicação é dita Síncrona. (Exclusão mútua) .7. quando um processo envia uma mensagem e fica esperando até que o processo receptor leia a mensagem e mande a notificação de recebimento. 54 . . Bastando que o processo que deseja enviar uma mensagem enderece explicitamente o nome do receptor. pois uma mensagem somente poderá ser lida depois de ter sido enviada e ela somente será envidada após a ocorrência de um evento. A comunicação entre processos pode ser feita diretamente.Um processo além dos recursos já alocados. Tais procedimentos mesmo não sendo mutuamente exclusivos permitem a comunicação entre os processos e a sincronização entre eles.

Um exemplo deste tipo de detector é o próprio Gerenciador de tarefas do Windows que detecta o aplicativo que parou de responder ao sistema causado.10. É aquele processo em que você dá um Alt+Ctrl+Del no Windows e aparece uma janela informando o aplicativo que não responde. 55 . você poderá vir a deixá-lo instável ou travado. dentre as diversas situações já citadas pode ser feito um minucioso trabalho de determinar muito bem que recursos.8 – Exemplo de Deadlock 7.10. 7. A Detecção do Deadlock é um mecanismo que determina a existência deste e identifica os recursos envolvidos no problema.10.2 Detecção de Deadlock Em sistemas que não possuam mecanismos que previnam a ocorrência de deadlocks. possivelmente.1 Prevenção do Deadlock Para prevenir o Deadlock é preciso garantir que uma das quatro condições acima citada nunca ocorra. neste caso você manda finalizar o aplicativo e tudo voltará ao normal. como podemos ver logo abaixo: Fig. Muitas vezes este mecanismo não resolve e pelo contrário gera novos problemas.3 Correção do Deadlock Geralmente o problema é resolvido eliminando os processos envolvidos e desalojando os recursos para ele já garantidos. Se você finalizar um processo que esteja intimamente envolvido com o sistema operacional ou que esteja usando recursos de baixo nível do mesmo. Este aplicativo pode estar em um processo de Deadlock. 7. por um deadlock.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 Fig. quais recursos e quando estes recursos deverão ser disponibilizados aos processos. é necessário um esquema de detecção e correção do problema. 7.7 – Espera circular 7.

mas com vários processos simultaneamente o que aumentam as chances de colisões entre eles ou com os recursos do sistema. Hoje os sistemas operacionais são mais complexos rodando em maquinas mais críticas devido à velocidade de processamento tendo um maior numero de aplicações que rodam simultaneamente e demandando praticamente todos os recursos do sistema ao mesmo tempo.Abaixo vemos a caixa de dialogo do Windows que tentará fechar o processo que pode estar parado por falta de comunicação com o sistema. Os usuários sentem muita saudade dos computadores que rodavam o DOS nos bons tempos quando quase não davam problemas. 56 . 7. Fig.9 – Correção do Deadlock O problema do Deadlock é um problema que tende a tornar-se mais critico à medida que os sistemas operacionais evoluem no sentido de implementar o paralelismo e permitir a alocação dinâmica de um numero maior de recursos e a execução de um numero maior de processos simultaneamente. Mas é bom lembrar que o DOS era um sistema operacional monotarefa e monousuário onde praticamente tínhamos apenas um único processo rodando de cada vez. Todos os recursos do sistema estavam exclusivamente disponíveis para aquele processo e. Muitos destes programas trabalham não só com um. Neste caso não existiam os problemas que um ambiente multitarefa e multiusuário tem hoje. portanto ele tinha total e plena liberdade de fazer com estes o que bem entendia.