Prova novembro 95

Propaganda
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
Download