Você está na página 1de 170

SISTEMAS

OPERATIVOS

Eng. Agostinho Panzu


Mcp-Mcsa-Mcse- Mcp developer
agostinhopanzu@gmail.com
Plano geral

 Cap.1. Conceitos gerais


 Cap.2.Hardware e Software
 Cap.3.Concorrência
 Cap.4.Estructura do SO
 Cap.5.Processo e Thread
 Cap.6.Sincronizacão e comunicação entre processos
 Cap.7.Gerencia do CPU
 Cap.8.Grerencia da memória
 Cap.9.Gerencia da memória virtual
 Cap.10. Sistema de arquivos

Sistemas Operativos
Eng.Agostinho Panzu- 2019
Bibliografia

 Machado Maia, Sistemas operacionais,


Ed.LTC, Brasil.
 Tanembaum, Operating System.

Sistemas Operativos
Eng.Agostinho Panzu- 2019
SISTEMAS OPERATIVOS

Objectivo:

 Pretende-se que os estudantes deste curso adquiram


conhecimento sobre diversos conceitos relacionados com
os principais sistemas operativos da actualidade.

 No final, os estudantes deverão saber quais os objectivos


e princípios de funcionamento dos módulos que compõem
o sistema operativo, identificando vantagens e
desvantagens dos principais mecanismos e algoritmos
utilizados.

 Exemplificar com sistemas operativos mais relevantes da


actualidade, Unix, Windows.
SISTEMAS OPERATIVOS
SISTEMAS OPERATIVOS

Introdução aos SO

Questões de Base
 Para que servem os sistemas informáticos?
 Um sistema informático tem por objectivo executar uma ou várias aplicações para os seus
utilizadores.

 As aplicações são o que justifica o investimento que é efectuado no sistema através delas que quem
realiza o investimento espera ter o retorno na melhoria dos processos da empresa ou da organização.

 O que é necessário para executar uma aplicação?


 Um conjunto de recursos materiais onde a aplicação se executa – processador, memória, disco,
terminais, etc. – vulgarmente o hardware.

 um conjunto de recursos lógicos: programas, ficheiros, bases de dados, interfaces utilizador, etc. –
vulgarmente o software.

Sistemas Operativos
Eng.Agostinho Panzu- 2008
SISTEMAS OPERATIVOS

Introdução aos SO

O que é um Sistema Operativo?


 Um programa que actua como intermediários entre o utilizador e o hardware de um computador com
propósito de fornecer um ambiente para execução de programas.

u su ári os
p rog r ama do res p rog r ama s,
e a na li sta s si stem as e
ap li ca tivos

Usu ár ios

S
S
Sistema Operativo
iistema
stema Oper
Operaci
acional
onal

mem ór ia d iscos

Har dw ar e

fi tas
UCP

i mpr essora s mo ni tor es


SISTEMAS OPERATIVOS

Objectivo dos SO

 Um Gestor de recursos
 Controla todos os recursos do computador e fornece a base sobre o qual os programas
aplicativos são escritos
 Faz a gerência dos usuários para cada um dos recursos da máquina (ficheiros, memória principal
e periféricos)

 Uma Máquina Virtual


 Apresenta-se aos usuários como uma máquina equivalente ao hardware, porém muito
mais simples de programar
 Faz com que o interface dos demais programas com o hardware seja mais fácil
 Esconde a complexidade e detalhes internos inerente à manipulação e controlo dos
componentes de hardware
SISTEMAS OPERATIVOS

Introdução aos SO

Diferentes visões de um SO
u su á r i o s
 Visão do utilizador
 Chamadas do sistema – forma usada pelo programa para
solicitar um serviço do SO semelhante a chamada de uma sub-
rotina Sistema
Sist e m a OOperativo
p e r a ci o n a l

H ardw a re

 Visão do programador de Sistema


 Programas executados fora do núcleo do SO (Utilitários), normalmente confundidos
com o próprio SO: Compiladores, Interpretadores de comandos

 Visão do projectista do SO
 Forma pela qual o sistema implementa os serviços: Interrupções, excepção,
Chamadas Sistema
SISTEMAS OPERATIVOS

História dos SO
 Monitores de controlo
 Permitem o arranque do sistema, carregar programas, usar rotinas de I/O, eventualmente têm
um interpretador (Década 1950)

 Sistemas Batch
 Permitem carregar automaticamente o “JOB” (programa) seguinte, tem um controlo elementar da
memória e dos processos

 Sistemas Multiprogramados
 Permitem vários processos concorrentes (Década 1960)

 Sistemas Interactivos
 Permitem diálogo homem-máquina durante a execução

 Sistemas de Memória Virtual


 Gestão flexível da memória

 Sistemas Distribuídos
 Gerem várias máquinas (Década 1980)
SISTEMAS OPERATIVOS

Alguns conceitos básicos de SO

 Shell
 É um interpretador de comandos UNIX (ex: command.com – MS-DOS)
 Responsável pela interface, em modo de conversa, com o usuário

 Kernel
 É o núcleo do SO
 Contém rotinas críticas frequentemente usadas
 Responsável pela gerência do processador, tratamento de interrupções e
comunicação e sincronização de processos

 System call
 Conjunto de instruções fornecidas pelo SO que criam, apagam e usam diversos
objectos que estão sob gestão do SO
 É através do System Call que os programas dos usuários solicitam os serviços do
SO
 São “serviços” oferecidos pelo SO
SISTEMAS OPERATIVOS

Alguns conceitos básicos de SO

 Trap
 Altera a máquina do modo Usuário para o modo Kernel (supervisor)
 A maior parte dos processadores trabalham dois modos: usuário ( com limitações ao
acesso ao hardware) e Kernel (sem limitações de aceso)

 Máquinas Virtuais
 Cópias fiéis do hardware, incluindo os modos Kernel/Usuário, entrada/saída,
interrupções e tudo mais que a máquina real possui

 Spool
 Simultaneous Peripheral On Line
 Permite ler e gravar dados em disco, enquanto programas são executados
concorrentemente (ex: gerência de impressão)
SISTEMAS OPERATIVOS

Tipos de Sistemas Operativos

 Os tipos de Sistemas Operativos e sua evolução estão relacionados directamente com a evolução
do hardware e das aplicações por ele suportada

Tipos de
Sistemas Operativos

Sistemas Sistemas Sistemas


Monoprogramáveis/ Multiprogramáveis/ com múltiplos
Multitarefa
Monotarefa processadores

Sistemas Operativos
Eng.Agostinho Panzu- 2008
SISTEMAS OPERATIVOS

Sistema Monoprogramáveis/Monotarefa

 Este tipo de SO permite que apenas um aplicativo seja


executado de cada vez

UCP
CPU programa/
tarefa
 É caracterizado por permitir que o processador, a
memória e os periféricos permaneçam exclusivamente
dedicados à execução de um único programa Memória
MEMÓRIA Dispositivo
Dispositivos
Principal
PRINCIPAL dedeE/S
E/ S

 Enquanto o programa aguarda por um evento, o processador fica ocioso, sem realizar qualquer tarefa
útil

 A memória é subutilizada caso o programa não a preencha totalmente

Ex.: MS-DOS
SISTEMAS OPERATIVOS

Sistema Multiprogramáveis/Multitarefa

 Neste tipo de SO os recursos computacionais são


compartilhados entre diversos usuários e aplicações

programa/ programa/
UCP
UCP
tarefa CPU tarefa
 Enquanto um programa espera por um evento, programa/
tarefa

outros programas podem estar seno processados


neste mesmo intervalo de tempo Dispositivo
Memória
Memória
MEMÓRIA Dispositivos
Dispositivos
Principal
Principal
PRINCIPAL dede
deE/
E/SS
E/S

 Existe o compartilhamento da memória


e do processador
programa/ programa/
tarefa tarefa

programa/
tarefa
SISTEMAS OPERATIVOS

Sistema Multiprogramáveis/Multitarefa

 A partir do número de usuários que interagem com o sistema, podemos classificar os sistemas
multiprogramáveis como:

 Monousuário – onde existe apenas um único usuário interagindo com o sistema. Ex.: computadores
pessoais

 Multiusuário – possibilitam que diversos usuários se conectam ao sistema simultaneamente. Ex.:


ambientes interacivos
SISTEMAS OPERATIVOS

Sistema Multiprogramáveis/Multitarefa

 Os sistemas multiprogramáveis ou multitarefa podem ser classificados pela forma como são geridas
as suas aplicações

Sistemas
Multiprogramáveis/
Multitarefas

Sistemas Sistemas de Sistemas de


Batch Tempo compartilhado Tempo real
SISTEMAS OPERATIVOS

Sistema Multiprogramáveis/Multitarefa

 Sistemas Batch

 Programa executado através de cartões perfurados, produzindo


uma saída em fita
 Caracterizado por não exigir a interacção do usuário com a
aplicação

 Não existe sistemas dedicados a este tipo de processamento


 Actualmente os sistemas operativos simulam apenas o
processamento batch. Ex.: cálculos numéricos, ordenações
SISTEMAS OPERATIVOS

Sistema Multiprogramáveis/Multitarefa

 Sistemas de tempo compartilhado (time-sharing)


 Diversos programas são executado a partir da divisão do tempo do processador em pequenos
intervalos, denominados fatia de tempo (time-slice)
 Caso a fatia de tempo não for suficiente para conclusão do programa, esse é interrompido pelo SO e
substituído por um outro , enquanto fica aguardando por uma nova fatia

 Permite a interacção dos usuários com o sistema, basicamente através de terminais de vídeo e
teclado (interacção on-line)
 O sistema cria para cada usuário um ambiente de trabalho próprio, criando a ilusão de que o sistema
está dedicado, exclusivamente, a ele
SISTEMAS OPERATIVOS

Sistema Multiprogramáveis/Multitarefa

 Sistemas de tempo real (real-time)


 Difere dos sistemas de tempo compartilhado no tempo de resposta exigido na execução das tarefas
 Os tempos de resposta devem estar dentro de limites rígidos, que devem ser obedecidos, caso contrário
poderão ocorrer problemas irreparáveis

Um programa executa o tempo que for necessário, ou até que apareça outro programa prioritário
em função da sua importância no sistema
 A importância ou prioridade de execução é controlada pela própria aplicação e não pelo SO
 São usados em controlo de processos, como monitoramento de refinarias de petróleo, controlo de
tráfego aéreo
SISTEMAS OPERATIVOS

Sistema com Múltiplos processadores

 Caracterizam-se por possuírem duas ou mais CPU interligadas e trabalhando em conjunto

 Tem a vantagem de permitir que vários programas sejam executados ao mesmo tempo, ou que um
