O leitor pode perguntar-se porque é que não se conectam os periféricos directamente ao barramento de sistema. As razões são
De forma geral, podemos classificar os dispositivos externos dentro de três categorias:
Em termos muito gerais, a natureza de um dispositivo externo é a mostrada na figura 6.2. O interface para o módulo de E/S está sob a forma de controlo, status e sinais de dados. Os dados estão sob a forma de conjuntos de bits para serem enviados ou recebidos do módulo de E/S. Os sinais de controlo determinam a função que o dispositivo deverá efectuar, tais como, o envio de dados para o módulo de E/S (Entrada ou Leitura), a aceitação de dados do módulo de E/S (Saída ou Escrita), relato de status, ou a efectivação de uma função particular ao dispositivo (e.g., posicionamento da cabeça leitura). Os sinais de status indicam o estado do dispositivo. Como exemplos temos READY/NOT-READY para mostrar quando o dispositivo está pronto para as transferências de dados.
A lógica de controlo associada com o dispositivo controla a operação do dispositivo em resposta ao módulo de E/S. O transdutor converte informação eléctrica em outras formas de energia, durante a saída, e de outras formas para energia eléctrica, durante a entrada. Tipicamente, é associado um tampão com o transdutor, para armazenar temporariamente os dados que estão a entre o módulo de E/S e o ambiente externo; é comum um tamanho de tampão de 8 a 16 bits.
O interface entre o módulo de E/S e o dispositivo externo irá ser examinado na secção 6.7. O interface entre o dispositivo externo e o ambiente ultrapassa o âmbito deste livro, mas vários exemplos, breves, são aqui apresentados .
A forma mais habitual de interacção utilizador/computador é o arranjo teclado/monitor. O utilizador fornece a entrada através do teclado. Esta entrada é seguidamente transmitida para o computador e pode ser apresentado no monitor. Adicionalmente, o monitor mostra os dados fornecidos pelo computador.
A unidade básica de transferência é o carácter. Associado com cada carácter há um código, tipicamente de 7 ou 8 bits de comprimento.
O mais habitualmente usado nos Estados Unidos é um código de 7-bits designado por ASCII (American Standard Code for Information Interchange) e o Alphabet Number 5 International, da CCITT.
Cada carácter neste código é representado por um código binário único de 7-bits; assim, podem ser representados, 128 caracteres diferentes
6.1.
A tabela 6.1 lista todos os valores de códigos.
Na tabela, os bits de cada carácter são de dois tipos: de impressão e de controlo.
Os caracteres de impressão são: os alfabéticos, os numéricos e caracteres especiais que podem ser impressos em papel ou num ecrã.
Por exemplo, a representação em bits do carácter ``K'' é . Alguns dos caracteres de controlo têm a ver com o controlo da impressão de caracteres; um exemplo é o carácter de retorno de carreto.
Outros caracteres de controlo estão relacionados com procedimentos de comunicação.
Na entrada por teclado, quando um tecla é premida pelo utilizador, gera-se um sinal eléctrico que é interpretado pelo transdutor no teclado e, seguidamente, convertido na padrão de bits de código ASCII correspondente. Este padrão de bits é seguidamente transmitido para o módulo de E/S no computador. Aí, o texto pode ser armazenado no mesmo código ASCII. Na saída, os códigos dos caracteres ASCII são transmitidos para um dispositivo externo do módulo de E/S. O transdutor no dispositivo interpreta este código e envia os sinais eléctricosnecessários para o dispositivo de saída para mostrar o carácter indicado ou para efectuar a função de controlo requerida.
Um módulo de E/S é a entidade dentro de um computador responsável pelo controlo de um ou mais dispositivos externos e pela transferência de dados entre aqueles dispositivos e a memória principal e os registos da CPU. Assim, o módulo de E/S tem de ter um interface interno ao computador (da CPU e a memória principal) e um interface externo para o computador (ao dispositivo externo).
As categorias principais de funções ou requisitos para um módulo de E/S caem dentro das seguintes:
Durante qualquer período de tempo, a CPU pode comunicar com um ou mais dispositivos externos de forma imprevisível, dependendo das necessidades de E/S. Os recursos internos, tais como, a memória principal e o barramento de sistema, têm de ser partilhados entre um certo número de actividade incluindo o processamento de informação de E/S. Assim, a função de E/S inclui um requisito de temporização e controlo, para controlar o fluxo de tráfego entre os recursos internos e os dispositivos externos. Por exemplo, o controlo da transferência de dados de um dispositivo externo para a CPU pode envolver a seguinte sequência de passos:
Se o sistema usa um barramento, então cada uma das interacções entre a CPU e o módulo de E/S envolve uma ou mais arbitragens do barramento.
O anterior cenário simplificado ilustra, também, que o módulo de E/S tem de ter a capacidade de se envolver em comunicação com a CPU e com o dispositivo externo. A comunicação com a CPU envolve:
Numa outra perspectiva, o módulo de E/S tem de ser capaz de efectuar comunicação com o dispositivo. Esta comunicação envolve comandos, informação de status e dados (Figura 6.2)
Uma tarefa essencial de um módulo de E/S é a tamporização de dados. A necessidade desta função é evidente na Tabela 6.2.
![]() |
Enquanto que a taxa de transferência de e para a memória principal ou para a CPU é significantemente elevada, a taxa de transferência inferior baixa em várias ordens de grandeza para a maior parte dos dispositivos de E/S. Os dados vindos da memória são enviados para um módulo de E/S em rajadas rápidas. Os dados são tamporizados no módulo de E/S e seguidamente enviados para o periférico à sua taxa de dados. Na direcção oposta, os dados são tamporizados para não empatar a memória numa operação de transferência lenta. Assim o módulo de E/S tem de ser capaz de operar à velocidade quer do dispositivo quer da memória.
Finalmente, um módulo de E/S é muitas responsável pela detecção de erros e pelo subsequente relato de erros à CPU. Uma classe de erros inclui disfunções mecânicas e eléctricas reportadas pelo dispositivo (e.g. obstrução de papel ou pista de disco corrompida), Uma outra classe compreende as alterações não intencionais dos padrões de bits, à medida que são transmitidos do dispositivo para o módulo de E/S. Por exemplo, o código ASCII de caracteres ocupa 7 bits de um octeto. O oitavo bit é ajustado de forma a que o número total de `` uns'' no octeto seja par (paridade par) ou impar (paridade impar). Quando é recebido um octeto, o módulo de E/S verifica a paridade para determinar se ocorreu um erro.
Os módulos de E/S variam consideravelmente em complexidade e no número de dispositivos externos que controlam. Aqui, ensaiaremos, apenas, uma descrição muito geral. (Um dispositivo específico, O Intel 8255A, é descrito na Secção 6.4). A figura 6.3 fornece um diagrama de blocos geral de um módulo de E/S. O módulo liga-se ao resto do computador através de um conjunto de linhas de sinal (e.g. linhas do barramento de sistema). Os dados transferidos do, e para o, módulo são tamporizados em um ou mais registos de dados. Podem, também, existir um ou mias registos de status que fornecem informação de status. Um registo de status pode, também, funcionar como um registo de controlo, para aceitar informação detalhada de controlo da CPU.
A lógica dentro do módulo interactua com a CPU através de um conjunto de linhas. Estas são usados pela CPU para emitir comandos para o módulo de E/S. Algumas das linhas de controlo podem ser usadas pelo módulo de E/S (e.g. para arbitragem e sinais de status.) O módulo deve, também ser capaz de reconhecer e gerar endereços associados com os dispositivos que controla. Cada módulo de E/S tem um único endereço ou, no caso de controlar mais do que um dispositivo externo, um conjunto único de endereços. Finalmente, O módulo de E/S contém lógica específica de interface para cada um dos dispositivos que controla.
Um módulo de E/S funciona para permitir à CPU observar um largo gama de dispositivos de uma forma simples. Há um espectro de possibilidades que podem ser oferecidas. O módulo de E/S pode esconder os detalhes temporais, de formato e os mecanismos electro-mecânicos de um dispositivo externo, de forma a que a CPU possa funcionar em termos de comandos simples de leitura e escrita e, possivelmente, comandos de abertura e fecho de ficheiros. Na sua forma mais simples, o módulo de E/S pode, ainda, deixar muito do trabalho de controlo de um dispositivo (e.g. rebobinar uma cassete) visível à CPU.
Um módulo de E/S que toma conta da maior parte do, pormenorizada, encargo de processamento, apresentando à CPU um alto nível de interface, é usualmente designado por canal de E/S ou processador de E/S. Um módulo de E/S que seja bastante primitivo e requeira um controlo detalhado é usualmente designado por controlador de E/S ou controlador de dispositivo de E/S. Os controladores de E/S são vistos, habitualmente, em micro-computadores, enquanto que os canais de E/S são usados em grandes sistemas e os minicomputadores empregam uma mistura dos dois.
No que segue, iremos usar o termo genérico módulo de E/S, quando daí não resultar qualquer confusão, e iremos usar termos mais específicos sempre que necessário.
A tabela 6.3 indica a relação entre estas três técnicas. Nesta secção, exploramos a E/S programada. A E/S por interrupção e por DMA é explorada nas duas secções seguintes, respectivamente.
Para explicar a técnica de E/S programada, vê-la-emos primeiramente, do ponto de vista dos comandos de E/S emitidos pela CPU para o módulo de E/S e, seguidamente, do ponto de vista dos comandos de E/S executados pela CPU.
Um comando de controlo é emitido para activar um periférico e dizer-lhe o que tem de fazer. Por exemplo, uma unidade de fita magnética pode ser instruída para rebobinar ou andar para a frente um registo. Estes comandos são ajustados ao tipo particular de dispositivo periférico.
Um comando de teste é usado para verificar várias condições de status associado com o módulo de E/S e os seus periféricos. A CPU irá querer saber se o periférico em questão está alimentado disponível para uso. Também quererá saber se a operação de E/S mais recente já foi concluída e se ocorreu algum erro.
Um comando de leitura leva o módulo de E/S a obter dados do periférico e a colocá-los no barramento de dados. De modo oposto, um comando de escrita leva o módulo de E/S a colher um item de dados (octeto ou palavra) do barramento de dados e transmitir subsequentemente aquele dados para o periférico.
A figura 6.4a mostra um exemplo de utilização da E/S programada para ler um bloco de dados de um dispositivo periférico ( e.g. um registo de uma unidade de fita) para a memória. Os dados são lidos uma palavra (e.g. 16 bits) de cada vez. Por cada palavra que for lida, a CPU deve manter-se num ciclo de verificação de status até descobrir que a palavra está disponível no registo de dados do módulo de E/S. Este diagrama de fluxo põe a descoberto a desvantagem principal desta técnica: é um processo consumidor de tempo que mantém o processador ocupado, sem necessidade.
Com E/S programada, há uma correspondência apertada entre as instruções relacionada com a E/S que a CPU extrai da memória e os comandos de E/S que a CPU emite para um módulo de E/S para executar a s instruções. Isto é, as instruções são facilmente convertidas em comandos de E/S e há, frequentemente, um relação simples de um-para-um. A forma da instrução depende da maneira como são endereçados os dispositivos externos.
Tipicamente, existirão muitos dispositivos de E/S ligados ao sistema, através de módulos de E/S. A cada dispositivo é atribuído um identificador único ou endereço. Quando a CPU emite um comando de E/S, o comando contém o endereço do dispositivo pretendido. Assim, cada módulo de E/S deve interpretar as linhas de endereços para determinar se o comando é para si próprio.
Quando, a CPU, memória principal e a E/S partilham um barramento comum, dois modos de endereçamento são possíveis:
E/S no espaço de memória e E/S isolada.
Com E/S no espaço de memória há um único espaço de endereçamento para posições de memória e para dispositivos de E/S.
A CPU trata os registos de status e de dadosdos módulos de E/S como posições de memória e usa as mesmas intruções máquina para ter acesso posições de memória e dispositivos de E/S.
Assim, por exemplo com linhas de endereços, um número total, combinado, de
localizações de memória e endereços de E/S podem ser suportados, em qualquer combinação.
Com E/S no espaço de memória, são necessárias, apenas, uma linha única de leitura e uma linha única de escrita.
Em alternativa, o barramento pode estar equipado com linhas de leitura e escriat na memória, mais linhas de comando para entrada e saída.
Agora, a linha de comando especifica quando o endereço designada uma posição de memória ou um dispositivo de E/S.
A gama completa de endereços está disponível para ambos.
De novo com linhas, o sistema pode, agora, suportar
posições de memória e
endereços de E/S.
Uma vez que o espaço de endereços para E/S está isolada do espaço da memória, aquele é designado por E/S isolada.
Com E/S isolada (figura 6.5b), o aceso aos portos de E/S faz-se, apenas, através de comandos especializados de E/S, que activam as linhas de comando de E/S do barramento.
Para a maior parte dos tipos de CPUs, há um conjunto, relativamente,grande de diferentes instruções para referenciar a memória. Se for usada E/S isolada, há só algumas instruções de de E/S. Assim, uma vantagem da E/S no espaço de memória é que este grande reportório de instruçoes pode ser usado, permitindo uma mais eficiente programação. Uma desvantagem é que é consumido um valioso espaço de endereço em memória. Tanto a E/S isolado como a E/S no espaço de memória são comummente utilizadas.
Uma alternativca é a CPU emitir um comando de E/S para o módulo e, seguidamente, continuar a fazer outro trabalho útil. O módulo de E/S irá interromper a CPU para requerer um serviço quando estiver pronto para trocar dados com a CPU. A CPU, seguidamente, executa a transferência de dados, tal como antes, e retoma o seu processo inicial.
Vamos ver como isto trabalha, em primeiro lugar, do ponto de vista do módulo de E/S. Para entrada, o módulo recebe um comando READ (de leitura) da CPU. O módulo de E/S procede, seguidamente, para ler dados de um dos periféricos associados. Quando os dados estão no registos de dados de módulo, este produz um sinal de interrupção da CPU através de uma linha de controlo. O módulo espera, então, até que os seus dados sejam pedidos pela CPU. Quando o pedido é efectuado, o módulo coloca os seus dados no barramento de dados e fica pronto para uma outra operação de E/S.
A acção para entrada, do ponto de vista da CPU, é a seguinte. A CPU emite um comando READ. Seguidamente, vai embora e faz outra coisa qualquer (e.g. a CPU pode estar a trabalhar em vários programas diferentes ao mesmo tempo). No fim de cada ciclo de instrução, a CPU faz o teste de interrupção (Figura 3.9). Quando ocorre a interrupção, vinda do módulo de E/S, a CPU salvaguarda o contexto (e.g. contador de programa e registos da CPU) do programa corrente e processa a interrupção. Neste caso, a CPU lê a palavra de dados do módulo de E/S e armazena-a na memória. Seguidamente, restaura o contexto do programa em que estava a trabalhar (ou qualquer outro programa) e retoma a execução.
A figura 6.4b mostra o uso da E/S por interrupção para a leitura de um bloco de dados. Compare-a com a figura 6.4a. A E/S por interrupção é mais eficiente do que a E/S programada, porque elimina a espera desnecessária. Contudo, a E/S por interrupção continua a consumir muito tempo da CPU, uma vez que toda a palavra de dados que vem da memória para o módulo, ou do módulo para a memória, tem de passar através da CPU.
Uma vez carregado o contador de programa, o processador prossegue para o próximo ciclo de instrução, que se inicia com uma extracção de instrução. Uma vez que a extracção da instrução é determinada pelo conteúdo do contador de programa, o resultado é que o controlo é transferido para o programa de tratamento de interrupção.
É de notar que é importante salvaguardar todo a informação de estado acerca do programa interrompido para que seja reassumida mais tarde. Isto, porque a interrupção não é uma rotina chamada do programa. Mais propriamente, a interrupção pode ocorrer a qualquer momento e, além disso, em qualquer ponto da execução do programa de um utilizador. A sua ocorrência é imprevísivel. Na verdade, como veremos no próximo capítulo, os dois programas podem não ter nada em comum e podem pertencer a dois utilizadores distintos.
Em primeiro lugar, vamos considerar a identificação de dispositivo. Quatro categorias gerais de técnicas são de uso comum:
Uma alternativa é a sondagenm por software. Quando a CPU detecta uma interrupção deriva para uma rotina de tratamento de interrupção, cuja tarefa é sondar cada módulo de E/S para descobrir qual dos módulos provocou a interrupção. A sondagem pode ser sob a forma de uma linha de comando separada (e.g. TESTAE/S). Neste caso, a CPU arma TESTAE/S e coloca o endereço de um módulo de E/S específico no barramento de endereços. O módulo de E/S responde afirmativamente, em caso de ter pedido a interrupção. Alternativamente, cada módulo de de E/S pode conter um registo de status endereçável. A CPU, seguidamente, lê o registo de status de cada módulo de E/S para identificar o módulo que pediu a interrupção. Uma vez identificado o módulo correcto, a CPU deriva para uma rotina de serviço de dispositivos específica daquele dispositivo.
A desvantagem da sondagem por software é que consumidadora de tempo. Uma técnica mais eficiente é usar encadeamento prioratizado. O reconhecimento da interrupção passa por um encadeamento prioratizado através dos módulos. Quando a CPU sente uma interrupção, emite um reconhecimento de interrupção. Este sinal propaga-se através de uma série de módulos de E/S até que chega a um módulo requisitante. Tipicamente, o módulo requisitante responde colocando uma palavra nas linhas de dados. Esta palavra, designada vector, é o endereço do módulo de E/S ou um outro, qualquer, identificador único. Em qualquer dos casos, a CPU usa o vector como um apontador para a rotina de serviço de dispositivos. Isto evita a necessidade de executar, em primeiro lugar, uma rotina geral de serviço de interrupção. Esta técnica é designada por interrupção vectorizada.
Há uma outra técnica que recorre a interrupções vectorizadas, que é a arbitragem de barramento. Com arbitragem de barramento, um módulo de E/S deve ganhar primeito o controlo do barramento, antes de poder armar a linha de pedido de interrupção. Assim, só um módulo, de cada vez, pode armar a linha. Quando a CPU detecta a interrupção, responde pela linha de reconhecimento de interrupções. O módulo requisitante coloca, seguidamente, o seu vector na linha de dados.
As técnicas listadas, acima, servem para identificar o módulo de E/S requisitante. Também, fornecem uma forma de atribuir prioridades quando mais do que um dispositivo está a requisitar serviços de interrupção. Com múltiplas linhas, a CPU selecciona, apenas, a linha de prioridade com prioridade mais elevada. Com sondagem por software a ordem pela qual os dispositivos são sondados determina a sua prioridade. Similarmente, a ordem dos módulos num cadeia prioratizada determina a sua prioridade. Finalmente, a arbitragem do barramento pode empregar um esquema de prioridade, tal como o discutido na seccão 3.4.
Voltamo-nos, agora, para dois exemplos de estruturas de interrupção.
A figura 6.8 ilustra o uso do 8259A para ligar ao 8086 múltiplos módulos de E/S. Um único 8259A pode gerir até 8 módulos. Se for necessário controlar mais do que 8 módulos, pode ser usado um arranjo em cascata para gerir um total de 64 módulos.
A única responsabilidade de 8259A é a gestão de interrupções. Aceita pedidos de interrupção dos módulos agarrados, determina qual das interrupções tem a prioridade mais elevada e, seguidamente, assinala a CPU, armando a linha de INTR. A CPU faz o reconhecimento através da linha de INTA. O que induz o 8259A a colocar no barramento de dados a informação de vector de interrupções apropriada. A CPU pode, então, prosseguir para processar a interrupção e comunicar directamente com o módulo de E/S para ler ou escrever dados.
O 8259A é programável. O 8086 determina o esquema de prioridade a ser usado ajustando uma palavra de controlo no 8259A. São possíveis os seguintes modos de interrupção.
O lado direito do diagrama de blocos é o interface externo do 8255A.
As 24 linhas de E/S são programadas pelo 8086 através do registo de controlo.
O 8086 pode ajustar o valor do registo de controlo para especificar uma variedade de modos de operação e de configurações.
As 24 linhas estão divididas em três grupos de 8 bits ().
Cada grupo pode funcionar como uma porta de E/S de 8-bits.
Além disso, o grupo
está subdividido em grupos de 4-bits (
), os quais podem ser usados em conjunção com as portas de E/S
e
.
Configuradas desta forma transportam sinais de status e de controlo.
O lado esquerdo do diagrama de blocos é a interface externa para o barramento do 8086. Inclui um barramento de dados bidireccional de 8-bits (D0 até D7), usado para transferir dados das, e para, portas de E/S e para passar informação de controlo para o registo de controlo. As duas linhas de endereço especificam uma das três portas de E/S ou o registo de controlo. A linha de CHIP SELECT (Seleccão de Dispositivo) quando é habilitada, em conjunto com a linha de (READ) ou de (WRITE) dá lugar a uma transferência. A linha de RESET é usada para iniciar o módulo.
O registo de controlo é carregado pela CPU para controlar o modo de operação e definir os sinais, se for o caso.
Na operação em Modo , os três grupos de
linhas externas funcionam como três portas de E/S de 8-bits.
Cada porta pode ser definida como entrada ou como saída.
De outro maneira, os grupos
e
funcionam como portas de E/S e as linhas do grupo
servem como linhas de controlo para
e
.
Os sinais de controlo servem dois objectivos principais: ``aperto de mão'' e pedidos de interrupção.
O aperto de mão é um mecanismo simples de temporização.
Uma linha de controlo é usada pelo emissor como uma linha de DATA READY (dados preparados), para avisar quando os dados estiverem presentes nas linhas de dados de E/S.
Uma outra linha é usada pelo receptor como um ACKNOWLEDGE (reconhecimento), indicando que os dados foram lidos e as linhas de dados podem ser alteradas.
Uma outra linha pode ser designada como uma linha de INTERRUPT REQUEST (pedido de interrupção) vinculada ao barramento de dados do sistema.
Como o 8255A é programável através do registo de controlo pode ser usado para controlar uma variedade de dispositivos periféricos simples. A figura 6.10 ilustra o seu uso para controlar o teclado/visor de um terminal. O teclado fornece entradas de 8-bits. Dois desses bits SHIFT e CONTROL (maiúsculas e controlo) tem um significado especial para o programa de tratamento de teclado executado pela CPU. Contudo, esta interpretação é transparente ao 8255A que simplesmente aceita 8-bits de dados e apresenta-os ao barramento de dados do sistema. Duas linhas de controlo para aperto de mão são fornecidas para serem usadas com o teclado.
O visor está, também, ligado por uma porta de dados de 8-bits.
De novo, dos bits têm um significado especial que é transparente ao 8255A.
Juntamente com as duas linhas para aperto de mão, duas linhas fornecem funções de controlo adicionais.
A E/S por interrupção, apesar de mais eficiente do que a E/S programada simples, necessita, ainda, de intervenção da CPU para transferir dados entre a memória e o módulo de E/S. Assim, ambas as formas de E/S têm duas desvantagens inerentes.
Quando for necessário mover grandes volumes de dados, torna-se necessário uma técnica mais eficiente: acesso directo ah memória (DMA).
A DMA envolve um módulo adicional no barramento de sistema. O módulo de DMA (figura 6.11) é capaz de imitar a CPU e, na verdade, de retirar da CPU o controlo do sistema.
A técnica funciona como segue. Quando a CPU pretende ler ou escrever um bloco de dados emite um comando para o módulo de DMA, através do envio para o módulo de DMA da seguinte informação:
A CPU, em seguida, continua com outro trabalho. Tinha delegado a operação de E/S ao módulo de E/S e o módulo iria tomar conta dela. O módulo de DMA transfere o bloco de dados completo, uma palavra de cada vez, directamente para a, ou da, memória, sem passar pela CPU. Quando for dada por completa a transferênica, o módulo de DMA envia um sinal de interrupção para a CPU. Assim, a CPU é envolvida, apenas, no ínico e no fim da transferência (figure 6.4c)
O módulo de DMA necessita de tomar o controlo do barramento de forma a transferir os dados para a, e da, memória. Para esse efeito, o módulo de DMA tem de usar o barramento, apenas, quando a CPU não necessitar dele, ou tem de forçar, temporariamente, a CPU a suspender a actividade. A técnica anterior é a mais comum sendo designada por furto de ciclos uma vez que o módulo de DMA roupa, efectivamentem, ciclos de barramento.
A figura 6.12 mostra onde, durante o ciclo de instrução, pode ser suspensa a CPU. Em cada caso, a CPU é suspensa imediatamente antes de ter necessidade de usar o barramento. O módulo de DMA, seguidamente, transfere uma palavra e retorna o controlo para a CPU. É de notar que isto não é uma interrupção; a CPU não salvaguarda o contexto, nem poutra coisa qualquer. Pelo contrário, a CPU faz uma pausa durante um ciclo de barramento. O efeito global é fazer a CPU executar mais lentamente. Todavia, para uma transferência de E/S de múltiplas palavras, a DMA é de longe mais eficiente do que a E/S programada ou por interrupção.
O mecanismo de DMA pode ser configurado numa variedade de maneiras. São mostradas na figura 6.13 algumas das possibilidades. No primeiro exemplo, todos os módulos partilham o mesmo sistema de barramento. O módulo de DMA, actua como um substituto da CPU, usa a E/S programada para trocar dados entre a memória e o módulo de E/S através do módulo de DMA. Esta configuração, apesar de pouco dispendiosa é claramente ineficiente. Tal como com E/S programada controlada pela CPU, cada transferêcnia de uma palavra consome dois ciclos de barramento.
O número de ciclos de barramento necessários pode ser reduzido substancialmente integrando a função de DMA e de E/S. Tal como a figura 6.13b mostra, isso significa que existe um caminho entre o módulo de DMA e um ou mais módulos de E/S que não inclui o barramento de sistema. A lógica de DMA pode ser, efectivamente, uma parte do módulo de E/S, ou pode ser um módulo separado que controla um ou mais módulos de E/S. Este conceito pode ser levado um pouco mais adiante, ligando módulos de E/S ao módulo de DMA usando um barramento de E/S (Figura 6.13c). Isto reduz para um o número de interfaces de E/S, no módulo de DMA e, ao mesmo tempo, proporciona uma configuração facilmente expansível. Em todos estes casos, (figura 6.13b e c), o barramento de sistema, que o módulo de DMA partilha com a CPU e a memória, é usado pelo módulo de DMA, só para trocar dados com a memória. A troca de dados entre os módulos de DMA e de E/S têm lugar fora do barramento de sistema.
AH medida que os sistemas de computação evoluiram houve um padrão de complexidade e sofistificação crescente dos componentes individuais. Em parte alguma, isto, é tão evidente como na função de E/S. Os passos da evolução podem ser sumariados como se segue:
São comuns dois tipos de canais de E/S, tal como é ilustrado na figura 6.14.
Um canal selector controla múltiplos dispositivos de alta velocidade e, em cada tempo, fica dedicado ah transferência de dados com um daqueles dispositivos.
Assim, o canal de E/S seleccciona um dispositivo e efectua a transferência de dados.
Cada dispositivo, ou pequeno conjunto de dispositivos, é manipulado por um controlador, ou módulo de E/S, que é muito parecido com os módulos de E/S que temos vindo a discutir.
Assim, o canal de E/S toma o lugar da CPU no comando destes controladores de E/S.
Um canal multiplexador pode manipular múltiplos dispositivos de E/S ao mesmo tempo. Para dispositivos de baixa velocidade, um multiplexador de octeto aceita e transmite caracteres tão rapidamente quanto possível para múltiplos dispositivos.
Por exemplo, a sequência de caracteres resultante de três dispositivos com taxas diferentes e sequências individuais
pode ser
e assim sucessivamente, um multiplexador de bloco intercala blocos de dados de vários dispositivos.
Em qualquer dos casos, o módulo de E/S tem de envolver-se num diálogo com o periférico. Em termos gerais, o diálogo para uma operação de escrita é como se segue:
Uma operação de leitura prossegue de forma similar.
A chave para a operação de um módulo de E/S é o tampão interno que pode armazenar dados, passados entre o periférico e o resto do sistema. Este tampão permita ao módulo de E/S fazer compensar as diferenças entre o barramento de sistema e as suas linhas externas.
A importância crescente dos interfaces multi-ponto externos, usados para suportar dispositivos externos de arzenamento em massa (discos e unidades de fita) e dispositivos multimédia (CDROM, vídeo, áudio). Estes interfaces multi-ponto são, para todos os efeitos, barramentos externos que exibem o mesmo tipo de lógica que os barramentos discutidos no Capítulo 3. Nesta secção, examinamos dois exemplos chave: SCSI e P1349.
A configuração do SCSI é geralmente designado como um barramento, embora, na verdade, os dispositivos ficam no seu conjunto em encadeamento priorizado. Cada dispositivo SCSI tem dois conectores: um para entrada e outro para saída. Todos os dispositivos, no seu conjunto, são encadeados e um dos lados pendurados no computador hospedeiro. Todos os dispositivos funcionam independentemente e podem trocar dados tanto entre si, como com o sistema hospedeiro. Os dados são transferidos em pacotes de mensagens, como é descrito abaixo:
Em 1991 foi introduzida uma especificação revista, SCSI-2. As alterações mais notórias foram a expansão, opcional, das linhas de dados para 16 ou 32 e o aumento da velocidade do relógio para 10 MHz. O resultado é uma taxa de transferêcnia máxima de 20 ou 40 MOctetos/seg.
Presentemente, está em curso o trabalho de especificação do SCSI-3 que deverá suportar velocidades superiores.
O P1349 possui um certo número de vantagens sobre o SCSI e outros interfaces de E/S. É de elevada velocidade, baixo custo e fácil de implementar.