Please enable JavaScript.
Coggle requires JavaScript to display documents.
Capítulo 20 Software de entrada/saída - Coggle Diagram
Capítulo 20
Software de entrada/saída
Software de entrada/saída
Software que interage com os dispositivos:
Drivers (ou pilotos)
Abstrações de baixo nível (sockets, blocos, etc)
Grande diversidade de dispositivos:
Muitos dispositivos distintos = muitos drivers
60% do código-fonte do núcleo Linux são drivers
Estrutura geral do núcleo
Drivers
Interagem com os dispositivos
Acessam portas de E/S e tratam interrupções
Dispositivos genéricos:
Visão genérica de dispositivos similares (discos)
Discos: vetores de blocos de dados
Interfaces de rede (especificação NDIS)
Abstrações
: Sistemas de arquivos, protocolos de rede
Chamadas de sistema:
interface oferecida aos processos
Classes de dispositivos genéricos
Dispositivos orientados a caracteres
Transferências de dados byte a byte, sequencial
Ex.: dispositivos USB, mouse, teclado, modems
Dispositivos orientados a blocos
Transferências feitas em blocos de bytes
Blocos possuem endereços definidos
Ex.: discos, fitas e dispositivos de armazenamento
Dispositivos de rede
Envios de blocos de forma sequencial
NDIS – Network Device Interface Specification
Blocos de dados de tamanho variável (mensagens)
Ex.: Interfaces Ethernet, Bluetooth
Dispositivos gráficos
Renderização de texto e gráficos em uma tela
Usam uma área de RAM compartilhada (
framebuffer
)
Acesso por bibliotecas específicas (DirectX, DRI)
Drivers
Componente de baixo nível do SO:
Interage com o hardware do dispositivo
Um driver para cada tipo de dispositivo
Executa geralmente em modo núcleo
Funcionalidades
Funções de gerência
Funções de tratamento de eventos
Funções de entrada/saída
Estrutura de um driver
Funções de
entrada/saída:
Transferência de dados dispositivo ⬌ núcleo
Caracteres, blocos, mensagens
Funções de
gerência
:
Inicialização e configuração do dispositivo
Inicialização e configuração do driver
Syscalls: ioctl(), DeviceIoControl()
Funções de
tratamento de eventos:
Interrupções geradas pelo dispositivo
Estratégias de interação
Como o núcleo interage com os dispositivos?
Através dos drivers!
Os drivers implementam
estratégias de interação:
Por eventos (ou por interrupções)
Por acesso direto à memória (DMA)
Por programa (ou por polling)
Entrada/saída por programa
Estratégia de entrada/saída mais simples. Também chamada
varredura
ou
polling
.
O driver pede a operação e aguarda sua conclusão:
2 Escreve dado na porta de saída (data out)
3 Escreve comando (control)
1 Espera o dispositivo estar pronto (status)
4 Espera dispositivo concluir a operação (status)
Entrada/saída por eventos
Estratégia básica:
1 Requisitar a operação desejada
2 Suspender o fluxo de execução (tarefa atual)
3 O dispositivo gera uma IRq ao concluir
4 O driver retoma a operação de E/S
A operação de E/S pelo driver é dividida em duas etapas:
1 Uma função de E/S inicia a operação
2 Uma função de tratamento de evento a continua
Acesso direto à memória
Os dados não precisam passar pela CPU (desempenho)
Muito usado para transferir grandes volumes de dados
Transferência direta entre dispositivo e RAM
Passos:
1 A CPU programa o controlador DMA com os parâmetros (endereços e tamanho da transferência)
2 O controlador de DMA interage com o controlador do disco para transferir os dados da RAM
3 O controlador do disco recebe os dados da RAM
4 No final, o controlador de DMA interrompe a CPU
Tratamento de interrupções
Interrupções são tratadas por handlers (tratadores):
Operam usualmente com interrupções inibidas
Compõem a estrutura dos drivers
Devem ser muito rápidos, portanto simples
A maioria dos SOs trata interrupções em
dois níveis:
FLIH
- First-Level Interrupt Handler
Recebe a IRq e a reconhece junto ao PIC
Registra dados da IRq em uma fila de eventos
Tratador primário (rápido)
Outros nomes: Hard, fast, top-half IH
SLIH
- Second-Level Interrupt Handler
Trata os eventos da fila de eventos
Pool de threads de núcleo escalonadas
Tratador secundário (lento)
Outros nomes: So, slow, boom-half IH