fbpx
Whatsapp (31) 3069-8315
atendimento@certificacaolinux.com.br
Como o Linux Lida com o Hardware

Conheça a função dos arquivos /proc/pci, /proc/dma, /proc/interrupts e /proc/ioports

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). Vejamos estes conceitos.

Portas de Entrada/Saída (Input / Output)

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 única que não podem ser compartilhados entre outros dispositivos.

Os endereços de E/S em uso no sistema podem ser visualizados com o comando:

# cat /proc/ioports
0000-001f : dma1
0020-003f : pic1
0040-005f : timer
0060-006f : keyboard
0070-007f : rtc
(…)

Requisição de Interrupção (IRQ)

Os IRQs são chamadas que os dispositivos podem fazer para requerer atenção especial do processador.

A maioria dos computadores oferece apenas 16 interrupções de hardware para os mais diversos dispositivos.

Pode parecer pouco para as modernas configurações com os mais diferentes dispositivos. Felizmente os IRQs podem ser compartilhados.

As interrupções do sistema podem ser visualizadas no Kernel com o comando:

# cat /proc/interrupts CPU0

0:          604694      XT-PIC   timer

1:          35746        XT-PIC keyboard

2:          0                XT-PIC cascade

3:          13546        XT-PIC orinoco_cs

11:        15              XT-PIC ALi Audio Accelerator

14:        38759        XT-PIC ide0

Acesso Direto a Memória (DMA)

A DMA é usada 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.

Os canais de DMA em uso no sistema podem ser visualizados com o comando:

# cat /proc/dma
4: cascade

É importante que você saiba que estes recursos são limitados e precisam ser gerenciados para que conflitos entre os dispositivos sejam evitados.

Alguns dispositivos como portas seriais e paralelas já utilizam os recursos no padrão a seguir:

TABELA – Referência de dispositivos no Linux

Nome do Dispositivo no Linux Nome do Dispositivo no Windows Porta E/S DMA IRQ
ttyS0 COM1 0x3F8 4
ttyS1 COM2 0x2F8 3
ttyS2 COM3 0x3E8 4
ttyS3 COM4 0x2E8 3
lp0 LPT1 0x378 7
lp1 LPT1 0x278 5
/dev/hda1 C: 0x1F0 14
/dev/fd0 A: 0x3F0 2 6

No exame LPIC-1 pode ser que você tenha que resolver algum possível conflito de recursos em portas seriais ou paralelas.

Hotplug x Coldplug

Existem dispositivos que podem ser conectados ou removidos com o computador ligado e em pleno funcionamento, que são categorizados como hotplug.

Para estes o Kernel será capaz de perceber sua presença ou ausência e carregar os drivers, scripts e programas necessários ao seu correto funcionamento.

Nesta categoria se enquadram: teclado, mouse, webcam, hd externo USB, cd-rom externo USB, impressoras, caixas de som, microfones, monitores, celulares, pendrives etc.

Já os dispositivos que obrigatoriamente devem ser conectados e removidos com o computador desligado são chamados de coldplug.

Qualquer tentativa de alterar seu estado poderá causar travamento ou mesmo queima do equipamento. São eles: CPU, Memória RAM, discos rígidos internos, placas internas (som, vídeo etc).

Dispositivos de Armazenamento

O Linux suporta diversos tipos de armazenamento de dados em massa. Estes dispositivos podem ser categorizados em óticos, magnéticos ou em memória.

Os discos óticos são os CD-ROMs (700Mb), DVDs (4,7-8,5 Gb) e Blu-Rays (25-50Gb). Não são rápidos como os HDs, mas têm grande durabilidade se acondicionados em locais apropriados e não permitem gravar os dados diversas vezes. 

Os discos magnéticos têm grande capacidade de armazenamento de dados, que pode chegar a 8 Terabytes.

Alguns modelos são híbridos, pois possuem discos magnéticos e grandes memórias flash para armazenar os dados mais lidos ou até mesmo o sistema operacional. São sensíveis a solavancos e quedas.

Ainda na categoria de dispositivos magnéticos, temos as fitas magnéticas, bastante utilizadas para backup de dados. Permitem gravar dados de forma sequencial com baixo custo.

Seu uso é cada vez menor devido ao baixo preço dos discos, computação em cloud e outras estratégias de cópia de segurança mais avançadas.

Os “discos” em memória são na realidade bancos de memória flash chamados de Solid State Drive (SSD) – drive de estado sólido – encapsulados em uma caixa do tamanho de um HD e não possuem partes móveis como os discos óticos e magnéticos. Seu tempo de acesso aos dados é incrivelmente veloz se comparado aos discos magnéticos e óticos, são resistentes a quedas e solavancos, consomem menos energia, dentre outros benefícios.

No entanto a capacidade de armazenamento não ultrapassa 1 Terabyte, e seu custo é elevado em comparação com os discos magnéticos. São muito utilizados em Ultrabooks e em servidores de alta-performance.

Dispositivos PCI

Durante o processo de carga do sistema, o Kernel detecta os dispositivos PCI conectados no micro. A lista das placas de expansão encontradas poderá ser lida através do arquivo especial /proc/pci.

