4) { while ($ads2 == $ads1) { $ads2 = rand(1, $slides); } } $ads3 = rand(1, $slides); if ($slides > 4) { while (($ads3 == $ads2) || ($ads3 == $ads1)) { $ads3 = rand(1, $slides); } } ?>
IPRJ SISTEMAS OPERACIONAIS  
LISTA DE EXERCÍCIOS 02  
1
2
) Qual a diferença entre processos e threads?  
) Cite três exemplos de operações que fazem um processo transitar do estado “em  
execução” para o estado “bloqueado”.  
3
4
5
6
7
) Descreva uma aplicação que utilize múltiplas threads para o seu funcionamento. Como  
seria o funcionamento desta aplicação se ela fosse implementada em uma única thread?  
) Qual a maior vantagem de implementar threads no espaço do usuário? Qual a maior  
desvantagem?  
) Qual a maior vantagem de implementar threads no espaço do núcleo do sistema  
operacional? Qual a maior desvantagem?  
) É possível converter o código de qualquer programa monothread em código multithread?  
Quais as principais dificuldades e soluções encontradas ao se realizar essa tarefa?  
) Escreva um programa em C composto por duas threads: a primeira deve contar e exibir na  
tela todos os números entre 1 e 500 (de forma crescente); a segunda deve contar e exibir  
na tela todos os números entre 500 e 1 (de forma decrescente). As duas threads devem  
ser executadas em paralelo.  
8
) Implemente um programa em C que realize o cálculo das somas dos valores das linhas de  
uma matriz 5x5 de números inteiros e imprima o resultado na tela. O cálculo do somatório  
de cada linha deve ser realizado em paralelo por threads.  
9
) Escreva um programa em C que inverta os valores das linhas de uma matriz 3x3 de  
números inteiros e imprima a matriz resultante na tela. A inversão de cada linha da matriz  
deve ser realizada em paralelo por threads.  
Por exemplo, para a seguinte matriz:  
1
4
7
2 3  
5 6  
8 9  
O programa deve gerar a seguinte matriz resultante:  
3
6
9
2 1  
5 4  
8 7  
1
0) Implemente um programa em C que multiplique os elementos de um vetor de tamanho  
1000 por um escalar e depois imprima o vetor resultante na tela. O processo de  
multiplicação deve ser realizado em paralelo por 10 threads, onde cada thread deve ser  
responsável por multiplicar 100 elementos do vetor pelo escalar.