RESERVADO PARA A Universidade Aberta: Ministério Da Ciência, Tecnologia e Ensino Superior
RESERVADO PARA A Universidade Aberta: Ministério Da Ciência, Tecnologia e Ensino Superior
RESERVADO PARA A Universidade Aberta: Ministério Da Ciência, Tecnologia e Ensino Superior
Curso: ................................................................................................................................................
Nome: .................................................................................................................................................
Nº de Estudante: ........................................ B. I. nº ..............................................
Turma: ................... Assinatura do Vigilante: .............................................
Classificação: ( ) ..................................................................................................................
- O enunciado do teste tem 11 páginas, sendo constituído por duas partes, I e II, com a
cotação total de 20 valores.
- Nas respostas, tenha a preocupação de utilizar uma letra legível por outra pessoa.
- A parte I é constituída por questões do tipo resposta aberta, com a cotação total de
12 valores.
- A parte II é constituída por questões de escrita de Software, com a cotação total de 8
valores.
- As cotações são indicadas nas próprias questões/alíneas.
- As respostas às questões devem ser dadas no próprio enunciado, limitadas ao espaço
em branco a seguir a cada questão. Antes de escrever, planeie a sua resposta de
acordo com o espaço disponível.
- Todas as respostas devem ser escritas unicamente com caneta azul ou preta.
- É permitido utilizar máquina de calcular.
- O não cumprimento das instruções implica a anulação das respectivas questões ou
do teste.
- O tempo de realização do teste é de 150 minutos.
- Verifique se o teste está completo e termina na palavra FIM.
1
Grupo I
1.2. [1] Indique e explique qual foi a razão inicial que levou ao conceito de
multiprogramação.
2
1.3. [1] Em que consiste uma função de sistema ? Explique sucintamente como é
implementada a chamada a uma função de sistema.
1.4. [1] Justifique porque não se deve programar com suposições baseadas no tempo
de execução do código.
3
1.5. [1] Comente possíveis razões para existirem tarefas.
1.6. [1] Justifique por que razão não existe protecção de memória entre tarefas.
4
1.7. [1] Explique em que consiste o problema da inversão de prioridade.
1.8. [1] Escreva um pequeno programa em pseudo linguagem C com 2 processos que
conduza a uma situação de interblocagem (deadlock).
5
1.9. Considere um sistema com memória virtual e paginação. O espaço de
endereçamento virtual é de 12 bits (4KB) e em determinado momento a tabela de
páginas (mononível) tem o seguinte conteúdo,
1.9.2. [0,75] Considere o endereço virtual 1000 0111 1101. Indique justificando o
endereço físico correspondente.
1.9.3. [0,5] Considere o endereço virtual 0010 0100 1001. Explique sucintamente o
que acontece quando o programa efectua uma referência a este endereço.
6
1.10. [1] Descreva resumidamente o método de implementação de ficheiros por i-
nodes.
1.11. [1] O que é e que funções desempenha o Master Boot Record (MBR) ?
7
Grupo II
8
2.1.2. [1] Após a execução do programa anterior, é criado o ficheiro aaa. Indique
qualitativamente qual é o seu conteúdo e qual o mecanismo que levou à sua
criação.
A tarefa principal deve criar duas sub-tarefas em que cada uma em paralelo (ou
em pseudo-paralelismo) analiza metade do vector x[]. A tarefa principal deve
esperar que ambas as tarefas terminem e depois deve imprimir o resultado final e
terminar.
9
(espaço de resposta à questão 2.2.)
10
Formulário
#include <stdlib.h>
int system(char *string);
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
pid_t getpid(void);
pid_t getppid(void);
#include <unistd.h>
unsigned int sleep(unsigned int seconds);
extern char **environ;
int execl(char *path, char *arg, ...);
int execlp(char *file, char *arg, ...);
int execle(char *path, char *arg , ..., char *envp[]);
int execv(char *path, char *argv[]);
int execvp(char *file, char *argv[]);
int execve(char *path, char *argv [], char *envp[]);
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);
#include <pthread.h>
int pthread_create(pthread_t *thread, pthread_attr_t *attr,
void *(*start_routine)(void*), void *arg);
int pthread_attr_init(pthread_attr_t *attr);
int pthread_attr_setdetachstate(pthread_attr_t *attr, int
detachstate);
#define PTHREAD_CREATE_DETACHED
#define PTHREAD_CREATE_JOINABLE
int pthread_join(pthread_t thread, void **value_ptr);
int pthread_mutex_init(pthread_mutex_t *mutex,
pthread_mutexattr_t * attr);
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
int pthread_mutex_destroy(pthread_mutex_t *mutex);
FIM
11