Este artigo detalha: o BIOS, o relacionamento entre CPU e memória, interrupções, DMA, RTC, geometria do disco rígido, a árvore de diretórios em um sistema Linux, configurando e reconhecendo dispositivos nos barramentos ISA, PCI, USB, SCSI e ainda comentarei sobre modems e placas de som. Para terminar o artigo, comentarei sobre o sistema virtual de arquivos proc e sua funcionalidade.
Todo programa de nosso computador, embora se encontre armazenado no disco rígido normalmente, para que se torne ativo precisa ser carregado (totalmente ou em parte)na memória principal ou RAM, em que poderá conversar com a CPU. Contudo temos um problema, a CPU de nosso computador só é capaz de realizar instruções sequenciais, e ainda hoje é assim, mas nosso computador atual é multi-tarefa, como isso é possível? Afinal se a CPU só é capaz de executar uma instrução por vez, o computador deveria ser ainda mono-tarefa, executando um programa por vez apenas. Para realizar esta mágica é que as interrupções entram em ação.
Uma requisição de interrupção ou IRQ(Interrupt ReQuest), é um sinal enviado à CPU de nosso computador pelos dispositivos conectados ao nosso computador ou pelos nossos programas, instruindo que o nosso processador pare o que estiver fazendo e execute uma função mais importante ou urgente. Desta forma podemos ter vários programas em execução na memória que aliás adquirem o nome de processos uma vez que estejam disponíveis na memória principal.
Basicamente é como se existisse um processador virtual para cada processo ou programa em execução do computador é uma vez que este recebe um pedido de IRQ, ele salva suas informações, contendo inclusive informações contidas nos registradores da CPU(que é um tipo de memória interna existente na CPU) e o estado corrente do seu programa, isto é, o seu contexto, neste processador virtual até o momento em que a CPU chame novamente o processo para que entre novamente em ação.
Assim o tempo de uso da CPU é dividido por diversos programas, porém como o processador é veloz e o tempo de uso da CPU pelos programas é muito pequeno, nós sequer notamos esta troca e temos a impressão de que estamos escutando música enquanto gravamos um CD por exemplo, mas na verdade está ocorrendo uma troca de contexto constantemente entre o programa de gravação de CD e o nosso tocador de música.
Outro pedido de interrupção comum por exemplo é o de falta de papel de uma impressora, quando pedimos para imprimir um determinado documento com:
# lpr /home/usuário/teste.txt
Estamos enviado o nosso arquivo ao SPOOL(Simultaneous Peripheral Operations On-Line, uma fila de arquivos a serem impressos) de nossa impressora, aonde ele aguarda o momento de ser impresso. Se no momento de impressão a impressora está sem papel, ela envia uma interrupção de falta de papel a CPU que interrompe o processo de impressão, mesmo que hajam outros arquivos na fila de impressão.
Outro exemplo, se estamos jogando um jogo e digitando no teclado, o nosso processador está sendo interrompido constantemente por interrupções do teclado a parar de realizar o que quer que esteja fazendo e tratar o sinal do teclado. Na verdade, há duas interrupções passadas pelo teclado quando pressionamos uma tecla e quando a soltamos. Cada uma dessas operações gera dois sinais distintos do teclado ao nosso processador que precisa lidar de alguma maneira com esses sinais de tempo real. Afinal quando você digita um texto qualquer, você deseja que este apareça o tão rápido quanto possível no seu monitor, ou se você clica na seta para direita você deseja que seu personagem do jogo se mova o mais rápido possível para a direita.
Nas plataforma derivadas do x86, as interrupções ou IRQs são numeradas de 0 a 15. E algumas delas são reservadas para propósitos específicos como uso do teclado ou do RTC, que veremos mais adiante, alguns IRQs tem uso comum para determinados dispositivos mas podem ser alterados e por fim outros são deixados livres para quaisquer outros dispositivos que sejam adicionados ao sistema.
Uma típica lista de interrupções:
IRQ
uso
descrição
0:
temporizador do sistema
reservado para uso interno
1:
teclado
reservado para uso do teclado
2:
cascade para IRQs de 8 à 15
o circuito original dos x86 pode gerenciar até
apenas 8 IRQs, para conseguirmos os 16 precisamos usar o IRQ 2
para gerenciar os IRQs de 8 à 15.
3:
Segunda porta serial RS-232
usado por /dev/ttyS1 ou /dev/ttyS3
4:
Primeira porta serial RS-232
usado por /dev/ttyS0 ou /dev/ttyS2
5:
Placa de som ou segunda porta paralela
usado por /dev/lp1 ou /dev/audio
6:
controlador do disquete
reservado para controlador do disquete
7:
primeira porta paralela
usado por /dev/lp0
8:
RTC ou Real Time Clock
usado pelo relógio interno do sistema
9:
interrupção disponível
10:
interrupção disponível
11:
interrupção disponível
12:
mouse PS/2
13:
Coprocessador matemático
reservador para uso interno
14:
controlador primário ATA
usado por dispositivos na ide primária
15:
controlador secundário ATA
usado por dispositivos na ide secundária
Para ter acesso as interrupções existentes no seu computador, no Linux digite:
# cat /proc/interrupts
Obs: o padrão ISA original torna bastante difícil compartilhar interrupções entre dispositivos ISA. Idealmente, cada dispositivo ISA precisa ter seu próprio IRQ, ao contrário do que acontece com o padrão PCI que torna o processo mais simples permitindo que dispositivos PCI compartilhem o mesmo IRQ.
[3] Comentário enviado por engos em 27/11/2007 - 11:18h
Isso que á artigo de verdade!
A maioria posta dicas como artigo e o pessoal deixa passar, mas o seu sim dá orgulho até de ler, entrei para verificar sobre o que se tratava pensando ser outro artigo fajuto sobre o assunto e fico contente por ter me enganado.
[6] Comentário enviado por elgio em 28/11/2007 - 15:37h
Muito bom teu artigo. Nada mais posso dizer que já não tenha sido dito.
Observei que no final tu colocou uma nota de Copyright... legal, acredito que isto deva até ser incentivado aqui no Vol.
Outra coisa é sobre os HDs... Eu não sou 100% da area pois abandonei hardware faz algum tempo, mas pelo que me lembro alguns HD tem seus setores dispostos em forma de aspiral, onde cada setor tem o mesmo tamanho físico, em contra ponto ao modelo tradicional onde os setores mais internos são menores e, por terem o mesmo tamanho em bytes, tem seus bits mais "espremidos". Isto requeria até algumas técnicas especiais de armazenamento para que um bit ZERO expremido entre dois bits 1 não acabasse virando 1 também (principalmente nos setores mais centrais onde o "expremido" é mais violento)
Como hoje isto é uma coisa que só interessa a controladora do disco (que esta DENTRO do disco) não é assim tão importante.
Em tempo: há 15 ANOS ATRÁS eu era técnico em eletrônica e dava manutenção em computadores. Frequentemente a gente dizia para o cliente que o problema era apenas de BIOS. Nosso cógido interno traduzia, neste caso, BIOS para "Burro Incapaz que Operava o Sistema". Era uma senha para dizer que o problema era rateada do usuário... Ainda se usa esta "tradução" nos bastidores? (assim como o problema de Osmar. Os Mar Contato... hehehehehe)
[7] Comentário enviado por rafastv em 28/11/2007 - 22:39h
Muito obrigado pelos comentários pessoal :) Eu tentei fazer o melhor possível e ser bem claro em todos os momentos. Quanto as traduções eu realmente conheço e uso da BIOS, do Osmar é nova para mim hehehehe