Você está na página 1de 16

Sistemas Operacionais –

Processos, Threads, Comunicação entre


processos, Escalonamentos
Parte 2

FATEC-SCS
Profª MSc. Aletéia

Sistemas Operacionais com Java

Threads

• Uma Thread ou processo leve, basicamente, esse


atributo se deve ao menor tempo gasto em atividades
de criação e escalonamento de threads, se
comparadas aos processos. O compartilhamento de
memória entre as threads maximiza o uso dos espaços
de endereçamento e torna mais eficiente o uso destes
dispositivos.

• http://www.tecmundo.com.br/9669-o-que-sao-threads-
em-um-processador-.htm
Silberschatz, Galvin e Gagne (c) 2003

1
Threads

 Foi introduzido o conceito de thread (linha) para diminuir o


tempo gasto na criação/eliminação de processos e economizar
recursos do sistema;

 A grande diferença entre subprocessos e thread é em relação ao


espaço de endereçamento:

 Subprocessos possuem, cada um, espaços independentes e


protegidos;

 Threads compartilham o mesmo espaço de endereçamento


do processo, sem nenhuma proteção, permitindo assim que
um thread possa alterar dados de outro thread;

 Apesar dessa possibilidade, threads são desenvolvidos para


trabalhar de forma cooperativa, voltados para desempenhar
uma tarefa em conjunto

THREADS
 Como todas os threads tem exatamente o mesmo
espaço de endereçamento, eles também compartilham
as mesmas variáveis globais.
 Assim, como cada thread pode acessar qualquer posição
de memória dentro do espaço de endereçamento do
processo, é possível a um thread ler, escrever ou até
apagar informações usadas por outra thread.
 Não existe um meio de proteção para isso, fica sob
responsabilidade do usuário este cuidado já que
normalmente criamos threads para cooperar e não
competir.
 O escalonamento entre threads acontece da mesma
forma que entre processos.

2
Exemplo
 Um processador de texto pode ter um
thread para exibir imagens, outro thread
para ler seqüências de teclas do usuário e
um terceiro thread para efetuar a correção
ortográfica em segundo plano.
 Onde todos os threads pertencentes ao
mesmo processo compartilham a sessão de
código, arquivos abertos, endereço de
memória e demais recursos do sistema.

Uso de Thread (1)

Um processador de texto com três threads


Pearson Education Sistemas Operacionais Modernos – 2ª Edição

3
O Modelo de Thread (2)

• Items compartilhados por todos os threads em um processo


• Items privativos de cada thread

Pearson Education Sistemas Operacionais Modernos – 2ª Edição

 Processo Multithread Este conceito é usado


para descrever a
situação em que
permite a existência
de múltiplos threads
no mesmo processo
Contexto Contexto Contexto
de hardware de hardware de hardware
Thread de
entrada
Contexto de
software

Buffer

Thread 1 Thread 2 Thread 3

Espaço de
endereçamento

Thread de Thread de
exibição gravação

4
Sistemas Operacionais com Java

Processos com Thread Única


e Múltithread

Silberschatz, Galvin e Gagne (c) 2003

Exemplo
 Um exemplo pode ser dado através de um jogo onde o
mesmo pode ser modelado com linhas de execução
diferentes, sendo uma para desenho de imagem e outra
para áudio.
 Nesta aplicação, teríamos uma thread para tratar rotinas
de desenho e outra thread para tratar instruções do
áudio.
 Para o usuário, a imagem é desenhada ao mesmo tempo
em que o áudio é emitido pelos auto-falantes.
 No entanto,para sistemas com uma única CPU, cada
linha de execução é processada por vez

10

5
Comunicação entre processos
 É comum processos que trabalham juntos
(concorrentes) compartilharem recursos do
sistema, como arquivos, registros,
dispositivos e áreas de memória.

 De maneira geral, o compartilhamento de


recursos entre processos pode gerar
situações indesejáveis, capazes até de
comprometer o sistema.

11

Sincronização e Comunicação entre Processos


 Sincronização e Comunicação

Sincronização

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

dado

Buffer

Os mecanismos que garantem a comunicação entre processos


