Baixe o app para aproveitar ainda mais
Prévia do material em texto
________________________________________________________________________________ FACULDADE ESTÁCIO DE CURITIBA Curso: ADS Turma: ADS - 2021 Disciplina: Sistemas Operacionais Professor(a): Douglas Rocha Mendes Data: 18/06/2021 Avaliação: AV2 Aluno: Joao Vitor Ferreira da Luz Matrícula: 202002006161 Nota: INSTRUÇÕES PARA A AVALIAÇÃO: a) Leia atentamente todas as questões antes de iniciar; b) A interpretação das questões faz parte da avaliação; c) Para as respostas, utilize caneta azul ou preta; d) prova individual, com consulta etc. Vale 80 pontos. 20 pontos do trabalho bimestral. Boa Prova! 1. (Vale 10 pontos) Comente sobre a técnica de overlay? R: Esta técnica consiste em dividir o programa em partes para poupar recursos de memória, o programa é dividido em um arquivo principal e outros com as “funções” assim os arquivos de segundo plano são “ativados” somente quando chamados. 2. (Vale 10 pontos) O quê acontece quando há pouca RAM em um sistema computacional, como ele se comporta? R: A falta de memória RAM faz com que o sistema fique lento ou pare, pós é ela que armazena arquivos de curto tempo ou dados de giro do sistema. 3. (Vale 10 pontos) Suponha que um programador precisou desenvolver um programa para solucionar a seguinte equação: X = (100 x 3) + (2 x (A + 30)) + (20 - 2) + (3 x B). Para otimizar o processamento, este programador optou por dividir a equação em partes menores e distribuí-las em diferentes threads. O resultado foi: ⚫ PROGRAM EQUACAO; ⚫ VAR X, A, B, C, D: integer; ⚫ INICIO ⚫ QA := (100*3); ⚫ QB := 2 * (A + 30); ⚫ QC := (20-2); ⚫ QD := (3 * B); ⚫ QX := A + B + C + D; ⚫ FIM ________________________________________________________________________________ O algoritmo acima contém um erro, que ilustra a complexidade do uso de threads. Descreva o erro do algoritmo acima e apresente uma solução para este problema. R: O erro ocorre pois a threads vão se “bater”e não serão executadas ao mesmo tempo, seria uma solução dividir o programa e fazer somente uma operação com threads. 4. (Vale 10 pontos) Apresentar os 15 primeiro números da sequência de Fibonacci, utilizando RECURSIVIDADE. R: O sistema de recursividade consiste em reutilizar uma “função”, Fibonacci poderia ser resolvida logicamente da seguinte maneira: for{ x=1 xant = 0 xant = x + xant } 5. (Vale 10 pontos) Quais ações não devemos aplicar a um programa que o levaria a gerar um Stack Overflow e Outof Memory. R: não devemos gerar loops infinitos, não ocupar mais memoria do que possui, desalocar memoria, utilizar threads para diminuir os recursos utilizados. 6. (Vale 10 pontos) Sobre as linhas do programa abaixo: Comentar cada uma das linhas informando se seu conteúdo seria mantido na memória Heap ou Stack. A) float *v ; B) int i ; C) v = calloc( 1000, sizeof(float) ) ; // aloca 1.000 floats D) for (i=0; i < 1000; i++) // inicializa o vetor E) v[i] = 1.0 / (i + 1) ; R: A) – um ponteiro que aponta para uma variável float, memoria Stack B) – uma variável que aloca inteiro, memoria stack C) – o ponteiro v aponta para uma alocação de momoria com 1000 floats, memoria stack D) – Inicia um loop for que ira ocorrer até que ‘i’ seja maior que 1000, stack E) – adiciona o valor de ‘i’ a um vetor, stack. 7. (Vale 10 pontos) (Vale 10 pontos) Implementar um programa que apresente o problema de Livelock, utilizar os personagens Alphonse e Jeronimo. R: public class Gerente { static final Alphonse loja = new Alphonse(); static final Jeronimo carro = new Jeronimo(); ________________________________________________________________________________ public static void main(String[] args) { Thread t1 = new Thread(new Runnable() { public void run() { loja.aguardarLiberacaoRefem(carro); } }); t1.start(); Thread t2 = new Thread(new Runnable() { public void run() { carro.receberValorResgate(loja); } }); t2.start(); } } public class Alphonse { private boolean moneySent = false; public void aguardarLiberacaoRefem(Jeronimo carro) { while (!carro.liberarRefem()) { System.out.println("Alphonse: Aguardando Jeronimo liberar venda."); try { Thread.sleep(1000); } catch (InterruptedException ex) { ex.printStackTrace(); } } System.out.println("Alphonse: Enviou dinheirodo para compra."); this.moneySent = true; } public boolean enviarDinheiro() { return this.moneySent; } } public class Jeronimo { private boolean hostageReleased = false; public void receberValorResgate(Alphonse loja) { while (!loja.enviarDinheiro()) { System.out.println("Jeronimo: Aguardando o pagamento do veiculo."); try { Thread.sleep(1000); } catch (InterruptedException ex) { ex.printStackTrace(); } } System.out.println("Jeronimo: carro vendido."); ________________________________________________________________________________ this.hostageReleased = true; } public boolean liberarRefem() { return this.hostageReleased; } } 8. (Vale 10 pontos) Implementar um programa que apresente a solução do problema de Livelock, implementado na questão onde foram utilizados os personagens Alphonse e Jeronimo.. R: public class Gerente { static final Alphonse loja = new Alphonse(); static final Jeronimo carro = new Jeronimo(); public static void main(String[] args) { Thread t1 = new Thread(new Runnable() { public void run() { loja.aguardarLiberacaoRefem(carro); } }); t1.start(); Thread t2 = new Thread(new Runnable() { public void run() { carro.receberValorResgate(loja); } }); t2.start(); } } public class Alphonse { private boolean moneySent = false; int tempoMaxEsperaInvasao = 10; int tempoEsperaInvasao = 0; public void aguardarLiberacaoRefem(Jeronimo carro) { while (!carro.liberarRefem()) { System.out.println("Alphonse: Aguardando Jeronimo liberar venda."); try { Thread.sleep(1000); if (this.tempoEsperaInvasao == this.tempoMaxEsperaInvasao){ break; } this.tempoEsperaInvasao++; } catch (InterruptedException ex) { ex.printStackTrace( ); } } ________________________________________________________________________________ System.out.println("Alphonse: Enviou dinheirodo para compra."); this.moneySent = true; } public boolean enviarDinheiro() { return this.moneySent; } } public class Jeronimo { private boolean hostageReleased = false; public void receberValorResgate(Alphonse loja) { while (!loja.enviarDinheiro()) { System.out.println("Jeronimo: Aguardando o pagamento do veiculo."); try { Thread.sleep(1000); } catch (InterruptedException ex) { ex.printStackTrace(); } } System.out.println("Jeronimo: carro vendido."); this.hostageReleased = true; } public boolean liberarRefem() { return this.hostageReleased; } }
Compartilhar