Você está na página 1de 11

Cap

1 Cap. 1 - Introduction. Dar uma lida geral no captulo. Exerccios recomendados: 1.6 - (sobre instrues privilegiadas), 1.8, 1.10, 1.13, 1.16, 1.17, 1.20, 1.30. 1-A - Considere os tipos de instruo abaixo: A. Disparar uma instruo de trap B. Desabilitar interrupes C. Modificar entradas na tabela de status dos dispositivos D. Alternar do modo usurio para modo kernel E. Acessar dispositivo de I/O F. Modificar o valor do timer G. Ler o valor atual do relgio H. Apagar a memria Assinale abaixo quais das alternativas acima se referem a instrues privilegiadas: a) Apenas A, E e F; b) Todas, menos a G; c) Todas, menos A, D e G; d) Somente B e C; e) Nenhuma das anteriores. Resposta: B, C, E, F, H Obs. esta a prpria questo 1.6 da lista sugerida 1-B - Considere os tipos de instruo abaixo: a) Apagar a memria b) Ler o valor atual do relgio c) Disparar uma instruo de trap d) Desabilitar interrupes e) Modificar entradas na tabela de status dos dispositivos f) Alternar do modo usurio para modo kernel g) Acessar dispositivo de I/O h) Modificar o valor do timer Assinale abaixo quais das instrues acima podem ser executadas em modo usurio: a) Apenas A, C e F; b) Todas, menos a G; c) Todas, menos A, D e G; d) Somente B e C; e) Nenhuma das anteriores. Resposta: e) nenhuma das anteriores somente sao de modo usuario: B, C, F 2-A) Assinale qual das alternativas abaixo est relacionada com sistemas multiprocessadores do tipo SMP: a) Cada processador executa todas as tarefas existentes no sistema operacional; b) Um processador reservado para as tarefas do sistema operacional; c) Cada processador associado a um tipo especfico de tarefa;

Universdade Federal de So Carlos Sistemas Operacionais I Prova 1

27/05/2013

2-B) O mecanismo conhecido como ________ pode ser utilizado para evitar que um programa do usurio jamais devolva o controle para o sistema operacional: A) system call B) porta de I/O C) contador de programas D) troca de contexto E) firewall F) timer Resposta: D) timer 3-A) Alguns sistemas operacionais tm seu cdigo fonte divulgado abertamente (caso do Linux), enquanto outros somente so disponibilizados na forma de cdigo binrio j compilado (caso do Windows). Considere as afirmaes abaixo: a. Sistemas operacionais como iOS e Mac OS, da Apple so hbridos das duas formas de distribuio de cdigo. Eles tm um ncleo (kernel) aberto chamado Darwin, mas tambm possuem muitos componentes proprietrios e fechados. b. Sistemas operacionais de cdigo aberto correm mais riscos sob o ponto de vista de segurana, pois pessoas mal intencionadas podem aprender sobre o seu funcionamento interno e explorar possveis brechas de segurana. c. BSD Unix um sistema operacional derivado do Unix da AT&T, desenvolvido na Universidade da Califrnia em Berkeley. Originalmente, seu cdigo dependia de uma licena da AT&T, e posteriormente surgiram verses de cdigo aberto como o FreeBSD, NetBSD, OpenBSD e DragonflyBSD. d. O kernel de SOs como iOS e Mac OS foi inspirado no BSD. e. Android um SO que possui um kernel linux modificado, bibliotecas especializadas e uma mquina virtual chamada Dalvik. Aplicaes so desenvolvidas em Java (uma API Java modificada e otimizada), que so compiladas para bytecodes e ento traduzidas para cdigo binrio que executa na vm Dalvik. Indique qual afirmao est errada: _______ Resposta: B) o contrrio - sistemas de codigo aberto sao vistos por mais pessoas e as chances de encontrar e resolver as brechas sao ainda maiores. Ver ultimo parag. antes da seo 1.12.1 Obs. Inspirada na questao 1.30 do AS 3-B) O acesso direto memria (DMA) utilizado por dispositivos de I/O de alta velocidade para evitar sobrecarregar a CPU. Considere as seguintes afirmaes: a. Nesses casos, a CPU no interage diretamente com o dispositivo de I/O de alta velocidade; b. A CPU recebe uma nica interrupo quando a transferncia de dados na memria tiver sido concluda; c. Por questes de segurana, a CPU monitora a transferncia de dados entre o dispositivo de I/O e a memria. d. A CPU pode executar outros programas enquanto o controlador de DMA efetua a transerncia de dados.

