terça-feira, 10 de agosto de 2010

Capítulo 1, Questões 26~29. Finaliza este capítulo. Considerações

26. Eis algumas questões para praticar conversão de unidades.
(a) Quanto dura um microano em segundos?
(b) Micrômetros são chamados de mícrons. Qual o tamanho de um gigamícron?
(c) Quanto bytes há em 1 TB de memória?
(d) A massa da Terra é de seis mil yottagramas. Qual é esse peso em quilogramas?
S. 
(a) 31.536
(b) 9 - 6 = 3. 1 quilômetro
(c) 1.099.511.627.776 bytes
(d) 24 - 3 = 1.000.000.000.000.000.000.000 quilogramas.


27#. Escreva um shell que seja similar ao da Figura 1.19, mas que contenha código suficiente e que realmente funcione para que seja possível testa-lo. Você pode também adicionar alguns aspectos, como redirecionamento de entrada e saída, pipes e jobs em background.
S. http://ftp.gnu.org/gnu/bash/


28#.
S. Este problema é um experimento. Não há nada para ser respondido.


29#.
S. Este problema é um experimento. Não há nada para ser respondido.


Esta ultima parte foi bastante medíocre, não sei o que o autor tinha em mente quando a fez. As primeiras 25 questões foram muito úteis para assimilação do conteúdo.

*: Representam uma grande dúvida minha e precisam ser revisadas.
**: Aparentemente, este problema não pode ser resolvido usando-se o conteúdo deste capítulo. Logo, usei o que tinha para raciocinar e supor esta resposta.
*erro: Questão com possível erro.
!: Pergunta interessante.
*!: Pergunta interessante mas que tenho dúvida.
$: Pergunta com opiniões muito pessoais do autor e que foram comentadas por mim.
#: Considero este problema muito grande, mal explicado, ou fora de contexto.

Capítulo 1, Questões 21~25

21. Qual é a diferença essencial entre arquivos especiais de bloco e arquivos especiais de caractere?
S. Arquivos especiais de bloco são usados para modelar dispositivos que fornecessem endereçamento aleatório, como discos. Já os arquivos especiais de caracteres são usados para modelar dispositivos que utilizem acesso serial aos dados, como modens e impressoras.

22*. No exemplo dado na Figura 1.17, o procedimento de biblioteca é denominado read e a própria chamada ao sistema é denominada read. É essencial que ambos tenham o mesmo nome? Em caso negativo, qual é o mais importante?
S. Não é necessários que ambos tenham o mesmo nome. A segunda pergunta é ambígua, pode estar se referindo a importância do procedimento ou a importância do nome do procedimento. O nome do procedimento não é importante de forma alguma, funcionalmente falando. A chamada ao sistema é mais importante que a chamada da biblioteca. Já que sem a chamada do sistema, nenhuma biblioteca pode fazer tal chamada, o que não é verdade para o contrário. O programa pode sim fazer uma chamada direta ao sistema.

23. O modelo cliente-servidor é muito usado em sistemas distribuídos. Ele pode também ser utilizado em sistemas de um único computador?
S. Pode sim, e esta é a tendência atual dos sistemas operacionais. Fazendo isto, busca-se um micronúcleo mínimo, muito mais fácil de gerenciar. Uma outra vantagem deste sistema é o desacoplamento dos serviços oferecidos pelo sistema, caso algum dos serviços falhe, por exemplo o sistema de arquivos, isto não vai comprometer o funcionamento da máquina como um todo.

24*!. Para um programador, uma chamada ao sistema se parece com qualquer outra chamada um procedimento de biblioteca. É importante que um programador saiba quais procedimentos de biblioteca resultam em chamadas ao sistema? Sob quais circunstâncias e por quê?
S. É muito importante sobre a questão do desempenho. Chamadas ao sistema requerem desvio de fluxo e tratamento das chamadas que trazem consigo armazenamento e resgate de contexto, coisas que tomam tempo.

25$. A Figura 1.23 mostra que várias chamadas ao sistema em Unix não têm equivalentes na API do Win32. Para cada chamada relacionada que não tenha equivalente Win32, quais são as consequências para o programador em converter um programa Unix para executar no Windows?
S. Essa pergunta é capciosa. De certa forma este livro quer sempre que pode mostrar que o Unix é melhor que o Windows, a pergunta poderia ter sido feita ao contrário para mostrar superioridade do Windows sobre o Unix. A resposta para a pergunta é óbvia, ele deve procurar procedimentos com funcionalidades similares aos do Unix, ou com mesmo efeito para o usuário final.

!: Pergunta interessante.
*!: Pergunta interessante mas que tenho dúvida.
$: Pergunta com opiniões muito pessoais do autor e que foram comentadas por mim.

Questões que precisam de revisão

De modo a centralizar e facilitar a revisão de questões, todas as questões que contém um * vão ser listadas aqui até que sejam corrigidas ou revisadas.

Capítulo 1:
4, 8, 12, 20, 22

Capítulo 1, Questões 16~20