mesmo programa seja subdividido em partes para serem executadas simultaneamente em mais de um
processador

 A forma de comunicação entre as CPU e o grão de compartilhamento da memória e dos dispositivos de


entrada e saída, permite classifica-los em:

 Fortemente acoplados – existe apenas uma memória principal sendo compartilhada por todos os
processadores
 Fracamente acoplados – cada sistema tem a sua própria memória
SISTEMAS OPERATIVOS

Sistema com Múltiplos processadores

 Sistemas fortemente acoplado (multiprocessadores)

Memória
UCP Principal UCP

Dispositivos Dispositivos
de E/ S de E/ S
SISTEMAS OPERATIVOS

Sistema com Múltiplos processadores

 Sistemas fracamente acoplado (multicomputadores)

link de comunicação

UCP UCP

Memória Dispositivos Memória Dispositivos


Principal de E/ S Principal de E/ S
SISTEMAS OPERATIVOS
SISTEMAS OPERATIVOS

Hardware

 Um sistema computacional é um conjunto de circuitos electrónicos interligados, formado por


processadores, memórias, registadores, barramentos, monitores de vídeo, além de outros dispositivos
físicos (hardware)

 Todos os componentes de um sistemas computacional são agrupados em três subsistemas básicos,


chamado unidades funcionais:

 Processador ou Unidade Central de Processamento (CPU)


 Memória principal
 Dispositivo de entrada/saída

Pr ocessador / UCP

Unidade Lógica Unidade de


e Ari tméti ca Controle
Memór ia
Pr incipal
Registradores

Dispositivos
de E/ S
SISTEMAS OPERATIVOS

Hardware

Processador (UCP)
 É o responsável pela gestão de todo o sistema computacional controlando as operações realizadas
por cada unidade funcional

 Cada processador é composto por:


 Unidade de Controle (UC): responsável pela gerência das actividades de todos os componentes do
computador
 Unidade Lógica e Aritmética (ULA): responsável pela realização de operações lógicas e aritmética
 Registadores: são dispositivos com a função principal de armazenar dados temporariamente
(contador de instruções ou program counter, apontador da pilha ou stack pointer e registador de status
ou program status word)

Sistemas Operativos
Eng.Agostinho Panzu- 2008
SISTEMAS OPERATIVOS

Hardware

Memória principal 0
1
instrução ou dado

2
 Local onde são armazenados instruções e
dados

endereços
 Composta por unidades de acesso chamadas
células sendo cada célula composta por um
determinado número de bits

 O acesso ao conteúdo é realizado através da


especificação de um número chamado endereço
16
2 -1

célula = 8 bits
SISTEMAS OPERATIVOS

Hardware

Memória Cache
 Memória volátil de alta velocidade, porém com pequena capacidade de armazenamento

 Permite minimizar a disparidade com que o processador executa as instruções e a velocidade com
que os dados são obtidos na memória principal

 A memória Cache armazena uma pequena parte da memória principal

 Tem altos custo

 Modos de acesso a informação:


• Cache hit – dado na memória Cache
• Cache miss – dado na memória principal
SISTEMAS OPERATIVOS

Hardware

Memória Secundária

 Memória não volátil (fitas magnéticas, disco magnético e disco óptico)


 O acesso é lento se comparado à memória principal, porém o custo é baixo e a
capacidade de armazenamento é superior

Registradores

Memória Cache

maior maior custo e


capacidade de Memória Principal velocidade
armazenamento de acesso

Memória Secundária
SISTEMAS OPERATIVOS

Hardware

Dispositivos de entrada/saida
 São utilizados para permitir a comunicação entre o sistema computacional e o mundo externo

 Podem ser divididos em duas categorias:


■ Dispositivos utilizados como memória secundária (discos e fitas)
■ Dispositivos que servem para o interface usuário-máquina (teclado, monitor de vídeo, impressora)
SISTEMAS OPERATIVOS

Hardware

Barramento ou bus
 É o meio físico de comunicação entre ente as unidades funcionais de um sistema computacional

 Os barramentos são classificados em três tipos:


■ Barramento processador-memória : são de curta extensão e alta velocidade para que seja
optimizada a transferência de informação entre processadores e memórias

■ Barramento de E/S : possuem maior extensão, são mais lentos e permitem a conexão de
diferentes dispositivos

■ Barramento de backplane : tem a função de integrar os dois barramentos por forma optimizar o
seu desempenho
SISTEMAS OPERATIVOS

Hardware

Barramento processador-memória e E/S

Memória
Principal
UCP

Barramento processador-memória

Adaptador Adaptador
Barramento de E/ S

Barramento de E/ S
SISTEMAS OPERATIVOS

Hardware

Barramento backplane

Memória
Principal
UCP

Barramento processador-memória

Adaptador

de backplane
Barramento

Adaptador Adaptador
Barramento de E/ S

Barramento de E/ S
SISTEMAS OPERATIVOS

Hardware

Pipelining
 É a técnica mais utilizada para permite que um processador execute múltiplas instruções
paralelamente em estágios diferentes

P1 P2 P3 P4

Unidade de Analisador Unidade de Unidade de


busca da da busca dos execução da
instrução instrução dados instrução

P1 Instr.1 Instr.2 Instr.3 Instr.4 Instr.5 Instr.6 Instr.7

P2 Instr.1 Instr.2 Instr.3 Instr.4 Instr.5 Instr.6

P3 Instr.1 Instr.2 Instr.3 Instr.4 Instr.5

P4 Instr.1 Instr.2 Instr.3 Instr.4

tempo
SISTEMAS OPERATIVOS

Software

 Para que o hardware tenha utilidade prática, deve existir um conjunto de programas, utilizados como
interface entre as necessidades dos usuários e as capacidades do hardware
SISTEMAS OPERATIVOS

Software

Tradutor

 É um software que permite converter um programa-fonte (linguagem de montagem ou linguagem de


alto nível) num programa-objecto

programa fonte Tradutor programa objeto

Compilador
SISTEMAS OPERATIVOS

Software
Interpretador
 É um tradutor que não gera módulo-objecto
 O interpretador traduz e executa imediatamente cada instrução de um programa-fonte escrito em
linguagem de alto-nível (BASIC, PERL)

Linker (editor de ligação)


 É um utilitário (software) responsável por gerar, a partir de um ou mais módulos-objecto, um único
programa executável

 É também responsável pela relocação, que determina a região de memória na qual o programa será
carregado para execução
SISTEMAS OPERATIVOS

Software

Loader ou carregador
 Responsável por carregar na memória principal um programa para ser executado

 Em função do código gerado pelo Linker, o procedimento de carga é classificado em:


■ Loader absoluto: é preciso o loader conhecer o endereço de memória inicial e o tamanho do
módulo para realizar o carregamento

■ Loader recolocável: o programa pode ser carregado em qualquer posição da memória, e o


loader é responsável pela relocação no momento do carregamento
SISTEMAS OPERATIVOS

Software

Depurador (debugger)
 É um utilitário (software) que permite ao usuário acompanhar toda a execução de um programa a
fim de detectar erros na sua lógica

 Este utilitário oferece ao usuário recursos como:

■ Acompanhar a execução de um programa instrução por instrução


■ Possibilitar alteração e visualização do conteúdo das variáveis
■ Implementar pontos de paragem dentro do programa (breackpoint)
■ Especificar que, toda vez que o conteúdo de uma variável for modificado, o programa envia uma
mensagem (watchpoint)
SISTEMAS OPERATIVOS

Software

Activação/Desactivação do sistema
 A activação do sistema consiste em carregar o sistema operativo da memória secundária para a
memória principal (boot)

 O processo de desactivação do sistema (shutdown) permite que as aplicações e componentes do


SO sejam desactivados de forma ordenada, garantindo a sua integridade

Área do
Sistema
Operacional
boot
Sistema
Operacional

Disco Memória
Principal
SISTEMAS OPERATIVOS
SISTEMAS OPERATIVOS

Concorrência
Introdução
 Os SO podem ser vistos como um conjunto de rotinas que executam concorrentemente de fora
ordenada

 A possibilidade de o processador executar instruções em paralelo com operações de E/S permite que
diversas tarefas sejam executadas concorrentemente

 O processo de concorrência é o princípio básico para o projecto e implementação dos sistemas


multiprogramáveis

E/ S E/ S 1

UCP livre UCP 1 2 1

tempo tempo
(a) Sistema Monoprogramável (b) Sistema Multiprogramável
SISTEMAS OPERATIVOS

Concorrência

Interrupções e Excepção
 A ocorrência de eventos inesperados, durante a execução de um programa, ocasionando um desvio
forçado no seu fluxo de execução é denominado interrupção ou excepção.

 Podem ser consequência da sinalização de algum dispositivo de hardware externo ao processador ou da


execução de instruções do próprio programa

 A interrupção é o mecanismo que tornou possível a implementação da concorrência, desta forma o SO


sincroniza a execução de todas as suas rotinas e dos programas dos usuários, além de controlar dispositivos

 As Excepções são eventos causados por erros (divisão por zero) ou por requisição específica de um
programa do usuário (aplicativo) para que determinado serviço do SO seja efectuado
SISTEMAS OPERATIVOS

Concorrência

Interrupções e Excepção
 Rotina de Tratamento de Interrupções (RTI) é o tratamento que se dá quando um programa em
execução é interrompido e o controlo desviado para uma rotina responsável por tratar o evento ocorrido

 Quando ocorre uma interrupção, a CPU transfere a execução para uma posição fixa que contém o
endereço a rotina que deverá tratar aquela interrupção, este endereço fica no vector de interrupção

 Para que o programa possa posteriormente voltar a ser executado, um conjunto de informações deve ser
preservado (conteúdo dos registadores)
SISTEMAS OPERATIVOS

Concorrência

Interrupções e Excepção
Programa
Salva conteúdo
dos registadores
na pilha de controlo

Identifica a origem
do evento
Interrupção Rotina de
ou excepção tratamento
Obtém o endereço da
Rotina de tratamento

Restaura o conteúdo
dos registadores
Sistemas Operativos
Eng.Agostinho Panzu- 2008
SISTEMAS OPERATIVOS

Concorrência

Interrupções e Excepção
 A tabela descreve os mecanismos de interrupção realizado tanto por hardware como por software

Via Hardware 1. Um sinal de interrupção é gerado para o processador;

2. Após o término da execução da instrução corrente, o processador identifica o


pedido de interrupção;
3. O conteúdo dos registadores PC e de status são salvos;

4. O processador identifica qual a rotina de tratamento que será executada e


carrega PC com o endereço inicial desta rotina;
Via Software 5. A rotina de tratamento salva o conteúdo dos demais registadores do processador
na pilha de controlo de programa;
6. A rotina de tratamento é executada

7. Após o término da execução da rotina de tratamento, os registadores de uso