concorrentes e acesso a recursos compartilhados são chamados
mecanismo de sincronização

12

6
Um exemplo

 Dois processos concorrentes trocam


informações através de operações de
gravação e leitura em um buffer.
 Um processo só poderá gravar dados no
buffer caso ele esteja cheio.
 Um processo só poderá ler dados
armazenados do buffer se existir algum dado
para ser lido.
 Em ambos os casos, os processos deverão
aguardar até que o buffer esteja pronto para
as operações de gravação ou de leitura.

13

Regiões críticas
 O que fazer para evitar condições de disputa?

 É impedir que dois ou mais processos acessem um


mesmo recurso no mesmo instante;
 Essa idéia de exclusividade de acesso é chamada
exclusão mútua (mutual exclusion);
 A exclusão mútua deve apenas afetar os processos
concorrentes quando um deles estiver fazendo acesso
ao recurso compartilhado;
 A parte do código do programa onde é feito o acesso
ao recurso compartilhado é denominada região crítica.
 Se pudermos evitar que dois processos entrem em
suas regiões críticas ao mesmo tempo, ou seja, se
conseguirmos a execução mutuamente exclusiva das
regiões críticas, evitaremos os problemas decorrentes
do compartilhamento.

14

7
Sistemas Operacionais com Java

O Problema dos Filósofos


na mesa de jantar
Filósofo i:
while (true) {
// apanha pauzinho da esquerda
chopStick[i].acquire();
// apanha pauzinho da direita
chopStick[(i + 1) % 5].acquire();
eating();
// devolve pauzinho da esquerda
chopStick[i].release();
// devolve pauzinho da esquerda
chopStick[(i + 1) % 5].release();
thinking();
}

• Dados compartilhados
– Semáforo chopStick[] = novo Semaphore[5];
Silberschatz, Galvin e Gagne (c) 2003

15

Problema do jantar dos filósofos


 É considerado um problema clássico de
sincronização;
 É um exemplo de uma vasta classe de
problemas de controle de
concorrência;
 É uma representação simples da
necessidade de alocar vários recursos
entre vários processos, sem incorrer
em deadlocks ou paralisação.

16

8
O Problema do Barbeiro
Sonolento (1)

Pearson Education Sistemas Operacionais Modernos – 2ª Edição

17

O Problema do Barbeiro Sonolento (2)

Solução para o problema do barbeiro sonolento


Pearson Education Sistemas Operacionais Modernos – 2ª Edição

18

9
Deadlocks
 Uma forma de explicar o que é um deadlock seja
com uma lei aprovada pela assembléia do estado
norte-americano de Kansas no início do século XX.
Dizia, em parte:

 “Quando dois trens se aproximarem um do


outro em um cruzamento, ambos deverão parar
completamente e nenhum dos dois deverá ser
acionado até que o outro tenha partido”.

19

Deadlocks

 Um processo é dito em deadlock quando está


esperando por um evento que nunca
ocorrerá.

 Essa situação é conseqüência, na maioria


das vezes, do compartilhamento de recursos
do sistema entre vários processos, sendo
que cada processo dever ter acesso ao
recurso de forma exclusiva (exclusão
mútua).

20

10
Sistemas Operacionais com Java

O Problema do Deadlock
Exemplo do Cruzamento da Ponte

• Tráfego em um único sentido


• Cada seção de uma ponte pode ser vista como um
recurso
• Se ocorrer um deadlock, ele pode ser resolvido se um
dos carros recuar (preemptar recursos e reverter)
• Vários carros podem ter de recuar se um deadlock
ocorrer
• É possível haver Starvation.

Silberschatz, Galvin e Gagne (c) 2003

21

Deadlocks

 Para que ocorram situações de deadlock em um


sistema, são necessárias pelo menos quatro condições:

 Cada recurso só pode estar alocado a um único


processo em um determinado instante (exclusão
mútua);
 Um processo, além dos recursos já alocados, pode
estar esperando por outros recursos;
 Um recurso não pode ser liberado de um processo
só porque outros processos desejam o mesmo
recurso (não-preempção);
 Um processo pode ter de esperar por um recurso
alocado a outro processo e vice-versa (espera
circular).

22

