Você está na página 1de 57

SISTEMAS OPERATIVOS II

CAPÍTULO 2- PROCESSOS

MSc. Eng. Francisco José Dombala


TEMA: CONTINUAÇÃO DA AULA ANTERIOR

 Escalonamento de Processos
 Comunicação entre Processos: Semáforo, Monitores
 Problemas clássicos de sincronização de Processos
 Alocação de recursos e Deadlocks
2.4- ESCALONAMENTO DE PROCESSOS

PROCESSOS
Um processo pode ser definido como "um programa em execução".
O conceito de processo é bastante abstrato, mas é essencial no
estudo de sistemas operacionais
ESCALONADORES

Qualquer sistema operacional que implemente multi programação


deve dividir o tempo do processador entre os processos do sistema.
2.4.1- TIPOS DE ESCALONAMENTO
FIRST-IN-FIRST-OUT (FIFO)
O processo que chegar primeiro, é o primeiro a ser
seleccionado para a execução.
 Necessário apenas uma fila de processos prontos,
esperando pelo uso do processador.
 O processo utiliza a CPU sem ser interrompido.
Problemas:
 Impossibilidade de prever quando um processo entrará em
execução.
 Possibilidade de processos CPU-bound de menor
importância prejudicarem processos de I/O-bound mais
prioritários.
TIPOS DE ESCALONAMENTO: Cont.
SHORTEST-JOB-FIRST (SJF)
Associa cada processo (JOB) ao seu tempo de execução.
 Quando o processador está livre, o processamento que ocupar
menos tempo da CPU para terminar seu processamento é
seleccionado.
 Favorece os programas menores.
 Reduz o tempo médio de espera em relação ao FIFO.
Problemas:
 Determinar exactamente, quanto tempo de CPU o processo vai
utilizar para terminar seu processamento.
TIPOS DE ESCALONAMENTO: Cont.
PREEMPTIVO
 O Sistema pode interromper um processo em execução para que
outro processo utilize o processador.
 Permite que o sistema dê atenção imediata a processos mais
prioritários, como no caso de sistemas em tempo real.
 Proporciona melhores tempos de resposta em sistemas de tempo
compartilhado
 Compartilhamento do processador de uma maneira mais uniforme
entre os processos.
 A troca de um processo pelo outro na CPU (mudança de contexto),
causado pela preempção, gera um overhead no sistema.
 Critérios de preempção devem ser definidos para o overhead não se
tornar crítico.
TIPOS DE ESCALONAMENTO: Cont.
CIRCULAR (ROUND ROBIN) OU PREEMPÇÃO POR TEMPO
Implementado por um algoritmo semelhante ao FIFO, porém, quando
um processo passa para o estado de execução, existe um tempo-limite
(quantum ou time-slice) para sua utilização de forma contínua. Se o
processo não terminou a execução, volta ao estado de pronto.
 Em geral, o valor do quantum de tempo está entre 100 e 300 ms.
 Nenhum processo poderá monopolizar a CPU.
 Algorítmo bastante adequado para sistemas multiusuários de tempo
compartilhado.
 No caso, o processo CPU-bound tem mais chances de ser executado
do que o processo IO-bound
TIPOS DE ESCALONAMENTO: Cont.
POR PRIORIDADES OU PREEMPÇÃO POR PRIORIDADE

Processos possuem diferentes prioridades de execução.

 Processos de maior prioridade são escalonados preferencialmente.


 Algorítmo Implementado mediante um clock, que interrompe o
processador em determinados intervalos de tempo, reavaliando
prioridades e, possivelmente, escalonando outro processo.
 Todos os sistemas de tempo compartilhado implementam algum
tipo de prioridade, sendo esta uma característica do contexto de
software.
TIPOS DE ESCALONAMENTO: Cont.
POR PRIORIDADES OU PREEMPÇÃO POR PRIORIDADE- Cont
Prioridade estática:
Não é modificada durante a existência do processo.
De simples implementação.
Pode ocasionar tempos de resposta elevados.

Prioridade dinâmica:
Pode ser modificada durante a execução do processo.
O processo recebe um acréscimo à sua prioridade ao sair do estado
de espera.
Processos I/O-Bound terão mais chances de serem escalonados,
compensando o tempo que passam no estado de espera.
Os processos CPU-Bound podem ser executados enquanto os
processos I/O -Bound esperam por algum evento.
 O tempo de resposta compensa o maior overhead e complexidade