# cat /proc/pci

PCI devices found:

Bus 0, device 0, function 0:

Host bridge: PCI device 10b9:1644 (Acer Laboratories Inc. [ALi]) (rev 1).

Prefetchable 32 bit memory at 0xf0000000 [0xf3ffffff].

Bus 0, device 1, function 0:

PCI bridge: Acer Laboratories Inc. [ALi] M5247 (rev 0).

Master Capable. No bursts. Min Gnt=8.

Bus 0, device 2, function 0:

USB Controller: Acer Laboratories Inc. [ALi] M5237 USB (rev 3).

IRQ 11.

Quer aprender mais sobre os arquivos especiais do Linux no /proc? Conheça nosso curso de LPIC-1

Aprenda muito mais sobre Linux em nosso curso online. Você pode fazer a matrícula aqui com trial de 7 dias grátis. Se você já tem uma conta, pode acessar aqui.

Gostou? Compartilhe 🙂

Tratamento de IRQs no Linux

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 interrupções de hardware. Pode parecer pouco para as modernas configurações com os mais diferentes dispositivos. Felizmente os IRQs podem ser compartilhados.

O mecanismo de tratamento das interrupções faz com que a CPU esteja atenta aos eventos externos à sequência de instruções que ela está executando, para quando for necessária uma quebra do processamento normal para atender a uma outra solicitação.

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 sistema 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.

Desta forma, os sistemas operacionais reagem a eventos que representam as solicitações de serviços.

Por exemplo, se uma aplicação necessita da leitura de um arquivo, ela faz a solicitação a uma função executada pelo sistema operacional.

Este irá acessar o controlador do periférico e requisitar a transferência dos dados para o endereço de memória informado no pedido do serviço.

O controlador do periférico ao terminar avisa o processador através de uma requisição de interrupção que fará com que o sistema operacional execute uma rotina para seu tratamento.

As interrupções podem ser geradas pelos seguintes eventos:

  • Geradas por programa que são implementadas 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 no escalonamento;
  • Falha de hardware;
  • Por eventos de entrada e saída de dados sinalizando o final de operação ou condição de erro.
  • Então, os eventos gerados pelas interrupções provocam a execução da rotina de tratamento correspondente à fonte da interrupção no sistema operacional.

Ao fazer o tratamento das interrupções de hardware, o dispositivo solicitante interrompe processador.

Este acaba a execução da instrução atual, testa existência de interrupção e salva o estado atual do processo que perderá o controle do processador na memória.

O processador carrega o contador de programa com endereço da rotina de tratamento da interrupção e transfere seu controle para a rotina de tratamento da interrupção.

A rotina de tratamento da interrupção executa e, ao término, restaura o estado anterior para retornar à execução da rotina interrompida.

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 atento 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 responder a requisições das aplicações dos usuários.

A lista de IRQs do sistema pode ser vista no arquivo

# cat /proc/interrupts 

           CPU0       

  0:         78   IO-APIC   2-edge      timer

  1:          9  xen-pirq   1-ioapic-edge  i8042

  4:       3409  xen-pirq   4-ioapic-edge

  8:          2  xen-pirq   8-ioapic-edge  rtc0

  9:          0  xen-pirq   9-ioapic-level  acpi

 12:          3  xen-pirq  12-ioapic-edge  i8042

 14:          0   IO-APIC  14-edge      ata_piix

 15:          0   IO-APIC  15-edge      ata_piix

 48:   14474493  xen-percpu-virq      timer0

 49:          0  xen-percpu-ipi       resched0

 50:          0  xen-percpu-ipi       callfunc0

 51:          0  xen-percpu-virq      debug0

 52:          0  xen-percpu-ipi       callfuncsingle0

 53:          0  xen-percpu-ipi       spinlock0

 54:        211   xen-dyn-event     xenbus

 55:     755401   xen-dyn-event     blkif

 56:     887240   xen-dyn-event     eth0

NMI:          0   Non-maskable interrupts

LOC:          0   Local timer interrupts

SPU:          0   Spurious interrupts

PMI:          0   Performance monitoring interrupts

IWI:          0   IRQ work interrupts

RTR:          0   APIC ICR read retries

RES:          0   Rescheduling interrupts

CAL:          0   Function call interrupts

TLB:          0   TLB shootdowns

TRM:          0   Thermal event interrupts

THR:          0   Threshold APIC interrupts

DFR:          0   Deferred Error APIC interrupts

MCE:          0   Machine check exceptions

MCP:       1216   Machine check polls

HYP:   16105716   Hypervisor callback interrupts

ERR:          0

MIS:          0

PIN:          0   Posted-interrupt notification event

PIW:          0   Posted-interrupt wakeup event

Quer aprender mais sobre Linux ? Conheça nosso curso para prova LPI

Aprenda muito mais sobre Linux em nosso curso online. Você pode fazer a matrícula aqui com trial de 7 dias grátis. Se você já tem uma conta, pode acessar aqui.

Gostou? Compartilhe 🙂

Open chat