16. Por que é necessária uma tabela de processos em sistemas de tempo compartilhado? Essa tabela é essencial também em sistemas de computador pessoal (PC), nos quais existe apenas um processo, que detém o comando de toda a máquina até que ele termine?
S. Pois a cada vez que um processo for suspenso para que a execução de outro ocorra, o seu contexto, conjunto de registradores que inclui o contador de programa, o ponteiro para pilha, outros registradores de hardware e todas as demais informações necessárias para executar aquele programa, tem que ser salvo em algum lugar, tabela de processos. Em sistemas com apenas um processo em execução, esta tabela pode ser usada pelo mecanismo de interrupções para poder salvar o contexto do processo e trata-las.

17. Há alguma razão para se querer montar um sistema de arquivos em um diretório não vazio? Se há, qual é?
S. Sim, impossibilitar o uso dos arquivos que estavam no diretório antes do novo sistema ser montado.

18. Para cada uma das seguintes chamadas ao sistema, dê uma condição que faça com que elas falhem: fork, exec e unlink.
S. fork - falta de memória para criação do processo filho na memória. exec - número de parâmetros inválidos, e, unlink - i-número de arquivo inexistente.

19. count = write(fd, buffer, nbytes); essa chamada pode retornar algum valor em count que seja diferente de nbytes? Em caso afirmativo, por quê?
S. Sim, essa chamada pode retornar algum valor diferente de nbytes. Principalmente por dois motivos, um final de arquivo foi encontrado antes, ou o arquivo não pôde ser lido.

20*erro. Um arquivo cujo descritor é fd contém a seguinte sequencia de bytes: 3, 1, 4, 5, 9, 2, 6, 5, 3, 5. São executadas as seguintes chamadas ao sistema:
lseek(fd, 3, SEEK_SET);
fork(fd, &buffer, 4);
onde a chamada lseek faz uma busca ao byte 3 do arquivo. O que o buffer contém ao final da leitura?
S. Não consegui encontrar em lugar algum, nem mesmo em
http://www.opengroup.org/onlinepubs/9699919799/functions/fork.html alguma função fork contendo parâmetros.

*erro: Questão aparentemente com erro.

Capítulo 1, Questões 11~15

11. Um revisor alerta sobre um erro de ortografia no original de um livro-texto sobre sistemas operacionais que está para ser impresso. O livro tem aproximadamente 700 páginas, cada uma com 50 linhas de 80 caracteres. Quanto tempo será preciso para percorrer eletronicamente o texto no caso de a cópia estar em cada um dos níveis de memória da Figura 1.7? Para métodos de armazenamento interno, considere que o tempo de acesso é dado por caractere; para discos, considere que o tempo é por bloco de 1024 caracteres; e, para fitas, que o tempo dado é a partir do início dos dados com acesso subsequentes na mesma velocidade que o acesso a disco.
S. Multiplicando os números temos que o livro tem 700x50x80=2.8M caracteres. Na memória principal temos um acesso de 2.8M * 10ns = 0,0028s. Em disco ou fitas, temos um acesso por blocos de 1024 caracteres, logo precisamos de pelo menos 2735 acessos o que leva 2735x10ms=27,35s. Como o livro não cabe na cache, tão pouco nos registradores, não faz sentido comparar estes tempos. Porém, caso se tenha uma cache suficientemente grande teríamos um acesso em 1/5 do tempo do acesso pela memória principal, um acesso em 0,000056s.

12*. Na Figura 1.9, a MMU compara um endereço (virtual) com o conteúdo do registrador-limite, causando uma falha se for muito grande. Um projeto alternativo seria primeiro adicionar o endereço virtual ao conteúdo do registrador-base e então comparar o resultado com o endereço (físico) no registrador-limite. Os dois métodos são lógicamente equivalentes? E quanto ao desempenho, são equivalentes?
S. Lógicamente é equivalente, mas em alguns casos essa soma feita pode ser desnecessária, já que mesmo sem a soma o valor estaria maior do que o registrador-limite.

13. Quando um programa de usuário faz uma chamada ao sistema para ler ou escrever um arquivo em disco, ele fornece uma indicação de qual arquivo ele quer, um ponteiro para o buffer de dados e um contador. O controle então é transferido ao sistema operacional que chama o driver apropriado. Suponha que o driver inicie o disco, termine e só volte quando uma interrupção ocorrer. No caso da leitura do disco, obviamente quem chama deverá ser bloqueado (pois não há dados para ele). E no caso da escrita no disco? Quem chama precisa ser bloqueado aguardando o final da transferência do disco?
S. Não necessariamente. A não ser que se queira garantir que a escrita foi feita antes de continuar a execução do processo, quem chama não precisa ser bloqueado.

14. Qual a diferença fundamental entre uma trap e uma interrupção?
S. Uma interrupção é geralmente iniciada por um dispositivo de E/S. Faz a CPU parar o que está fazendo, salvar o seu contexto na pilha, tratar a interrupção, resgatar o contexto e continuar a execução. Já uma trap é tipicamente causada por software em condições excepcionais como a divisão por zero ou acesso inválido a memória. Fonte: wiki.answers.com

