Baixe o app para aproveitar ainda mais
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.
Compartilhar