geral são restaurados, alem do registadores de status e o PC, retomando a
execução do programa interrompido
SISTEMAS OPERATIVOS

Concorrência

Operações de Entrada/saída
 O controlo das operações de E/S evoluíram nos seguintes domínios:
▌ Conjunto de Instruções de E/S
▌ Controlador
▌ Canal de E/S

█ Conjunto de instruções de E/S


■ A comunicação entre o processador e os periféricos é controlada por um conjunto de instruções
especiais, executadas pelo próprio processador
■ Estas instruções continham detalhes específicos de cada periférico (disco)
■ Esse modelo criava uma forte dependência entre o processador e os periféricos
SISTEMAS OPERATIVOS

Concorrência

Operações de Entrada/saída
█ Controlador
■ Permite ao processador agir de forma independente dos dispositivo de E/S
■ Simplificou as instruções de E/S, por não ser mais necessário detalhes de operação dos periféricos,
tarefa esta realizada pelo Controlador

■ Existem duas formas básicas pelas quais o processador faz a gerência das operações de E/S:
▬ E/S controlada por programa
▬ E/S controlada por interrupção
SISTEMAS OPERATIVOS

Concorrência

Operações de Entrada/saída
█ Controlador
▬ E/S controlada por programa
► O processador sincroniza com os periféricos (início e fim) da transferência de dados
► Durante transferência, o sistema fica permanentemente a testar o estado do periférico para saber se
a operação chegou ao fim
► Mantém o processador ocupado até o término da operação de E/S

▬ E/S controlada por interrupção


► Permite que o próprio controlador interrompa o processador aquando o término da transferência de
dados, por interrupção
► Permite a liberação do processador após a execução de um comando de leitura ou gravação
► Implementação de uma técnica de transferência de dados entre a memória principal e os periféricos
DMA (Direct Memory Acess)
SISTEMAS OPERATIVOS

Concorrência

Operações de Entrada/saída
█ Controlador

Memória
Principal
UCP

Controlador

Dispositivos de E/ S
SISTEMAS OPERATIVOS

Concorrência

Operações de Entrada/saída
█ Canal de E/S
■ Surge com a extensão da técnica DMA, introduzido pela IBM
■ O canal é um processador com capacidade de executar programas de E/S, permitindo o controlo total
sobre operações de E/S
■ As instruções de E/S são armazenadas na memória principal pelo processador, porém o canal é
responsável pela sua execução

■ O processador realiza uma instruções de E/S, instruindo o canal para executar um programa localizado
na memória (programa de canal)
■ O canal de E/S pode controlar múltiplos dispositivos através de diversos controladores

Sistemas Operativos
Eng.Agostinho Panzu- 2008
SISTEMAS OPERATIVOS

Concorrência

Operações de Entrada/saída
█ Canal de E/S

Memór ia
Pr incipal
UCP

Canal de E/ S

Contr olador Contr olador

Di spositivos de E/ S Di spositivos de E/ S
SISTEMAS OPERATIVOS

Concorrência

Buffering
 Esta técnica consiste na utilização de uma área da memória principal, denominada buffer, para
transferência de dados entre os dispositivos de entrada e a memória

 Permite que em uma operação de leitura/gravação seguir os seguintes passos:


■ O dado é transferido primeiro para o buffer, liberando imediatamente o dispositivo de entrada para uma
nova leitura
■ No mesmo instante o dispositivo realiza outra operação de leitura, enquanto o processador manipula o
dado localizado no buffer

 O buffering permite minimizar o problema da disparidade da velocidade de processamento existente


entre o processador e os dispositivos de E/S
SISTEMAS OPERATIVOS

Concorrência

Buffering
 A eficiência da técnica buffering possibilitou compatibilizar a diferença existente entre o tempo que o
processador executa instruções e o tempo que o dispositivo de E/S realiza as operações de
leitura/gravação

Memória
Principal

gravação gravação
UCP Controlador
Buffer
leitura leitura
SISTEMAS OPERATIVOS

Concorrência

Spooling (simultaneous peripheral operation on-line)


 Esta técnica, semelhante à técnica de buffering, utiliza uma área em disco (arquivo de spool) como se
fosse um grande buffer

 Os dados podem ser lido ou gravados em disco, enquanto programas são executados concorrentemente

 Actualmente presente na maioria dos SO, sendo utilizada no gerenciamento de impressão

Sistema Operacional

Programa Arquivo Impressora


de Spool
SISTEMAS OPERATIVOS

Concorrência

Reentrância
 É comum, em sistemas multiprogramáveis, vários usuários utilizem os mesmos aplicativos,
simultaneamente, como editores de texto e compiladores

 Esta utilização em simultâneo de uma aplicação pode originar desperdício de memória, pois aparecem
várias cópias de um mesmo programa executável na memória

 Reentrância é a capacidade de um código executável (código reentrante) ser compartilhado por diversos
usuários, exigindo que apenas uma cópia do programa esteja na memória

 Permite que cada usuário possa estar em um ponto diferente do código reentrante, manipulando dados
próprios, exclusivos de cada usuário.

 Proporcionam uma utilização mais eficiente a memória principal e aumento do desempenho do SO


SISTEMAS OPERATIVOS

Concorrência

Reentrância

usuário A usuário C

código reentrante
usuário B usuário D
área de dados do usuário A

área de dados do usuário B

área de dados do usuário C

área de dados do usuário D

Memória Principal
SISTEMAS OPERATIVOS
SISTEMAS OPERATIVOS

Estrutura dos SO

Introdução
 O SO é formado por um conjunto de rotinas que oferecem serviços aos usuários, às aplicações, e também
ao próprio sistema. Esse conjunto de rotinas é denominado núcleo do sistema ou Kernel

 Não se deve confundir o núcleo do sistema com aplicações, utilitários ou interpretadores de comandos,
que acompanham o SO

 As aplicações são utilizadas pelos usuários e escondem todos os detalhes da interacção com sistema

 Os utilitários, como compiladores e editores de texto, e interpretadores de comandos permitem aos


usuários e administradores uma interacção amigável com o sistema
SISTEMAS OPERATIVOS

Estrutura dos SO

Introdução
Aplicativos

Utilitários

Núcleo do
Núcleo do
Sistema Operacional
Sistema Operativo

Hardware
SISTEMAS OPERATIVOS

Estrutura dos SO

Componentes de um SO
 A funcionalidade de um SO divide-se:
█ Gerência de processos: Os SO multitarefa dão ao usuário a ilusão do paralelismo ou o
“pseudoparalelismo” por causa da forma como alocam o processador um pouco em cada processo

█ Gerência de memória: responsável pelo controlo e alocação de memória os processos activos


█ Sistema de arquivo: responsável pelo acesso e integridade dos dados residentes em memória
secundária (disco, fita, etc)
█ Controlo de I/O: responsável pelo controlo e execução de operações de Entrada/Saída, bem como
da optimização do uso dos periféricos
SISTEMAS OPERATIVOS

Estrutura dos SO

Serviços implementados por SO


■ Tratamento de interrupções e excepções
■ Criação e eliminação e processos e threads
■ Sincronização e comunicação entre processos e threads
■ Escalonamento e controlo os processos e threads
■ Gerência de memória
■ Gerência do sistema de arquivos
■ Gerência de dispositivos de E/S
■ Suporte a redes locais e distribuídas
■ Contabilização do uso do sistema
■ Auditoria e segurança do sistema
SISTEMAS OPERATIVOS

Estrutura dos SO

Chamadas ao SO (System Calls)


 Uma preocupação que surge nos projectos de SO é a implementação de mecanismos de protecção ao
núcleo do sistema e de acesso aos seus serviços

 Para salvaguardar o SO, interacção entre os processos dos usuários e o SO é feita através de system
calls

System Call
Núcleo do
Núcleo do
Sistema Operacional
Sistema Operativo

Aplicação Biblioteca Hardware


SISTEMAS OPERATIVOS

Estrutura dos SO

Chamadas ao SO (System Calls)

 As system calls podem ser divididas nos diferentes grupos funcionais:

FUNÇÕES SYSTEM CALLS


GERÊNCIA DE CRIAÇÃO E ELIMINAÇÃO DE PROCESSOS E THREADS
PROCESSOS E ALTERAÇÃO DAS CARACTERÍSTICAS DE PROCESSOS E THREADS
THREADS
SINCRONIZAÇÃO E COMUNICAÇÃO ENTRE PROCESSOS E THREADS
OBTENÇÃO DE INFORMAÇÕES SOBRE PROCESSOS E THREADS
GERÊNCIA DE ALOCAÇÃO DE DESALOCAÇÃO DE MEMÓRIA
MEMÓRIA
GERÊNCIA DE CRIAÇÃO E ELIMINAÇÃO DE ARQUIVOS E DIRECTÓRIOS
SISTEMA DE ALTERAÇÃO DAS CARACTERÍSTCAS DE ARQUIVOS E DIRECTÓRIOS
ARQUIVO
ABRIR E FECHAR ARQUIVOS
LEITURA E GRAVAÇÃO EM ARQUIVOS
OBTENÇÃO DE INFORMAÇÕES SOBRE ARQUIVOS E DIRECTÓRIOS
GERÊNCIA DE ALOCAÇÃO DE DESALOCAÇÃO DE DISPOSITIVOS
DISPOSITIVOS OPERAÇÃO DE ENTRADA/SAÍDA EM DISPOSITIVOS
OBTENÇÃO DE INFORMAÇÃO SOBRE DISPOSITIVOS
SISTEMAS OPERATIVOS

Estrutura dos SO

Modos de acesso
 Existem certas instruções que não podem ser colocadas directamente à disposição das aplicações, pois a
sua utilização indevida ocasionaria sérios problemas à integridade do sistema (actualização de um arquivo
em disco)

 As instruções que têm poder de comprometer o sistema são conhecidas como instruções privilegiadas, e
as que não oferecem risco ao sistema são conhecidas como instruções não-privilegiadas

 Para que uma instrução possa executar uma instrução privilegiada é necessário que no processador seja
implementado um mecanismo de protecção conhecido como modos de acesso
SISTEMAS OPERATIVOS

Estrutura dos SO

Modos de acesso
 Existem dois modos de acesso implementados pelos processadores:
■ Modo usuário: uma aplicação só pode executar instruções não-privilegiadas, tendo acesso a um
número reduzido de instruções
■ Modo Kernel ou Supervisor: a aplicação tem acesso a todo conjunto de instruções do processador

 Para melhor controlar o acesso às instruções privilegiadas é permitir que apenas o SO tenha acesso a
elas

 Sempre que uma aplicação necessita executar uma instrução privilegiada, a solicitação deve ser realizada
através de uma system call, que altera o modo de acesso do processador do modo usuário para Kernel
SISTEMAS OPERATIVOS