d) Existncia de um relacionamento do tipo chefe e subordinado entre os processadores; e) Alguns processadores podem dar preferncia para a execuo de tarefas de maior prioridade; f) Nenhuma das anteriores.

e. Periodicamente (por exemplo, a cada 10 ms) CPU testa se a transferncia de dados entre o dispositivo de I/O e a memria j foi concluda. Indique qual (ou quais) afirmao(es) est(o) errada(s): _______ Resposta: D) C e E Obs. Inspirada na questao 1.20 do AS Cap 2 Cap. 2 - Operating Systems StructuresIntroduction. Partes importantes: Sees: 2.1 - services; 2.3 - interface; 2.3 e 2.4 - system calls; 2.7 - Structure; Exerccios recomendados: 2.6, 2.9, 2.16, 2.12, 2.22, 2.23. 4-A) _____ (so) responsvel(is) por prover uma interface para os servios fornecidos por um sistema operacional. a. Protocolos de comunicao b. Memria compartilhada c. Emuladores d. Hipervisores, ou monitor de mquinas virtuais e. System calls Alternativa correta: _______ Resposta: e) system call Feedback: 2.3 e 2.4 4-B) ____________ permitem que servios de um sistema operacional sejam carregados dinamicamente. a. Mdulos b. Mquinas virtuais c. Interfaces grficas d. Sistema de arquivos e. Drivers de dispositivos Resposta: a) mdulos Feedback: 2.7.4 Cap 3 Cap. 3 - Processes Partes importantes: Sees: Todas at o final da 3.5. Exerccios recomendados: 3.2, 3.3, 3.9, 3.10, 3.12, 3.14. 5-A ) Considere o trecho de cdigo abaixo: #include <stdio.h> #include <unistd.h> int main() { fork();

fork(); fork(); fork(); return 0; } Assinale a alternativa correta sobre quantos processos so gerados por esse trecho de cdigo (incluindo o processo original): a. So criados 4 processos. b. So criados 5 processos. c. So criados 8 processos. d. So criados 16 processos. e. So criados 32 processos. Alternativa correta: _______ Resposta: d) 16 processos Feedback: quaesto 2.3 5-B ) Considere o trecho de cdigo abaixo: include <stdio.h> #include <unistd.h> int main() { printf("1\n"); fork(); printf("2\n"); fork(); printf("3\n"); fork(); printf("4\n"); fork(); } Esse programa, quando executado, ir gerar novos processos e todos iro exibir mensagens (printf) em tela. Responda, quantas mensagens printf so geradas no total: a. So exibidas 15 mensagens. b. So exibidas 16 mensagens. c. So exibidas 12 mensagens. d. So exibidas 5 mensagens. e. So exibidas 4 mensagens. Alternativa correta: _______ Resposta: a) 15 processos Feedback: quaesto 2.3 6-A) Assinale abaixo, qual parte de um processo contm dados temporrios, tais como parmetros de funes, endereos de retorno e variveis locais. a. pilha (stack) b. seo de texto (text section) c. seo de dados (data section) d. contador de programas (program counter) e. heap Resposta. Resposta:

