Sistemas Operacionais Processos Plano de Apresentação O Modelo de Processo Definição Características Hierarquia Implementação Estados Transição de Estados O Modelo de Comunicação Comunicação Interprocessos Comunicação Interprocessos Condição de competição Seções críticas zeque - Grad. CC Exclusão mútua solução de software TSL Primitivas de comunicação sleep/wakeup semáforos contadores de eventos Monitor Problemas Clássicos 1 O Modelo de Processo Definição Um processo é um programa que está sendo executado Um processo é uma atividade assíncrona UNIX: Programas Processos pilha do processo no kernel Área de usuário argv , envp pilha do usuário heap Tabela de símbolos bss-block started by symbol Dados Inicializados Dados Inicializados Texto Texto Cabeçalho Número Mágico Espaço de Endereços Arquivo Executável zeque - Grad. CC 2 O Modelo de Processo Características Processos seqüenciais Multiprogramação Processamento de Interrupçoes Tipos de Interrupções chamadas ao supervisor interrupções de dispositivos interrupções externas excessões falhas de máquina Chaveamento de processos zeque - Grad. CC 3 O Modelo de Processo Hierarquia de Processos Processos de Sistema Processos de Usuário Hierarquia na Criação Processo PAI Processo FILHO zeque - Grad. CC 4 O Modelo de Processo Implementação de Processo Contexto: Representação de um processo por um conjunto de dados Registro descritor ou bloco de controle: estado do processo, contador de instruções, apontador para pilha de execução, alocação de memória, arquivos, dispositivos contabilidade, escalonamento zeque - Grad. CC 5 O Modelo de Processo Estados de um Processo pronto bloqueado em execução zeque - Grad. CC 6 O Modelo de Processo Transição de Estado de um Processo despacho (procId): prontoem execução tempoesgotado(procId): em execução pronto bloqueio(procId): em execução bloqueado desbloqueio(procId): bloqueado pronto Em execução interrupção do relógio Chamada ao sistema Bloqueado despacho atendimento do pedido Pronto Diagrama de transição de estados de um processo zeque - Grad. CC 7 O Modelo de Comunicação P1 P2 Pn Chamada ao sistema Despacho Sistema Operacional Inicia E/S D1 Interrupção D2 Dk zeque - Grad. CC 8 Comunicação Interprocessos Condição de competição Seções críticas Exclusão mútua Primitivas de comunicação espera ocupado espera bloqueado Monitor Problemas Clássicos zeque - Grad. CC 9 Comunicação Interprocessos Exclusão Mútua Desabilitando interrupções Controlando por software (construção MUTEXBEGIN/MUTEXEND) processo p1 faça até acabar calcule; MUTEXBEGIN acesse RC; MUTEXEND calcule; fim. processo p2 faça até acabar calcule; MUTEXBEGIN acesse RC; MUTEXEND calcule; fim. zeque - Grad. CC 10 Comunicação Interprocessos Exclusão Mútua MUTEXBEGIN/MUTEXEND variáveis de bloqueio MUTEXBEGIN: enquanto (ocupado) faça ocupado = V; MUTEXEND: ocupado = F; alternância estrita MUTEXBEGIN: enquanto (vez = MinhaVez) faça ; MUTEXEND: Vez = VezOutro; zeque - Grad. CC 11 Comunicação Interprocessos Exclusão Mútua MUTEXBEGIN/MUTEXEND solução de Peterson MUTEXBEGIN: necessidade(minha) = V; enquanto (necessidade(outro)) faça se vez = minha então faça necessidade(minha) = F; enquanto (vez = minha) faça ; necessidade(minha) = V; fim; fim; MUTEXEND: necessidade(minha) = F; vez = outro; zeque - Grad. CC 12 Comunicação Interprocessos Exclusão Mútua instrução TSL (Test and Set Lock) MUTEXBEGIN: TESTANDSET(ocupado) enquanto (codigo) faça TESTANDSET(ocupado); fim; MUTEXEND: ocupado = F; zeque - Grad. CC 13 Comunicação Interprocessos sleep/wakeup semáforos contadores de eventos monitores passagem de mensagens outras zeque - Grad. CC 14 Primitivas de Comunicação lock/unlock declare (g) gate; lock (g); ... unlock(g); sleep/wakeup block/wakeup sleep; ... wakeup(p); zeque - Grad. CC 15 Primitivas de Comunicação Semáforos declare (s) semaphore initial (i); P(s); /* espera até que s>0 e então decrementa s */ ... V(s); /* incremanta s */ zeque - Grad. CC 16 Primitivas de Comunicação Contadores de eventos declare (e) event_counter; Read(e); /* retorna o valor atual de e */ Advance(e); /* incrementa e */ Await(e,v); /* espera que e tenha um valor igual ou supeior a v */ declare (e) event; Completion(e)= ...; /* true or false */ ... call p event(e); wait(e); zeque - Grad. CC 17 Monitor Construção de concorrência Px P jP b Pv PqP a entradai-1 entradai Pi Região Crítica condiçãoj Pk condiçãok Pr P tP c entradai+1 Sinalizador Visão abstrata do Conceito de Monitor zeque - Grad. CC 18 Monitor: Problemas Clássicos Controle de um Recurso resource:Monitor; declare(in_use) bit; declare(available) condition; do in_use=false end do; acquire:Entry; if in_use then wait(available); in_use=true; end acquire; release:entry; in_use=false; signal(available); end release; end resource; zeque - Grad. CC 19 Monitor: Problemas Clássicos O BUFFER Circular CircularBuffer: Monitor; declare(Buffer(5))character(80)varying; declare(head,tail,#Buffers,#Full)fixed; declare(BufferVacant,BufferOccupied)condition; do Head=1; Tail=1; #Buffers=5; #Full=0; end; Spool: Entry(Contents); ... end Spool; UnSpool: Entry(Contents); ... end UnSpool; end CircularBuffer; zeque - Grad. CC 20 Monitor: Problemas Clássicos O BUFFER Circular (cont) Spool: Entry(Contents); declare(Contents)character(*)varying; if #Full=#Buffers then wait(BufferVacant); Buffer(Tail)=Contents; Tail=mod(Tail,#Buffers)+1; #Full=#Full+1; signal(BufferOccupied); end Spool; zeque - Grad. CC 21 Monitor: Problemas Clássicos O BUFFER Circular (cont.) UnSpool: Entry(Contents); declare(Contents)character(*)varying; if #Full=0 then wait(BufferOccupied); Contents=Buffer(Head); Head=mod(Head,#Buffers)+1; #Full=#Full-1; signal(BufferVacant); end UnSpool; zeque - Grad. CC 22 Monitor: Problemas Clássicos Leitores/Escritores FileAccess: Monitor; declare(true,false)bit; declare(#Reading)bit; declare(activeWriter)bit; declare(OkToRead,OkToWrite)condition; do true=1’b’; false=0’b’;#Reading=0; activeWriter=false; end; zeque - Grad. CC 23 Monitor: Problemas Clássicos Leitores/Escritores (cont.) StartRead: Entry; if activeWriter|empty(OkToWrite) then wait(OkToRead); #Reading=#Reading+1; signal(OkToRead); end StartRead; EndRead: Entry; #Reading=#Reading-1; if #Reading=0 then signal(OkToWrite); end EndRead; zeque - Grad. CC 24 Monitor: Problemas Clássicos Leitores/Escritores (cont.) StartWrite: Entry; if #Reading=0|activeWriter then wait(OkToWrite); activeWriter=true; end StartWrite; EndWrite: Entry; activeWriter=false; if empty(OkToRead) then signal(OkToRead) else signal(OkToWrite); end EndWrite; end FileAccess; zeque - Grad. CC 25