Estrutura dos SO

Modos de acesso

Sistemas Operativos
Eng.Agostinho Panzu- 2008
SISTEMAS OPERATIVOS

Estrutura dos SO

Arquitectura Monolítica
 Constituído por um núcleo monolítico, onde reside a maior parte da funcionalidade, designado por
Kernel

 Um conjunto de bibliotecas de funções sistemas que são ligados com o código das aplicações e que
permitem chamar os serviços o sistema

 A arquitectura monolítica pode ser comparada com uma aplicação formada por vários módulos

 Estes módulos são compilados separadamente e depois ‘linkados’, formando um grande programa
executável, onde os módulos podem interagir livremente
SISTEMAS OPERATIVOS

Estrutura dos SO

Arquitectura Monolítica
apli cação apli cação

Modo usuári o
Modo ker nel

System call

Har dw ar e
SISTEMAS OPERATIVOS

Estrutura dos SO

Arquitectura Monolítica
 Tem a desvantagem de tornar o seu desenvolvimento e sua manutenção bastante complexo

 Devido a sua simplicidade e bom desempenho, esta estrutura foi adoptada no projecto do MS-DOS e
os primeiros sistemas Unix
SISTEMAS OPERATIVOS

Estrutura dos SO

Arquitectura de Camadas

 Com o aumento da complexidade e do tamanho do código dos SO, técnicas de programação


estruturada e modular foram incorporadas no seu projecto

 Na arquitectura em camadas, o sistema é dividido em níveis sobrepostos, onde cada camada oferece
um conjunto de funções que podem ser utilizadas apenas pelas camadas superiores

 Neste tipo de implementação, as camadas mais internas são mais privilegiadas eu as mais externas
SISTEMAS OPERATIVOS

Estrutura dos SO

Arquitectura de Camadas
 Implementação de camadas no modelo OpenVMS

Sistemas Operativos
Eng.Agostinho Panzu- 2008
SISTEMAS OPERATIVOS

Estrutura dos SO

Arquitectura de Camadas
 A vantagem da estruturação em camadas é de isolar as funções do SO, facilitando a sua manutenção e
depuração

 Permite criar uma hierarquia de níveis de modos de acesso, protegendo as camadas mais internas

 Uma desvantagem para o modelo em camadas é o desempenho, ou seja cada nova tarefa implica uma
mudança no modo de acesso

 Actualmente, a maioria dos sistemas comerciais utiliza o modelo de duas camadas, onde
existem os modos de acesso Usuário (não-privilegiado) e Kernel (privilegiado)
SISTEMAS OPERATIVOS

Estrutura dos SO

Máquina Virtual
 O modelo de máquina virtual, ou virtual machine (VM), cria um nível intermediário entre o hardware e o
SO, denominado gerência de máquinas virtuais

 Este nível cria diversas máquinas virtuais independentes, onde cada uma oferece uma cópia virtual do
hardware, modos de acesso, interrupções, dispositivos de E/S

 Cada máquina virtual é independente das demais, o que torna possível que cada VM tenha o seu
próprio SO, fazendo como se todo o computador estivesse dedicado a cada um deles
SISTEMAS OPERATIVOS

Estrutura dos SO

Máquina Virtual

n
VM

VM

VM
Ap 1 Ap2 Apn

SO1 SO2 SOn

HV1 HV2 HVn

Gerência de Máquinas Virtuais

Hardware
Sistemas Operativos
Eng.Agostinho Panzu- 2008
SISTEMAS OPERATIVOS

Estrutura dos SO

Máquina Virtual
 Tem a vantagem de permitir a convivência de SO diferentes e criar um isolamento total entre cada VM,
garantindo a segurança de cada máquina

 A desvantagem desta arquitectura é a sua grande complexidade, devido a necessidade de se


compartilhar e fazer a gerência dos recursos de hardware entre as diversas VMs

 Permite suportar VM externas, onde as aplicações não precisam ser recompiladas para cada sistema
computacional, tornando-se independente do hardware e SO utilizado (JVM – Java Virtual Machine)

 A desvantagem deste modelo é o seu menor desempenho se comparado a uma aplicação compilada e
executada directamente em uma arquitectura específica
SISTEMAS OPERATIVOS

Estrutura dos SO

Máquina Virtual

Aplicação

Máquina Virtual Java

Sistema Operacional

Hardware
SISTEMAS OPERATIVOS

Estrutura dos SO

Arquitectura Microkernel
 Uma tendência nos SOs moderno é tornar o núcleo do SO o menor e mais simples possível

 Para a implementação desta arquitectura, os serviços do sistema são disponibilizados através de


processos

 Cada processo é responsável por oferecer um conjunto específico de funções, como gerência de
arquivos, gerência de processos, gerência de memória e escalonamento
SISTEMAS OPERATIVOS

Estrutura dos SO

Arquitectura Microkernel
 Sempre que uma aplicação deseja algum serviço, é realizada uma solicitação ao processo responsável

 A aplicação que solicita o serviço é chamada cliente (usuário/componente do SO), e o processo que
responde à solicitação é chamado de servidor

 A principal função do núcleo é a realização da comunicação entre o cliente e o servidor, que é feita
através de troca de mensagens

 Este modelo permite que os servidores executem em modo usuário, e apenas o núcleo executa em
modo kernel
SISTEMAS OPERATIVOS

Estrutura dos SO

Arquitectura Microkernel

em
ag
me

ns
me
ns
Modo usuário

ag
em
Modo kernel

Microkernel

Hardware
SISTEMAS OPERATIVOS

Estrutura dos SO

Arquitectura Microkernel

Vantagens:
 Se ocorrer algum erro em um servidor, este pode parar, ma o sistema não ficará inteiramente
comprometido, aumentando sua disponibilidade

 A criação de processos servidores dedicados a serviços específicos, tornam o núcleo menor, mais fácil
de depurar e mais confiáveis

 Na arquitectura microkernel, o SO passa a ter uma manutenção mais fácil e flexível


SISTEMAS OPERATIVOS

Estrutura dos SO

Arquitectura Microkernel

Desvantagens:
 Caracterizada pela difícil implementação

 A Problema no desempenho, devido à necessidade de mudança de modo de acesso a cada


comunicação entre cliente e servidores

 O que, na prática, é usualmente implementado é uma combinação do modelo de camadas com a


arquitectura microkernel

 O núcleo do sistema, além de ser responsável pela comunicação cliente e servidor, passa a incorporar
outras funções, como escalonamento, tratamento de interrupções e gerência de dispositivos

 A grande motivação desta arquitectura é a implementação de sistemas distribuídos (instituições de


ensino e centros de pesquisas)
SISTEMAS OPERATIVOS
Estrutura do Processo
• Estrutura do processo

Contexto de Contexto de
Software Hardware

Programa

Espaço de
Endereçamento
Contexto de Hardware
Sistema Operacional

Processo A Processo B

executando

Salva registradores do
Processo A

Carrega registradores do
Processo B

executando

Salva registradores do
Processo B

Carrega registradores do
Processo A

executando
Contexto de Software
• Identificação
• Quotas
• Privilégios
Espaço de Enderaçamento
• Estrutura de um processo
nome
PID registradores
gerais
owner (UID)

prioridade de
execução registrador PC

data/ hora
de criação Contexto de Contexto de
Software Hardware

tempo de registrador SP
processador

quotas
Programa registrador
privilégios de status
Espaço de
Endereçamento

endereços de memória
principal alocados
Bloco de Controle do Processo
• PCB
ponteiros

Estado do processo

Nome do processo
Prioridade do processo

Registradores

Limites de memória
Lista de arquivos abertos
..
..
..
..
Estados do Processo
• Execução (running)
• Pronto (ready)
• Espera (wait)
Estados do Processo
• Lista de PCBs
Lista de
processos
em estado
de pronto
.. ..
.. ..
.. ..
.. ..

PCB# 5 PCB# 1

Lista de
processos
em estado
de espera
.. .. ..
.. .. ..
.. .. ..
.. .. ..

PCB# 9 PCB# 2 PCB# 4


Mudanças de Estado
• Mudanças de estado do processo
Estado de Execução

b d

Estado de Espera Estado de Pronto


Mudanças de Estado
• Mudanças de estado do processo (2)
Estado de Execução

Estado de Espera Estado de Pronto


residente
não residente

Estado de Espera Estado de Pronto


Criação e Eliminação
• Mudanças de estado do processo (3)
Estado de Execução Estado de Término

Estado de Espera Estado de Pronto Estado de Criação


Processos Independentes,
Subprocessos e Threads
• Estrutura de processos e subprocessos
Processo A

Processo B Processo C

Processo D Processo E
Processos Independentes,
Subprocessos e Threads
• Processo multithread

Contexto Contexto Contexto


de hardware de hardware de hardware
Contexto de
software

Thread 1 Thread 2 Thread 3

Espaço de
endereçamento
Processos Foreground e
Background
• Processos foreground e background
(a) Processo Foreground

entrada saída

terminal terminal

(b) Processo Background

entrada saída

arquivo arquivo
de entrada de saída
Processo Foreground e
Background
• Pipe

saída do
Processo A
entrada do saída do
Processo A Processo B
entrada do
Processo B
Processo A Processo B
Processos do Sistema
• Auditoria e segurança
• Serviços de rede
• Contabilização do uso de recursos
• Contabilização de erros
• Gerência de impressão
• Gerência de jobs batch
• Temporização
• Comunicação de eventos
• Interface de comandos (shell)
Processos CPU e IO Bound
• Processos CPU x IO Bound

E/ S E/ S

UCP UCP

tempo tempo
(a) CPU-bound (b) I/ O-bound
Sinais
• Uso de sinais

interrupção sinal
Sistema Operacional

[ctrl-C]
Processo
Sinais
• Sinais, interrupções e exceções
Processo Processo

Sinais

Sistema Operacional

Interrupções
Exceções

Hardware
SISTEMAS OPERATIVOS
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Introdução
 Os processos de uma aplicação concorrente compartilham,
naturalmente, os recursos do sistema (arquivos, dispositivos E/S, espaço
de memória)

 A partilha de recursos entre processos pode ocasionar situações


indesejáveis, capazes de comprometer a execução das aplicações

 Para evitar esse tipo de problemas, os processos concorrentes devem


ter as suas execuções sincronizadas, com o objectivo de garantir o
processamento correcto dos programas
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Aplicações Concorrentes
 Numa aplicação concorrente, muitas vezes é necessário que
processos se comuniquem entre si

 Esta comunicação pode ser implementada através de diversos


mecanismos, como variáveis compartilhadas na memória principal ou
troca e mensagens

 Nesta situação, é necessário que os processos concorrentes tenham a