a) pilha Feedback: seo 3.1.1 Fcil 6-B) Assinale abaixo, qual afirmao incorreta: a. Um bloco de controle de processos (BCP) armazena informaes sobre o estado de um processo, bem como a sua prxima instruo a ser executada. b. Um bloco de controle de processos (BCP) determina qual processo o prximo a ser executado. c. A lista dos processos que aguardam por uma operao que ser atendida por um dispositivo de I/O especfico chamada de fila de dispositivo (device queue). d. O bloco de controle de processo no Linux implementado na forma de um struct, e um de seus campos uma lista dos arquivos abertos pelo processo. e. Nenhuma das anteriores. Resposta: ____________ Resposta: b) quem determina o escalonador Feedback: quaesto 3.1 e 3.2 Fcil Cap 4. Cap. 4 - Threads Partes importantes: Sees: Todas, menos 4.4 (thread libraries). Exerccios recomendados: 4.8, 4.10, 4.11, 4.12, 4.13, 4.14, 4.15, 4.16. 7-A ) Considere o trecho de cdigo abaixo:
class OperatorThread implements Runnable { private int row_inf, row_sup, col_inf, col_sup; private double [][]A, [][]B, [][]C; OperatorThread (int row_inf, int row_sup, double [][]A, double [][]B, double [][]C) { this.row_inf = row_inf; this.row_sup = row_sup; this.A = A; this.B = B; this.C = C; } public void run() { int i, j, k; double Acum; for (i=row_inf; i<row_sup; i++) for (j=0; j<C.length; j++) { Acum = 0; for (k=0; k<C.length; k++) Acum += A[i][k]*B[k][j]; C[i][j]=Acum; } } } public class MatrizThreads { public static void main(String[] args) throws IOException { int i, j, N;

// obter num. de linhas e de colunas N = Integer.parseInt(args[0]); // inicializa matrizes double [][]A = new double [N][N]; double [][]B = new double[N][N]; for (i=0; i<N; i++) for (j=0; j<N; j++) { A[i][j] = Math.random(); B[i][j] = Math.random(); } // cria matriz C double [][]C = new double[N][N]; long t1; t1 = System.currentTimeMillis(); // TRECHO 1 - Aqui vem a criacao dos ... // TRECHO 2 - Aqui vem o disparo dos ... // TRECHO 3 - Aqui vem a finalizao ... long t2 = System.currentTimeMillis() }

das matrizes

threads threads dos threads - t1;

Considere que: O computador possui 8 ncleos (cores), e que N mltiplo de 8 Voc deve decidir o nmero de threads a serem criados Tente minimizar o tempo de execuo do programa Escreva os trechos de cdigo solicitados abaixo: a. Escreva o trecho 1, contendo a criao dos threads. considere tudo o que for necessrio para que o programa execute corretamente. b. Escreva o trecho 3, contendo a finalizao dos threads, ou seja, a espera por parte da thread principal, para que todos finalizem. Resposta: ... // TRECHO 1 Thread [] workerThread = new Thread[8]; int lines_per_thread = N / 8; for (i=0; i<8; i++) workerThread[i] = new Thread(new WorkerThread(i*lines_per_thread, (i+1)*lines_per_thread, A, B, C)); // TRECHO 2 for (i=0; i<8; i++) workerThread[i].start(); // TRECHO 3 try { for (i=0; i<8;i++) workerThread[i].join(); } catch (java.lang.InterruptedException e) { System.out.println("Erro no join!"); } Feedback: exrcicio dado em aula 7-B ) Considere o trecho de cdigo abaixo:

Considere que: O computador possui 4 ncleos (cores), e que N mltiplo de 4 Voc deve decidir o nmero de threads a serem criados Tente minimizar o tempo de execuo do programa Escreva os trechos de cdigo solicitados abaixo: a. Escreva o trecho 1, contendo a criao dos threads. considere tudo o que for necessrio para que o programa execute corretamente. b. Escreva o trecho 2, contendo o disparo dos threads, isto , depois da sua criao, faa com que sejam colocados na fila de prontos e possam comear a executar.

class MultiplierThread implements Runnable { private int row_inf, row_sup, col_inf, col_sup; private double [][]A, [][]B, [][]C; MultiplierThread (int row_inf, int row_sup, double [][]A, double [][]B, double [][]C) { this.row_inf = row_inf; this.row_sup = row_sup; this.A = A; this.B = B; this.C = C; } public void run() { int i, j, k; double Acum; for (i=row_inf; i<row_sup; i++) for (j=0; j<C.length; j++) { Acum = 0; for (k=0; k<C.length; k++) Acum += A[i][k]*B[k][j]; C[i][j]=Acum; } } } public class MatrizThreads { public static void main(String[] args) throws IOException { int i, j, N; // obter num. de linhas e de colunas das matrizes N = Integer.parseInt(args[0]); // inicializa matrizes double [][]A = new double [N][N]; double [][]B = new double[N][N]; for (i=0; i<N; i++) for (j=0; j<N; j++) { A[i][j] = Math.random(); B[i][j] = Math.random(); } // cria matriz C double [][]C = new double[N][N]; long t1; t1 = System.currentTimeMillis(); // TRECHO 1 - Aqui vem a criacao dos threads ... // TRECHO 2 - Aqui vem o disparo dos threads ... // TRECHO 3 - Aqui vem a finalizao dos threads ... long t2 = System.currentTimeMillis() - t1; }

Resposta: // TRECHO 1 Thread [] workerThread = new Thread[8]; int lines_per_thread = N / 8; for (i=0; i<8; i++) workerThread[i] = new Thread(new WorkerThread(i*lines_per_thread, (i+1)*lines_per_thread, A, B, C)); // TRECHO 2 for (i=0; i<8; i++) workerThread[i].start(); // TRECHO 3 try { for (i=0; i<8;i++) workerThread[i].join(); } catch (java.lang.InterruptedException e) { System.out.println("Erro no join!"); } inspirado no exercicio visto em aula 8-A) Assinale abaixo, qual afirmao incorreta: a. O navegador Google Chrome permite abrir vrios sites com contedo dinmico (ex: JavaScript, Flash, HTML5) ao mesmo tempo, por meio de abas. O Chrome implementado na forma de um nico processo, com vrios threads. Um thread browser reponsvel pela interface e I/O em disco e na rede. Um novo thread renderer criado para cada nova aba aberta. Ele tambm cria threads do tipo plugin, para executar plugins como Flash e QuickTime, por exemplo. b. A diferena entre programao concorrente e programao com paralelismo que nesta ltima, necessariamente existe mais de um ncleo ou processador executando threads realmente de forma simultnea. Isto pode acelerar aplicaes que fazem uso intensivo de CPU. c. Pools de threads (thread pools) so conjuntos de threads criados previamente, que ficam disponveis e que podem ser reutilizados vrias vezes, sem precisar criar e destruir threads vrias vezes. Resposta: ____________ Resposta: a) Google chrome usa processos, para maior isolamento de falhas Feedback: questo 4.10 sugerida como exerccio, baseada no estudo de caso do cap 3 8-B) Assinale abaixo, qual afirmao incorreta: a. O SO Windows usa o esquema de mapeamento de threads um-para-um, onde cada thread de usurio associado a um nico thread de kernel. b. Pools de threads (thread pools) so conjuntos de threads criados previamente, que ficam disponveis e que podem ser reutilizados vrias vezes, sem precisar criar e destruir threads vrias vezes. c. O navegador Google Chrome permite abrir vrios sites com contedo dinmico (ex: JavaScript, Flash, HTML5) ao mesmo tempo, por meio de abas. O Chrome implementado na forma de um nico processo, com vrios threads. Um thread browser reponsvel pela interface e I/O em disco e na rede. Um novo thread renderer criado para cada nova aba aberta. Ele tambm cria threads do tipo plugin, para executar plugins como Flash e QuickTime, por exemplo.

Resposta: ____________ Resposta: c) Google chrome usa processos, para maior isolamento de falhas Feedback: questo 4.10 sugerida como exerccio, baseada no estudo de caso do cap 3 Fcil Cap 5 Cap. 5 - Process synchronization Partes importantes: Sees: Tudo importante. Exerccios recomendados: Recomendo dar uma olhada em todos, do 5.7 at 5.35. 9-a) Um semforo mutex _______________ . Complete a frase: a. exatamente como um semforo contador b. pode ser usado para eliminar busy waiting c. s pode ser implementado por uma instruo atmica do hardware d. essencialmente uma varivel booleana e. pode causar deadlock Resposta: ___________ resposta: D) Feedback: 5.5 Difficulty: Difficult 9-B) O problema dos leitores escritores visto em aula __________ . Complete a frase: a. requer que nenhum leitor fique esperando, a menos que um escritor j tenha obtido permisso de acesso ou que existam escritores esperando para acessas o banco de dados b. no utiliza primitivas de sincronizao c. Requer que um escritor, to logo esteja pronto, execute suas escritas o mais rpido possvel d. requer que nenhum leitor fique esperando, a menos que outro leitoe j tenha obtido permisso de acesso para acessar o banco de dados Resposta: ___________ resposta: a) Feedback: 5.5 Difficulty: Difficult 10-A) Considere a soluo abaixo, para o problema dos leitores escritores:

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.

