Buscar

prova1 resolução

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 5 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Continue navegando


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; 
}