sua execuções sincronizada através de mecanismos do SO
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Aplicações Concorrentes

Sincronização

gr
av a
aç r
Processo ão i tu Processo
gravador le leitor

dado

Buffer
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Aplicações Concorrentes
 Exemplo:
• Dois processos concorrentes compartilham um buffer para trocar informações
através de operações de gravação e leitura
• Neste exemplo, um processo só pode guardar dados no buffer caso este não esteja
cheio
• Da mesma forma, um processo só poderá ler dados armazenados no buffer caso
exista algum dado para ser lido
• Em ambas situações, os processos deverão Sincronização
aguardar até que o buffer esteja pronto para
as operações (gravação/leitura) gr
av
aç ra
Processo ão i tu Processo
■ Os mecanismos que garantem a comunicação entre gravador le leitor
processos concorrentes e o acesso a recursos
compartilhados são chamadas mecanismos de
dado
sincronização
Buffer
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Especificação de Concorrência em Programas
 Existem várias notações utilizadas para especificar concorrência em
programas, ou seja, as partes de um programa que devem ser
executadas concorrentemente

 As técnicas mais recentes tentam expressão a concorrência no código


dos programas de uma forma mais estruturada e clara

 A primeira notação para a


especificação da concorrência em um
programa foram os comandos FORK
e JOIN (1963 )
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Especificação de Concorrência em Programas
 O programa A começa a ser executado e, ao encontrar o
comando FORK, faz com que seja criado um outro processo
para execução do programa B, concorrentemente ao
programa A

 O comando JOIN permite que o programa A sincronize-


se com B, ou seja, quando o programa A encontrar o
comando JOIN, só continuará a ser processado após o
término da execução do programa B

 Os comandos FORK e JOIN, ainda utilizados de forma semelhante nos


sistemas UNIX, são bastante fortes e práticos
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Especificação de Concorrência em Programas
 Uma das implementações mais simples de expressar concorrência em
um programa é a utilização dos comandos PARBEGIN e PAREND (1965)

 O comando PARBEGIN especifica que a sequência de comandos seja


executada concorrentemente em uma ordem imprevisível, através da
criação de um processo para cada comando

 O comando PAREND define um ponto de sincronização, onde o


processamento só continuará quando todos os processos ou threads
criados já tiverem terminado suas execuções
SISTEMAS OPERATIVOS
Processo
principal

PARBEGIN
Comando_1;
Comando_2;
.
.
Comando_n;
PAREND
Processo 1 Processo 2 Processo n

Processo
principal
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Especificação de Concorrência em Programas
 Para exemplificar o funcionamento dos comandos PARBEGIN e
PAREND em uma aplicação concorrente, o programa Expressão realiza o
cálculo do valor da expressão aritmética descrita a seguir:
X := SQRT (1024) + (35.4 * 0.23) - (302 / 7)
PROGRAM Expressao;
VAR X, Temp1, Temp2, Temp3 : REAL;
BEGIN
PARBEGIN
Temp1 := SQRT (1024);
Temp2 := 35.4 * 0.23;
Temp3 := 302 / 7;
PAREND;
X := Temp1 + Temp2 - Temp3;
WRITELN ('x = ', X);
END.
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Problema de Partilha de Recursos
1º Problema: Partilha de um arquivo em disco
■ O problema é analisado a partir de um programa Conta_Corrente, que actualiza o saldo de um cliente
após um lançamento de débito ou crédito no arquivo de contas-correntes Arq_Contas

■ Neste arquivo são armazenados os saldos de todos os clientes do banco


■ O programa lê o registo do cliente do arquivo (Reg_Cliente), lê o valor a ser depositado ou retirado
(Valor_Dep_Ret) e, em seguida, actualiza o saldo no arquivo de contas

PROGRAM Conta_Corrente;
.
.
READ (Arq_Contas, Reg_Cliente);
READLN (Valor_Dep_Ret);
Reg_Cliente.Saldo := Reg_Cliente.Saldo + Valor_Dep_Ret;
WRITE (Arq_Contas, Reg_Cliente);
.
.
END.
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Problema de Partilha de Recursos
1º Problema: Partilha de um arquivo em disco
■ Considerando processos concorrentes pertencentes a dois funcionários do banco que utilizam o saldo
de um mesmo cliente simultaneamente, a situação de partilha do recurso pode ser analisada
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Problema de Partilha de Recursos
2º Problema: Uma variável na memória principal sendo compartilhada
por dois processos
■ Consiste na situação onde dois processos (A e B) executam um comando de atribuição

■ O processo A soma 1 à variável X e o processo B diminui 1 da mesma variável que está a ser
compartilhada, inicialmente, a variável X possui o valor 2

Processo A Processo B
Atribuição
X := X + 1; X := X – 1;
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Problema de Partilha de Recursos
2º Problema: Uma variável na memória principal sendo compartilhada
por dois processos
■ A aplicação concorrente dos dois processos, em execução, faz com que o valor final de X seja
inconsistente

INTERRUPÇÃO

INTERRUPÇÃO
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Problema de Partilha de Recursos

Analisando os dois exemplos é possível concluir que em qualquer


situação, onde dois ou mais processos compartilham um mesmo recurso,
devem existir mecanismos de controlo para evitar esses tipos de
problemas, conhecidos como Condição de Corrida (race conditions)
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Exclusão Mútua
 A solução mais simples para evitar os problemas de partilha de recursos
é impedir que dois ou mais processos acedam o mesmo recurso em
simultâneo

 Para isso deverá haver exclusividade de acesso a um determinado


recurso compartilhado,

 Enquanto um processo tiver acesso a um determinado recurso, todos os


demais processos deverão guardar pelo término da operação, este
processo é chamado Exclusão Mútua (mutual exclusion)
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Exclusão Mútua
 A parte do código do programa onde é feito o acesso ao recurso
compartilhado é denominada região crítica (critical region)
 Se se conseguir evitar que dois processos entrem em simultâneo na região
crítica, os problemas decorrente da partilha de recursos serão evitados
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Exclusão Mútua
 Os mecanismos que implementam a exclusão mútua utilizam protocolos
de acesso à região crítica
 Toda vez que um processo deseja aceder ou sair da sua região crítica
deverá, obrigatoriamente executar (antes/depois) o protocolo de acesso (E/S)
BEGIN
.
.
Entra_Regiao_Critica;
Regiao_Critica;
Sai_Regiao_Critica;
.
.
END.

 Para garantir a implementação de exclusão mútua os processos


envolvidos devem fazer acesso aos recursos de forma sincronizada
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Exclusão Mútua
 Para garantir a exclusão mútua duas situações indesejadas devem ser
evitadas:

1ª Espera indefinida (Starvation): situação em que um processo nunca


consegue executar sua região crítica e, consequentemente, ter acesso a
recursos compartilhados (critérios de escolha aleatória/prioridades)
Solução: utilização de filas de pedidos de acesso para cada recurso (FIFO)

2ª Progresso: situação em que um processo fora da sua região crítica


impede que outros processos entrem nas suas próprias regiões críticas (o
recurso está livre porém, agarrado a um processo)
Solução: utilização de mecanismos mais eficazes de libertação do recurso
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Exclusão Mútua
 Diversas soluções foram desenvolvidas para garantir a exclusão mútua de
processos concorrentes:
■ Solução Hardware (Inibição de Interrupções e Instrução test-and-set)

■ Solução Software (Algoritmo de Dekker e Algoritmo de Peterson)

■ Mecanismos de Sincronização (Condicional, Semáforo e Monitores)


SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Solução Hardware
█ Inibição de Interrupções : consiste em desactivar todas as interrupções
antes de entrar em sua região crítica
 Como a mudança de contexto de processos só pode ser realizada através
de interrupções, o processo que as desactivou terá acesso exclusivo
garantido
BEGIN
.
Desabilita_Interrupcoes;
Regiao_Critica;
Habilita_Interrupcoes;
.
END.
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Solução Hardware
█ Inibição de Interrupções
LIMITAÇÕES:

• A multiprogramação seriamente comprometida (concorrência entre


processos)
• Um processo poderá desactivar as interrupções e não tornar a activa-las
• O mecanismo de clock do sistema é implementado através de
interrupções (sincronismo)
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Solução Hardware
█ Instrução test-and-set : permite ler uma variável, armazenar o seu
conteúdo em uma outra área e atribuir um novo valor a esta variável
 Podemos encontrar em muitos processadores e é caracterizada por ser
executada sem interrupções, desta forma é garantido que dois processos não
manipulem uma variável ao mesmo tempo

 A instrução test-and-set é uma instrução indivisível, ou seja, quando esta


a ser executada não pode ser interrompida, desta forma esta garantida a
exclusão mútua

Test_and_set (X, Y) ; valor lógico da variável Y é copiado para variável X


SISTEMAS OPERATIVOS

PROGRAM Test and Set;


█ Instrução test-and-set VAR Bloqueio : BOOLEAN;
PROCEDURE Pracesso A;
VAR Pode A : BOOLEAN;
BEGIN
1º Para coordenar o acesso concorrente a um recurso, a instrução REPEAT
test-and-set utiliza uma variável lógica global (Bloqueio) Pode A := True;
WHILE (Pode_A) DO
Test and Set (pode_A, Bloqueio);
Regiao_Critica_A;
Bloqueio := False;
2º Quando a variável Bloqueio for falsa, qualquer processo deverá UNTIL True;
alterar o seu valor para verdadeiro (test-and-set), e assim ter acesso END;
ao recurso de forma exclusiva PROCEDURE Processo B;
VAR Pode B : BOOLEAN;
BEGIN
REPEAT
Pode B := True;
WHILE (Pode_B) DO
3º Ao terminar o acesso, o processo deve simplesmente retomar o Test_and_Set (pode_B, Bloqueio);
valor da variável para falso, liberando a acesso ao recurso Regiao_Critica_B;
Bloqueio := False;
UNTIL True;
END;
BEGIN
 A principal desvantagem é a possibilidade de Starvation, pois a
Bloqueio := False;
PARBEGIN
selecção do processo para o acesso ao recurso é arbitrário Pracessa A;
Processa B;
PAREND;
END.
SISTEMAS OPERATIVOS
PROGRAM Algoritmo_4;
Solução Software VAR CA,CB : BOOLEAN;
PROCEDURE Processo_A;
BEGIN.
█ Algoritmo Dekker REPEAT
CA := true;
WHILE (CB) DO
BEGIN

 O algoritmo de Dekker apesar de garantir a exclusão mútua e não CA := false;


{ pequeno intervalo de tempo aleatorio }
gerar bloqueio simultâneo dos processos, uma nova situação CA := true
indesejável pode ocorrer eventualmente END;
Regiao_Critica_A;
CA := false;
UNTIL False;
END;
PROCEDURE processo_B;
BEGIN
REPEAT
CB := true;
 No caso de os tempos aleatórios serem próximos e a WHILE (CA) DO