algorítmica.
Condições de corrida
Ocorre quando os processos cooperantes precisam compartilhar um
recurso,que ambos podem lere gravar:

 Ocorre quando dois ou mais processos acessam um recurso


compartilhado.
 O resultado das execuções dos processos dependem da ordem em que
os processos executam no processador.
 Somente algumas ordens de execuções do processo não geram os
resultados correctos.
Condições de corrida: Cont

 A detecção da existência de uma condição de corrida em um conjunto de


processos cooperantes écomplicada.

 Para solucionar o problema de condição de corrida, deveremos usar o


conceito de exclusão mútua através do uso deseçõescríticas.
Secçõescríticas

Podemos também ver o problema da condição de corrida a


partir da seguinte visão abstrata:
Ou o processo está executando um código que não acessa nenhum
dos recursoscompartilhados com outros processos.

Ou processo está executando um código que lê e/ou altera um dos


recursos compartilhados com outros processos.
Secçõescríticas

 O código do processo que acessa um recurso compartilhado com outros


processos é chamado de seçãocrítica ou regiãocrítica.

 As condições de corrida serão evitadas somente se cada processo


executar a sua seção crítica em um intervalo de tempodiferente.
Secçõescríticas

 Para que a cooperação entre os processos seja eficiente, além de


correcta, devemos garantiras seguintes condições:
 Dois ou mais processos não podem executar ao mesmo tempo as suas
seções críticas.
 Não podemos fazer nenhuma suposição sobre a velocidade de
execução ou do número de processadores.
 Um processo que não está executando sua secção crítica não pode
bloquear outro processo.
 Um processo deve ser sempre capaz de executar a sua secção crítica
em um intervalo de tempo finito.
ExclusãoMútua
Para que somente um processo possa entrar na sua seção crítica devemos
usar as primitivasde exclusão mútua.
Um meio de obtermos a exclusão mútua é através do uso das propostas
baseadas em esperaocupada.
O processo fica esperando até que possa acessar a secção crítica.
 A grande desvantagem desse método pode ser o desperdício de tempo
do processador.
Estratégias:

Desabilitar interrupções.
InstruçãoTSL.
InstruçãoTSL*:
 Instrução especial que permite ler uma variável, armazenar seu
conteúdo em uma outra área e atribuir um novo valor a esta
variável (hardware)
 É uma instrução indivisível: executada sem interrupção
 Comum em computadores commulti processadores.

 A instrução, cujo formato geral é TSLRX, lock, onde RXé um registrador e


lock uma posição da memória:
 Lê o conteúdo da posição lock, e o coloca no registrador RX.
Depois grava, na posição lock, um valor diferente de zero.
* TSL – Test and Set Lock
Desabilitando interrupções

O processo desabilita as interrupções ao entrar na secção crítica, e as


reabilita ao sair da secção crítica.

Como as interrupções estão desabilitadas, o escalonador não será capaz de


parar a execução do processo.

A proposta não é adequada, pois se o processo não reabilitar as


interrupções, o sistema irá parar de funcionar.
Desabilitando interrupções: Cont.

A proposta não funciona se existe mais de um processador (ou núcleos), pois


o processo somente afecta o processador que o está executando.

A conclusão é que esta proposta não é adequada para a exclusão


mútua, devendo somente ser usada dentro do núcleo do sistema e
não para o processo do usuário.
Mecanismo para se obter Exclusão Mútua
Mecanismos de Hardware:
 Inibição de Interrupções
 Instrução TSL (Test and Set Lock)
Mecanismos de Software:
Com Espera Ocupada:
Variáveis de Travamento (Lock Variables)
Alternância Estrita
Solução de Peterson
Sem Espera Ocupada:
Dormir e Acordar (Sleep and Wakeup)
Semáforos
Contadores de Eventos
Monitores
Troca de Mensagens
Dormir e Acordar (Sleep and Wakeup)

Problema da Solução de Peterson e da Instrução TSL:


o processo que não consegue acesso à R.C. permanece em
“espera ocupada” (busy waiting):
 Gasta tempo de processador inutilmente
 Pode provocar o Problema da Inversão de Prioridade:
Dois processos A (alta prioridade) e B (baixa prioridade)
 B entra na Região Crítica;
 A vai para estado de pronto;
 A passa para estado de execução;
 A fica testando indefinidamente.

Chamadas de sistema: SLEEP e WAKEUP


InstruçãoTSL

