segunda-feira, 19 de dezembro de 2011

LPI 101 - Arquitetura de Hardware - Interrupções

     Para que tudo esteja funcionando corretamente é necessário que os dispositivos estejam alocando recursos do computador. Estes recursos podem ser portas de entrada e saída, requisições de interrupção (IRQ) e acesso direto a memória (DMA).
     As portas de entrada e saída são endereços de memória reservados no microprocessador para os dispositivos realizarem entrada e saída de informações. Estes endereços de memória são utilizados para troca de dados entre o processador e os dispositivos de forma simplificada. Os dispositivos podem usar mais de uma porta de entrada/saída ou uma faixa de endereços. Por exemplo, uma placa de som padrão usa as portas 0x220, 0x330 e 0x388. Cada dispositivo possui um endereço de porta único, que não pode ser compatilhado entre outros dispositivos.
      O Acesso Direto a Memória (DMA) é usado para permitir a transferência de dados entre dispositivos e a memória sem a intervenção do processador. Este acesso é feito através de canais (channels). A maioria dos computadores tem dois controladores de DMA. O primeiro controla os canais 0,1,2,3 e o segundo, os canais 4,5,6,7, totalizando 8 canais.
     As Requisições de Interrupção (IRQ) são chamadas que os dispositivos podem fazer para requerer atenção especial do processador. A maioria dos computadores oferece apenas 16 interruoções de hardware. Pode parecer pouco para as modernas configurações com os mais diferentes dispositivos. Felizmente os IRQs podem ser compartilhados.
     Em grandes sistemas multiusuário, uma constante rajada de interrupções é direcionada ao processador. Respostas rápidas a essas interrupções são essenciais para manter os recursos do sistemas bem utilizados, e para prover tempos de resposta aceitáveis pelos usuários.
     É importante saber que estes recursos são limitados e precisam ser gerenciados para que conflitos entre os dispositivos sejam evitados.
      As interrupções podem ser geradas pelos seguintes eventos:
       - Geradas pelo programa aplicação que são implementas com o uso de instruções especiais;
       - Por erro, como na divisão por zero, referência à memória fora do espaço permitido, etc;
       - Por tempo, como nos escalonamento;
       - Falha de hardware;
       - Por eventos de entrada e saída de dados sinalizando o final de operação ou condição de erro.


                                       Figura: Tratamento de Interrupções


     Um núcleo simples desabilita o tratamento de interrupções enquanto ele responde a uma interrupção. Elas são novamente habilitadas após o processamento estar completo.
     Se houver um fluxo permanente de interrupções, como nos sistemas multiusuário, este esquema pode ocasionar interrupções desabilitadas por um grande tempo e em respostas insatisfatórias. Para evitar isso, o Kernel precisa estar atendo ao tempo máximo de processamento permitido para cada interrupção. Se essa fatia de tempo estourar, ele passa o restante do processamento da interrupção para um outro processo apropriado do sistema que irá terminar de tratá-las, enquanto o núcleo continua apto a receber novas interrupções. Isto significa que elas podem ficar habilitadas durante muito tempo, e o sistema torna-se mais eficiente em reponder a requisições das aplicações dos usuários.

sábado, 17 de dezembro de 2011