Reader() { // checa sistema lock.Acquire(); a while ((AW + W W) > 0) { WR++; okToRead.wait(&lock); WR--; } AR++; lock.release(); // read-only access AccessDbase(ReadOnly); // sai do sistema lock.Acquire(); AR--; if (AR == 0 && W W > 0) okToWrite.broadcast(); lock.Release(); }

19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.

Writer() { // checa sistema lock.Acquire(); while ((AW + AR) > 0) { WW++; okToWrite.wait(&lock); WW--; } AW++; lock.release(); // read/write access AccessDbase(ReadWrite); // sai do sistema lock.Acquire(); AW--; if (WW > 0 ){ okToWrite.signal(); } else if (WR > 0) { okToRead.broadcast(); } lock.Release(); }

Analise a soluo acima, e responda: a) Quando um leitor bloqueia na linha 6, ele continua dentro da regio crtica? Justifique sua resposta. b) Para que serve a varivel lock no caso do escritor? para fazer excluso mtua do banco de dados? Justifique sua resposta. c) Considere a seguinte ordem de chegada: W1, R1, R2, W2, R3, R4, onde R representa um leitor e W um escritor. Indique a sequencia de execuo dos leitores e escritores, inclusive quem acessa sozinho e quem acessa concorrentemente com outros. d. Essa soluo privilegia leitores ou escritores? Justifique sua resposta. 10-B) Considere a soluo abaixo, para o problema dos leitores escritores: 59. Writer() { 41. Reader() { 60. // checa sistema 42. // checa sistema 61. lock.Acquire(); 43. lock.Acquire(); a 62. while ((AW + AR) > 0) { 44. while ((AW + W W) > 0) { 63. WW++; 45. WR++; 64. okToWrite.wait(&lock); 46. okToRead.wait(&lock); 65. WW--; 47. WR--; 66. } 48. } 67. AW++; 49. AR++; 68. lock.release(); lock.release(); 69. // read/write access 50. // read-only access 70. AccessDbase(ReadWrite); 51. AccessDbase(ReadOnly); 71. // sai do sistema 52. // sai do sistema 72. lock.Acquire(); 53. lock.Acquire(); 73. AW--; 54. AR--; 74. if (WW > 0 ){ 55. if (AR == 0 && W W > 0) 75. okToWrite.signal(); 56. okToWrite.broadcast(); 76. } else if (WR > 0) { 57. lock.Release(); 77. okToRead.broadcast(); 58. } 78. } 79. lock.Release();
80. }

Analise a soluo acima, e responda: a) Quando um escritor bloqueia na linha 24, ele continua dentro da regio crtica? Justifique sua resposta. b) Para que serve a varivel lock no caso do leitor? para fazer excluso mtua do banco de dados? Justifique sua resposta. c) Considere a seguinte ordem de chegada: W1, W2,R1, R2, W3, R3, R4, W4, onde R representa um leitor e W um escritor. Indique a sequencia de execuo dos leitores e escritores, inclusive quem acessa sozinho e quem acessa concorrentemente com outros. d) Essa soluo privilegia leitores ou escritores? Justifique sua resposta.