Aexecução da instrução é atômica, ou seja, indivisível:

O processador bloqueia o barramento da memória até executar


as duasoperações.

Nenhum outro processador poderá acessar a posição lock, até que o


barramento seja desbloqueado

Como a posição de ler a memória e armazenar um valor não


nulo é atômica, a exclusão mútua é garantida.
Exclusão Mútua

Vamos agora estudar a seguinte proposta alternativa, que irá bloquear o


processo, em vez de utilizar espera ocupada, se este não puder acessar a
sua secçãocrítica:

– Semáforos.
2.5- COMUNICAÇÃO ENTRE PROCESSOS
Introdução:
Os processos que cooperam entre si para executar uma tarefa precisam se
comunicar uns com os outros.
A comunicação entre os processos deve ser feita de tal modo que seja
estruturada e independente de interrupções.
Devemos evitar que os processos interfiram uns com os outros, um problema
chamado de exclusão mútua.
2.5- COMUNICAÇÃO ENTRE PROCESSOS
Processos concorrentes
Processos que executam ao mesmo tempo podem existir de maneira
independente um dos outros ou podem requerer sincronização
ocasional ou cooperação.

Processos Independentes versus Processos Cooperantes


Independentes: Não afectam nem são afectados pela execução de
um outro processo

Cooperantes: Podem afectar ou serem afectados pela execução de


outros processos
2.5- COMUNICAÇÃO ENTRE PROCESSOS:
Cont

Vantagens da cooperação entre processos

• Partilha de informação
• Redundância
• Aumento de performance de computação
• Modularidade
• Conveniência
Cooperação entre processos através de
compartilhamento: Cont

 Processos podem estar isolados totalmente uns dos outros


 Exclusão mútua não ocorrerá
 No entanto, se trocam mensagens
 Deadlock e starvation podem ocorrer
Exclusão mútua - abordagens

 Pode-se deixar a responsabilidade de controlo para os processos


que executam concorrentemente, sem suporte de linguagem de
programação ou SO: suporte por software
 Tendência a ocorrer alto overhead e erros
 A nível de instrução de máquina – suporte por hardware
 Overhead mínimo, mas pode não ser uma solução de uso geral
 Suporte do SO e linguagem de programação
 Maior versatilidade
Exclusão mútua – suporte de hardware
 Em um ambiente de um processador
 Processos podem se intercalar, e não se sobrepor
 Processos só pedem processador
 quando invocam o SO
 Quando são interrompidos
 Então, não devem ser interrompidos durante o acesso a região
Crítica
Exclusão mútua – suporte de hardware: Cont.
 Desabilitar Interrupções

 Perigoso e pode não ser produtivo para multiprogramação deixar


processos do usuário desabilitar interrupção
 Se o processo não as reabilita o funcionamento do sistema está
comprometido
 Sendo as interrupções desabilitadas, o processo executa (no caso,
na região crítica) e não vai perder CPU
 neste caso, exclusão mútua é garantida à região crítica
 CPU não pode executar outros processos (intercalação)
Instrução Especiais de Máquina

 Ambiente de multiprocessador: vários processadores e


compartilhamento de memória
 O acesso a um espaço compartilhado deve ser exclusivo
 Com isso em mente, projectistas de processador propuseram
diferentes instruções que implementam leitura e escrita atômica a
de um endereço de memória
Instrução Especiais de Máquina
 exemplo: compare&swap
 testa o valor corrente de uma posição de memória
 se é igual a um valor passado, actualiza com novo valor,
senão, nada muda

 É uma instrução atômica – a instrução não pode ser interrompida


Instrução Especiais de Máquina
 exemplo: compare&swap
 testa o valor corrente de uma posição de memória
 se é igual a um valor passado, actualiza com novo valor,
senão, nada muda
Instrução Especiais de Máquina

Vantagens da abordagem por hardware

 Qualquer número de processos em uma máquina uniprocessada


ou multiprocessada pode executar a instrução
 Pode ser usada para dar suporte a várias RCs
Instrução Especiais de Máquina

Desvantagens da abordagem por hardware

 Somente um processo consegue entrar na RC – os outros ficam em


busy&wait
 Starvation pode acontecer – a selecção de um dos vários
processos que estão tentando entrar na sessão crítica é arbitrária
 Deadlock: certas situações podem levar a overhead
Região Crítica

Soluções por hardware


 Depende da máquina utilizada
 Tem menor overhead
 Não são consideradas soluções generalizadas
