# Entrada/saída

Na informática, a Entrada/Saída, com sigla E/S (em inglês: Input/Output, com sigla I/O) é um termo que indica a entrada de dados (inserção de dados) em um sistema computacional por meio do dispositivo de entrada ou de um programa, que será analisado ou passará por uma operação, e será exibido ao usuário através da saída de dados (obtenção de dados ou retorno).
São exemplos de unidades de entrada de um computador: microfone, teclado, mouse, scanner, leitor de código de barras, máquina fotográfica digital, webcam, joystick e outros acessórios de jogos.
São exemplos de unidades de saída de um computador: monitor, caixas de som, impressora e outros.
Algumas unidades são de entrada e saída de dados, também chamados dispositivos híbridos: pendrive, disquete, tela sensível ao toque, celular. As interfaces de entrada e saída são responsáveis pela conexão entre as várias partes de um sistema computacional baseado na arquitetura de Von-Neumann. Esta interface é responsável por conectar fisicamente o processador e a memória do sistema ao barramento, tornando-se o terceiro elemento do sistema computacional proposto, foi uma grande revolução no mundo da informática, facilitando a vida das pessoas.
Ao contrário do que se pode pensar a interface de entrada e saída não é só o conector físico e sim também o responsável pela comunicação lógica entre o barramento e o dispositivo. Essa função de conexão foi basicamente desenvolvida para que seja possível a comunicação entre vários dispositivos, fazendo com que a velocidade do barramento seja mais bem aproveitada e ainda tanto os periféricos quanto os elementos essenciais tenham programação/produção mais voltada ao seu desempenho mantendo sempre a interconexão com as interfaces de entrada e saída.

## Visão geral

Chamamos de dispositivos de entrada e saída os responsáveis por incorporar e extrair informação de um sistema de computador. Eles se adequam dentro da denominada Arquitetura de Von Neumann, que nos informa as principais partes de um computador. Estes dispositivos evoluíram bastante com o tempo, existindo na atualidade muitas variantes que no inicio da informática pareciam impossíveis.
Todos os periféricos trabalham através de interrupções que fazem com que os processos executados sejam suspendidos temporariamente. Assim, os dispositivos de entrada e saída enviam interrupções à CPU através de um controlador que pode estar conjunto ao próprio processador, além de habilitar ou desabilitar estes pedidos. O procedimento envolve a execução da instrução que lhe foi dada, que estes valores sejam salvos para serem processados novamente, que a CPU atenda ao dispositivo e que finalmente, ao terminar a interrupção, volte à instrução obtida. Para realizar estas tarefas, as placas mães que radicam os diferentes componentes de um computador dispõem de um sistema de barramento de controle.
Assim, os dispositivos de entrada e saída foram submetidos a uma grande evolução desde a origem dos computadores. Isto provocou um aumento significativo na produtividade e na variedade de tarefas que podem ser realizadas utilizando um sistema de computador.

## História

A primeira geração: as válvulas (1945-1955). A computação moderna surgiu durante à Segunda Guerra Mundial, quando surgiram tecnologias que substituíram os computadores analógicos e os componentes eletromecânicos (por exemplo Z1), surgindo assim os computadores digitais. Onde um dos componentes digitais usados na fabricação desses computadores eram as válvulas e capacitores, que faziam cálculos milhares de vezes mais rápidos que os relés eletromecânicos. A entrada e saída de dados e de instruções nesses equipamento computacionais eram feito com cartões perfurados (por exemplo ENIAC, IBM 603, EDSAC, UNIVAC I).

## Alocação de endereços de e/s

Existem duas maneiras distintas de organizar basicamente a alocação de endereços do processador associado às interfaces de entrada e saída. Tais maneiras são:
1. E/S isolada: O E/S possui seu próprio endereço separado de maneira que o computador pode utilizar os endereços para verificar se é a memória ou o E/S que o programa deve executar.
2. E/S mapeada na memória: Neste caso a E/S e a memória dividem o mesmo espaço de endereçamento. Uma característica é o barramento de endereço. E não existem diferenças entre as instruções de acesso a memória nem ás interfaces de entrada e saída.

## Modelo lógico de interfaces de e/s

Para um programador e para uma CPU uma interface de E/S é vista como um conjunto de registradores (unidade de armazenamento), divididos em 3 classes, que são:
· Registrador de Controle (usado na escrita). O conteúdo deste registrador define o método de operação da interface.
· Registrador de Dados. Este registrador é usado para o armazenamento temporário de forma a melhor lidar com o fluxo de dados entre computador e dispositivo.
· Registrador de estado (usado para a leitura). Este registrador indica o modo do dispositivo ou da interface e pode ser utilizado para controlar a dinâmica da comunicação.

### Tipos básicos

Interface paralela: O tipo de comunicação é paralela, o que ocorre neste caso é a transferência simultânea de vários bits de informação. Neste tipo de comunicação são necessárias várias linhas de sinais, uma para cada bit. Este tipo de comunicação é indicado para curtas distâncias em que a velocidade é importante. Exemplo: impressora.
Interface serial: A comunicação é feita bit por bit, neste caso fazem-se necessários somente dois condutores de sinais. Exemplos: teclado e mouse.
os seguintes modos são possíveis:
1. Simplex: a informação é transferida em uma única direção (transmissor - receptor).
2. Half-duplex: a comunicação é bidirecional porém em apenas um direção em um determinado instante de tempo.
3. Full-duplex: a comunicação bidirecional e simultânea.

## Tipos de transferência de e/s

· Entrada e saída programada: Quem define as operações que serão realizadas na E/S é o programador. Este modelo de E/S assume dois tipos de transferência:
1. Transferência incondicional: É realizada independentemente do estado da interface.
2. transferência condicional: Só é realizado quando e se o dispositivo estiver pronto para realizar tal transferência.
· Entrada e saída por interrupção: É adicionada por uma interrupção, ou seja, o instante da operação é definido pelos periféricos através de interrupção.
· DMA (direct memory access): Neste tipo de solução, o processador concede poder a um dispositivo controlador de DMA, cuja transferência mantém a CPU em estado passivo (idle), sendo que o controle do barramento está sendo momentaneamente efetuado por dispositivo controlador de DMA.
Geralmente, uma operação de DMA envolve as seguintes etapas:
1. Inicialização: O Canal de DMA é inicializado pelo processador, o mesmo inicializa os registradores de endereços, contagem e controle do dispositivo Controlador de DMA. basicamente, é efetuada uma comunicação entre de bloco de dados.
2. Transferência: Durante a transferência o dispositivo Controlador de DMA aceita solicitações de transferência do dispositivo externo (periférico) e cria os sinais necessários (barramento de endereço e de controle) para o acesso à memória.
3. Finalização: Após a comunicação do bloco de dados definidos pela CPU na fase de inicialização, o dispositivo controlador de DMA informa a CPU (geralmente, por meio de interrupção) o fim da transferência.