Prévia do material em texto
UNIVERSIDADE FEDERAL DE SANTA CATARINA CAMPUS ARARANGUÁ - ARA TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO PROVA 1 Nome:_______________________________- _________________ Professor- Lucas Castellan 1- Relacione as colunas (1,0) a) Tradutor b) Compilador c) Linker d) Interpretador ( b ) É o utilitário responsável por gerar, a partir de um programa escrito em uma linguagem de alto nível, um programa em linguagem de máquina não executável. ( d ) é considerado um tradutor que não gera código-objeto. A partir de um programa fonte, escrito em linguagem de alto nível, no momento da execução do programa, traduz cada instrução e a executa em seguida. ( a ) Esses programas eram desenvolvidos em linguagem de máquina e carregados diretamente na memória principal para execução. Também pode ser chamado de montador. ( c ) é o utilitário responsável por gerar, a partir de um ou mais módulos-objetos, um único programa executável a) a-b-c-d b) b-c-d-a c) d-b-a-c d) b-d-a-c e) b-a-d-c UNIVERSIDADE FEDERAL DE SANTA CATARINA CAMPUS ARARANGUÁ - ARA TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO PROVA 1 2- Informações Contidas na PCB (Process Control Block) exceto:(1,0) a) Identificação do processo; b) Estado de execução; c) Dados do contador de programas (Program Counter); d) Dados dos registrados da CPU; e) Informações para o escalonamento de memória, por exemplo prioridade; 3- Sobre modelos de Interação entre Produtores e Consumidores, relacione as colunas: (1,0) 1- Um-para-um 2- Muitos-para-um 3- Um-para-muitos 4- Muitos-para-muitos ( ) Youtube, Clipboard do Windows ( ) Televisão, rádio, painéis publicitários. ( ) Correio postal, SMS entre celulares. ( ) Comunicação com par de walkie- talkies. a) 1-2-3-4 b) 2-3-4-1 c) 4-2-3-1 d) 4-3-2-1 e) 4-3-1-2 4- Sobre a Seção Crítica: Quando um processo estiver executando sua seção crítica, nenhum outro processo deve ter autorização para fazer o mesmo. Dois processos não podem estar executando suas seções críticas ao mesmo tempo. Uma solução para o problema da seção crítica deve satisfazer a quatro requisitos. Complete as afirmações correspondente a cada requisito. (1,0) Exclusão Mútua: enquanto um processo estiver executando sua seção crítica, outros processos não poderão executar suas seções críticas. Progresso:se um processo necessitar executar sua seção crítica e nenhum processo estiver executando sua seção crítica ele não deve ser impedido. Espera Limitada:Um processo não deve aguardar indefinidamente o acesso a sua seção crítica. Eficiência:um processo deve acessar a seção crítica de maneira eficiente, ou seja sem operações adicionais. 5- Considere o conjunto de 4 processos abaixo onde criação corresponde ao momento em que o processo foi posto a primeira vez no estado de apto e o tempo de CPU é a quantidade de processamento necessário. (2,0) UNIVERSIDADE FEDERAL DE SANTA CATARINA CAMPUS ARARANGUÁ - ARA TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO PROVA 1 PROCESSO TEMPO DA CPU Criação P1 5 3 P2 3 2 P3 6 0 P4 2 4 a) Desenhe os diagramas de Gantt – ilustrando a execução destes processos – para as políticas de escalonamento : SJF (Shortest Job First) Versão Preemptiva. b) Determine o tempo total e o tempo médio de espera dos processos. P1=16 – 3 – 5= 8 P2=5 – 2 – 3 = 0 P3=11 – 0 – 6 = 5 P4=7 – 4 – 2 = 1 Tempo total de espera= 15 ms Tempo médio de espera=3,75 ms 6- Implemente uma chamada de sistema fork(), mostrando em tela uma mensagem do processo pai e uma do processo filho, cada um dizendo seu identificador: (2,0) #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main(void) { int i; pid_t pid; if ((pid = fork()) < 0) { perror("fork"); // exit(1); } if (pid == 0) { printf("pid do Filho: %d\n", getpid()); } UNIVERSIDADE FEDERAL DE SANTA CATARINA CAMPUS ARARANGUÁ - ARA TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO PROVA 1 else { printf("pid do Pai: %d\n", getpid()); } exit(0); } 7- Complete o código do Semáforo para produtor e consumidor: (2,0) #define __USE_GNU 1 #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <semaphore.h> /* biblioteca para semáforo */ #define N_ITENS 30 int buffer[N_ITENS]; sem_t pos_vazia; /* cria semáforo posição vazia */ sem_t pos_ocupada; /* cria semáforo posição Ocupada */ int inicio = 0, final = 0; void* produtor(void *v) { int i; for (i = 0; i < 3 * N_ITENS; i++) { sem_wait(&pos_vazia); /* Função para (decrementar/aguardar) a posição vazia*/ printf("Produtor, item = %d.\n", i); final = (final + 1) % N_ITENS; buffer[final] = i; sem_post(&pos_ocupada); /* Função para (incrementar/liberar) a posição ocupada*/ sleep(random() % 3); } return NULL; } void* consumidor(void *v) { int i; for (i = 0; i < 3 * N_ITENS; i++) { sem_wait(&pos_ocupada); /* Função para (decrementar/aguardar) a posição ocupada*/ inicio = (inicio + 1) % N_ITENS; printf("Consumidor, item = %d.\n", buffer[inicio]); sem_post(&pos_vazia); /* Função para (incrementar/liberar) a posição vazia*/ sleep(random() % 3); UNIVERSIDADE FEDERAL DE SANTA CATARINA CAMPUS ARARANGUÁ - ARA TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO PROVA 1 } return NULL; } int main() { pthread_t thr_produtor, thr_consumidor; sem_init(&pos_vazia, 0, N_ITENS); /* Inicialização do semáforo posição vazia*/ sem_init(&pos_ocupada, 0, 0); /* Inicialização do semáforo posição ocupada*/ pthread_create(&thr_produtor, NULL, produtor, NULL); pthread_create(&thr_consumidor, NULL, consumidor, NULL); pthread_join(thr_produtor, NULL); pthread_join(thr_consumidor, NULL); sem_destroy(&pos_vazia); /*função para apagar o semáforo posição vazia após a utilização */ sem_destroy(&pos_ocupada); /*função para apagar o semáforo posição ocupada após a utilização */ return 0; }