Soluções por software
 Fica a cargo do programador
 Fatalmente leva a erros
Como resolver?
 Tanto solução por hardware quanto por software podem levar ao
problema de espera ocupada
 O processo “bloqueado” consome tempo de CPU
desnecessariamente
Solução:
 Introduzir comandos que permitam que um processo seja colocado
em estado de espera quando ele não puder acessar a sua região
crítica
 O processo fica em estado de espera até que outro processo o
libere
 Vamos olhar mecanismos que não consuma CPU
Semáforos
Mecanismos de SO e linguagens de programação que serão
utilizados para aumentar concorrência
 tornar a CPU não ociosa

 Um semáforo é uma variável inteira não negativa, manipulada através:


 Inicialização
 Decremento semWait() / acquire() / P() / Down() / wait() / lock()
 pode bloquear um processo
 Incremento segSignal() / relase() / V() / Up() / signal() / unlock()
 pode desbloquear um processo
 As modificações feitas no valor do semáforo são atômicas e não podem ser
interrompidas
Semáforos
 No caso da exclusão mútua as instruções semWait() e semSignal()
funcionam como protocolos de entrada e saída das regiões críticas.
 Decremento é executado quando o processo deseja entrar na
região crítica.
 Decrementa o semáforo de 1
 bloqueia outros processos
 Incremento é executado quando o processo sai da sua região
crítica.
 Incrementa o semáforo de 1
 Desbloqueia processos
Semáforos
 Um semáforo fica associado a um recurso compartilhado, indicando
se ele está sendo usado
 Se o valor do semáforo é maior do que zero, então existe recurso
compartilhado disponível
 Se o valor do semáforo é zero, então o recurso está sendo usado
Semáforos – pontos interessantes

 Em geral, não se sabe antes de um decremento, se um processo ficará


bloqueado ou não
 Depois de um incremento feito por um processo Pi, um outro processo Pj
pode ser desbloqueado
 os dois processos Pi e Pj começam a ser executados concorrentemente
 Não se sabe ao certo qual ganhará uma única CPU
 Mas note, Pi já passou pela RC
 Ao incrementar um semáforo (sinalizar), não se sabe a priori se há outros
processos bloqueados
Semáforos binários
 Mais restritos com seus valores – 0 e 1
 Se o valor do semáforo é maior do que zero, então existe recurso
compartilhado disponível
 Se o valor do semáforo é zero, então o recurso está sendo usado
Semáforos para exclusão mútua
Para exclusão mútua é usado um semáforo binário

Semáforos também são usados para implementar a sincronização


entre os processos
O uso de semáforos exige muito cuidado do programador
Os comandos down e up podem estar espalhados em um programa
sendo difícil visualizar o efeito destas operações
Monitores

Semáforos são ferramentas importantes para implementar exclusão mútua


 Mas pode ser difícil utilizá-los correctamente em um programa
 Vimos alguns exemplos de uso que não garantem exclusão mútua,
sendo necessário adicionar outras variáveis de bloqueio
 Estão sujeitos a erros de programação
 Principalmente se necessário definir mais de uma RC
 Não existe um controle formal de sua presença
Como tornar o uso de semáforos mais fácil/amigável?
Monitores

É um construtor de linguagem de programação que oferece a


funcionalidade dos semáforos
 Maior facilidade de utilização por parte do programadores
 Não tem em muitas linguagens de programação, mas em
Java
 codificar as seções críticas como procedimentos do
monitor
 tornar mais modular
 quando um processo precisa referenciar dados
compartilhados
 chama um procedimento do monitor
 Módulos de linguagens de programação que fornecem
uma funcionalidade equivalente aos semáforos
Monitores
 O monitor é um conjunto de procedimentos, variáveis e
inicialização definidos dentro de um módulo
 um processo entra no “monitor”, chamando um dos seus
procedimentos
 como se fosse uma classe
 A característica mais importante do monitor é a exclusão mútua
automática entre os seus procedimentos
 Basta codificar as regiões críticas como procedimentos do monitor
e o compilador irá garantir a exclusão mútua
 Como semáforos, só um processo pode estar executando no
monitor de cada vez, sendo que outros processos que chamarem
o monitor, ficarão bloqueados
 Oferece exclusão mútua
Monitores
 Variáveis compartilhadas podem ser protegidas, especificando-as
através do monitor
 Um processo pode ser bloqueado quando tentar entrar no monitor,
