Exame SO
Informática
Faculdade de Ciências e
Tecnologia
Universidade de Coimbra
Sistemas(Operativos(
9(de(Janeiro(2013–(Exame(Normal
120 + 30 minutos
Nome (
nº (
Regras (
Qualquer tentativa de fraude conduzirá à anulação da prova para todos os intervenientes.
Consulta: 2 Páginas. Não são permitidos meios electrónicos (calculadora, telemóvel, …).
As respostas devem ser obrigatoriamente efectuadas na folha fornecida.
Nas questões de escolha múltipla, apenas uma das opções é verdadeira.
Avaliação (
Questão
Classificação
1.a
1.b
1.c
1.d
(1
Questão
Classificação
2
3.a
3.b
Questão
Classificação
4.a
4.b
5
6
Questão (
Considere o seguinte segmento de código:
#include
#include
int f(int n) { static int num_calls = 0; if (n == -1) return num_calls;
++num_calls;
return __f(n, 0);
}
#define BASE 5 int total, x = 0; char buf[1024] = {0}; int __f(int n, int num_iter) { int result = n; if (num_iter < n - 1) result += __f(n, ++num_iter); return result;
}
int main(int argv, char **argc) { int i; if (argv > 1) x = atoi(argc[1]); else x = BASE; total = f(x); sprintf(buf,"f(%d)=%d", x, total); printf("%s\n", buf); return 0;
}
a) Depois de compilado, este programa estará estruturado de acordo com o formato dos ficheiros executáveis que discutimos nas aulas. Indique para o seguinte conjunto de variáveis, em que secções do ficheiro serão colocadas (.bss, .data, .stack):
Variável
Secção do ficheiro executável total x buf result num_calls i Exame Normal de Sistemas Operativos – 9 de Janeiro de 2013
-1-
b) Responda à seguinte questão e
A função ”int f(int n)“ é reentrante?
justifique
a
sua
resposta
convenientemente:
!
!
!
!
!
!
c) Apresente o código para uma versão thread safe da função ”int f(int n)“ que permita a esta função ser executada em paralelo por diferentes threads. NOTA: Soluções com exclusão mútua ao nível da