Artigos / BIOS e Barramentos
Índice
Introdução

O BIOS ou Sistema Básico de Entrada e Saída(E/S) é quase um mini-sistema operacional responsável por gerenciar nosso hardware e controlá-lo e infelizmente a implementação dos BIOS ainda não é livre e varia de fornecedor a fornecedor, mas sem eles o seu computador não pode funcionar . O BIOS é um firmware, isto é, um programa integrado a um dispositivo do computador, normalmente gravado em um chip de memória ROM (Read Only Memory, memória de apenas leitura) na placa mãe de e seu computador.
O BIOS responsável essencialmente por testar, manipular e configurar os dispositivos conectados ao computador. Estas três funções são definidas por três programas fundamentais que fazem parte de todo sistema básico ou BIOS:

Descreverei inicialmente cada um dos três:
POST, quando você liga o computador o POST é o primeiro programa do BIOS que entra em ação, isto é o Power-On Self-Test, ou teste de funcionalidade ou ligação. Ele é resposável por iniciar os dispositivos no seu computador, isto é o seu hardware, para um estado operacional conhecido, caso ele necessite de inicialização e verificar se os dispositivos: memória, teclado, etc estão funcionando corretamente. Logo em seguida o BIOS efetua uma chamada para o primeiro dispositivo de boot ou inicialização do computador (normalmente o disco rígido ou o hd, hard disk) e passa o controle do seu computador para o Boot Loader (carregador de inicialização) do mesmo, como o LILO ou o GRUB, que por sua vez carrega o seu Sistema Operacional (SO).
Setup, ou configuração do BIOS é o que temos mais familiaridade, e é um programa responsável por configurar os dispositivos conectados ao computador, incluindo o seu relógio ou RTC (real-time clock, relógio de tempo real), portas paralelas, seriais, usb, ordem de inicialização do sistema(boot), sistemas de controle de temperatura, endereços de E/S, endereços DMA (Acesso Direto a Memória, Direct Memory Access), etc. Estas opções e configuração são muito específicas a cada dispositivo conectado ao computador e normalmente para alterá-las é necessário consultar o manual da sua placa-mãe. Tipicamente você pode ter acesso ao programa de configuração do BIOS através da tecla Delete, F1, ou F2 no momento da inicialização do seu computador.
System Calls, ou chamadas do sistema, é uma pequena interface que o BIOS oferece para que possamos acessar os dispositivos existentes no computador. Históricamente o propósito do BIOS era fornecer um conjunto de serviços de E/S para os sistemas operacionais e os programas do usuário, isolando assim os programadores sobre informações intrínsecas aos dispositivos existentes em um computador e mudanças nos mesmo. Atualmente o BIOS serve apenas para coletar informação sobre os dispositivos conectados ao computador e repassá-las ao Sistema Operacional, que uma vez no controle, não usa os serviços ou chamadas do BIOS para E/S. O BIOS permite oferece serviços bem simples, como por exemplo, imprimir caracteres na tela do monitor, controlar a posição do cursor na tela e a impressão de algumas cores, além de acesso as portas serias e paralela entre outras funções ligadas aos dispositivos de um Computador.
CPU e Memória
Todos os computadores acompanham um conjunto de dispositivos físicos, dos quais os principais e que se mais destacam nessa configuração é a unidade central de processamento(CPU, Central Proccessing Unit), isto é o processador e a memória de acesso aleatório(RAM, Random Access Memory), também chamada de memória volátil pois depende de energia elétrica para que funcione e esteja disponível. (As memórias não voláteis incluem os disco rígidos, cds e dvds pois não necessitam de energia elétrica para armazenar informações ou dados).