mas este está sendo utilizado por outro
 Quando um processo termina de usar o monitor, tem que liberá-lo
Monitores
 Para implementar a sincronização é necessário utilizar variáveis de
condição, só acessíveis dentro do monitor
Variáveis de condição
 São tipos de dados especiais dos monitores
 são operadas por duas instruções Wait e Signal
 Wait(C): suspende a execução do processo, colocando-o em estado de
espera associado a condição C
 Signal(C): permite que um processo bloqueado por wait(C) continue a
sua execução.
 Se existir mais de um processo bloqueado, apenas um é liberado
 Se não existir nenhum processo bloqueado, não faz nada
Monitores

 Um processo entra em um monitor, chamando qualquer um de seus


procedimentos
 Um processo está em um monitor, quando está pronto ou
executando
 Um ponto de entrada somente, para garantir exclusão mútua
 Outros processos ficam em fila de bloqueados se tentarem entrar
no monitor
Monitores

 Produtor/Consumidor utilizando
buffer de tamanho limitado
 Duas variáveis de condição:
 essas variáveis são acessíveis
somente dentro do monitor
notfull – TRUE se ainda há espaço
notempty – TRUE se tem caractere
2.6- PROBLEMAS CLÁSSICOS DE
SINCRONIZAÇÃO DE PROCESSOS
Na comunicação entre processos cooperantes, a sincronização
destes processos éimportante:
Processos Cooperantes
Paradigma de processos cooperantes:

PRODUCER produz informação que é consumida pelo CONSUMER

Buffer sem limite

 Processo produtor produz informações que são gravadas em um buffer de


tamanho limitado
 As informações são consumidas por um processo consumidor
 O produtor pode produzir um item enquanto o consumidor consome outro
 Mas somente um consumidor e um produtor podem exclusivamente
acessar o buffer compartilhado
Produtor/Consumidor
 O produtor e o consumidor devem estar sincronizados
 O produtor não pode escrever no buffer cheio
 O consumidor não pode consumir informações de um buffer vazio

 Exemplo de uma aplicação "Produtor/Consumidor”:


 um thread (o produtor) grava dados em um arquivo enquanto
outro thread (o consumidor) lê dados do mesmo arquivo
 Outro exemplo:
 enquanto você digita no teclado/mouse, o produtor coloca eventos de
mouse em uma fila de eventos e o consumidor lê os eventos da
mesma fila para tratá-los
 Em ambos os casos, temos threads que compartilham um recurso
comum
Produtor/Consumidor – buffer limitado

 Semáforos n(full) e (empty)


 n conta os espaços cheios no buffer
 Se n igual a zero, então o consumidor deve ser bloqueado
 e conta os espaços vazios no buffer
 Se e igual a zero, então o produtor deve ser bloqueado
 s é um mutex (semáforo binário)
 para controle da região crítica, no caso, o buffer
COMUNICAÇÃO INTERPROCESSOS (IPC)
Mecanismo do SO que permite que processos se comuniquem e
sincronizem suas acções

 Sistema de Mensagens – processos se comunicam entre si sem a


necessidade de compartilhar variáveis
 IPC fornece duas operações:
 send(message) – mensagem de tamanho fixo ou variável
 receive(message)
 Se P e Q desejam se comunicar, eles precisam:
 Estabelecer um canal de comunicação entre eles
 Trocar mensagens via send/receive
 Implementação do canal de comunicação:
 Físico (p.ex.: memória compartilhada)
 Lógico (p.ex.: propriedades lógicas
COMUNICAÇÃO INTERPROCESSOS (IPC)
Questões de implementação de IPC
Como a ligação é estabelecida?

Pode ser associada a mais de 2 processos?


Quantas ligações podem existir entre 2 processos?
Qual a capacidade?
Tamanho da mensagem fixo ou variável?
Unidirecional ou bidirecional?
COMUNICAÇÃO INTERPROCESSOS (IPC)
Problemas inerentes àcomunicação
Os processos que cooperam entre si para executar uma tarefa precisam se
comunicar uns com os outros.
A comunicação entre os processos deve ser feita de tal modo que seja
estruturada e independente de interrupções.
Devemos evitar que os processos interfiram uns com os outros, um problema
chamado de exclusão mútua.
Problema:
Um processo Aalocou uma determinada área da memória prasi.

O que aconteceria se outro processo pudesse alocar a mesma área da


memória que o processo A esta ocupando?

Você também pode gostar