11
Sincronização e Comunicação entre Processos
 Deadlock – Espera Circular
Processo A

Processo A Recurso 1
solicita o alocado ao
Recurso 2 Processo A

Recurso 2 Recurso 1

Processo B

Recurso 2 Processo B
alocado ao solicita o
Processo B Recurso 1

23

Sistemas Operacionais com Java

Métodos para Tratamento de


Deadlocks

• Assegura que o sistema nunca entre em um


estado de deadlock

• Permite que o sistema entre em um estado de


deadlock e depois se recupere

• Ignora o problema e finge que o deadlock nunca


ocorre no sistema; usado pela maioria dos
sistemas operacionais, inclusive o UNIX

Silberschatz, Galvin e Gagne (c) 2003

24

12
Sistemas Operacionais com Java

Prevenção de Deadlock

• Manter e esperar – precisa garantir que sempre


que um processo requisitar um recurso, ele não
manterá quaisquer outros recursos
– Exige que cada processo requisite e receba a
alocação de todos os seus recursos antes de
iniciar sua execução, ou permite que um
processo requisite recursos apenas quando não
tiver nenhum outro
– Baixa utilização de recursos; possibilidade de
starvation

Silberschatz, Galvin e Gagne (c) 2003

25

Sistemas Operacionais com Java

Prevenção de Deadlock
• Sem preempção –
– Se um processo que estiver mantendo alguns
recursos requisitar outro recurso que não possa ser
alocado imediatamente para ele, então todos os
recursos atualmente mantidos são liberados
– Os recursos preemptados são acrescentados à lista
de recursos pelos quais o processo está esperando
– O processo será reiniciado somente quando puder
reaver seus recursos antigos, assim como os novos
que ele está requisitando

Silberschatz, Galvin e Gagne (c) 2003

26

13
Sistemas Operacionais com Java

Prevenção de Deadlock

• Espera circular – impõe uma ordenação total de


todos os tipos de recursos e exige que cada
processo requisite recursos em uma ordem
crescente de enumeração

Silberschatz, Galvin e Gagne (c) 2003

27

Sistemas Operacionais com Java

Evitar Deadlock

• Exige que o sistema tenha algumas informações a


priori adicionais disponíveis
– O modelo mais simples e útil exige que cada
processo declare o número máximo de recursos
de cada tipo que possa ser necessário
– O algoritmo para evitar deadlock examina
dinamicamente o estado de alocação de
recursos para garantir que a condição de espera
circular nunca possa existir
– O estado de alocação de recursos é definido
pelo número de recursos disponíveis e
alocados e pelas demandas máximas dos
processos

Silberschatz, Galvin e Gagne (c) 2003

28

14
Starvation (inanição)
 É a situação onde um processo nunca consegue executar sua
região crítica e conseqüentemente, acessar o recurso
compartilhado.

 Ocorre quando dois ou mais processos esperam por um


recurso alocado.
 No momento em que o recurso é liberado a escolha para
determinar qual o processo ganhará o acesso ao recurso pode
ser:

 de forma aleatória, existe a possibilidade de um processo nunca


ser escolhido e sofrer starvation.

 quando o sistema determina prioridades para os processos


acessarem o recurso. O sistema escolhe o processo mais
prioritário, podendo ocorrer que processos de baixa prioridade
esperem indefinidamente pelo recurso.

29

Exemplo de Starvation
 Dizem que, quando desativaram o
IBM 7094 no MIT em 1973,
encontraram um processo de baixa
prioridade que tinha sido submetido
em 1967 e ainda não tinha sido
executado.

30

15
Referências
 Arquitetura de Sistemas Operacionais, disponível em
http://www.training.com.br/aso/

 Machado, Francis B e Maia, Luiz Paulo; Arquitetura de


Sistemas Operacionais, Ed. LTC, Rio de janeiro, RJ

 Slides disponíveis para professores no site da Ed.


Campus e Ed. Pearson.

 Silberschatz, Galvin e Gagne, Sistemas Operacionais; Ed.


Campus, São Paulo, SP;

 TANENBAUM, A. Sistemas Operacionais Modernos. 2. ed.


Prentice Hall, 2003.

31

16