Lista de Exercicios PDF

Title Lista de Exercicios
Course Sistemas Operacionais "A"
Institution Universidade Federal de Santa Maria
Pages 16
File Size 286.3 KB
File Type PDF
Total Downloads 270
Total Views 438

Summary

Warning: TT: undefined function: 32 Warning: TT: undefined function: 32 Lista 1Quais 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.Qual ...


Description

Lista 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. 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. Para usar a memória de cache, a memória principal é dividida em linhas de cache, em geral de 32 a 64 bytes de comprimento. Uma linha inteira é capturada em cache de uma só vez. Qual é a vantagem de fazer isso com uma linha inteira em vez de um único byte ou palavra de cada vez? Evidências empíricas mostram que o acesso à memória exibe o princípio da localidade de referência, onde, se um local é lido, a probabilidade de acessar locais próximos é muito alta, principalmente os seguintes locais de memória. Portanto, ao armazenar em cache uma linha de cache inteira, a probabilidade de ocorrência de um cache é aumentada em seguida. Além disso, o hardware moderno pode fazer uma transferência em bloco de 32 ou 64 bytes para uma linha de cache muito mais rápido do que ler os mesmos dados que palavras individuais. Nos primeiros computadores, cada byte de dados lido ou escrito era executado pela CPU (isto é, não havia DMA). Quais implicações isso tem para a multiprogramação? O principal motivo da multiprogramação é dar à CPU algo para fazer enquanto aguarda a conclusão da E / S. Se não houver DMA, a CPU estará totalmente ocupada executando E / S, portanto, não há nada a ser ganho (pelo menos em termos de utilização da CPU) pela multiprogramação. Não importa quanta E / S um programa faça, a CPU estará 100% ocupada. Obviamente, isso pressupõe que o grande atraso é a espera enquanto os dados são copiados. Uma CPU poderia fazer outro trabalho se a E / S estivesse lenta por outros motivos (chegando em uma linha serial, por exemplo). Instruções relacionadas ao acesso a dispositivos de E/S são tipicamente instruções privilegiadas, isto é, podem ser executadas em modo núcleo, mas não em modo usuário. Dê uma razão de por que essas instruções são privilegiadas. O acesso a dispositivos de E / S (por exemplo, uma impressora) normalmente é restrito para diferentes usuários. Alguns usuários podem imprimir quantas páginas quiserem, outros podem não imprimir, enquanto alguns podem se limitar a imprimir apenas um determinado número de páginas. Essas restrições são definidas pelos administradores do sistema com base em

