Anda di halaman 1dari 41

Sistemas Operacionais

Processos e Threads

Profa. Maria de Ftima Almeida Santos mfalmeida@hotmail.com UNIT Aracaju/SE

Conceito de Processo

Abstrao de um programa em execuo. Processo = programa + entrada + sada + estado Um programa o conjunto de instrues necessrias execuo das operaes desejadas, enquanto um processo o programa associado ao seu conjunto de dados e variveis em determinado instante da execuo. Exemplo:

Um compilador um programa que pode ser executado por vrios usurios de uma s vez; neste momento, temse um nico programa (o compilador), mas vrios processos (um para cada compilao).

Conceito de Processo

Nos sistemas multiprogramados o processador pode ser chaveado entre vrios processos:

Pseudoparalelismo Cdigo do programa; Atividade corrente conforme Contador de Programa e valores correntes de todos o registradores do HW; Pilha de Processo, que contm dados temporrios

Um processo envolve:

parmetros de mtodos, endereos de retorno, etc;

Conceitualmente cada processo tem seu processador virtual;

Conceito de Processo

Conceitualmente cada processo tem seu processador virtual; O que acontece o rpido chaveamento do processador; O comportamento de um processo no determinstico;

Conceito de Processo

Processos CPU-Bound x IO-Bound

E/ S

E/ S

UCP

UCP

tempo (a) CPU-bound (b) I/ O-bound

tempo

Estados de um Processo

1. Processo espera entrada de dados. 2. Outro processo escolhido para rodar. 3. CPU entregue ao novo processo. 4. Entrada de dados concluda.

Implementao de Processos

Estrutura de um Processo
PID owner (UID) prioridade de execuo data/ hora de criao tempo de processador quotas privilgios
Espao de Endereamento

nome

registradores gerais registrador PC

Contexto de Software

Contexto de Hardware

registrador SP

Programa

registrador de status

endereos de memria principal alocados

Implementao de Processos

Bloco de Controle de Processo (BCP)

Contm informaes associadas ao processo como:


estado do processo; contador do programa e apontador de pilha; valor dos registradores da CPU; informaes sobre escalonamento; informaes de contabilizao de uso do processador; informaes de E/S (lista de dispositivos alocados, lista de arquivos abertos, etc);

BCP pode ser implementado como uma tabela de processos, com uma entrada por processo.

Implementao de Processos

Listas de BCPs
Lista de processos em estado de pronto PCB# 5
. . . . . . . .

PCB# 1

. . . . . . . .

Lista de processos em estado de espera


. . . . . . . . . . . . . . . . . . . . . . . .

PCB# 9

PCB# 2

PCB# 4

Troca de Contexto
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

Threads

O modelo de processo considera que um processo um programa que realiza um nico fluxo de execuo; Isso s permite que o processo execute uma tarefa de cada vez; SOs modernos estendem este conceito para permitir que um processo tenha vrios fluxos de execuo, ou threads;

Threads

O processo pode executar mais de uma tarefa a cada vez; Permite que mltiplas execues ocorram no mesmo ambiente do processo com uma grau de independncia umas das outras; Tambm chamadas de Processos Leves;

Aplicaes multithread

Vantagens ?

Threads

Tentativa de reduzir o tempo gasto na criao, eliminao e troca de contexto e economizar recursos como um todo; Threads compartilham o processador da mesma forma que processos; Cada thread possui seu prprio contexto de hardware, porm compartilha contexto de software e espao de endereamento com demais threads do processo;

Threads

O programador e a linguagem devem prover proteo contra interferncias Algumas linguagens possuem modelo de concorrncia prprio (ex: ADA e Java) Outras linguagens utilizam extenses para lidar com threads (ex: C tipicamente usa Posix)

Processos Paralelos

No nosso dia a dia, encontramos vrias tipos de atividades que podem (e at devem) ser desenvolvidas em paralelo. Exemplo: construo de um prdio