Barramentos
A função primordial da CPU é processar informações, isto é, é através dela que nosso computador é capaz de realizar sequências de instruções sequenciais que determinam como nosso computador deve agir. Enquanto que a função principal da memória é armazenar informações com as quais o processador trabalha. Desta forma, vamos simplificar o uso da CPU e da memória para uma pequena demonstração.
Se você usa seu terminal Linux ou shell para escrever a seguinte operação:
A operação 2 + 3 será realizada pelo nosso processador enquanto que a variável SOMA contendo o resultado da operação fica armazenada na memória volátil de nosso computador. Podemos visualizar seu conteúdo, com:
Contudo isto está apenas na RAM de nosso computador, se desligarmos o computador perderemos o seu conteúdo, pois a RAM é volátil, e logo depende de energia para armazenar o que desejamos. Se quisermos armazenar o conteúdo desta operação na memória não volátil podemos fazer:
Ao usarmos o operador >, redirecionamos através de uma função de E/S o conteúdo da memória volátil para a memória não volátil, armazenando sua saída. Desta forma criamos um arquivo que contém SOMA=5, o valor e a varíavel estará disponível no disco rígido para uso futuro.
Estou simplificando é claro o uso da CPU e da memória ao máximo do computador para efeitos didáticos, mas este é o funcionamento básico da mesma. Somente a CPU em um computador tradicionalmente tem acesso a memória do seu computador, e para que qualquer programa possa entrar em funcionamento ele precisa estar na memória RAM.
A razão pela qual não trabalhamos diretamente com a memória não volátil ao invés de usar uma memória de acesso aleatório como a RAM são muitas, mas entre as razões principais estão a velocidade de acesso, a comunicação entre CPU e RAM é muito veloz se comparada a velocidade de acesso entre CPU e disco rígido, e a fragmentação do disco rígido, nem sempre desejamos armazenar tudo o que executamos no computador, usar diretamente o disco rígido fragmentaria demais o seu conteúdo tornando ainda mais lento o processo de leitura ou gravação de um arquivo.
Barramentos
Barramentos, ou buses, é apenas uma via ou caminho de comunicação entre os dispositivos do seu computador, são vias feitas de cobre regularmente que transmitem sinais aos diversos dispositivos, cada sinal elétrico na verdade representa um bit que pode ser zero, quando não há sinal ou um, quando há um sinal sendo transmitido pela trilha ou caminho do barramento. O barramento principal que existe no seu computador é formado entre a CPU e a memória principal ou memória RAM. É aqui aonde tudo ocorre, por isso a velocidade de acesso a sua memória é tão importante e não apenas a velocidade do seu processador. A comunicação dinâmica entre os dois pode determinar significativamente a velocidade do seu computador como um todo.
Se você usar o comando
Você poderá visualizar os barramentos disponíveis no seu computador e os dispositivos conectados ao mesmo.
Existem diversos tipos de barramentos no seu computador os mais importantes além do barramento principal são os PCI, USB, ISA, SCSI e IDE, que serão abordados em parte neste artigo, existem outros claro PCI Express, AGP, Firewire, mas abordar cada um deles seria um assunto demasiadamente extensivo e fora do escopo da intenção original deste artigo. Em cada barramento normalmente existe uma porta de comunicação com o meio externo ou Slot, que é aonde conectamos a nossa placa de expansão.
Uma placa de expansão é simplesmente uma placa que expande as capacidades de sua placa-mãe, por exemplo ao conectar uma placa de vídeo de aceleração 3D no barramento AGP eu expandi as capacidades de minha placa mãe através da placa de vídeo, aliás tudo o que está em volta do barramento principal de nosso computador pode ser considerado também um periférico, pois estão na periferia do barramento principal, logo o monitor, teclado, drivers de cdrom, disquete e inclusive as placas de expansão são periféricos existentes no nosso computador.

