Buscar

Lista Programação Concorrente (resolvida)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Faça uma pesquisa e disserte brevemente sobre:
1) Chamadas fork.
Os sistemas de computação tradicionais utilizavam principalmente chamadas de sistema para criar e manipular
processos concorrentes. No UNIX e no LINUX existe a chamada de sistema fork, a qual permite a duplicação de um
processo. Quando se faz uma chamada fork, o sistema operacional cria um processo idêntico ao que fez a chamada e
retorna um número identificador daquele processo. Ambos processos prosseguem a partir do ponto onde ocorreu a
chamada de fork.
2) Posix Threads e Pthreads.
POSIX é um padrão definido pela IEEE e pela ISO, o qual define no mundo do Unix como os programas devem se
comunicar visando portabilidade.
O POSIX threads é um padrão adotado para manipular threads em C. Apesar de ser um padrão para UNIX, existem
projetos de definição de APIs (Aplication Programming Interface) para outros ambientes, inclusive para Windows.
A API padrão do pthreads conta com aproximadamente 60 funções.
As principais funções existentes nessa biblioteca são:
· pthread_create: criação de um thread;
· pthread_exit: terminação de um thread;
· pthread_join: espera pelo término de um thread dependente;
· pthread_attr_init e pthread_attr_destroy: definição de propriedades de um thread;
· pthread_detach: terminação de um thread independente;
· sched_yield: liberação do processador.
3) Modos de se criar threads em Java (ex: herdando da classe thread, ou implementando a interface Runnable).
Há duas maneiras de se criar threads em Java: herdando da classe Thread ou implementando a interface Runnable. Em
ambas, o corpo de implementação do thread está no método run. Se uma classe herda de Thread, então ela já é um
thread e pode ser iniciada através de seu método start. Se uma classe implementa Runnable, então ela deve ser
executada a partir de um thread. 
Na maioria das vezes, usa-se a interface Runnable quando a classe a ser implementada deve ser uma subclasse de uma
classe diferente de Thread. Caso isso não seja necessário utiliza-se herança da classe Thread.
4) Métodos sincronizados da linguagem Java.
A linguagem JAVA disponibiliza classes especiais para a criação e manipulação de threads e ainda oferece mecanismos
de sincronização de métodos.
Todo objeto em JAVA possui um bloco de operações único. Quando métodos de um objeto em JAVA são declarados
como synchronized, a JVM (Java Virtual Machine) faz com que threads chamem esses métodos em exclusão mútua. 
Se um thread inicia a execução de um método synchronized, nenhum outro thread conseguirá executar qualquer método
synchronized daquele objeto até que o primeiro libere o bloco de operações do objeto. 
Quando um thread faz chamada a um método declarado como synchronized, é verificado se outro thread já está de
posse do bloco de operações daquele objeto. Em caso positivo, o thread é bloqueado e colocado no conjunto de threads
de entrada para aquele objeto. Caso contrário, o thread toma posse do bloco de operações e inicia a execução do
método.
Exercícios:
1) Se a programação concorrente traz dificuldades para a programação, quais vantagens se têm com a sua 
utilização?
Nos dias atuais a programação concorrente está muito presente, seja quando imprimimos um documento e ao mesmo
tempo o editamos, seja quando há duas instâncias do mesmo programa em execução. A programação concorrente
permite que atividades sejam feitas em menor espaço de tempo e produz uma melhor interatividade entre o sistema e os
usuários por conseqüência da multiprogramação.
2) Quais são as principais diferenças entre threads e processos? Cite as respectivas vantagens e desvantagens de 
sua utilização.
Processos são programas em execução, enquanto threads são fluxos de execução em um determinado processo.
Processos apresentam estados (novo, executável, em espera, em execução e encerrado), enquanto o estado do thread é
definido pelo estadodo processo em que ele se encontra.
Utilizar apenas processos concorrentes pode levar a um uso exagerado da memória, visto que o estado atual dos
registradores e demais atributos devem ser persistidos quando um processo sai do estado "em execução" e passa para o
estado "em espera". Além disso, o controle dos processos produz um grande overhead no sistema, reduzindo a
performance geral. Threads, por outro lado, possibilitam uma melhor performance e economia de memória. Note que
não existem threads sem processos.
3) Quais são as principais diferenças entre memória compartilhada e de troca de mensagens? Cite vantagens e
desvantagens.
Como o nome já diz, "memória compartilhada" permite um compartilhamento da memória física entre sistemas
concorrentes. "Troca de mensagens" faz uso de passagem de mensagem para comunicação entre os sistemas.
Trabalhar com programação concorrente fazendo uso de memória compartilhada é mais eficiente que utilizar troca de
mensagens. Entretanto, para utilizar memória compartilhada se deve implementar mecanismos que garantam a exclusão
mútua no acesso à memória, o que não é trivial. Uma outra vantagem de utilizar troca de mensagens é a possibilidade de
utilizar memórias físicas em locais diferentes, ou seja, não é necessário que a memória utilizada fique em apenas um
computador.
4) Faça uma classe Semaforo em JAVA que implemente as operações P e V de um semáforo. Utilize para isso os 
métodos wait() e notify(). A classe deve possuir métodos P e V em exclusão mútua (synchronized).
public class Semaforo {
 private static int valor = 1;
 public synchronized void P() throws InterruptedException {
 valor -= 1;
 if (valor < 0) {
 wait();
 }
 }
 public synchronized void V() throws InterruptedException {
 valor += 1;
 if (valor <= 0) {
 notify();
 }
 }
}
5) Quais são as principais características das linguagens C, JAVA e ADA relacionadas à programação 
concorrente?
A linguagem C não oferece mecanismos próprios para programação concorrente. É necessário utilizar bibliotecas de
funções ou utilizar recurso de chamada de sistema para trabalhar com processos concorrentes.
A linguagem JAVA disponibiliza recursos para implementação de threads e oferece mecanismos de sincronização de
métodos.
A linguagem ADA utiliza-se da definição de módulos concorrentes permitindo a construção de sistemas concorrentes.
ADA oferece ainda recursos para sincronização de tarefas através de objetos protegidos ou troca de mensagens.

Outros materiais