Justificativa para o uso de paralelismo:


muitos recursos (trabalhadores) esto disponveis o resultado (prdio pronto) obtido em menor tempo.

Na computao, a mesma justificativa vlida para o paralelismo (multiprogramao):


muitos recursos (CPU, memria, discos etc.) esto disponveis deseja-se sempre obter baixo tempo de resposta

Comunicao entre processos

Processos paralelos podem ser:

Independentes:

Atividade de um no depende/interfere na do outro Implementao simples Atividade de um depende/interfere na atividade do outro necessrio algum mecanismo de comunicao, que em geral envolve acesso a variveis compartilhadas O acesso simultneo a uma mesma varivel pode conduzir a resultados imprevisveis (condio de corrida) Soluo: Excluso mtua a regies crticas

Concorrentes ou Cooperantes:

Comunicao entre processos

Condio de Corrida (race condition)

Vrios processos tentando acessar mesmo dado e resultado depende de qual deles executa no momento certo Parte do programa onde a memria compartilhada acessada. Seqncia de operaes executadas por um processo sobre um conjunto de variveis compartilhadas.

Regio crtica (RC)


Um processo pode ter uma ou mais regies crticas e uma RC pode ter uma ou mais variveis compartilhadas Excluso mtua a RC um problema difcil!!!

Comunicao entre processos

Se dois processos esto executando concorrentemente, potencialmente qualquer entrelaamento das instrues pode ocorrer. Exemplo: processos SomaUm e SomaDois com os seguintes cdigos:
SomaUm x = x + 1; SomaDois x = x + 2;

Cada um desses processos tm um nico comando, mas trs instrues : (1) LD x (l x da memria), (2) adiciona constante, e (3) e ST x (escreve o novo valor de x na memria). Resultado no determinstico!

Comunicao entre processos

Excluso mtua tem como objetivo sincronizar processos de forma a garantir que determinadas partes do cdigo sejam executadas por no mximo um processo de cada vez; O desenvolvedor deve identificar as regies crticas do programa e utilizar alguma primitiva de comunicao; Sincronizao condicional permite que o programador faa com que um processo espere uma dada condio ser verdadeira antes de continuar sua execuo. O desafio para o desenvolvedor est em identificar onde colocar sincronizaes condicionais;

Comunicao entre processos

Condies para uma boa soluo do problema de excluso mtua:


Dois processos no podem estar simultaneamente na sua regio crtica Nenhuma suposio pode ser feita a respeito da velocidade relativa de processamento ou do nmero de CPUs Nenhum processo parado fora da regio crtica pode bloquear outros processos Nenhum processo deve esperar indefinidamente para entrar em sua regio crtica.

Solues para Excluso Mtua

Inibir interrupes na entrada da RC


Soluo mais simples O processo monopoliza a CPU e executa a RC do comeo ao fim de maneira ininterrupta Desvantagens: Se a RC longa, inibir interrupes pode ser inaceitvel Se o processo que inibiu as interrupes no retornar da RC, elas ficaro inibidas indefinidamente.

Fim do sistema

Processos rodando em outras CPUs podem entrar na RC Tcnica til para ser usada pelo ncleo do SO, mas no apropriado como mecanismo geral de excluso mtua para processos do usurio.

Solues para Excluso Mtua

Variveis de Travamento

Varivel compartilhada que indica se a regio est liberada ou no; Valor inicialmente 0; Antes de entrar o processo verifica o valor; Se for 0 ele seta para 1 e entra; Se for 1, o processo espera; Existe algum problema nesta soluo?

Solues para Excluso Mtua

Estrita Alternncia

Varivel indica de quem a vez de entrar na RC; Uso da espera ocupada, que deve ser evitada, em razo de consumir tempo de processador; O que acontece se um dos processos for muito mais rpido do que outro? Entrada estritamente alternada dos processos em suas regies crticas;

