Prova 1 - Sistemas Operacionais PDF

Title Prova 1 - Sistemas Operacionais
Course Sistemas Operacionais "A"
Institution Universidade Federal de Santa Maria
Pages 3
File Size 204 KB
File Type PDF
Total Downloads 85
Total Views 847

Summary

Solução da Prova 1 – 08.10 – Sistemas Operacionais “EC”1 - Quais são as duas principais funções de um sistema operacional?Simplificação da interface com o hardware e gerenciamento de recursos de harware compartilhados são as duas principais funções de um sistema operacional.2 - Qual é a diferença en...


Description

Solução da Prova 1 – 08.10.2018 – Sistemas Operacionais “EC” 1 - Quais são as duas principais funções de um sistema operacional? Simplificação da interface com o hardware e gerenciamento de recursos de harware compartilhados são as duas principais funções de um sistema operacional. 2 - Qual é a diferença entre sistemas de compartilhamento de tempo e de multiprogramação? Compartilhamento de tempo permite que vários usuários acessem uma CPU remotamente através de terminais, executando seus programas na CPU de forma compartilhada. Na multiprogramação, vários programas compartilham a CPU rodando em uma única máquina. Desta forma, todo sistema de compartilhamento permite multiprogramação, mas nem todo sistema de multiprogramação permite compartilhamento de tempo, pois estão geralmente associados ao uso por um único usuário. 3 - Qual é a diferença entre modo núcleo e modo usuário? Explique como ter dois modos distintos ajuda no projeto de um sistema operacional. Quais das instruções a seguir devem ser deixadas somente em modo núcleo? (justifique). (a) Desabilitar todas as interrupções. (b) Ler o relógio da hora do dia. (c) Configurar o relógio da hora do dia. (d) Mudar o mapa de memória. No modo núcleo a CPU pode executar qualquer instrução de sua arquitetura, já no modo usuário somente um sub-conjunto das instruções é permitido. Desta forma, programas criados pelos usuários rodaram no modo usuário e não terão acesso a recursos críticos do sistema diretamente. No exemplo acima, desabilitar as interrupções, configurar o relógio e mudar o mapa de memória são operações que podem comprometer o funcionamento correto do sistema, portanto devem ser executadas no modo núcleo somente. 4 - Na Figura 2.2 do livro texto, reproduzida abaixo, são mostrados três estados de processos. Na teoria, com três estados, poderia haver seis transições, duas para cada. No entanto, apenas quatro transições são mostradas. Existe alguma circunstância na qual uma delas ou ambas as transições perdidas possam ocorrer?

Se a CPU estiver ociosa com um processo “bloqueado” por E/S, assim que a operação E/S encerrar esse processo pode ser executado diretamente, indo de “bloqueado” para “em execução”. Um processo que está no estado “pronto” nunca será bloqueado, por exemplo, por solicitar operação E/S, visto que no estado “pronto”, tal processo não está sendo executado. 5 - Em todos os computadores atuais, pelo menos parte dos tratadores de interrupções é escrita em linguagem de montagem. Por quê? Para não ocorrer perda em performance, interrupções são geralmente tratadas em linguagem de montagem. Além disso, linguagem de montagem permite acesso a recursos de hardware normalmente inacessiveis através de uma linguagem de alto nivel.

6 - Um computador tem 8 GB de RAM da qual o sistema operacional ocupa 1024 MB. Os processos ocupam 512 MB cada (para simplificar) e têm as mesmas características. Se a meta é a utilização de 99% da CPU, qual é a espera de E/S máxima que pode ser tolerada? (justifique). A memória comporta 14 processos. Se p é a probabilidade ou fração do tempo que um processo pode estar aguardando por E/S, a probabilidade de 14 processos estarem aguardando E/S é 1

p14 =1− 0.99=0.01 → p=0.01 14 =0.72

Ou seja, cada processo pode aguardar por E/S, no máximo, 72% do tempo.

7 - Presuma que você esteja tentando baixar um arquivo grande de 2 GB da internet. O arquivo está disponível a partir de um conjunto de servidores espelho, cada um deles capaz de fornecer um subconjunto dos bytes do arquivo; presuma que uma determinada solicitação especifique os bytes de início e fim do arquivo. Explique como você poderia usar os threads para melhorar o tempo de download. Cria-se uma thread para gerenciar o download para cada um dos servidores espelho, entretanto o link local pode tornar-se o gargalho do sistema a medida que o número de threads é demasiadamente grande. 8 - Qual é a maior vantagem de se implementar threads no espaço de usuário? Qual é a maior desvantagem? Threads de usuário permitem melhor uso da CPU, porém, se uma thread bloquear todo processo fica bloqueado. 9 - É possível determinar se um processo é propenso a se tornar limitado pela CPU ou limitado pela E/S analisando o código fonte? Como isso pode ser determinado no tempo de execução? Através do código fonte é possível verificar a frequência com a qual operações E/S são executadas, já durante a execução deve-se utilzar ferramentas que medem a porcentagem de uso da CPU por um dado programa. Entretanto isto somente é válido em máquinas que permitem apenas um único usuário. 10 - Solucione o problema do jantar de filósofos usando monitores em vez de semáforos.

Monitor é um método para tratamento de condições de corrida suportado pela própria linguagem de programação e pelo compilador. Desta forma, somente um processo poderá acessar o monitor de cada vez. A seguir apresentamos a solução com monitor para o problema do Jantar dos Filósofos com 5 filósofos, indexados de 0 a 4. Assim, o filósofo i tem como vizinhos os filósofos (i+1)%5 e (i+4)%5, onde % representa o operador módulo. Ou seja, para o filósofo 0, seu vizinho a esquerda é o filósofo 1 e o da direita é o filósofo 4. Finalmente, para comer, um filósofo precisará de dois talheres: quando desejar comer, ele garante um talher de cada vez, e só comerá quando possuir os dois. Enquanto isso não ocorrer, ele aguarda, segurando um talher ou nenhum, caso ambos seus vizinhos estiverem comendo. Dessa forma, dois vizinhos adjacentes não poderão estar comendo simultaneamente.

// Jantar dos filósofos com Monitor monitor JF { status state[5]; condition self[5]; // Pegar talheres Pickup(int i) { // Indica que está faminto state[i] = hungry; // muda para comendo na função teste // somente quando os dois vizinhos adjacentes // não estão comendo test(i); // Se não puder comer, aguarda. if (state[i] != eating) self[i].wait; } // Libera talheres Putdown(int i) { // Indica que está no estado pensando state[i] = thinking; // Se vizinho R=(i+1)%5 está faminto // e ambos vizinhos de R não estão comendo // Muda R para comendo, enviando sinal para o mesmo acordar // Faz o mesmo para o vizinho da esquerda R=(i+4)%5 test((i + 1) % 5); test((i + 4) % 5); } test(int i) { if (state[(i + 1) % 5] != eating && state[(i + 4) % 5] != eating && state[i] == hungry) { // Indica que está comendo state[i] = eating; // signal() não tem efeito durante Pickup(), // mas é importante para acordar // filósofos famintos durante Putdown() self[i].signal(); } } init() { // Execução de Pickup(), Putdown() e test() // são mutuamente exclusivas // somente uma pode ser realizada de cada vez for i = 0 to 4 // Garante que não ocorrerá deadlock (travamento) // e que 2 vizinhos adjacentes // não poderão estar comendo simultaneamente state[i] = thinking; } } // fim do monitor...


Similar Free PDFs