15. Um computador usa o esquema de realocação da Figura 1.9(a). Um programa tem 10 000 bytes e é carregado no endereço 40 000. Quais são os valores do registrador-base e do registrador-limite de acordo com o esquema descrito no texto?
S. O registrador-base 0+40000 = 40 000 e o limite 40000+10000 = 50 000.

Capítulo 1, Questões 6~10

6. A ideia da família de computadores foi introduzida nos anos 60 com os computadores de grande porte IBM System/360. Esta ideia esta morta e sepultada ou ainda vive?
S. Esta mais viva do que nunca. Hoje em dia todos (se não todos, em sua maioria esmagadora) os fabricantes lançam suas máquinas em famílias.

7. Uma razão para a demora da adoção das interfaces gráficas GUI era o custo do hardware necessário para suporta-las. De quanta RAM de vídeo se precisa para suportar uma tela de texto monocromática com 25 linhas x 80 colunas de caracteres? Quanto é necessário para suportar um mapa de bits com 1024 x 768 pixels de 24 bits? Qual é o custo dessa RAM em preços de 1980 (5 dólares/KB)? Quanto custa agora?
S. Supondo que cada carácter ocupe 8 bits, temos que para o primeiro se faz necessário 25x80x8 = 16KB. Já para a segunda situação temos 1024x768x24 = 18432KB. No ano de 1980 o custo da primeira seria de 80 dólares e da segunda de 92162 dólares. Hoje em dia a primeira situação, preço de 0,000026 dólares/KB a primeira solução custa 0,00042 e a segunda 0,48 dólares.

8**. Das instruções a seguir, quais só podem ser executadas em modo núcleo?
(a) Desabilite todas as interrupções
(b) Leia o horário do relógio
(c) Altere o horário do relógio
(d) Altere o mapa de memória
S. Alternativas (a), (c) e (d). Estas alternativas foram escolhidas por eu as considerar perigosas.

9. Relacione algumas diferenças entre os sistemas operacionais de computadores pessoais e os sistemas operacionais de computadores de grande porte.
S. Os sistemas operacionais para computadores de grande porte são sobretudo orientados ao processamento simultâneo de muitos jobs, sendo que na maioria deles é necessária uma quantidade prodigiosa de E/S. Esses sistemas operacionais oferecem normalmente três tipos de serviço: Em lote (batch), processamento de transações e tempo compartilhado.
Sistemas em lote são usados para fazer processamento de grandes volumes de dados sem interatividade com o usuário, como por exemplo cálculos do IRPF de todo o Brasil. O processamento de transações administra grandes quantidades de pequenas transações, como verificações em um e-commerce ou um banco. Sistemas de tempo compartilhado permitem que múltiplos usuários remotos executem seus jobs simultaneamente no computador, como em um acesso a um grande banco de dados de um servidor web.

10. Um computador tem um pipeline de quatro estágios. Cada estágio leva o mesmo tempo para fazer seu trabalho - digamos, 1ns. Quantas instruções por segundo essa máquina pode executar?
S. (1/n). Onde n é nano.

** Aparentemente, este problema não pode ser resolvido usando-se o conteúdo deste capítulo. Logo, usei o que tinha para raciocinar e supor esta resposta.

segunda-feira, 9 de agosto de 2010

Capítulo 1, Questões 1~5

1. Quais são as duas principais funções de um sistema operacional?
S. Gerenciar os recursos da máquina e prover uma interface simples com o hardware.

2. O que é multiprogramação?
S. Consiste em manter vários jobs na memória, executando um pouco de cada em determinados intervalos de tempo. Técnica que visa manter a CPU ocupada o maior tempo possível, visto que em muitas aplicações, como as de processamento de dados comerciais, o desempenho é nivelado pela E/S (I/O Bound), chegando inclusive a ocupar 80~90 por cento do tempo total de execução.

3. O que é a técnica de Spooling? Você acha que computadores pessoais avançados terão o spooling como uma característica padrão no futuro?
S. É o processo de colocar os dados em uma área de trabalho temporária, buffer, onde um outro programa pode acessar os dados nesta área tardiamente. É útil pois quando se está usando dispositivos de velocidades diferentes, o dispositivo mais lento pode acessar o buffer e não obrigar que o dispositivo mais rápido fique o esperando. Acho que sim, já o fazem.

4*. - Nos primeiros computadores, todo byte de dados lido ou escrito era  diretamente tratado pela CPU (isto é, não havia DMA). Quais as implicações que essa organização tem para a multiprogramação?
S. Isto pode trazer perda de desempenho muito grande ao sistema. Já que com a multiprogramação você tem vários processos sendo executados sequencialmente com alternância rápida e constante, se todas operações de dados envolverem E/S, sempre que pelo menos um dos processos estiver executando E/S todos os outros tem de esperar pelo término da operação.

5. Por que o compartilhamento de tempo não foi disseminado na segunda geração de computadores?
S. Pois a proteção em hardware só foi largamente empregada a partir da terceira geração.

* Questões marcadas com estrela representam uma grande dúvida minha e precisam ser revisadas.