Solues para Excluso Mtua

Soluo de Peterson

int turn; int interested (N); void enter_region (int process) { int other; other = 1 process; interested [process] = true; turn = process; while (turn == process && interested[other] == true) } void leave_region(int process) { interested [process] = false }

Solues para Excluso Mtua


Solues tm o inconveniente de usar a Espera Ocupada nas suas implementaes; As solues apresentadas colocam o processo em um loop at que seja permitido acessar a RC; Alm de gastar processador pode levar a alguns problemas:

Problema da Prioridade Invertida;

Busca por primitivas que bloqueiem a continuao da execuo do processo ao invs de gastar processador; Primitivas SLEEP e WAKEUP:

bloqueiam e acordam o processo respectivamente.

Solues para Excluso Mtua

Primitivas SLEEP e WAKEUP:

O Problema do Produtor-Consumidor: Dois processos compartilham um buffer de tamanho fixo; O produtor coloca informaes no buffer e o consumidor, retira; Caso o buffer esteja cheio, o produtor deve ser colocado para dormir; Se o buffer estiver vazio, o consumidor deve dormir, sendo acordado quando o produtor colocar algo no buffer; Pode levar a condies de corrida; Varivel (count) usada para controlar nmero de itens no buffer; Nmero mximo de itens no buffer = N;

Solues para Excluso Mtua

O Problema do Produtor-Consumidor: Produtor Consumidor

while true do while true do Produz_item; if (Count == 0) sleep(); if (Count == N) sleep(); Remove-item; Grava_item; Count = count 1; Count = Count +1; if(Count ==N-1)wakeup(Produtor); if(Count ==1)wakeup(Consumidor) Consome_item; end; end;

Solues para Excluso Mtua

O Problema do Produtor-Consumidor:

Condies de corrida podem ocorrer por causa do acesso irrestrito a Count; O que acontecer se o Consumidor interrompido logo aps ter lido Count = 0 ? O produtor comea a rodar logo depois disso colocando um item no buffer; Como Count era igual a 0 ele tenta acordar o Consumidor que no est dormindo e sim interrompido; Quando o Consumidor voltar a rodar a sim ser bloqueado. O produtor vai produzir at encher o buffer e tambm ser bloqueado...

Solues para Excluso Mtua

Semforos:

Soluo proposta por Dijkstra; Um novo tipo de varivel foi criado: o Semforo Operaes DOWN e UP atmicas; DOWN(s)

Se s > 0, faz s = s 1 e quem chamou DOWN(s) entra na RC Se s = 0, RC est ocupada e quem chamou DOWN(s) bloqueado, ficando numa fila associada ao semforo s faz s = s + 1; se houver processos bloqueados na fila associada a s, um deles escolhido de forma justa e colocado no estado pronto para rodar para tentar DOWN(s) novamente.

UP(s):

Solues para Excluso Mtua

Semforos:
Processo deseja entrar na regio crtica

DO

0)

N W

W N