BEGIN
concorrência gerar uma situação onde os dois processos alterem as CB := false;
variáveis CA e CB para falso, neste caso nenhum dos dois { pequeno intervalo de tempo aleatorio }
processos conseguirá executar sua região crítica CB := true;
END;
Regiao_Critica_B;
CB := false;
UNTIL False;
END;
BEGIN
CA := false;
CB := false;
PARBEGIN
Processo_A;
Processo B;
PAREND;
END.
SISTEMAS OPERATIVOS

Solução Software PROGRAM Algoritmo_Peterson;


VAR CA,CB: BOOLEAN;

█ Algoritmo Peterson Vez : CHAR;


PROCEDURE Processo A;
BEGIN
REPEAT
CA := true;
 O algoritmo proposto apresenta uma solução para o Vez := 'B';
problema da exclusão mútua entre dois processos que pode WHILE (CB and Vez = 'B') DO (* Nao faz nada *);
Regiao_Critica_A;
ser facilmente generalizada para ocaso de N processos
CA := false;
Processamento A;
UNTIL False;
END;
PROCEDURE Processo_B;
BEGIN
 Este algoritmo para além das duas variáveis de condição (CA REPEAT
e CB) que indica o desejo de cada processo entrar na sua região CB:= true;
crítica, introduz a variável Vez para resolver os conflitos gerados Vez := 'A';
WHILE (CA and Vez = 'A') DO (* Nao faz nada *);
pela concorrência Regiao_Critica_B;
CB := false;
Processamento B;
UNTIL False;
END;
BEGIN
CA := false;
CB := false;
PARBEGIN
Processo_A;
Processo_B;
PAREND;
END.
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Mecanismos de Sincronização
 Apesar das soluções de hardware e software implementarem exclusão
mútua, todas possuem uma deficiência conhecida como espera ocupada
 Na espera ocupada toda a vez que um processo não consegui entrar na
região crítica (por estar ocupada), o processo permanece em looping,
testando uma condição, até que lhe seja permitido o acesso

 O estado de looping consome tempo ao processador desnecessariamente,


podendo ocasionar problemas ao desempenho do sistema

 A solução para o problema de espera ocupada foi a introdução de


mecanismos de sincronização que permitem que um processo, quando não
pudesse aceder a sua região crítica, fosse colocado em estado de espera
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Sincronização Condicional
 Sincronização condicional é uma situação onde o acesso ao recurso
compartilhado exige a sincronização de processos vinculada a uma condição
de acesso (variável de condição)

 Um recurso pode não se encontrar pronto para uso devido a uma condição
específica, neste caso, o processo que deseja ter acesso ao recurso deverá
permanecer bloqueado até que o recurso fique disponível

 Um exemplo clássico desse tipo de sincronização é a comunicação entre


dois processos através de operações de gravação e leitura em um buffer,
onde os processos geram informações utilizadas por outros processos
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Sincronização Condicional
SISTEMAS OPERATIVOS
PROGRAM Produtor_Consumidor_1;
Sincronização Condicional CONST TamBuf = (* Tamanho qualquer *);
TYPE Tipo_Dado = (* Tipo qualquer *);
VAR Buffer:ARRAY[1..TamBuf] OF Tipo_Dado;
Dado : Tipo_Dado;

 No problema do Produtor/Consumidor ou do buffer


Cont : 0..TamBuf;
BEGIN
limitado, o recurso compartilhado é o buffer, definido no
Cont := 0;
algoritmo com o tamanho TamBuf, e sendo controlado
PARBEGIN
pela variável Cont
Produtor;
Consumidor;
PAREND;
END.
 Sempre que a variável Cont for igual a 0 (buffer vazio), PROCEDURE Produtor;
o processo Consumidor deve aguardar até que se grave BEGIN
um dado REPEAT
Produz_Dado (Dado);
WHILE (Cont = TamBuf) DO (*Nao faz nada*);
Grava_Buffer (Dado, Cont);
 Quando a variável Cont for igual a TamBuf (buffer Cont := Cont + 1;
cheio), o processo Produtor deve aguardar a leitura de UNTIL False;
um novo dado END;

PROCEDURE Consumidor;
BEGIN
 Apesar do algoritmo resolver a questão da REPEAT
sincronização condicional, o problema da espera WHILE (Cont = 0) DO (* Nao faz nada *);
(looping) ocupada persiste, sendo somente solucionado Le_Buffer (Dado);
pelos mecanismos de sincronização semáforos e Consome_Dado (Dado, Cont);
monitores Cont := Cont - 1;
UNTIL False;
END;
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Semáforos
 O conceito de semáforo (Djikstra-1965) é um mecanismo de sincronização
que permite implementar, de forma simples, a exclusão mútua e a
sincronização condicional entre processos
 Um semáforo é uma variável inteira (não negativa), que pode ser
manipulada por duas instruções indivisíveis : DOWN e UP (P e V por Dijkstra)

 A instrução UP incrementa uma unidade ao valor do semáforo, enquanto


que a instrução DOWN faz o decremento da variável (processador)
 A instrução DOWN ao executar um semáforo com valor 0, faz com que o
processo entre no estado de espera

 Os semáforos podem ser classificados como binários ou mutexes (0 ou


1) ou como contadores (podem assumir qualquer valor positivo, além do 0)
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
█ Exclusão Mútua Utilizando Semáforos
 A exclusão mútua é implementado através de um semáforo binário,
associado a um recurso compartilhado, tem como principal vantagem a não
ocorrência da espera ocupada
 As instruções DOWN e UP funcionam como protocolos de E/S na região
crítica, ou seja, quando o valor semáforo é igual a 1 indica que nenhum
processo está utilizando o recurso e a 0 que o recurso está em uso
 Sempre que deseja entrar na região crítica, o processo executa uma
instrução DOWN: se semáforo = 1, decrementa e entra; se semáforo = 0, não
entra e fica no estado de espera
 Sempre que deseja sair da região crítica, o processo executa uma
instrução UP, incrementando o valor do semáforo e liberando o acesso ao
recurso
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
█ Exclusão Mútua Utilizando Semáforos
 Se um ou mais processos estiverem a espera pelo uso do recurso
(operações DOWN pendentes), o sistema seleccionará um processo na fila
de espera associado ao recurso e altera o seu estado para pronto
Processo deseja entrar
na região crítica

Semáforo = S

DO
0)

W
>
(S

N
N

(S
W

=
O

0)
D

UP (S) - processo sai


da região crítica

Libera processo
da fila de espera
Processo acessa Fila de espera
a região crítica de processos
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
█ Exclusão Mútua Utilizando Semáforos
 As instruções DOWN e UP, aplicadas a um semáforo S, em sintaxe Pascal
SISTEMAS OPERATIVOS

█ Exclusão Mútua Utilizando Semáforos


PROGRAM Semaforo 1;
VAR s : Semaforo := 1; (* inicializacao do semaforo *)
PROCEDURE Processo A;
BEGIN
REPEAT
DOWN (s);
Regiao_Critica_A;
UP (s);
UNTIL False;
END;
PROCEDURE Processo B;
BEGIN
REPEAT
DOWN (s);
Regiao_Critica_B;
UP (s);
UNTIL False;
END;
BEGIN
PARBEGIN
Processo A;
Processo_B;
PAREND;
END.
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
█ Sincronização Condicional Utilizando Semáforos
 Um exemplo deste tipo de sincronização PROGRAM Semaforo 2;
ocorre quando um processo solicita uma VAR Evento : Semaforo:= 0;
operação de E/S PROCEDURE Solicita Leitura;
BEGIN
 O pedido faz com que o processo execute DOWN (Evento);
END;
uma instrução DOWN no semáforo, e fique no PROCEDURE Le_Dados;
estado de espera, até que a operação seja BEGIN
completada UP (Evento);
END;
 Quando a operação termina, a rotina de BEGIN
PARBEGIN
tratamento de interrupção executa um UP, Solicita_Leitura;
liberando o processo do estado de espera Le_Dados;
PAREND;
END.
SISTEMAS OPERATIVOS

█ Sincronização Condicional e
PROGRAM Produtor Consumidor 2;
CONST TamBuf = 2;
TYPE Tipo_Dado = (* Tipo qualquer *);

Exclusão Mútua Utilizando Semáforos VAR Vazio: Semaforo := TamBuf;


Cheio : Sernaforo := 0;
Mutex : Sernaforo := 1;
Buffer: ARRAY [1..TarnBuf] OF Tipo_Dado;
 O programa utiliza três semáforos, um binário (exclusão mútua) e Dado_I: Tipo_Dado;
dois contadores (sincronização condicional) Dado 2 : Tipo_Dado;
PROCEDURE Produtor;
BEGIN
REPEAT
 O semáforo binário Mutex permite a execução das regiões críticas Produz_Dado (Dado_I);
DOWN (Vazio);
(Grava_Buffer e Le_Buffer) DOWN (Mutex);
Grava_Buffer (Dado_I, Buffer) ;
 Os semáforos contadores (Vazio e Cheio) representam se o Buffer UP (Mutex);
UP (Cheio);
esta cheio para ser lido ou vazio para ser gravado UNTIL False;
END;
PROCEDURE Consurnidor;
BEGIN
 Quando o semáforo Vazio for igual a 0, significa que o buffer esta REPEAT
DOWN (Cheio);
cheio e o processo produtor deverá aguardar até que o consumidor DOWN (Mutex);
leia algum dado Le_Buffer (Dado_2, Buffer);
UP (Mutex);
UP (Vazio);
 Quando o semáforo Cheio for igual a 0, significa que o Buffer está Consorne_Dado (Dado_2);
vazio e o consumidor deverá aguardar até que o produtor grave UNTIL False;
END;
algum dado BEGIN
PARBEGIN
Produtor;
Consurnidor;
PAREND;
END.
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
█ Sincronização Condicional
e Exclusão Mútua Utilizando Semáforos
PRODUTOR CONSUMIDOR VAZIO CHEIO MUTEX PENDENTES

* * 2 0 1 *
* DOWN (Cheio) 2 0 1 Consumidor
DOWN (Vazio) DOWN (Cheio) 1 0 1 Consumidor
DOWN (Mutex) DOWN (Cheio) 1 0 0 Consumidor
Grava DOWN (Cheio) 1 0 0 Consumidor
Buffer
UP (Mute x) DOWN (Cheio) 1 0 1 Consumidor
UP (Cheio) DOWN (Cheio) 1 1 1 *
UP (Cheio) DOWN (Cheio) 1 0 1 *
UP (Cheio) DOWN (Mutex) 1 0 0 *
UP (Cheio) Lê Dado 1 0 0 *

UP (Cheio) UP (Mutex) 1 0 1 *
UP (Cheio) UP (Vazio) 2 0 1 *
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
█ Problema dos Filósofos PROGRAM Filosofo 1;
VAR Garfos : ARRAY [0..4] of Semaforo := 1;
 Há uma mesa com cinco pratos e I : INTEGER;
cinco garfos, onde os filósofos podem PROCEDURE Filosofo (I : INTEGER);
BEGIN
sentar, comer e pensar REPEAT
Pensando;
 Toda vez que um filósofo pára de DOWN (Garfos[IJ);
pensar e deseja comer, é necessário DOWN (Garfos[(I+1) MOD 5]);
Comendo;
que ele utilize dois garfos, posicionados UP (Garfos[IJ);
a sua direita e a sua esquerda UP (Garfos[(I+1) MOD 5]);
UNTIL False;
END;
■ Este algoritmo apresenta uma solução
que não resolve o problema totalmente, BEGIN
PARBEGIN
pois se todos os filósofos segurarem FOR I := 0 TO 4 DO
apenas um garfo, nenhum filósofo Filosofo (I);
conseguirá comer (deadlock) PAREND;
END.
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
█ Problema dos Filósofos
 Existem várias soluções que para resolverem o problema dos filósofos
sem a ocorrência do deadlock (interblocagem):

a) Permitir que apenas quatro filósofos sentem na mesa simultaneamente;


b) Permitir que um filósofo pegue um garfo se o outro estiver disponível;
c) Permitir que um filósofo ímpar pegue primeiro o seu garfo da esquerda e
depois o da direita, enquanto um filósofo par pegue o garfo da direita e,
em seguida, o da esquerda
SISTEMAS OPERATIVOS

