Escolar Documentos
Profissional Documentos
Cultura Documentos
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
2
1.3. [1] Explique o funcionamento e utilidade da instrução de CPU designada por
TRAP.
3
1.5. [1] Em que consiste uma tabela de processos ?
4
1.7. [1] Suponha um sistema constituído por dois processos em que cada um passa 60%
do seu tempo à espera de operações de I/O. Indique a percentagem temporal
aproximada de ocupação do CPU.
5
1.9. [1] Explique em que consiste uma Tabela de Tradução de Endereços (TLB) e a
importância da sua existência.
6
1.11. [2] Considere um disco rígido com um tempo de acesso de pista para pista de 5
ms, posição actual das cabeças de leitura no cilindro 29. Ao gestor de
dispositivo chegam pedidos de leitura para os cilindros 10, 4, 35, 30, 47 e 28.
Calcule o tempo de acesso (em segundos) para satisfazer todos os pedidos
quando são aplicados os seguintes algoritmos: (i) primeiro a chegar primeiro a
ser servido; (ii) Cilindro mais próximo; (iii) elevador (movimento inicial para
cima).
7
Grupo II
A tarefa principal deve criar duas sub-tarefas em que cada uma em paralelo (ou
em pseudo-paralelismo) calcula um dos valores desejados. A tarefa principal
deve esperar que ambas as tarefas terminem e depois deve imprimir os resultados
finais e terminar.
8
(espaço de resposta à questão 2.1.)
9
2.2. [4] Escreva um programa em pseudo-linguagem C para o problema dos
escritores-leitores, em que se consideram múltiplos escritores e múltiplos
leitores. Um escritor não pode aceder à base de dados em simultâneo com
nenhum outro processo. Vários leitores, no máximo até quatro, podem aceder
simultâneamente à base de dados. Para o acesso à base de dados considere
funções genéricas ler()e escrever().
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