(S >

= (S

D O

0)

UP (S) - processo sai da regio crtica Libera processo da fila de espera Processo acessa a regio crtica Fila de espera de processos

Solues para Excluso Mtua

Semforos:
(* excluso mtua *) var mutex: semaphore := 1;

thread P1; statement X down(mutex); statement Y up(mutex); statement Z end P1;

thread P2; statement A; down(mutex); statement B; up(mutex); statement C; end P2;

Solues para Excluso Mtua


Os semforos e as operaes sobre eles so usualmente implementados como chamadas do SO; Implementados pela primeira vez em uma LP de alto nvel pelo ALGOL; Exemplo: Produtor-Consumidor usando Semforos

Os semforos resolvem o problema da perda de sinais; Uso de trs semforos:


Full: conta posies do buffer j preenchidas; Empty: nmero de posies disponveis; Mutex: para garantir acesso exclusivo RC;

Full e Empty resolvem o problema da sincronizao entre os processos; Mutex resolve o acesso RC;

Solues para Excluso Mtua


Produtor Consumidor while true do while true do
Produz_item; down(full); down(empty); down(mutex); down(mutex); Remove item; Coloca mensagem; up(mutex); up(mutex); up(empty); up(full); Consome item;

end;

end;

Solues para Excluso Mtua

Monitores (Hoare/1974, Hansen/1975)

Coleo de procedimentos que operam sobre variveis compartilhadas por vrios processos, onde cada procedimento corresponde a uma RC.

Processos no podem ter acesso direto s estruturas de dados internas ao monitor. uma construo de linguagem de programao e no uma chamada ao sistema.

Garantia de excluso mtua: apenas um processo pode estar ativo dentro do monitor a cada instante.

Um processo executa sua RC atravs de uma chamada a um procedimento do monitor.

Solues para Excluso Mtua

Monitores (Hoare/1974, Hansen/1975)

Garantia de excluso mtua: apenas um processo pode estar ativo dentro do monitor a cada instante.

Cabe ao compilador implementar a excluso mtua


Uma forma comum atravs de semforos; O programador basta saber que deve colocar as regies crticas em procedimentos do monitor;

Sincronizao (bloqueio e desbloqueio) entre processos feito por meio de primitivas WAIT e SIGNAL; Java suporta monitores;

Adicionando a palavra synchronized declarao de um mtodo, Java garante que, uma vez iniciado qualquer thread executando aquele mtodo, a nenhum outro thread ser permitido executar qualquer outro mtodo synchronized naquela classe;

Solues para Excluso Mtua

Monitores (Hoare/1974, Hansen/1975)


Lidar com semforos e condies muito baixo nvel e muito sujeito a erros Monitores encapsulam sees crticas como procedimentos de um modulo, sendo portanto muito mais fceis de programar

Todas as chamadas ao procedimentos so executadas sob excluso mtua Estruturas de sincronizao esto embutidas no monitor

Solues para Excluso Mtua

monitor ProdutorConsumidor
procedure produz (mensagem); /* RC do Produtor */ if Count = n then WAIT(full); enter_item; count = count + 1; if count ==1 then SIGNAL(empty); end; /* produz */ procedure consome (mensagem); if count = 0 then WAIT(empty); remove_item; count = count - 1; if count = N-1 then SIGNAL(full); end; */ consome */ /*RC do Consumidor */

Solues para Excluso Mtua


procedure produtor; while true do Produz mensagem; ProdutorConsumidor.produz (mensagem); end; end; /* produtor */ procedure consumidor; while true do ProdutorConsumidor.consome (mensagem); Consome mensagem; end; end; /* consumidor */

end; /* ProdutorConsumidor */

O uso de Threads na Prtica


As duas formas mais populares hoje em dia de programao com threads so o uso da linguagem Java e o uso uma biblioteca de threads padro, a pthreads. Pthreads oferecem ao programador primitivas para administrao de threads, para acesso exclusivo a regies crticas (mutexes) e variveis de condio A definio completa pode ser encontrada no padro IEEE POSIX 1003.4a, e exemplo de implementao

O uso de Threads na Prtica


Java tem monitores orientados a objeto Em Java, existe um lock associado a cada objeto que no pode ser acessado diretamente pela aplicao Quando um mtodo identificado como synchronized, o acesso e feito apenas quando o lock associado com o objeto obtido Java associa condies a cada objeto Classe java.lang.Thread e interface java.lang.Runnable:

permitem que threads sejam definidas e seus estados de execuo e a colaborao sejam gerenciados;

O uso de Threads na Prtica


A classe java.lang.Thread representa um thread de execuo Java permite a definio de regies crticas atravs da palavra-chave synchronized wait() espera pela condio do objeto notify() e notifyAll() acordam threads esperando pela condio

Anda mungkin juga menyukai