Computação Concorrente (MAB-117) Monitores
|
|
|
- Valdomiro Sampaio Viveiros
- 10 Há anos
- Visualizações:
Transcrição
1 Computação Concorrente (MAB-117) Monitores Prof. Silvana Rossetto 1 Departamento de Ciência da Computação (DCC) Instituto de Matemática (IM) Universidade Federal do Rio de Janeiro (UFRJ) Maio de Conceitos básicos sobre monitores O uso das primitivas de semáforos para tratar as questões de sincronização em ambientes de memória compartilhada tem duas dificuldades associadas [1]: 1. erros de programação: as operações sobre semáforos são chamadas a subrotinas, uma inversão na ordem das chamadas pode facilmente levar o programa a situações de bloqueio indefinido; 2. dificuldade de manutenção do código: o uso dos semáforos aparece de forma explícita ao longo do programa, tornando difícil a tarefa de manutenção do código. O conceito de monitores foi sugerido para lidar com essas dificuldades. Neste texto descrevemos o conceito de monitor, as diferentes formas de implementação e outras questões relacionadas Definição de monitor Um monitor é uma construção de Linguagem de Programação que provê funcionalidade equivalente a semáforos e é mais fácil de controlar. O conceito de monitores foi proposto por Hoare, em 1974, e pode ser definido como um módulo de software que consiste de um ou mais procedimentos, uma sequência de inicialização, variáveis de condição e estado interno [2]. Exemplos de linguagens que implementam o conceito de monitores incluem: Modula-2, Modula-3, Concurrent Pascal e Java. Uma das características que distingue monitores de outras estruturas de programação é que apenas uma operação interna pode estar ativa a cada instante de tempo. Se uma thread chama uma operação do monitor e ele encontra-se ocupado, a thread é automaticamente bloqueada até o monitor ficar livre [1]. Essa característica permite implementar a sincronização por exclusão mútua. Outra característica particular de monitores é que qualquer operação pode suspender a si mesma colocando-se em espera por uma variável de condição [1]. Essa característica permite implementar a sincronização por condição. Uma operação pode também sinalizar uma variável de condição fazendo com que uma thread bloqueada nessa variável seja acordada (desbloqueada). As variáveis de condição não possuem memória (diferente de semáforos): se um sinal é emitido e não existe nenhuma thread bloqueada nessa variável o sinal é perdido [1] Semântica original de monitores Na definição original de monitores, proposta por Hoare, as características principais de monitores são [2]:
2 1. As variáveis locais (definidas dentro do monitor) são acessíveis apenas pelos procedimentos oferecidos pelo monitor; 2. Uma thread entra no monitor invocando um dos seus procedimentos; 3. Apenas uma thread pode estar executando no monitor a cada instante, qualquer outra thread que invocar o monitor será bloqueada até que o monitor fique livre. As variáveis de condição são tipos de dados especiais dentro do monitor e acessíveis apenas dentro dele. Essas variáveis são operadas por duas funções apenas [2]: cwait(c): suspende a execução da thread na variável de condição c, o monitor fica disponível para uso por outras threads; csignal(c): retoma a execução de alguma thread bloqueada depois de um cwait sobre a mesma variável de condição, se há várias threads bloqueadas nessa condição, escolhe uma delas, caso contrário o sinal é perdido. Hoare define várias filas de threads para entrada no monitor [1]: uma fila associada a cada variável de condição; uma fila de entrada no monitor (para as threads que aguardam entrada quando o monitor está ocupado); uma fila de urgência (para as threads que executam uma sinalização de dentro do monitor e existe uma thread esperando nessa condição). Quando uma thread sai do monitor completando a operação requisitada ou esperando em uma variável de condição ela desbloqueia a primeira thread na fila de urgência, ou, caso essa fila esteja vazia, na fila de entrada Implementação do problema do produtor/consumidor usando monitores O pseudo-código abaixo ilustra como usar monitores para implementar o problema do produtor/consumidor [2]. monitor Prod-Cons { const int tam_buffer = N; T_item buffer[n]; int in, out; int count; cond naocheio, naovazio; //ponteiros para entrada e saída de itens //número de itens no buffer //variáveis de condição in = 0; out = 0; count = 0; //código de inicialização void INSERE (T_item item) { if (count == N) cwait(naocheio); //buffer cheio, bloqueia o produtor buffer[in] = item; in = (in + 1) % N; count++; csignal(naovazio); //desbloqueia qualquer consumidor T_item RETIRA () { if (count == 0) cwait(naovazio); //buffer vazio, bloqueia o consumidor item = buffer[out]; out = (out + 1) % N;
3 count--; csignal(naocheio); //desbloqueia qualquer produtor void Produtor() { while(true) { produz_item(x); INSERE(x); //fora da secao critica void Consumidor() { while(true) { y = RETIRA(); consome_item(y); //fora da secao critica void main() { //inicia threads produtoras e consumidoras Outra vantagem importante de monitores sobre semáforos é que todas as funções de sincronização são confinadas no monitor [2]. Dessa forma é mais fácil verificar se a sincronização foi implementada corretamente e corrigir os possíveis erros. Além disso, uma vez que o monitor foi corretamente programado, o acesso protegido ao recurso compartilhado está garantido para todas as threads. Com semáforos, ao contrário, o acesso ao recurso compartilhado só está corretamente implementado quando todos os trechos de código (em todas as threads) que fazem acesso ao recurso estão corretamente implementados Modelo alternativo de monitores com notify e broadcast A definição de monitores de Hoare exige que, caso exista ao menos uma thread na fila de uma condição quando essa condição é sinalizada, o controle do monitor deve ser passado imediatamente para essa thread. Para isso, a thread que chamou csignal deverá sair imediatamente do monitor ou ser bloqueada na fila de entrada do monitor. Há dois problemas com essa abordagem [2]: 1. Se a thread que emitiu o csignal não terminou ainda com o monitor, então duas novas trocas de contexto serão necessárias: uma para bloquear essa thread e outra para retomá-la quando o monitor ficar livre. 2. O escalonamento da thread desbloqueada com o csignal deverá ser perfeitamente confiável. Quando o csignal é emitido, uma thread na fila da condição sinalizada deverá ser ativada imediatamente e o escalonador deverá garantir que nenhuma outra thread entre no monitor antes da ativação, caso contrário, a condição sobre a qual a thread foi desbloqueada poderá mudar. Para lidar com esses problemas, Lampson e Redell propuseram uma definição alternativa de monitores (usada nas linguagens Mesa e Modula-3) [2]. A primitiva csignal é substituída pela primitiva cnotify com a seguinte interpretação: quando uma thread em um monitor executa cnotify(c), a fila da condição c é notificada e a thread corrente
4 continua executando (não é retirada do monitor). O resultado da notificação é que uma thread da fila de condição é desbloqueada e poderá voltar ao monitor quando ele ficar livre. Como não há garantia de que a condição c será preservada até que essa thread volte ao monitor, a thread deverá reavaliar a condição. O pseudo-código abaixo ilustra a alteração na implementação do monitor para o problema do produdor/consumidor usando cnotify. A sentença if é substituída pelo loop while [2]: void INSERE (T_item item) { while (count == N) cwait(naocheio); //buffer cheio, bloqueia produtor buffer[in] = item; in = (in + 1) % N; count++; cnotify(naovazio); //desbloqueia qualquer consumidor T_item RETIRA () { while (count == 0) cwait(naovazio); //buffer vazio, bloqueia consumidor item = buffer[out]; out = (out + 1) % N; count--; cnotify(naocheio); //desbloqueia qualquer produtor Com essa alteração, há pelo menos uma avaliação extra da condição, por outro lado não há a necessidade de trocas de contexto adicionais e nenhuma restrição sobre quando a thread deverá voltar ao monitor depois de receber um cnotify. Com a idéia de notificação ao invés de reativação imediata, é possível incorporar outra primitiva ao monitor: cbroadcast. Essa primitiva faz todas as threads na fila da condição serem notificadas. Isso é conveniente em situações onde não é possível saber quantas threads deveriam ser reativadas (um exemplo é o caso do problema do produtor/consumidor quando o produtor inclui vários itens de uma só vez) [2]. 2. Monitores em Java A linguagem Java implementa uma definição de monitores baseada na proposta de Lampson e Redell. Todo objeto acessível por mais de uma thread pode ter um lock de exclusão mútua implícito, adquirido e liberado por meio da sentença de sincronização synchronized [1]. Exemplo: synchronized (obj) {... //seção crítica Todas as execuções de sentenças synchronized que se referem ao mesmo objeto compartilhado excluem a execução simultânea de outras execuções. Um açúcar sintático oferecido por Java é prefixar um método de uma classe com synchronized. Nesse caso, o corpo do método é protegido pela sentença synchronized (referência ao objeto this).
5 Dentro de uma sentença ou método synchronized, uma thread pode suspender ela mesma chamando o método wait(), sem argumentos. Normalmente o uso de wait aparece dentro de uma repetição condicional. Exemplo: while (!condicao) { wait(); A thread que chama wait de dentro de um objeto libera o lock (bloqueio) desse objeto. Para retomar a execução de uma thread suspensa em um dado objeto, alguma outra thread deve executar o método notify() de dentro de uma sentença ou método synchronized que se refere ao mesmo objeto. O método notify não recebe argumentos, o sistema de execução escolhe uma thread qualquer suspensa na fila do objeto e a desbloqueia. Se não houver threads suspensas para esse objeto, o notify é perdido. Outro método disponibilizado por Java é notifyall(). Nesse caso todas as threads suspensas no objeto são desbloqueadas Restrições da implementação de monitores em Java Vimos que as operações Java wait, notify e notifyall, combinadas com métodos synchronized e classes definidas pelo usuário permitem construir objetos com características de monitores. Há, entretando, algumas diferenças importantes em relação a outras linguagens de programação que oferecem suporte completo a monitores (por exemplo, Concurrent Pascal). Primeiro, em Java não existe suporte de compilação para checar e previnir condições de corrida no programa. (Lembrando, existe condição de corrida em um programa quando o resultado da computação depende da ordem ou do instante de execução dos fluxos de controle concorrentes. Quando o resultado da computação pode ser incorreto, a condição de corrida é ruim e deve ser eliminada, em outros casos ela pode ser permitida.) Adicionar a palavra reservada synchronized aos métodos de uma classe Java automaticamente provê exclusão mútua para threads que acessam os atributos de uma instância dessa classe via esses métodos. Entretanto, se por descuido algum desses métodos de acesso aos atributos de um objeto não é precedido de synchronized, pode ocorrer condições de corrida (a linguagem Java não provê ferramentas de análise do código para apontar possíveis erros de implementação no acesso a variáveis compartilhadas no programa). Outra particularidade de Java é que não há variáveis de condição explícitas. Quando uma thread executa uma operação wait, a thread fica bloqueada na fila de uma variável de condição implícita, associada com o objeto do bloco synchronized. O fato de ter apenas uma variável de condição por objeto de sincronização torna o uso de monitores mais difícil [3] Filas de condição em Java Assim como todo objeto Java pode agir como um lock, todo objeto Java também pode agir como uma fila de condição. Os métodos wait, notify e notifyall (da classe Object) são a API para acesso às filas de condição intrínsicas de cada objeto [4].
6 Um aspecto importante é que o lock e a fila de condição intrínsicas de um objeto estão sempre relacionados: para chamar qualquer método da fila de condição sobre um objeto X, a thread deve possuir o lock do objeto. Essa dependência deve-se ao fato de que a espera por uma determinada condição está sempre associada a uma informação de estado, e informações de estado estão necessariamente protegidas por mecanismos que visam preservar a consistência das informações que caracterizam o estado: uma thread não pode esperar por uma condição a menos que ela possa examinar as informações de estado; e uma thread não pode liberar outra thread que espera pela condição a menos que ela possa modificar as informações de estado. Object.wait() atomicamente libera o lock e pede ao Sistema Operacional para suspender a thread corrente, permitindo que outras threads adquiram o lock e modifiquem o estado do objeto protegido. Depois de ser desbloqueada, a thread deve readquirir o lock antes de retomar a sua execução a partir do ponto em que foi bloqueada notify versus notifyall Como há apenas uma variável de condição implícita associada a um objeto de locação, pode ocorrer de duas ou mais threads estarem esperando na mesma variável, mas por condições lógicas distintas. Por isso, o uso das operações notify e notifyall deve ser feito com cuidado [3]. Uma chamada notifyall acorda (desbloqueia/sinaliza) todas as threads esperando naquele objeto, mesmo que estejam em subgrupos de espera distintos. As threads sinalizadas devem readquirir o lock do bloco synchronized e então checar novamente se podem continuar executando. Esse tipo de semi-espera-ocupada pode causar impactos no desempenho da aplicação (ex., uma thread é acordado, ganha o controle da CPU e verifica que deve voltar a se bloquear, todo esse processamento poderia ser economizado). Por outro lado, se notify for usado ao invés de notifyall, a única thread acordada pode ser membro de um subgrupo errado (que não tem a condição lógica para prosseguir naquele momento). O uso de notify (ao invés de notifyall) deveria ocorrer apenas quando os seguintes requisitos são atendidos: todas as threads esperam pela mesma condição lógica; cada notificação deve permitir que apenas uma thread volte a executar Simulando várias variáveis de condição É possível usar objetos Java para obter o efeito que é similar ao uso de várias variáveis de condição [3]. Usando um bloco synchronized (ao invés de preceder os métodos com synchronized), podemos criar blocos de código sincronizados em locks distintos, e com eles permitir filas de condição distintas. 3. Exercícios 1. O que é um monitor? 2. Como as variáveis de condição dos monitores diferem dos semáforos? 3. Enumere as vantagens de monitores sobre semáforos. 4. Quais são os problemas encontrados na utilização da definição original de monitores?
7 5. Como o modelo alternativo com notify e broadcast resolve esses problemas? 6. Descreva como o conceito de monitor é implementado em Java. 7. Sumarize como monitores podem ser usados para implementar o controle de acesso a um recurso compartilhado. Referências [1] M. L. Scott. Programming Language Pragmatics. Morgan-Kaufmann, 2 edition, [2] W. Stallings. Operating Systems Internals and Design Principles. Pearson - Prentice Hall, 6 edition, [3] Richard H. Carver and Kuo-Chung Tai. Modern multithreading. Wiley, [4] Brian Goetz et.al. Java Concurrency in Practice. Addison Wesley, 2006.
Sistemas Operacionais
AULA 09 Sincronização de Processos - II Monitores Conforme comentamos, o uso equivocado dos semáforos pode levar a uma situação de deadlock, por isso devemos tomar cuidado ao programar utilizando este
Revisão Ultima aula [1/2]
SOP - TADS Comunicação Interprocessos - 2 IPC Prof. Ricardo José Pfitscher [email protected] Material cedido por: Prof. Rafael Rodrigues Obelheiro Prof. Maurício Aronne Pillon Revisão Ultima aula
Monitores. Conceito Sistemas Operacionais II
Monitores Conceito Sistemas Operacionais II Monitores Autores Daniel Artur Seelig Fábio Lutz Local Universidade Federal do Rio Grande do Sul Instituto de Informática Sistemas Operacionais II Professor
Programação Concorrente em java - Exercícios Práticos Abril 2004
Programação Concorrente em java - Exercícios Práticos Abril 2004 1. Introdução As threads correspondem a linhas de controlo independentes no âmbito de um mesmo processo. No caso da linguagem JAVA, é precisamente
Sincronização. Cooperação entre Processos
Sincronização Parte II Programação Concorrente Cooperação entre Processos Vários processos executam em conjunto uma ou mais tarefas, nas quais Competem por recursos Indicam uns aos outros a: Ausência/existência
Programação Orientada a Objetos Threads
Threads Prof. Edwar Saliba Júnior Janeiro de 2013 1 Introdução Multithreading: fornece múltiplas threads de execução para a aplicação; permite que programas realizem tarefas concorrentemente; às vezes
Sistemas Operacionais Aula 08: Sincronização de Processos. Ezequiel R. Zorzal [email protected] www.ezequielzorzal.com
Sistemas Operacionais Aula 08: Sincronização de Processos Ezequiel R. Zorzal [email protected] www.ezequielzorzal.com Objetivos Introduzir o problema da seção crítica, cujas soluções podem ser usadas
Orientação a Objetos
1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou
Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008
Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,
Notas da Aula 4 - Fundamentos de Sistemas Operacionais
Notas da Aula 4 - Fundamentos de Sistemas Operacionais 1. Threads Threads são linhas de execução dentro de um processo. Quando um processo é criado, ele tem uma única linha de execução, ou thread. Esta
THREADS EM JAVA. George Gomes Cabral
THREADS EM JAVA George Gomes Cabral THREADS Fluxo seqüencial de controle dentro de um processo. Suporte a múltiplas linhas de execução permite que múltiplos processamentos ocorram em "paralelo" (em computadores
Processos e Threads (partes I e II)
Processos e Threads (partes I e II) 1) O que é um processo? É qualquer aplicação executada no processador. Exe: Bloco de notas, ler um dado de um disco, mostrar um texto na tela. Um processo é um programa
(Aula 17) Threads em Java
(Aula 17) Threads em Java Difícil As Threads thread threads de emjava classificar sãogerenciadaspelajvm. podemser com user criadasdas thread ou kernel Profa. Patrícia A seguintesmaneiras: Fazendo extend
Java Threads. Introdução
Java Threads [email protected] 1 Introdução O único mecanismo de concorrência suportado explicitamente pela linguagem Java é multi-threading. threading. Os mecanismos de gerenciamento e sicronização
Sistemas Operacionais Processos e Threads
Sistemas Operacionais Processos e Threads Prof. Marcos Monteiro, MBA http://www.marcosmonteiro.com.br [email protected] 1 Estrutura de um Sistema Operacional 2 GERÊNCIA DE PROCESSOS Um processo
Sistemas Operacionais
Sistemas Operacionais Gerência de processos Controle e descrição de processos Edson Moreno [email protected] http://www.inf.pucrs.br/~emoreno Sumário Representação e controle de processos pelo SO Estrutura
Orientação a Objetos
Orientação a Objetos 1. Sobrecarga (Overloading) Os clientes dos bancos costumam consultar periodicamente informações relativas às suas contas. Geralmente, essas informações são obtidas através de extratos.
Sincronização de Processos (4) Monitores
Sincronização de Processos (4) Monitores Monitores (1) Sugeridos por Dijkstra (1971) e desenvolvidos por Hoare (1974) e Brinch Hansen (1975), são estruturas de sincronização de alto nível, que têm por
Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO
Conceitos básicos e serviços do Sistema Operacional Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Tipos de serviço do S.O. O S.O.
Threads e Concorrência em Java (Material de Apoio)
Introdução Threads e Concorrência em Java (Material de Apoio) Professor Lau Cheuk Lung http//www.inf.ufsc.br/~lau.lung INE-CTC-UFSC A maioria dos programas são escritos de modo seqüencial com um ponto
Introdução a Threads Java
Introdução a Threads Java Prof. Gerson Geraldo Homrich Cavalheiro Universidade Federal de Pelotas Departamento de Informática Instituto de Física e Matemática Pelotas RS Brasil http://gersonc.anahy.org
Sincronização e Comunicação entre Processos. Adão de Melo Neto
Sincronização e Comunicação entre Processos Adão de Melo Neto 1 INTRODUÇÃO Em um sistema multitarefa os processos alternam sua execução segundo critérios de escalonamento estabelecidos pelo sistema operacional.
Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO)
Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 03 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Parte: 1 Prof. Cristóvão Cunha Objetivos de aprendizagem
Fundamentos de Programaçã. ção Concorrente
Java 2 Standard Edition Fundamentos de Programaçã ção Concorrente Helder da Rocha www.argonavis.com.br 1 Programação concorrente O objetivo deste módulo é oferecer uma introdução a Threads que permita
Universidade da Beira Interior. Sistemas Distribuídos
Folha 6-1 Sincronização de Threads A sincronização de Threads em Java é baseada no conceito do Monitor (de Hoare). Cada objecto Java tem associado um monitor (ou lock ) que pode ser activado se a palavra
Introdução a Java. Hélder Nunes
Introdução a Java Hélder Nunes 2 Exercício de Fixação Os 4 elementos básicos da OO são os objetos, as classes, os atributos e os métodos. A orientação a objetos consiste em considerar os sistemas computacionais
Carlos Eduardo Batista Centro de Informática - UFPB [email protected]
Carlos Eduardo Batista Centro de Informática - UFPB [email protected] Principais problemas programação concorrente Deadlocks (impasses) Starvation (inanição) Condições de corrida Erros de consistência na
Algoritmos e Programação (Prática) Profa. Andreza Leite [email protected]
(Prática) Profa. Andreza Leite [email protected] Introdução O computador como ferramenta indispensável: Faz parte das nossas vidas; Por si só não faz nada de útil; Grande capacidade de resolução
Série de Problemas - Sincronização com Semáforos
Sistemas Operativos Série de Problemas - Sincronização com Semáforos Bibliografia essencial para a compreensão/realização da série: "Modern Operating Systems", Andrew S. Tanenbaum, Prentice Hall, Capítulo
EXEMPLO: Processo para atualização da hora Processo para monitoramento da necessidade de proteção de tela. Figura 4-1 - Exemplo
4 PROCESSOS Os primeiros sistemas operacionais permitiam que apenas um processo fosse executado por vez. Dessa maneira, este processo tinha todo o sistema computacional a sua disposição. Os atuais sistemas
Sistemas Distribuídos
Sistemas Distribuídos Processos e Threads Gustavo Reis [email protected] - O que são Processos? Uma abstração de um programa em execução. Mantêm a capacidade de operações (pseudo)concorrentes,
Sistemas Operacionais. Prof. André Y. Kusumoto [email protected]
Sistemas Operacionais Prof. André Y. Kusumoto [email protected] Estruturas de Sistemas de Computação O sistema operacional precisa garantir a operação correta do sistema de computação. Operação
2 Diagrama de Caso de Uso
Unified Modeling Language (UML) Universidade Federal do Maranhão UFMA Pós Graduação de Engenharia de Eletricidade Grupo de Computação Assunto: Diagrama de Caso de Uso (Use Case) Autoria:Aristófanes Corrêa
Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi
5 Conclusão Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi permitir que scripts Lua instanciem e usem
1.6. Tratamento de Exceções
Paradigmas de Linguagens I 1 1.6. Tratamento de Exceções Uma exceção denota um comportamento anormal, indesejado, que ocorre raramente e requer alguma ação imediata em uma parte do programa [GHE 97, DER
Java. Marcio de Carvalho Victorino www.dominandoti.eng.br
Java Marcio de Carvalho Victorino www.dominandoti.eng.br 3. Considere as instruções Java abaixo: int cont1 = 3; int cont2 = 2; int cont3 = 1; cont1 += cont3++; cont1 -= --cont2; cont3 = cont2++; Após a
Monitores. Setembro de 2009. Monitores
Setembro de 2009 mecanismo de sincronização clássico referência influência de conceitos de programação estruturada C. A. R. Hoare, Monitors: an operating system structuring concept, Communications of the
Métodos de Sincronização do Kernel
Métodos de Sincronização do Kernel Linux Kernel Development Second Edition By Robert Love Tiago Souza Azevedo Operações Atômicas Operações atômicas são instruções que executam atomicamente sem interrupção.
Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada
Programação Estruturada Programação Estruturada Paradigmas de Linguagens de Programação As linguagens desse paradigma são muitas vezes chamadas de linguagens convencionais, procedurais ou imperativas.
Feature-Driven Development
FDD Feature-Driven Development Descrição dos Processos Requisitos Concepção e Planejamento Mais forma que conteúdo Desenvolver um Modelo Abrangente Construir a Lista de Features Planejar por
Sistemas Operacionais
Sistemas Operacionais Aula 11 Sincronização de Processos Prof.: Edilberto M. Silva http://www.edilms.eti.br Baseado no material disponibilizado por: SO - Prof. Edilberto Silva Prof. José Juan Espantoso
SISTEMAS OPERACIONAIS
SISTEMAS OPERACIONAIS Sincronização entre Processos Andreza Leite [email protected] Sincronização Freqüentemente, os processos precisam se comunicar com outros processos. Isto ocorre quando
Linguagens de Programação Aula 10
Linguagens de Programação Aula 10 Celso Olivete Júnior [email protected] Na aula passada As sentenças de controle das LP imperativas ocorrem em diversas categorias: seleção, seleção múltipla, iteração
SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA
SISTEMAS OPERACIONAIS CAPÍTULO 3 CONCORRÊNCIA 1. INTRODUÇÃO O conceito de concorrência é o princípio básico para o projeto e a implementação dos sistemas operacionais multiprogramáveis. O sistemas multiprogramáveis
Implementando uma Classe e Criando Objetos a partir dela
Análise e Desenvolvimento de Sistemas ADS Programação Orientada a Obejeto POO 3º Semestre AULA 04 - INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETO (POO) Parte: 2 Prof. Cristóvão Cunha Implementando uma Classe
Sistemas Operativos. Threads. 3º ano - ESI e IGE (2011/2012) Engenheiro Anilton Silva Fernandes ([email protected])
Sistemas Operativos Threads 3º ano - ESI e IGE (2011/2012) Engenheiro Anilton Silva Fernandes ([email protected]) Dos Processos para os Threads O conceito de thread foi introduzido na tentativa de
BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia
O Sistema Operacional que você usa é multitasking? Por multitasking, entende-se a capacidade do SO de ter mais de um processos em execução ao mesmo tempo. É claro que, num dado instante, o número de processos
Engenharia de Software III
Engenharia de Software III Casos de uso http://dl.dropbox.com/u/3025380/es3/aula6.pdf ([email protected]) 09/09/2010 O que são casos de uso? Um caso de uso procura documentar as ações necessárias,
Disciplina de Sistemas Distribuídos. Sincronização em SD. Prof. M.Sc. Alessandro Kraemer [email protected]. Kraemer
Disciplina de Sistemas Distribuídos Sincronização em SD Prof. M.Sc. Alessandro [email protected] Cronograma Contextualização Tipos de sincronização Mecanismos para sincronização da região crítica Exclusão
Threads em Java. Sistemas Operacionais - Laboratório Professor Machado
Threads em Java Sistemas Operacionais - Laboratório Professor Machado 1 Conceitos de Programação Concorrente Uma unidade concorrente é um componente de um programa que não exige a execução seqüencial,
Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread.
5 THREADS Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread. 5.1 VISÃO GERAL Uma definição mais abrangente para threads é considerá-lo
Notas da Aula 6 - Fundamentos de Sistemas Operacionais
1. Monitores Notas da Aula 6 - Fundamentos de Sistemas Operacionais Embora os semáforos sejam uma boa solução para o problema da exclusão mútua, sua utilização não é trivial. O programador é obrigado a
Modelo Cascata ou Clássico
Modelo Cascata ou Clássico INTRODUÇÃO O modelo clássico ou cascata, que também é conhecido por abordagem top-down, foi proposto por Royce em 1970. Até meados da década de 1980 foi o único modelo com aceitação
Programação Concorrente Processos e Threads
Programação Concorrente Processos e Threads Prof. Eduardo Alchieri Processos O conceito mais central em qualquer sistema operacional é o processo Uma abstração de um programa em execução Um programa por
Faculdade Lourenço Filho - ENADE 2011-1
1. Quando se constrói um banco de dados, define-se o modelo de entidade e relacionamento (MER), que é a representação abstrata das estruturas de dados do banco e seus relacionamentos. Cada entidade pode
Sistemas Operacionais
Sistemas Operacionais Aula 08 Processos Prof. Maxwell Anderson www.maxwellanderson.com.br Introdução Conceitos já vistos em aulas anteriores: Definição de Sistemas Operacionais Funções: máquina virtual
Introdução à Programação
Introdução à Programação Introdução a Linguagem C Construções Básicas Programa em C #include int main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius = 30; farenheit = 9.0/5
Deadlocks. Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO
Prof. Marcos Ribeiro Quinet de Andrade Universidade Federal Fluminense - UFF Pólo Universitário de Rio das Ostras - PURO Dispositivos e recursos são compartilhados a todo momento: impressora, disco, arquivos,
3 SCS: Sistema de Componentes de Software
3 SCS: Sistema de Componentes de Software O mecanismo para acompanhamento das chamadas remotas se baseia em informações coletadas durante a execução da aplicação. Para a coleta dessas informações é necessário
DAS5102 Fundamentos da Estrutura da Informação
Pilhas A estrutura de dados Pilha emula a forma de organização de objetos intuitiva que é utilizada diariamente nos mais diversos contextos da vida humana. Containeres são empilhados e desempilhados diariamente
SISTEMAS OPERACIONAIS ABERTOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com
- Aula 2-1. PRINCÍPIOS DE SOFTWARE DE ENTRADA E SAÍDA (E/S) As metas gerais do software de entrada e saída é organizar o software como uma série de camadas, com as mais baixas preocupadas em esconder as
Programação Paralela e Distribuída (DCC/UFRJ)
Programação Paralela e Distribuída (DCC/UFRJ) Aula 7: Programação com memória compartilhada usando OpenMP 1, 8, 10 e 15 de abril de 2015 OpenMP (Open MultiProcessing) Projetado para sistemas de memória
Programação Concorrente
Programação Concorrente Monitores e Troca de Mensagens Monitores Considere que, no projeto da solução do produtor-consumidor com semáforos, os 2 downs tenham sido trocados Se o buffer estiver cheio deadlock
Computadores de Programação (MAB353)
Computadores de Programação (MAB353) Aula 19: Visão geral sobre otimização de programas 06 de julho de 2010 1 2 3 Características esperadas dos programas O primeiro objetivo ao escrever programas de computador
*O RDBMS Oracle é um sistema de gerenciamento de banco de dados relacional.
Arquitetura Oracle e seus componentes Hoje irei explicar de uma forma geral a arquitetura oracle e seus componentes. Algo que todos os DBA s, obrigatoriamente, devem saber de cabo a rabo. Vamos lá, e boa
ISO/IEC 12207: Gerência de Configuração
ISO/IEC 12207: Gerência de Configuração Durante o processo de desenvolvimento de um software, é produzida uma grande quantidade de itens de informação que podem ser alterados durante o processo Para que
Sistemas Operacionais
Sistemas Operacionais GERÊNCIA DO PROCESSADOR MACHADO/MAIA: CAPÍTULO 08 Prof. Pedro Luís Antonelli Anhanguera Educacional Gerenciamento do Processador A gerência do processador pode ser considerada a atividade
Busca. Pesquisa sequencial
Busca Banco de dados existem para que, de tempos em tempos, um usuário possa localizar o dado de um registro, simplesmente digitando sua chave. Uma tabela ou um arquivo é um grupo de elementos, cada um
Sistema Operacional. Processo e Threads. Prof. Dr. Márcio Andrey Teixeira Sistemas Operacionais
Sistema Operacional Processo e Threads Introdução a Processos Todos os computadores modernos são capazes de fazer várias coisas ao mesmo tempo. Enquanto executa um programa do usuário, um computador pode
Teleprocessamento e Redes (MAB-510) Gabarito da Segunda Lista de Exercícios 01/2010
Teleprocessamento e Redes (MAB-510) Gabarito da Segunda Lista de Exercícios 01/2010 Prof. Silvana Rossetto (DCC/IM/UFRJ) 1 13 de julho de 2010 Questões 1. Qual é a diferença fundamental entre um roteador
2 Desenvolvimento de Software Orientado a Aspectos
2 Desenvolvimento de Software Orientado a Aspectos Separação de concerns é um princípio bem estabelecido da engenharia de software que diz que, para se dominar a complexidade do desenvolvimento de software,
Guia de Especificação de Caso de Uso Metodologia CELEPAR
Guia de Especificação de Caso de Uso Metodologia CELEPAR Agosto 2009 Sumário de Informações do Documento Documento: guiaespecificacaocasouso.odt Número de páginas: 10 Versão Data Mudanças Autor 1.0 09/10/2007
A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande
A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande região de armazenamento formada por bytes ou palavras, cada
Organização de Computadores 1
Organização de Computadores 1 4 SUPORTE AO SISTEMA OPERACIONAL Prof. Luiz Gustavo A. Martins Sistema Operacional (S.O.) Programa responsável por: Gerenciar os recursos do computador. Controlar a execução
UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA
Responda 1) Quem desenvolveu a linguagem C? Quando? 2) Existe alguma norma sobre a sintaxe da linguagem C? 3) Quais são os tipos básicos de dados disponíveis na linguagem C? 4) Quais são as principais
ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS
ATRIBUTOS PRIVADOS Podemos usar o modificador private, para tornar um atributo privado, obtendo um controle centralizado Definimos métodos para implementar todas as lógicas que utilizam ou modificam o
IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira
IFPE Disciplina: Sistemas Operacionais Prof. Anderson Luiz Moreira SERVIÇOS OFERECIDOS PELOS SOS 1 Introdução O SO é formado por um conjunto de rotinas (procedimentos) que oferecem serviços aos usuários
Sistemas Distribuídos
Sistemas Distribuídos Processos I: Threads, virtualização e comunicação via protocolos Prof. MSc. Hugo Souza Nesta primeira parte sobre os Processos Distribuídos iremos abordar: Processos e a comunicação
Especificação do 3º Trabalho
Especificação do 3º Trabalho I. Introdução O objetivo deste trabalho é abordar a prática da programação orientada a objetos usando a linguagem Java envolvendo os conceitos de classe, objeto, associação,
Sistemas Operacionais Sincronização e Comunicação entre Processos
Universidade Estadual de Mato Grosso do Sul UEMS Curso de Licenciatura em Computação Sistemas Operacionais Sincronização e Comunicação entre Processos Prof. José Gonçalves Dias Neto [email protected]
Programação de Computadores - I. Profª Beatriz Profº Israel
Programação de Computadores - I Profª Beatriz Profº Israel As 52 Palavras Reservadas O que são palavras reservadas São palavras que já existem na linguagem Java, e tem sua função já definida. NÃO podem
Sistemas Operacionais. Prof. André Y. Kusumoto [email protected]
Sistemas Operacionais Prof. André Y. Kusumoto [email protected] Estruturas de Sistemas Operacionais Um sistema operacional fornece o ambiente no qual os programas são executados. Internamente,
Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)
Hardware (Nível 0) Organização O AS/400 isola os usuários das características do hardware através de uma arquitetura de camadas. Vários modelos da família AS/400 de computadores de médio porte estão disponíveis,
Como conduzir com sucesso um projeto de melhoria da qualidade
Como conduzir com sucesso um projeto de melhoria da qualidade Maria Luiza Guerra de Toledo Coordenar e conduzir um projeto de melhoria da qualidade, seja ele baseado no Seis Sigma, Lean, ou outra metodologia
AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS
UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIAS DA COMPUTAÇÃO BACHARELADO AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS Orientando: Oliver Mário
6.3 Equivalência entre Autômatos com Pilha Não-Determinísticos e Gramáticas Livre do Contexto
Capítulo 6. Autômatos com Pilha 6.3 Equivalência entre Autômatos com Pilha Não-Determinísticos e Gramáticas Livre do Contexto Nos exemplos da seção anterior, vimos que os autômatos com pilha existem para
Disciplina: Sistemas Operacionais - CAFW-UFSM Professor: Roberto Franciscatto
Disciplina: Sistemas Operacionais - CAFW-UFSM Professor: Roberto Franciscatto Introdução Considerações: Recurso caro e escasso; Programas só executam se estiverem na memória principal; Quanto mais processos
Projeto de Software Orientado a Objeto
Projeto de Software Orientado a Objeto Ciclo de Vida de Produto de Software (PLC) Analisando um problema e modelando uma solução Prof. Gilberto B. Oliveira Estágios do Ciclo de Vida de Produto de Software