█ Problema dos Filósofos


PROGRAM Filosofo_2;
VAR Garfos : ARRAY [0..4] of Semaforo := 1;
Lugares : Semaforo := 4;
I : INTEGER;
PROCEDURE Filosofo (I : INTEGER);
 O algoritmo apresenta a BEGIN
REPEAT
solução que permite que apenas
Pensando;
quatro filósofos sentem na mesa DOWN (Lugares);
simultaneamente DOWN (Garfos[I]);
DOWN (Garfos[(I+1) MOD 5]};
Comendo;
UP (Garfos [I]);
UP (Garfos[(I+1) MOD 5]);
UP (Lugares);
UNTIL False;
END;
BEGIN
PARBEGIN
FOR I := 0 TO 4 DO
Filosofo (I);
PAREND;
END.
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
█ Problema do Barbeiro
 Neste problema o barbeiro recebe clientes para cortar o cabelo
 Na barbearia há uma cadeira de barbeiro e apenas cinco cadeiras
para os clientes aguardarem pela sua vez

 Quando um cliente chega, caso o barbeiro estiver a trabalhar, ele


senta se houver cadeira vazia ou vai embora se todas as cadeiras
estiverem ocupadas

 No caso de o barbeiro não ter nenhum cliente para atender, ele senta
na cadeira e dorme até que um novo cliente apareça
SISTEMAS OPERATIVOS

█ Problema do Barbeiro PROGRAM Barbeiro;


CONST Cadeiras - 5;
VAR Clientes : Semaforo := 0;
 A solução utiliza o semáforo contador Cliente e Barbeiro : Semaforo := 0;
Mutex : Semaforo := 1;
os semáforos binários Barbeiro e Mutex Espera : integer := 0;
PROCEDURE Barbeiro;
 No processo Barbeiro, é executado um DOWN BEGIN
REPEAT
no semáforo Cliente com o objectivo de DOWN (Clientes);
seleccionar um cliente para o corte DOWN (Mutex);
Espera := Espera - 1;
 Caso não existe nenhum cliente a aguardar, o UP (Barbeiro);
UP (Mutex);
processo barbeiro fica em estado de espera, caso Corta Cabelo;
UNTIL False;
contrário faz o decremento da variável Espera, END;
para isso é utilizado o semáforo Mutex PROCEDURE Cliente;
BEGIN
 Uma instrução UP é executada no semáforo DOWN (Mutex);
IF (Espera < Cadeiras)
Barbeiro para indicar que o recurso barbeiro está BEGIN
Espera := Espera + 1;
em trabalho UP (Clientes);
 No processo Cliente, é verificado se existem UP (Mutex);
DOWN (Barbeiro);
cadeiras vagas, se não existirem o cliente vai Ter Cabelo Cortado;
END
embora, se existir incrementa a variável Espera e o ELSE UP (Mutex);
processo solicita o uso do recurso barbeiro (DOWN) END;
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Monitores
 São mecanismos de sincronização de alto nível que tornam mais simples
o desenvolvimento de aplicações concorrentes (Brinch Hansen em 1972)

 O uso de semáforos exige do projectista bastante cuidado, pois qualquer


engano pode levar a problemas de sincronização imprevisíveis devido à
execução concorrente dos processos

 Os monitores são considerados mecanismos de alto nível e estruturados


(implementados pelo compilador), desta forma o desenvolvimento de
programas concorrentes fica mais fácil e menos possibilidade de ocorrer erro

 Actualmente, a maior parte das linguagens de programação disponibiliza


rotinas para o uso de monitores
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Monitores
 O monitor é formado por procedimentos e variáveis encapsuladas (módulo)
 É caracterizado pela implementação automática de exclusão mútua entre
procedimentos declarados, ou seja, apenas um processo pode executar um
dos procedimentos do monitor em um determinado instante
 Toda vez que um processo chama um dos procedimentos, o monitor
verifica se já existe outro processo executando o procedimento do monitor,
caso exista o processo aguarda em uma fila de entrada

 As variáveis globais de um monitor são visíveis apenas nos procedimentos da


sua estrutura, sendo inacessíveis fora do contexto do monitor
 Toda é realizado por um bloco de comandos do
inicialização das variáveis
monitor, sendo executado apenas uma vez, na activação do programa
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Monitores MONITOR Exclusao Mutua;
(* Declaracao das variaveis do monitor *)
 Um monitor é definido especificando um PROCEDURE Regiao_Critica_l;
BEGIN
nome, declarando-se variáveis locais, .
.
procedimentos e um código de inicialização
END;
PROCEDURE Regiao_Critica_2;
Declaração de
variáveis globais BEGIN
.
.
Procedimentos
END;
Proc. 1
PROCEDURE Regiao_Critica_3;
Monitor

Proc. 2 BEGIN
.
.
Fila de entrada
Proc. n END;
BEGIN
Inicialização (* Codigo de inicializacao *)
de variáveis END;
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
█ Exclusão Mútua Utilizando Monitores
 A implementação da exclusão mútua utilizando monitores não é realizada
directamente pelo programador, como no caso do uso de semáforos

 As regiões críticas devem ser definidas como procedimentos no monitor,


e o compilador se encarregará de garantir exclusão mútua entre esses
procedimentos

 A comunicação do processo com o monitor é feita só e somente através de


chamadas a seus procedimentos e dos parâmetros passados
SISTEMAS OPERATIVOS

█ Exclusão Mútua Utilizando Monitores


PROGRAM Monitor_I;
MONITOR Regiao_Critica;
 O algoritmo apresenta a solução para o VAR X : INTEGER;
problema onde dois processos somam e PROCEDURE Soma;
BEGIN
diminuem, concorrentemente, o valor 1 da X := X + 1;
variável compartilhada X END;
PROCEDURE Diminui;
BEGIN
 A inicialização da variável X com o valor X := X-I;
END;
0 só acontecerá uma vez, no momento da BEGIN
inicialização do monitor Região_Critica X := 0;
END;
BEGIN
 O valor de X, no final da execução PARBEGIN
Regiao_Critica.Soma;
concorrente de Soma e Diminui será igual a 0 Regiao_Critica.Diminui;
PAREND;
END.
 Esta garantida a execução mutuamente
exclusiva,
porque todos os procedimentos
estão definidos dentro do monitor
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
█ Sincronização Condicional Utilizando Monitores
 Através de variáveis especiais de condição, é possível associar a
execução de um procedimento que faz parte do monitor a uma determinada
condição, garantindo a sincronização condicional

 As variáveis especiais de condição são manipuladas por intermédio de


duas instruções, conhecidas como WAIT e SIGNAL

 A instrução WAIT faz com que o processo seja colocado no estado de


espera, até que um outro processo sinalize com a instrução SIGNAL que a
condição de espera foi satisfeita

 Caso a instrução SIGNAL seja executada, e não haja processo


aguardando a condição, nenhum efeito surtirá
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
█ Sincronização Condicional Utilizando Monitores
 É possível que vários processos estejam em estado de espera
organizados numa fila de espera associada às condições de sincronização
 A execução da instrução SIGNAL libera apenas um único processo da fila de
espera da condição associada
 Porém um processo pode executar um procedimento de um monitor,
mesmo quando um ou mais processos estão na fila de espera de condição
Declaraçãode
variáveisglobais

P
rocedimentos
CondiçãoC1
P
roc. 1
Monitor

P
roc. 2 CondiçãoC2

Filadeentrada
P
roc. n CondiçãoCn

Filasdeespera
Inicialização
devariáveis
SISTEMAS OPERATIVOS

█ Sincronização Condicional Utilizando Monitores


MONITOR Condicional;
VAR Cheio, Vazio : (* Variaveis especiais de condicao *);
 O algoritmo monitor Condicional é estruturado com PROCEDURE Produz;
duas variáveis especiais de condição (Cheio e BEGIN
IF (Cont = TamBuf) THEN WAIT (Cheio);
Vazio) e dois procedimentos (Produz e .
.
Consome)
IF (Cont = 1) THEN SIGNAL (Vazio);
END;
 No programa principal sempre que se deseja PROCEDURE Consome;
gravar/ler um dado no buffer é chamado o BEGIN
IF (Cont = 0) THEN WAIT (Vazio);
procedimento Produz/Consome .
.
IF (Cont = TamBuf - 1) THEN SIGNAL (Cheio);
 Em cada um dos procedimentos deve ser testado END;
as posições do buffer BEGIN
END;

 Sempre que se deseja gravar um dado deve ser verificado o estado do buffer, caso o teste IF for verdadeiro
executa um WAIT (Cheio), aguardando na fila de espera associada a condição Cheio e só continua quando
for executado um SIGNAL (Cheio)

 Sempre que se deseja ler um dado deve ser verificado o estado do buffer, caso o teste IF for verdadeiro
executa um WAIT (Vazio), aguardando na fila de espera associada a condição Vazio e só continua quando
for executado SIGNAL (Vazio)
SISTEMAS OPERATIVOS