algumas políticas. Essas políticas precisam ser aplicadas para que os programas no nível do usuário não possam interferir com eles. Uma razão para a adoção inicialmente lenta das GUIs era o custo do hardware necessário para dar suporte a elas. Quanta RAM de vídeo é necessária para dar suporte a uma tela de texto monocromo de 25 linhas 80 colunas de caracteres? E para um bitmap colorido de 24 bits de 1.200 900 pixels? Qual era o custo desta RAM em preços de 1980 (US$ 5/KB)? Quanto é agora? Uma tela de texto monocromático de 25 × 80 caracteres requer um buffer de 2000 bytes. O bitmap colorido de 24 bits de 1200 × 900 pixels requer 3.240.000 bytes. Em 1980, essas duas opções teriam custado US $ 10 e US $ 15.820, respectivamente. Para preços atuais, verifique quanto RAM atualmente custa, provavelmente centavos por MB. Há várias metas de projeto na construção de um sistema operacional, por exemplo, utilização de recursos, oportunidade, robustez e assim por diante. Dê um exemplo de duas metas de projeto que podem contradizer uma à outra. Considere justiça e tempo real. A justiça exige que cada processo aloque seus recursos de maneira justa, sem que nenhum processo obtenha mais do que seu quinhão. Por outro lado, o tempo real exige que os recursos sejam alocados com base nos horários em que diferentes processos devem concluir sua execução. Um processo em tempo real pode ter uma parcela desproporcional dos recursos. 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. 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. Quais das instruções a seguir devem ser deixadas somente em modo núcleo? (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 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. Considere um sistema que tem duas CPUs, cada uma tendo duas threads (hiper-threading). Suponha que três programas, P0, P1 e P2, sejam iniciados com tempos de execução de 5, 10 e 20 ms, respectivamente. Quanto tempo levará para completar a execução desses programas? Presuma que todos os três programas sejam 100% ligados à CPU, não bloqueiem durante a execução e não mudem de CPUs uma vez escolhidos. Pode demorar 20, 25 ou 30 ms para concluir a execução desses programas, dependendo de como o sistema operacional os agendar. Se P0 e P1 estiverem agendados na mesma CPU e P2

estiver agendado na outra CPU, serão necessários 20 ms. Se P0 e P2 estiverem agendados na mesma CPU e P1 estiver agendado na outra CPU, serão necessários 25 ms. Se P1 e P2 estiverem agendados na mesma CPU e P0 estiver agendado na outra CPU, serão necessários 30 ms. Se todos os três estiverem na mesma CPU, serão necessários 35 ms. Um computador tem um pipeline com quatro estágios. Cada estágio leva um tempo para fazer seu trabalho, a saber, 1 ns. Quantas instruções por segundo essa máquina consegue executar? Cada instrução de nanossegundo emerge do pipeline. Isso significa que a máquina está executando 1 bilhão de instruções por segundo. Não importa quantos estágios o pipeline possui. Um pipeline de 10 estágios com 1 nsec por estágio também executaria 1 bilhão de instruções por segundo. O que importa é a frequência com que uma instrução concluída aparece no final do pipeline. Considere um sistema de computador que tem uma memória de cache, memória principal (RAM) e disco, e um sistema operacional que usa memória virtual. É necessário 1 ns para acessar uma palavra da cache, 10 ns para acessar uma palavra da RAM e 10 ms para acessar uma palavra do disco. Se o índice de acerto da cache é 95% e o índice de acerto da memória principal (após um erro de cache) 99%, qual é o tempo médio para acessar uma palavra? Average access time = 0.95 × 1 nsec (word is in the cache) + 0.05 × 0.99 × 10 nsec (word is in RAM, but not in the cache) + 0.05 × 0.01 × 10,000,000 nsec (word on disk only) = 5001.445 nsec = 5.001445 μ sec Quando um programa de usuário faz uma chamada de sistema para ler ou escrever um arquivo de disco, ele fornece uma indicação de qual arquivo ele quer, um ponteiro para o buffer de dados e o contador. O controle é então transferido para o sistema operacional, que chama o driver apropriado. Suponha que o driver começa o disco e termina quando ocorre uma interrupção. No caso da leitura do disco, obviamente quem chamou terá de ser bloqueado (pois não há dados para ele). E quanto a escrever para o disco? Quem chamou precisa ser bloqueado esperando o término da transferência de disco? Talvez. Se o chamador recupera o controle e sobrescreve imediatamente os dados, quando a gravação finalmente ocorre, os dados errados serão gravados. No entanto, se o driver primeiro copiar os dados para um buffer privado antes de retornar, o chamador poderá continuar imediatamente. Outra possibilidade é permitir que o chamador continue e dê um sinal quando o buffer puder ser reutilizado, mas isso é complicado e propenso a erros. O que é uma instrução? Explique o uso em sistemas operacionais. Uma instrução de trap alterna o modo de execução de uma CPU do modo de usuário para o modo de kernel. Esta instrução permite que um programa do usuário chame funções no kernel do sistema operacional.

Por que a tabela de processos é necessária em um sistema de compartilhamento de tempo? Ela também é necessária em sistemas de computadores pessoais executando UNIX ou Windows com um único usuário? A tabela de processos é necessária para armazenar o estado de um processo atualmente suspenso, pronto ou bloqueado. Os sistemas modernos de computadores pessoais têm dezenas de processos em execução, mesmo quando o usuário não está fazendo nada e nenhum programa está aberto. Eles estão procurando atualizações, carregando email e muitas outras coisas. Em um sistema UNIX, use o comando ps -a para vê-las. Em um sistema Windows, use o gerenciador de tarefas. Existe alguma razão para que você quisesse montar um sistema de arquivos em um diretório não vazio? Se a resposta for sim, por quê? A montagem de um sistema de arquivos torna os arquivos já existentes no diretório do ponto de montagem inacessíveis, portanto os pontos de montagem normalmente estão vazios. No entanto, um administrador de sistema pode querer copiar alguns dos arquivos mais importantes normalmente localizados no diretório montado para o ponto de montagem, para que possam ser encontrados no caminho normal em uma emergência quando o dispositivo montado estiver sendo reparado. Para cada uma das chamadas de sistema a seguir, dê uma condição que a faça falhar: fork, exec e unlink. A bifurcação pode falhar se não houver slots livres restantes na tabela de processos (e possivelmente se não houver memória ou espaço de troca restante). Exec pode falhar se o nome do arquivo fornecido não existir ou não for um arquivo executável válido. A desvinculação pode falhar se o arquivo a ser desvinculado não existir ou o processo de chamada não tiver autoridade para desvinculá-lo. Qual tipo de multiplexação (tempo, espaço ou ambos) pode ser usado para compartilhar os seguintes recursos: CPU, memória, disco, placa de rede, impressora, teclado e monitor? Multiplexação de tempo: CPU, placa de rede, impressora, teclado. Multiplexação de espaço: memória, disco. Ambos: exibição. Suponha que um arquivo de 10 MB esteja armazenado em um disco na mesma faixa (faixa 50) em setores consecutivos. O braço do disco está atualmente situado sobre o número da faixa 100. Quanto tempo ele levará para retirar esse arquivo do disco? Presuma que ele leve em torno de 1 ms para mover o braço de um cilindro para o próximo e em torno de 5 ms para o setor onde o início do arquivo está armazenado para girar sob a cabeça. Também, presuma que a leitura ocorra a uma taxa de 200 MB/s. Time to retrieve the file = 1 * 50 ms (Time to move the arm over track 50) + 5 ms (Time for the first sector to rotate under the head) + 10/200 * 1000 ms (Read 10 MB) = 105 ms

Qual é a diferença essencial entre um arquivo especial de bloco e um arquivo especial de caractere? Os arquivos especiais de bloco consistem em blocos numerados, cada um dos quais pode ser lido ou gravado independentemente de todos os outros. É possível procurar qualquer bloco e começar a ler ou escrever. Isso não é possível com arquivos especiais de caracteres. Sistemas operacionais modernos desacoplam o espaço de endereçamento do processo da memória física da máquina. Liste duas vantagens desse projeto. Isso permite que um programa executável seja carregado em diferentes partes da memória da máquina em diferentes execuções. Além disso, permite que o tamanho do programa exceda o tamanho da memória da máquina. Para um programador, uma chamada de sistema parece com qualquer outra chamada para uma rotina de biblioteca. É importante que um programador saiba quais rotinas de biblioteca resultam em chamadas de sistema? Em quais circunstâncias e por quê? No que diz respeito à lógica do programa, não importa se uma chamada para um procedimento de biblioteca resulta em uma chamada do sistema. Mas se o desempenho for um problema, se uma tarefa puder ser realizada sem uma chamada do sistema, o programa será executado mais rapidamente. Toda chamada de sistema envolve tempo extra na mudança do contexto do usuário para o contexto do kernel. Além disso, em um sistema multiusuário, o sistema operacional pode agendar outro processo para ser executado quando uma chamada do sistema for concluída, retardando ainda mais o progresso em tempo real de um processo de chamada. A Figura 1.23 mostra que uma série de chamadas de sistema UNIX não possuem equivalentes na API Win32. Para cada uma das chamadas listadas como não tendo um equivalente Win32, quais são as consequências para um programador de converter um programa UNIX para ser executado sob o Windows? Várias chamadas UNIX não têm contrapartida na API do Win32: Link: um programa Win32 não pode se referir a um arquivo por um nome alternativo ou vê-lo em mais de um diretório. Além disso, tentar criar um link é uma maneira conveniente de testar e criar um bloqueio em um arquivo. Mount e unmount: um programa Windows não pode fazer suposições sobre nomes de caminho padrão, porque em sistemas com várias unidades de disco, a parte do nome da unidade pode ser diferente. Chmod: Windows usa listas de controle de acesso. kill: os programadores do Windows não podem matar um programa que não esteja se comportando de maneira incorreta.

Um sistema operacional portátil é um sistema que pode ser levado de uma arquitetura de sistema para outra sem nenhuma modificação. Explique por que é impraticável construir um sistema operacional que seja completamente portátil. Descreva duas camadas de alto nível que você terá ao projetar um sistema operacional que seja altamente portátil. Toda arquitetura de sistema possui seu próprio conjunto de instruções que pode ser executado. Portanto, um Pentium não pode executar programas SPARC e um SPARC não pode executar programas Pentium. Além disso, diferentes arquiteturas diferem na arquitetura de barramento usada (como VME, ISA, PCI, MCA, SBus, ...), bem como no tamanho da palavra da CPU (geralmente 32 ou 64 bits). Devido a essas diferenças de hardware, não é possível criar um sistema operacional que seja completamente portátil. Um sistema operacional altamente portátil consistirá em duas camadas de alto nível - uma camada dependente da máquina e uma camada independente da máquina. A camada dependente da máquina aborda as especificações do hardware e deve ser implementada separadamente para todas as arquiteturas. Essa camada fornece uma interface uniforme na qual a camada independente da máquina é construída. A camada independente da máquina deve ser implementada apenas uma vez. Para ser altamente portátil, o tamanho da camada dependente da máquina deve ser o menor possível. Explique como a separação da política e mecanismo ajuda na construção de sistemas operacionais baseados em micronúcleos. A separação de política e mecanismo permite que os designers de SO implementem um pequeno número de primitivas básicas no kernel. Essas primitivas são simplificadas, porque não dependem de nenhuma política específica. Eles podem ser usados para implementar mecanismos e políticas mais complexas no nível do usuário. Máquinas virtuais tornaram-se muito populares por uma série de razões. Não obstante, elas têm alguns problemas. Cite um. A camada de virtualização apresenta maior uso de memória e sobrecarga do processador, além de maior sobrecarga de desempenho. Lista 2 Na Figura 2.2, 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? A transição de bloqueado para execução é concebível. Suponha que um processo esteja bloqueado na E / S e a E / S termine. Se a CPU estiver inativa, o processo pode passar diretamente do bloqueio para a execução. A outra transição ausente, de pronta para bloqueada, é impossível. Um processo pronto não pode executar E / S ou qualquer outra coisa que possa bloqueá-lo. Somente um processo em execução pode bloquear.

Suponha que você fosse projetar uma arquitetura de computador avançada que realizasse chaveamento de processos em hardware, em vez de interrupções. De qual informação a CPU precisaria? Descreva como o processo de chaveamento por hardware poderia funcionar. Você pode ter um registro contendo um ponteiro para a entrada atual da tabela de processos. Quando a E / S for concluída, a CPU armazenará o estado atual da máquina na entrada atual da tabela de processos. Em seguida, ele iria para o vetor de interrupção do dispositivo de interrupção e buscaria um ponteiro para outra entrada da tabela de processos (o procedimento de serviço). Esse processo seria iniciado. Em todos os computadores atuais, pelo menos parte dos tratadores de interrupções é escrita em linguagem de montagem. Por quê? Geralmente, linguagens de alto nível não permitem o tipo de acesso ao hardware da CPU necessário. Por exemplo, um manipulador de interrupções pode ser necessário para ativar e desativar a interrupção de manutenção de um dispositivo específico ou para manipular dados na área de pilha de um processo. Além disso, as rotinas de serviço de interrupção devem ser executadas o mais rápido possível. Quando uma interrupção ou uma chamada de sistema transfere controle para o sistema operacional, geralmente uma área da pilha do núcleo separada da pilha do processo interrompido é usada. Por quê? Existem várias razões para usar uma pilha separada para o kernel. Dois deles são os seguintes. Primeiro, você não deseja que o sistema operacional falhe porque um programa de usuário mal escrito não permite espaço suficiente na pilha. Segundo, se o kernel deixar dados da pilha no espaço de memória de um programa do usuário ao retornar de uma chamada do sistema, um usuário mal-intencionado poderá usar esses dados para encontrar informações sobre outros processos. Um sistema computacional tem espaço suficiente para conter cinco programas em sua memória principal. Esses programas estão ociosos esperando por E/S metade do tempo. Qual fração do tempo da CPU é desperdiçada? A chance de que todos os cinco processos estejam ociosos é 1/32, portanto, o tempo de ociosidade da CPU é 1/32. Um computador tem 4 GB de RAM da qual o sistema operacional ocupa 512 MB. Os processos ocupam 256 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? Há espaço suficiente para 14 processos na memória. Se um processo tiver uma E / S de p, a probabilidade de que todos estejam aguardando E / S é p14. Ao equiparar isso a 0,01, obtemos a equação p14 = 0. 01. Resolvendo isso, obtemos p = 0. 72, para que possamos tolerar processos com até 72% de espera de E / S.

Considere um sistema multiprogramado com grau de 6 (isto é, seis programas na memória ao mesmo tempo). Presuma que cada processo passe 40% do seu tempo esperando pelo dispositivo de E/S. Qual será a utilização da CPU? A probabilidade de que todos os processos estejam aguardando E / S é 0,46, que é 0,004096. Portanto, a utilização da CPU = 1 - 0. 004096 = 0: 995904. 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. O processo do cliente pode criar threads separados; cada thread pode buscar uma parte diferente do arquivo de um dos servidores espelho. Isso pode ajudar a reduzir o tempo de inatividade. Obviamente, há um único link de rede sendo compartilhado por todos os threads. Esse link pode se tornar um gargalo, pois o número de encadeamentos se...


Similar Free PDFs