Вы находитесь на странице: 1из 4

Universidade Federal de São Carlos / Departamento de Computação

Sistemas Operacionais 2

Exercícios

1. O que são threads? Como são relacionadas com processos?


2. Como são definidos os contextos das threads? Que informações são comuns entre threads e
particulares para cada uma delas?
3. Explique os conceitos a seguir, relacionados à implementação de threads: reentrância de código,
thread-safety, asynchronous-safety.
4. Descreva situações em que a programação usando threads é apropriada. Dê exemplos.
5. Descreva possíveis modelos de programação usando threads.
6. Explique a função POSIX usada para a criação de threads:

int pthread_create(pthread_t * thread, const pthread_attr_t * attr, void * (*start_routine)(void *), void *arg);

7. Explique a passagem de parâmetros e o tratamento de valores de retorno para funções associadas a


trheads.
8. Descreva os atributos ajustáveis na criação de threads.
9. Como são encerradas as execuções de threads?
10. Quais são os mecanismos disponíveis para sincronização de threads?
11. Descreva o funcionamento do mecanismo pthread_join( ).
12. Como funciona o mecanismo mutex para sincronização de threads?

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;


int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);
int pthread_mutex_destroy(pthread_mutex_t *mutex);

int pthread_mutex_lock(pthread_mutex_t *mutex);


int pthread_mutex_trylock(pthread_mutex_t *mutex);
int pthread_mutex_timedlock(pthread_mutex_t *restrict mutex, const struct timespec *restrict
abs_timeout);

int pthread_mutex_unlock(pthread_mutex_t *mutex);

13. Apresente um trecho de código que exemplifica o uso de mutex.

14. Para que serve e como é definida a área de pilha (stack) associada a uma thread?

int pthread_attr_getstacksize (attr, stacksize)


int pthread_attr_setstacksize (attr, stacksize)

Hélio Crestana Guardia 12/2009


int pthread_attr_getstackaddr (attr, stackaddr)
int pthread_attr_setstackaddr (attr, stackaddr)

15. Para que servem e como funcionam as barreiras (barriers) associadas a threads?

int pthread_barrier_init(pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned count);


int pthread_barrier_destroy(pthread_barrier_t *barrier);
int pthread_barrier_wait(pthread_barrier_t *barrier);

int pthread_barrierattr_init(pthread_barrierattr_t *attr);


int pthread_barrierattr_destroy(pthread_barrierattr_t *attr);
int pthread_barrierattr_getpshared(const pthread_barrierattr_t *attr, int *pshared);
int pthread_barrierattr_setpshared(pthread_barrierattr_t *attr, int pshared);

16. Apresente um trecho de código com um exemplo de uso de barreiras.

17. Considerando o desenvolvimento de programas paralelos, descrevas as principais etapas


envolvidas: particionamento, mapeamento (alocação), escalonamento.
18. Por quê afirma-se que a paralelização não reduz tempo de CPU, mas pode reduzir tempo de
execução (wallclock / elapsed time)?
19. Compare os modelos de programação paralela baseado em memória compartilhada e para
ambientes com memória distribuída (com passagem de mensagem).
20. Discuta como seria um modelo de programação paralela híbrido, adequado a um ambiente formado
por diversos nós com processadores multicore interligados por uma rede de comunicação.
21. Discuta aspectos relacionados com a paralelização automática de aplicações e exemplifique
técnicas que podem ser empregadas.
22. Caracterize e diferencie as formas de paralelização de programas baseadas na decomposição
funcional e na decomposição de dados (ou de domínio).
23. Represente um programa de multiplicação de matrizes usando o modelo task / channel.
24. Descreva os estágios previstos na técnica PCAM (Particionamento, Comunicação, Aglomeração e
Mapeamento) para o projeto de algoritmos paralelos.
25. Explique os modelos de progrmação SPMD (Single Program Multiple Data) e MPMP (Multiple
Program Multiple Data).
26. O que é speedup de um programa paralelo? Como é calculado?
27. Como é determinada a eficiência de uma implementação paralela de um algoritmo? O que
significa?
28. O que é speedup linear? Como poderia ser obtido um speedup superlinear?
29. Explique a Lei de Amdahl, que trata do speedup máximo de uma aplicação.
30. O que significa escalabilidade de uma aplicação paralela? Quando uma aplicação é considerada
escalável?
31. Considerando a programação paralela em ambiente de memória distribuída, qual é a influência dos
tempos de transmissão no processamento?