█ Sincronização Condicional Utilizando Monitores


 O programa Produtor_Consumidor_3 descreve a solução completa com o uso monitor Condicional
apresentado

PROGRAM Produtor_Consumidor_3; PROCEDURE Produtor;


CONST TamBuf = (* Tamanho qualquer*); BEGIN
TYPE Tipo_Dado= (* Tipo qualquer*); REPEAT
VAR Buffer: ARRAY [l..TamBuf] OF Tipo_Dado; Produz_Dado (Dado);
Dado: Tipo_Dado; Condicional.Produz;
MONITOR Condicional; UNTIL False;
VAR Vazio, Cheio : (* Variaveis de condicao *); END;
Cont : INTEGER; PROCEDURE Consumidor;
PROCEDURE Produz; BEGIN
BEGIN REPEAT
IF (Cont = TamBuf) THEN WAIT (Cheio); Condicional.Consome;
Grava_Dado (Dado, Buffer); Consome_Dado (Dado);
Cont := Cont + 1; UNTIL False;
IF (Cont = 1) THEN SIGNAL (Vazio); END;
END; BEGIN
PROCEDURE Consome; PARBEGIN
BEGIN Produtor;
IF (Cont = 0) THEN WAIT (Vazio); Consumidor;
Le_Dado (Dado, Buffer); PAREND;
Cont := Cont - 1; END.
IF (Cont = TamBuf - 1) THEN SIGNAL (Cheio);
END;
BEGIN
Cont := 0;
END;
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Troca de Mensagens
 Troca de mensagens é um mecanismo de comunicação e sincronização
entre processos
 O SO possui um subsistema de mensagem que suporta essa mecanismo
sem que haja necessidade do uso de variáveis compartilhadas
 Para que haja a comunicação entre processos, deve existir um canal de
comunicação (buffer / link de uma rede de computadores)

 Os processos cooperativos podem fazer uso de um buffer para trocar


mensagens através de duas rotinas: SEND (receptor, mensagem) e RECEIVE
(transmissor, mensagem)

 A rotina SEND permite o envio de uma mensagem para um processo


receptor, e a rotina RECEIVE possibilita o recepção de mensagens enviadas por
um processo transmissor
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
▌Transmissão de Mensagem

Processo Processo
transmissor receptor

Canal de comunicação

SEND RECEIVE
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Troca de Mensagens
 A troca de mensagens entre processos pode ser implementada de duas
formas distintas: comunicação directa e comunicação indirecta
 A comunicação directa entre dois processos exige que, ao enviar ou
receber uma mensagem, o processo enderece explicitamente o nome do
processo receptor ou transmissor
 Uma característica deste tipo de comunicação é de permitir somente a
troca de mensagem entre dois processos

 A desvantagem está na necessidade de especificar o nome dos processos


envolvidos na troca de mensagens que no caso de mudança de identificação
dos processos, o código deve ser alterado e recompilado
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
▌Comunicação Directa

Processo A Processo B
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
▌Comunicação Indirecta
 A comunicação indirecta utiliza uma área compartilhada, onde as
mensagens podem ser colocadas pelo transmissor e retiradas pelo receptor

 Este tipo de buffer é conhecido como mailbox ou port, onde as


características, como tamanho e capacidade de armazenamento, são
definidas no momento da sua criação

 Na comunicação indirecta, vários processos podem estar associados a


mailbox, e os parâmetros dos procedimentos SEND e RECEIVE passam a ser
nomes de mailboxes
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
▌Comunicação Indirecta
Processo A Processo B

Mailbox
ou Port
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Troca de Mensagens
 Existem três diferentes esquemas de implementação de sincronização
entre os processos que trocam mensagens:
■ O primeiro, garante que um processo ao enviar uma mensagem,
permaneça a espera até que o processo receptor a leia (rendevous)
→ O problema desta implementação é que a execução dos processos fica limitada ao tempo de
processamento no tratamento das mensagens

■ O segundo, permite que o processo transmissor não permaneça


bloqueado aguardando a leitura da mensagem pelo processo receptor
→ Permite que um processo possa enviar mensagens para diversos destinatários

■ O terceiro, tanto o processo receptor quanto o processo transmissor não


permanecem aguardando pela recepção/envio de mensagens (comunicação
assíncrona)
→ Permite aumentar a eficiência de aplicações concorrentes
SISTEMAS OPERATIVOS

Troca de Mensagens
 Uma solução para o problema do produtor/consumidor é apresentada
utilizando a troca de mensagens
PROGRAM Produtor_Consumidor_4;
PROCEDURE Produtor;
VAR Msg : Tipo_Msg;
BEGIN
REPEAT
Produz_Mensagem (Msg);
SEND (Msg);
UNTIL False;
END;
PROCEDURE Consumidor;
VAR Msg : Tipo_Msg;
BEGIN
REPEAT
RECEIVE (Msg);
Consome_Mensagem (Msg);
UNTIL False;
END;
BEGIN
PARBEGIN
Produtor;
Consumidor;
PAREND;
END.
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Deadlock (Interblocagem)
 Deadlock é a situação em que um processo aguarda por um recurso que
nunca estará disponível ou um evento que não ocorrerá

 Essa situação é consequência da partilha de recursos, como dispositivos,


arquivos e registos, entre processos concorrentes onde a exclusão mútua é
exigida

 O problema do dealock aumenta à medida que os SO evoluem no sentido


de implementar o paralelismo e permitir a alocação dinâmica de um número
ainda maior de recursos
SISTEMAS OPERATIVOS

Deadlock (Interblocagem)
 Espera circular Processo A

Processo A Recurso 1
■ Problema do deadlock entre o solicita o
Recurso 2
alocado ao
Processo A

processo PA e PB, utilizando os


recursos R1 e R2
 Inicialmente, PA obtém o acesso exclusivo de Recurso 2 Recurso 1
R1, da mesma forma que PB obtém R2

Processo B

 Durante o processamento, PA necessita de R2


para poder prosseguir e em seguida PB necessita Recurso 2 Processo B
alocado ao solicita o
de R1 para poder prosseguir Processo B Recurso 1

 Como R2 está alocado a PB, e R1 está alocado a PA, ambos os processos ficarão aguardando que o
recurso seja liberado

■ Como cada processo esta a espera que o outro libere o recurso alocado, é
estabelecida uma condição conhecida por espera circular, caracterizando uma
situação de deadlock
SISTEMAS OPERATIVOS

Sincronização e
Comunicação entre Processos
Deadlock (Interblocagem)
 Condições necessárias para que ocorra deadlock
 Exclusão mútua : cada só pode estar alocado a um único processo em um determinado
instante

 Espera por recurso : um processo, além dos recursos já alocados, pode estar
esperando por outros recursos
 Não-preempção : um recurso não pode ser liberado de um processo só porque outros
processos desejam o mesmo recurso
 Espera circular : um processo só pode ter de esperar por um recurso alocado a outro
processo e vice-versa

 Mecanismos
 Prevenção
 Detecção
 Correção
SISTEMAS OPERATIVOS

█ Mecanismo de Prevenção de Deadlock


 Para prevenir a ocorrência de deadlocks, é preciso garantir que uma das
quatro condições, necessárias para sua existência, nunca se satisfaça

1º A ausência da primeira condição (exclusão mútua), origina os problemas


de partilha de recursos entre processos concorrentes

2º Para evitar a segunda condição (Espera por recurso), um processo antes


de iniciar a sua execução de armazenar todos os recursos que precisa
 Esta operação poderá originar problemas na determinação do número de
recursos para cada processo, e a possibilidade de um processo sofrer
starvation
SISTEMAS OPERATIVOS

█ Mecanismo de Prevenção de Deadlock

3º A terceira condição (Não-preempção), pode ser evitada quando se pode


retirar um recurso de outro processo
 Os problemas desta operação está na possibilidade de impedir a
continuidade de execução do processo e a possibilidade de um processo
sofrer starvation

4º A quarta condição (espera circular), a forma de implementar é forçar o


processo a ter apenas um recurso de cada vez
 Esta operação restringiria muito o grau de partilha de recursos
SISTEMAS OPERATIVOS

█ Mecanismo de Prevenção de Deadlock


 A solução para evitar o problema de deadlock é possível mesmo se todas
as condições necessárias a sua ocorrência estejam presentes

 A solução mais simples passa por exigir que os processos informem o


número máximo de cada tipo de recursos necessário à sua execução
(Algoritmo do Banqueiro – Tanenbaum 2001)

 Desta forma pode-se definir o número máximo de recursos alocados e


disponíveis e o número máximo de processos que necessitam deste recurso

■ Esta solução possui várias limitações, que à impede de ser implementada


na prática:
→ Necessidade de um número fixo de processos activos e de recursos
disponíveis no sistema
→ Dificuldade de se prever o número de usuários no sistema e o número de
recursos disponíveis
SISTEMAS OPERATIVOS

█ Mecanismo de Detecção de Deadlock


 A detecção de deadlock é o mecanismo que permite não só detectar uma
situação de deadlock como a identificação dos recursos e processos
envolvidos no problema

 Os SO com mecanismos de detecção de deadlock devem manter estrutura


de dados capazes de identificar cada recurso do sistema, o processo que esta
armazenando e os processos que estão à espera da liberação do recurso

 Estes algoritmos são caracterizados por verificarem a ocorrência de


espera circular
 Em sistemas de tempo compartilhados, o tempo de busca pode ser maior,
sem comprometer o desempenho e a fiabilidade do sistema

 Em sistemas de tempo real, o algoritmo deve constantemente certificar a


ocorrência de deadlock, porém a maior segurança gera maior overhead
(consumo considerável do tempo do processador)
SISTEMAS OPERATIVOS

█ Mecanismo de Correcção de Deadlock


 Os mecanismos de correcção de deadlock implementados por grande
parte dos SO, consistem na eliminação de um ou mais processos envolvidos
o deadlock e desalojar os recursos já garantidos por eles

 Os processos eliminados não têm como ser recuperado, porém outros


processos, que antes estavam em deadlock, poderão prosseguir a execução

 A escolha do processo a ser eliminado é feita de forma aleatória ou com


base em algum tipo de prioridade, gerando um elevado overhead ao sistema

 A solução menos drástica envolve a liberação de apenas alguns recursos


armazenado pelos processos, para outros processos, isto faz com que os
processos que perderam os recursos passem para um estado de suspensão
■ Este mecanismo é conhecido por rollback e, além do overhead gerado, é
muito difícil ser implementado, por ser bastante dependente da aplicação que
esta sendo processada
SISTEMAS OPERATIVOS

█ Mecanismo de Correcção de Deadlock

EXECUÇÃO

Suspender
PRONTO ESPERA Acordar SUSPENSO

Suspender

Acordar

Você também pode gostar