Sistemas Operacionais I

Propaganda
Sistemas Operacionais I
Aula Prática 2 - Tarefas
Objetivo
•
Descrever o que são tarefas e como são criadas nos programas.
Material de Apoio
•
•
•
•
Para aula 1 baixe o material disponível em
http://siep.ifpe.edu.br/anderson/arquivos/so_aula2_pratica.zip
Acesse a máquina de trabalho pelo putty com o IP 192.168.7.229. Utilize a
senha que foi passada durante as aulas.
É indispensável o entendimento do SO Linux. Caso precise de ajuda acesse o
site http://siep.cefetpe.br/anderson/arquivos/linux.zip e busque informações de
utilização.
Atenção! Todos os exercícios marcados com vermelho são opcionais e se
algum aluno fizer ganhará um diferencial na nota. Caso nenhum aluno faça a
questão, a nota geral será descontada, valendo 80%. Não sendo possível obter a
nota máxima.
Introdução
1. Criação de tarefas
a) Copie o arquivo so_aula2_pratica.zip para a sua área de trabalho e descompacte o seu
conteúdo:
unzip so_aula2_pratica.zip
b) Estude, compile e execute a aplicação. Observando o esquema de criação de threads
das tarefas
c) Porque é indeterminado o conteúdo da variável global Value?
d) Monte um experimento que prove a afirmação do quesito “c”. (sugestão: utilize a
chamada de sistema sleep).
2. É possível implementar o conceito de pseudoparalelismo sem recorrer ao núcleo
do sistema operacional? Justifique.
3. Considere o código descrito em fork1.c. Qual a saída deste programa?
Justifique.
4. Para cada uma das seguintes afirmações, indique se esta pode ou não ser um
motivo válido para a utilização de múltiplas threads reais em um programa, e
explique por quê.
a) Melhorar o desempenho de uma aplicação em um multiprocessador.
b) Ter múltiplos fluxos de execução com espaços de endereçamento separados no mesmo
programa.
c) Poder sobrepor a execução de instruções de E/S com a utilização da CPU por outras partes
do mesmo programa.
d) Executar dois programas diferentes (correspondentes a diferentes arquivos executáveis) em
paralelo.
5. Considere o seguinte trecho de código descrito no padrão POSIX
1 int a;
2 fn() {
3
a++;
4
printf("X %d\n", a);
5
exit(0);
6 }
7 main() {
8
int val;
9
a = 0;
10
printf("Y %d\n", a);
11
if (fork()==0)
12
fn();
13
wait(&val);
14
printf("Z %d\n", a);
15 }
a) Qual a saída desse programa? Se houver mais do que uma possibilidade, indique todas as
possíveis saídas.
b) Escreva um novo programa que seja equivalente (no sentido de executar a mesma
sequencia de código, apesar de não ter necessariamente a mesma saída), exceto no seguinte
aspecto: na linha 12 deve ser lançada uma nova thread em vez de um novo processo. Tenha o
cuidado de atualizar as funções restantes do sistema operacional que são invocadas conforme
este código.
c) Qual a saída do novo programa? Justifique a resposta.
d) Ordene em termos da velocidade de execução, da mais lenta para a mais rápida, as
seguintes possibilidades para a execução deste programa:
i) Usando threds reais
ii) Usando pseudothreads
iii) Usando processos
e) Para questão anterior explique a razão principal para o desempenho relativo entre as
threads reais e as pseudothreads.
Exercício opcional
Repita a questão do item “b”, mas utilizando threads Windows. Compare as primitivas
para a criação de um processo no Linux e no Windows, indicando as vantagens de cada
uma em relação à outra.
Download