UNIVERSIDADE FEDERAL DE MINAS GERAIS ESCOLA DE ENGENHARIA DEPARTAMENTO DE ENGENHARIA ELETRÔNICA AUTOMAÇÃO EM TEMPO REAL PROFESSOR: Constantino Seixas Filho LISTA DE EXERCÍCIOS 1. Capítulo 1 – Introdução à Programação Concorrente 1.1. Três processos devem ser executados em dois processadores em paralelo. Cada processo leva 80 ms para executar até o seu término. Apresente uma agenda de escalonamento para distribuir os processos para as duas CPUs de modo a minimizar o tempo de execução global e o número de trocas de contexto, supondo que o tick do sistema operacional é de 10 ms e que o time slice mínimo permitido é de: a) 10 ticks b) 8 ticks c) 4 ticks 1.2. Algoritmos concorrentes: a) Sugira um algoritmo concorrente para o QuickSort. b) Sugira um algoritmo concorrente para cálculo de (n p) = n(n-1)...(n-k+1)/1 x 2 ... k c) Determine duas estratégias para calcular de forma concorrente todos os números primos de 2 a N. Você pode usar um processo para cada número ou grupo de números. 1.3. Definições a) quantum b) tick c) premptivo d) tempo-real e) escalonador f) CPU intensivo g) Time-slicing Lista de Exercícios 1 2. Capítulo 2 – Processos e Threads 2.1. Multithreading overhead Um processo deverá criar uma thread que contará até 10.000. A thread primária irá contar o tempo entre as criação da thread e o seu retorno. Em seguida o programa chamará a mesma função representada pela thread de contagem como se fosse uma função do programa principal e também temporizará o resultado. Compare os dois tempos obtidos e comente. 2.2. Visão teórica a) Qual a vantagem de se usar um modelo baseado em threads ao invés de um modelo baseado apenas em processos ? b) Qual a desvantagem de se usar uma thread ao invés de uma função para se executar uma função ? c) Explique os seguintes conceitos: programa, processo e thread. d) O que significa dizer que um handle é um conceito local a um processo ? e) Dê três exemplos de objetos do kernel e diga para que serve cada um. f) Uma thread na classe de prioridade tempo real pode ser preemptada por alguma coisa ? 2.3. Números combinatoriais Resolva o probelma dos números combinatoriais apresentado no exercício 1.2b, usando o teorema de Stiffel: (n p) = (n-1 p) + (n-1 p-1) . Cada thread para calcular o número (n p) deve criar duas novas threads que calcularão as parcelas que o constituem para depois somá-los. Aqui você irá treinar a criação e a passagem de parâmetros para uma thread. 2.4. Números primos Crie uma thread para verificar se quais são os números primos de 1 a 100. Crie uma thread para cada número ímpar de 2 a 100. Cada thread deverá verificar se os números de 2 até sqrt(N)+1 são fatores de N. Ao concluir, cada thread filha emite um relatório para a thread mãe. Sugira melhoras para a estratégia de busca que minimizem o número de threads de busca e a performance geral do processo de procura. Lista de Exercícios 2 3. Capítulo 3 – Exclusão Mútua 3.1. Threads in C++ Criar a classe Semaphore derivada da classe LockableObject. 3.2. Reductio Ad Absurdum Duas pessoas se encontram em uma festa e uma delas a certa altura da conversa afirma: ”Devo confessar que nem sempre digo a verdade”. O segundo afirma que acredita no que acabara de ouvir. Como ele pode afirmar isso, se durante a parte inicial da conversa não escutou a pessoa dizer nada que soubesse ser realmente falso ? Use o princípio de demonstração por absurdo. 3.3. Algoritmo do padeiro O algoritmo do padeiro, Lamport 1974, pode ser aplicado para 2 ou N processos diferentes. O algoritmo para dois processos tem a seguinte forma: int N1, N2 = 0; Thread T1; { loop { a1: SeçãoNãoCrítica; b1: N1 = 1; // quero acessar a seção crítica c1: N1 = N2 + 1; // pego número da senha d1: while ( N2 != 0 && N1 > N2) ; // espero minha vez e1: SeçãoCrítica; f1: N1 = 0; // libero senha } //end loop; } //end T1; Thread T2; { loop { a2: SeçãoNãoCrítica; b2: N2 = 1; // quero acessar a seção crítica c2: N2 = N1 + 1; // pego número da senha d2: while ( N1 != 0 && N2 >= N1) ; // espero minha vez e2: SeçãoCrítica; f2: N2 = 0; // libero senha } //end loop; } //end T2; Lista de Exercícios 3 a) Examine o programa acima. Mostre que se as instruções em b1 e b2 forem retiradas, o programa pode violar a exclusão mútua. Para provar isto, basta encontrar uma seqüência de escalonamento das instruções que cause a violação desta propriedade. b) Compare este algoritmo com o algoritmo de Peterson apresentado durante este capítulo. Indique as vantagens e desvantagens de cada um. 3.4. Desigualdade de Bernoulli Demonstre a desiguadade de Bernoulli: (1+x)n > 1 + nx, para todo n>=2 usando o princípio da indução finita. 3.5. Deadlock Existem três processos e quatro recursos iguais. Cada processo precisa de dois recursos para executar. a) Pode haver deadlock neste sistema ? b) E se cada processo precisar de três recursos ? Justifique sua resposta. Lista de Exercícios 4 4. Capítulo 4 – Semáforos, Eventos e Timers 4.1. Semáforos Imagine um conjunto de três threads que utilizam os semáforos U e V definidos abaixo: Semaphore U = 3; Semaphore V = 0; [Thread 1] loop { Wait(U); type("C"); Signal(V); }; [Thread 2] loop { Wait(V); type("A"); type("B"); Signal(V); }; [Thread 3] loop { Wait(V); type("D"); }; Em cada thread as instruções são executadas seqüencialmente, mas entre threads podem ser entrelaçadas em qualquer ordem que seja consistente com o uso dos semáforos. Uma vez disparado o processo, as threads irão executar até que todas fiquem bloqueadas em uma operação de Wait. a) Quando a execução parar quantos Cs terão sido impressos ? Por que ? b) Quantos Ds terão sido impressos ? Por que ? c) Qual menor e o maior número de As que serão impressos ? Por que ? d) A seqüência CABABDDCABCABD é uma saída possível após a execução do programa ? Por que ? e) A seqüência CABACDBCABDD é uma saída possível após a execução do programa ? Por que ? 4.2. O problema do banheiro unissex [Andrews 91] Suponha que no seu departamento na Universidade existe apenas um banheiro, que pode ser visitado por homens e mulheres, mas não simultaneamente. Quando o banheiro estiver vazio, tanto um homem quanto uma mulher podem entrar. Se houver um homem no banheiro outros cavalheiros poderão entrar e quando houver uma mulher no banheiro outras continuarão a ser admitidas. Quando a última mulher sair deverá dar prioridade a um homem e vice versa. Propriedades de segurança: Não pode haver pessoas de sexos diferentes no banheiro. Não pode haver deadlock. O algoritmo não precisa ser justo. Lista de Exercícios 5 Modifique o algoritmo de modo a permitir no máximo quatro pessoas no banheiro de cada vez. Thread Ele: SeçãoNãoCrítica; ProtocoloDeEntrada; UsaBanheiro; ProtocoloDeSaída; Thread Ela: SeçãoNãoCrítica; ProtocoloDeEntrada; UsaBanheiro; ProtocoloDeSaída; 4.3. O Jantar dos Engenheiros de Controle e Automação (EC&As) Cinco ECAs estão simulando o jantar dos filósofos com um novo algoritmo. Cada ECA irá tomar um garfo de cada vez usando o seguinte algoritmo. Pegue o garfo adjacente de menor número. Pegue o garfo adjacente de maior número. Coma. Devolva os dois garfos. Pode haver deadlock neste algoritmo ? Demonstre. 4.4. Questões Teóricas a) Existem situações em que semáforos binários devem ser usados no lugar de Mutexes ? Dê um exemplo. b) Dois processos querem compartilhar um semáforo. Que instrução usa o processo A para criar e obter um handle para o semáforo? Que instrução o processo B deve utilizar para obter um handle para o mesmo semáforo? Os dois handles podem ser iguais ? Podem ser diferentes ? Justifique sua resposta. 4.5. Mecanismos de Sincronização Comparar as seguintes diretivas de sincronização: Lista de Exercícios 6 Algoritmo de Peterson Critical Sections Mutex Semáforos Binários Vantagens Desvantagens Lista de Exercícios 7