Prova2015.1-1EE

2
Infraestrutura de Software - 1º EE (2015.1) 1. Considere um software que verifica o produto mais caro adquirido por seus 4 principais clientes. Para realizar essa busca, o software precisa percorrer 4 imensos arquivos e pesquisar em cada registro o valor do produto e o nome. O nome do produto mais caro e seu valor são guardados nas variáveis globais char produto[31] e float valor . Ao final do programa, somente esses valores são impressos. Para agilizar a execução, o software utiliza 4 threads que possuem o mesmo código, mas, dependendo do argumento, vasculha um arquivo diferente. Para cada registro lido, a thread compara com as variáveis globais, e, se necessário, as atualiza. a) Existe condição de disputa? Caso positivo, qual é a condição e quem seria a região crítica? b) Implemente o código das threads que é representado pela função void *varredura(void *idArquivo), o qual aguarda o identificador do arquivo a ser lido. Para facilitar a implementação, não se preocupe em implementar fielmente a abertura e leitura dos dados dos arquivos binários (ex: feof, fopen...). Pode-se usar um pseudo-código somente para a manipulação dos arquivos . Ademais, use uma estrutura (struct) para os registros dos arquivos mais conveniente para agilizar a implementação. A thread deve percorrer todo seu arquivo, e, assim, termina ao concluir a leitura de todos os seus registros. Se no entendimento desta questão, você verificou uma condição de disputa, a região crítica precisa ser acessada com exclusão mútua. Não precisa mostrar a criação das threads na função main , mas precisa mostrar o uso/inicialização dos recursos de pthreads solicitados nesta questão. Adicionalmente, precisa colocar o código na função main relativo à impressão do resultado final. int pthread_mutex_unlock(pthread_mutex_t *mutex); int pthread_mutex_lock(pthread_mutex_t *mutex); int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); int pthread_cond_signal(pthread_cond_t *cond) int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);int pthread_mutex_destroy(pthread_mutex_t *mutex);int pthread_join(pthread_t thread, void **value_ptr); (3,0) 2. Faça um resumo de como funciona e a inicialização do bootloader em um arquitetura x86. Quais os cuidados deve-se ter no código ASM?(ex: localização disco, memória...). (2,0) 3. Multiple Feedback Queue (MFQ) e Round Robin são políticas de escalonamento apropriadas para quais tipos de processos? Qual a diferença entre essas políticas?(1,5) 4. Considerando o software de E/S de um sistema operacional organizado em camadas, qual a função dos tratadores de interrupção (Interrupt Handlers) (1,5) 5. Exclusão mútua, espera circular, posse e espera, e não preempção estão associadas com deadlock de qual forma? Podem estar presentes no código abaixo? Exemplifique. p1, p2 e p3 são os códigos dos processos. (2,0)

description

prova

Transcript of Prova2015.1-1EE

Page 1: Prova2015.1-1EE

Infraestrutura de Software - 1º EE (2015.1)

1. Considere um software que verifica o produto mais caro adquirido por seus 4 principais clientes. Para realizar essa busca, o software precisa percorrer 4 imensos arquivos e pesquisar em cada registro o valor do produto e o nome. O nome do produto mais caro e seu valor são guardados nas variáveis globais char produto[31] e float valor . Ao final do programa, somente esses valores são impressos. Para agilizar a execução, o software utiliza 4 threads que possuem o mesmo código, mas, dependendo do argumento, vasculha um arquivo diferente. Para cada registro lido, a thread compara com as variáveis globais, e, se necessário, as atualiza.a) Existe condição de disputa? Caso positivo, qual é a condição e quem seria a região crítica?b) Implemente o código das threads que é representado pela função void *varredura(void *idArquivo), o qual aguarda o identificador do arquivo a ser lido. Para facilitar a implementação, não se preocupe em implementar fielmente a abertura e leitura dos dados dos arquivos binários (ex: feof, fopen...). Pode-se usar um pseudo-código somente para a manipulação dos arquivos. Ademais, use uma estrutura (struct) para os registros dos arquivos mais conveniente para agilizar a implementação. A thread deve percorrer todo seu arquivo, e, assim, termina ao concluir a leitura de todos os seus registros. Se no entendimento desta questão, você verificou uma condição de disputa, a região crítica precisa ser acessada com exclusão mútua. Não precisa mostrar a criação das threads na função main, mas precisa mostrar o uso/inicialização dos recursos de pthreads solicitados nesta questão. Adicionalmente, precisa colocar o código na função main relativo à impressão do resultado final.int pthread_mutex_unlock(pthread_mutex_t *mutex); int pthread_mutex_lock(pthread_mutex_t *mutex); int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); int pthread_cond_signal(pthread_cond_t *cond) int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);int pthread_mutex_destroy(pthread_mutex_t *mutex);int pthread_join(pthread_t thread, void **value_ptr); (3,0)

2. Faça um resumo de como funciona e a inicialização do bootloader em um arquitetura x86. Quais os cuidados deve-se ter no código ASM?(ex: localização disco, memória...). (2,0)

3. Multiple Feedback Queue (MFQ) e Round Robin são políticas de escalonamento apropriadas para quais tipos de processos? Qual a diferença entre essas políticas?(1,5)

4. Considerando o software de E/S de um sistema operacional organizado em camadas, qual a função dos tratadores de interrupção (Interrupt Handlers) (1,5)

5. Exclusão mútua, espera circular, posse e espera, e não preempção estão associadas com deadlock de qual forma? Podem estar presentes no código abaixo? Exemplifique. p1, p2 e p3 são os códigos dos processos. (2,0)