LPI 101 - Arquitetura de Hardware - Kernel dos Sistemas Operacionais

     Sem dúvida o Kernel é a parte mais importante de qualquer sistema operacional sendo considerado o núclio do sistema. Ele é responsável pelas funções de baixo nível, como gerenciamento de memória, gerenciamento de processos, subsistemas de arquivos, rede, suporte aos dispositivos e periféricos conectados ao computador. Os núcleos dos sistemas operacionais podem ser implementados de duas formas básicas: Kernel monlítico e o microkernel.
     O Kernel monolítico é estruturado em um único arquivo binário, um único processo que executa inteiramente em um modo protegido. Apresenta inúmeras desvantagens como a dificuldade de alterações no núcleo e o desperdício de recursos, pois os drivers de dispositivos permanecem constantemente em memória, mesmo quando os dispositivos não estão sendo utilizados.

                                  Figura: Estrutura do Kernel Monolítico


      No microkernel apenas uma pequena parte do núcleo executa em modo protegido para acessar diretamente o hardware, como também é responsável pela comunicação entre processos e gerência de memória.
     O restante do sistema roda em modo usuário, uma vez que executa tarefas que não necessitam acessar diretamente o hardware e seus serviços clássicos são assegurados por processos servidores.
     Os resurcos do sistema são acessados através de um protoclo cliente/servidor, e para incluir um novo serviço basta acrescentar um novo servidor. O microkernel possui um desempenho inferior ao modelo monolítico, mas podem-se alterar suas partes sem a necessidade de reiniciar a máquina permitindo a expansão para um sistema distribuído de forma mais fácil.

                                   Figura: Microkernel.

      Sua organização é baseada no modelo cliente/servidor, onde os serviços do sistema são implementados por servidores especializados. Os Clientes, que são programas de aplicação, solicitam os serviços ao sistema operacional que os encaminham aos processos servidores. Estes recebm a solicitação e a executam, enviando o resultado de volta ao microkernel e então à aplicação.


LPI 101 - Arquitetura de Hardware - Determinar e configurar o Hardware

   Bem antes de começar a escrever sobre assuntos relacionados a LPIC 1. Estarei postando diarimante tópicos relativos as provas 101 e 102. Desta forma eu estudo e você também :)



   Este tópico aborda o conhecimento de arquiterura de hardware de um PC, bom como os requerimentos necessários para uma instalação do Linux bem sucessida.
   É importante que você conheça bem a configuração dos dispositivos do sistema para saber identificar e corrigir possíveis problemas de conflitos e fazer ajustes caso seja necessário.


   1. Determinar e configurar o Hardware
     De forma simplista os sistemas operacionais podem ser entendidos como programas especiais que controlam todos os recursos do computador e fornecem toda a base para a execução de outros programas e aplicações. No inicio quando não existia sistema operacionais,  os aplicativos tinham de cuidar de tudo.
     Para que o desenvolvimento fosse facilitado, criou-se uma camada de software que iria lidar com o hardware e fornecer uma interface amigável para os programadores interagirem com a máquina e cujo o objetivo era oferecer funções simples para as diversas tarefas que um computador pode fazer, tais como somar, ler um dado, gravar algo, imprimir, etc.
     No início, os primeiros sistemas operacionais eram simples e monoprogramados, com o único programa de usuário em execução. A necessidade de mais programas serem executados ao mesmo tempo fez com que eles evoluíssem para a multiprogramação, suportado a execução de múltiplos programas de usuários de forma concorrente.
     Isso foipossível porque o tempo de processador foi distribuído entre os programas em execução. Cada programa é executado em uma fatia de tempo, ou até que um evento solicite a troca do controle do processador.
     O escalonamento dos primeiros sistemas baseados em cartões perfurados e unidades de fita era simples. A regra era executar o próximo processo na fita ou na leitora de cartões. Nos novos sistemas multiusuário de tempo compartilhado o algoritimo de escalonemtno é mais complexo.
     Imagine que cada processo é único e imprevisível. Alguns passam a maior parte do tempo esperando por leitura e gravação de arquivos, enquanto outros utilizam a CPU por horas, se tiverem chance. Desta forma quando o escalonador inicia a execução de um processo, ele nunca sabe com certeza quanto tempo esta demanda vai demorar.
     Para que a execução de um processo não demande tempo demais, os computadores possuem um mecanismo de relógio que causam interrupções periódicas. A cada interrupção de relógio o sistema operacional assume o controle e decide se o processo pode continuar executando ou se já ganhou tempo de CPU suficiente.
     O escalonamento altera a prioridade em função do tipo de espera a que o processo estava submetido. Desta forma um processo que exige muito processamento tende a ter mais prioridade que a de um processo que exige muita leitura e gravação. Este esquema permite balancear o usuo do processaror entre todos os tipos de processos.