Para que a comunicação entre a CPU e um dispositivo disponível no seu computador seja possível pelo barramento é necessário a existência de algum chip controlador para gerenciar os dispositivos no barramento, para evitar por exemplo que dois dispositivos PCI tentem falar ao menos tempo com a CPU ou que a CPU envie dados a sua impressora enquanto ela está enviando dados de volta a CPU.
Este chip controlador, hoje em dia pode vir integrado às placas de expansão ou à placa mãe, mas antigamente e mesmo em alguns casos hoje em dia é necessário que compremos um equipamento controlador para gerenciar o barramento do nosso computador e controlar os dispositivos conectados a ele, como por exemplo com dispositivos SCSI.
Interrupções
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:
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ê pressionar a 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:
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.
Endereçõs de E/S
Endereços de I/O (Input ou Output - Entrada e Saída) são localizações únicas na memória ou nos chips controladores que são reservadas para comunicação entre a CPU e os dispositivos físicos conectados a placa mãe de nosso computador. Exatamente como as IRQs, os endereços de E/S são associados a dispositivos específicos e não são compartilhados ordinariamente. Porém não confunda sua funcionalidade, o endereço de E/S de um dispositivo diz apenas como o computador pode encontrar e comunicar-se com um dispositivo conectado ao seu computador.
Podemos fazer uma breve analogia com redes aonde cada endereço de memória reservado pertence a um único dispositivo e através dele a CPU consegue seguindo determinado protocolo comunicar-se pelo barramento com cada hardware disponível, ou ainda, é como se o endereço de E/S fosse o endereço da rua aonde mora cada dispositivo na sua placa-mãe, como o computador pode enviar mensagens ou cartas para a impressora.
Uma típica lista de endereços de E/S:
| dispositivo no Linux | correspondente Win | IRQ | Endereço E/S |
| /dev/ttyS0 | COM1 | 4 | 0x03f8 |
| /dev/ttyS1 | COM2 | 3 | 0x02f8 |
| /dev/ttyS2 | COM3 | 4 | 0x03f8 |
| /dev/ttyS3 | COM4 | 3 | 0x02f8 |
| /dev/lp0 | LPT1 | 7 | 0x0378-0x037f |
| /dev/lp1 | LPT2 | 5 | 0x0278-0x027f |
| /dev/fd0 | A: | 6 | 0x03f0-0x03f7 |
| /dev/fd1 | B: | 6 | 0x0370-0x0377 |
Para ter acesso aos endereços de E/S dos dispositivos existentes no seu computador, no Linux digite:
Endereços DMA
Em geral, toda comunicação entre qualquer dispositivo disponível no seu computador que deseje se comunicar com a memória principal precisa utilizar-se do processador. Isto é, só o processador pode conversar com a memória principal diretamente. Endereçamento de acesso direto a memória (ADM) - Direct Memory Addressing (DMA) - é um método alternativo para comunicarmos com os dispositivos existentes no nosso computador pelos endereços de E/S sem precisarmos transferir dados pela CPU. O DMA permite que o dispositivo transfira dados diretamente a memória sem precisar da atenção da CPU. Este método reduz o uso da CPU e melhora a performance de nosso sistema.

Para oferecer suporte ao DMA, a arquitetura x86 implementa diversos canais DMA, sendo que cada um deles pode ser usado por um dispositivo específico. Para ter acesso aos canais de DMA em uso no seu computador, no Linux digite:
3: parport0 4: cascade
RTC – relógio de tempo real
O relógio de tempo real (RTC, Real Time Clock) é um relógio movido a bateria usada para manter o tempo atualizado corretamente no BIOS quando o sistema está desligado. Esta bateria também é responsável por manter guardadas as informações do Setup do BIOS. O RTC também é conhecido como o relógio de dispositivo ou o relógio semicondutor complementar de óxido de metal - Complementary Metal Oxide Semiconductor (CMOS) clock. Normalmente ele pode ser configurado pelo Setup do BIOS.
Uma vez funcionando o kernel Linux não usa mais o RTC para manter atualizado o tempo, ao invés disso usa a interrupção 0 para manter um contador de programas, conhecido como o relógio do sistema ou o programa relógio que recebe seu valor inicial, claro, do valor corrente do RTC no momento da inicialização do sistema operacional.
Para ter acesso ao status do relógio RTC, no Linux digite:
O programa hwclock serve para acessar diretamente o relógio RTC do BIOS.
Referências
- NORTON, Peter - Desvendando o PC e PS/2, Ed. Campus
- LPIC-1: Linux Professional Institute Certification Study Guide (Level 1 Exams 101 and 102)
Autor: Rafael Siqueira Telles Vieira