Hélio Crestana Guardia 12/2009


32. Na programação paralela com memória distribuída, o que é latência de comunicação?
33. Como a latência de comunicação pode ser minizada nesse ambiente? (latency hiding)

34. O que é OpenMP?


35. Explique o tipo de paralização provida por OpenMP.
36. Como a paralelização é identificada em um código de aplicação com OpenMP?
37. Explique o modelo de paralização funcional provido por OpenMP.
38. Explique o modelo de paralização de domínio providao por OpenMP.
39. Explique o efeito da diretiva #pragma omp parallel.
40. Explique o tratamento que deve ser feito por um compilador com suporte a OpenMP para
efetivamente fazer com que uma região de código seja executada em paralelo por múltiplas threads.
41. Como é definido o número de threads para uma região paralela?
42. De que maneira é tratada a escalabilidade de hardware de uma aplicação? Ou seja, de que maneira
uma aplicação com OpenMP pode adequar-se à mudança para um ambiente de execução com mais
processadores?
43. O que são construções do tipo work-sharing providas por OpenMP?
44. De que maneira as iterações de um loop numa região paralela são divididas entre múltiplas
threads?
45. Como são definidos trechos de código diferentes (sections) em construções do tipo work-sharing?
46. Relacione diretivas OpenMP para sincronização.
47. Descreva as funções da API OpenMP relacionadas à identificação da quantidade de threads e de
processadores disponíveis.
48. Exemplifique o uso das funções associadas ao número de processadores para ajuste do paralelismo
de uma aplicação.
49. Descuta as facilidades de criação de programas paralelos providas por OpenMP comparadas ao uso
explícito da biblioteca de threads.

50. Descreva a abordagem de criação de programas paralelos para ambientes de procesamento paralelo
com memória distribuída.
51. Como são definidas as comunicações entre os processos?
52. Como são definidos os procesos paraticipantes numa aplicação?
53. Como é a escalabilidade de uma aplicação neste ambiente?
54. Como são enviadas informações entre os nós participantes de uma aplicação paralela?
55. De que maneira é tratada a escalabilidade de hardware de uma aplicação? Ou seja, de que maneira
uma aplicação usando MPI pode adequar-se à mudança para um ambiente de execução com mais
nós?
56. Discuta o efeito dos modelos de programação SPMD e MPMD com MPI.
57. Do ponto de vista da ativação do código em equipamentos remotos, discuta a geração do código
executável, a transmissão do código para os nós remotos e suas ativações quando a aplicação é
iniciada.
58. Sobre a transmissão de dados entre processos, discuta o uso de buffers, o bloqueio das operações e

Hélio Crestana Guardia 12/2009


a sincronizção dos nós.
59. Considerando que as comunicações num ambiente MPI tratam da identificação dos nós por ranks,
descreva o tipo de tratamento realizado pela API para o mapeamento desses identificadores lógicos
em endereços efetivos.
60. Discuta o conceito de grupos de comunicação (Communicators) em MPI e as transmissões entre
elementos desses grupos.
61. Em MPI, como são tratadas as transmissões de grupo? Como são tratados broadcasts e multicasts?
62. Discreva as operações de comunicação coletiva (broadcast, scatter, gather e reduce).

63. Considere 3 aplicações paralelas distintas: uma composta de múltiplos processos locais, uma
composta de múltiplas threads (locais!) e uma composta de diversos processos espalhados por
diversos computadores interligados em rede. Compare essas aplicações em relação aos seguintes
parâmetros (e outros que julgar relevantes):

a) mecanismos, custo e tempo de criação da aplicação (processos ou threads)


b) mecanismos disponíveis para comunicação e sincronização
c) compartilhamento de dados
d) tempos associados à operação dos mecanismos citados.

Hélio Crestana Guardia 12/2009