EA-869 - Dúvidas Frequentes

EA-869 - Dúvidas Frequentes

Capítulo VII (17.04.2006)


(Ting - 2s97, Léo - 1s2006)
Como os periféricos podem ser endereçados pelo processador ao qual eles estão conectados?

Por que o acesso ao registrador de estado de uma interface é explicitamente de leitura e ao registrador de controle é de escrita?

Como se faz a transferência de dados entre dois dispositivos que trabalham em bases de tempo distintas?

Supondo que uma impressora e um terminal (monitor e teclado) são conectados ao processador e ambas as interfaces suportam controle de transferência de dados programado condicional e por interrupção, identifique o controle mais apropriado para as seguintes situações:
  1. um programa que ecoa os caracteres digitados pelo usuário.
  2. um programa que imprima um relatório armazenado na Memória.

Quando se recomenda a transferência de dados via DMA?

Na comunicação serial assíncrona, como o receptor consegue reconstruir um caracter a partir dos bits recebidos?

O que é um bit de paridade?

Na comunicação serial assíncrona o transmissor sempre coloca na linha dois stop bits após o envio de uma sequência de bits de dados?

Qual é a eficiência de comunicação serial assíncrona em termos de bits de dados transmitidos?

Quais são os problemas envolvidos na comunicação serial síncrona?


Como os periféricos podem ser endereçados pelo processador ao qual eles estão conectados?

    Vimos na seção VII.4 que um processador se comunica com os periféricos através de interfaces. Através das interfaces, cada periférico é representado, em geral, por um conjunto de
    • registradores de dados, também conhecidos como portas ou canais
    • registradores de estado; e
    • registradores de controle.
    O processador acessa estes registradores tanto para leitura (p. ex. consultar o estado de um periférico ou ler o dado captado pelo periférico) quanto para escrita (p.ex. operação a ser executada pelo periférico ou dado a ser transferido para periférico). O acesso a estes registradores se faz através de endereços.
    Sob o ponto de vista do processador, duas formas mais conhecidas de endereçar os periféricos são (seção VII.1):
    • E/S isolada (mesmos barramentos de dados e de endereços, mas distintos sinais/linhas de controle): Vimos nos Capítulos II e III que distintos sinais de controle são implementados através de códigos de operação distintos, ou seja, nesta arquitetura existem instruções específicas para operações de E/S. Como as instruções de acesso à memória são isoladas das instruções de acesso a E/S, cada um pode ter um espaço de endereços próprio.
    • E/S mapeada (mesmos barramentos de dados, de endereços e de controle): O processador trata os registradores das interfaces como parte da Memória (lembre-se de que a Memória é em última instância um banco de registradores!). Tipicamente um segmento do espaço de endereços da Memória é reservado para os registradores de interface. Através de um circuito adicional consegue-se mapear um endereço deste segmento a um registrador específico de uma interface específica. Com isso, pode-se manipular os dados dos periféricos com o mesmo repertório de instruções utilizado para acessar a Memória.
    Do lado de interface, todas as pastilhas dispõem de um pino denominado chip select, CS, e um conjunto de pinos denominados register select, RS. Estes pinos são ligados aos barramentos de endereços. O processador seleciona uma interface através de CS e um registrador específico dentro da interface através de RSs, como exemplifica o seguinte esquema de uma arquitetura de E/S mapeada:

Por que o acesso ao registrador de estado de uma interface é explicitamente de leitura e ao registrador de controle é de escrita?

    O registrador de estado informa o estado do periférico associado. Usualmente cada bit é associado a uma determinada situação do periférico e este bit é setado automaticamente pelo periférico toda vez que a tal situação ocorrer. O registrador de controle, por sua vez, armazena o código de função a ser executada pela interface e pelo periférico associado. Este código de função deve ser fornecido pelo processador.

Como se faz a transferência de dados entre dois dispositivos que trabalham em bases de tempo distintas?

    Vamos considerar dois dispositivos (interface + periférico) que foram projetados independentemente e trabalham em bases de tempo distintas. Para indicar que um dado está sendo transmitido utilizam-se sinais de controle adicionais. Dois mecanismos mais conhecidos para este fim são:
    • Controle pelo sinal de strobe: uma unidade sinaliza a outra unidade quando uma transferência vai ocorrer; e
    • Handshaking: as duas unidades trocam sinais avisando a presença de dados no barramento e a recepção.
    O sinal de strobe pode ser ativado tanto pelo transmissor como pelo receptor. Se for pelo transmissor, este sinal é ativado após os dados serem colocados no barramento. Usualmente, a borda de descida do sinal de strobe é utilizada para ativar o registrador do receptor

    Se for pelo receptor, o transmissor responde ao sinal de strobe colocando dados no barramento. Estes dados permanecem no barramento por um intervalo de tempo pré-determinado, que deve ser o suficiente para transferi-los a um dos registradores do receptor. Novamente, é comum utilizar a borda de descida do sinal de strobe para ativar o registrador do receptor.

    Um exemplo do uso de sinal de strobe para indicar a presença de dados na linha é o conector Centronics utilizado por algumas impressoras (CPU como fonte e a impressora como destino).
    O sinal de strobe é um sinal de controle unilateral no sentido de que o transmissor não tem como saber se o receptor realmente recebeu os dados. Este problema é resolvido no mecanismo de handshaking que provê um segundo sinal de controle como resposta ao sinal inicial. Se o sinal inicial for emitido pelo transmissor ao colocar dados na linha, o receptor responde com o sinal de "dados aceitos" assim que os dados forem transferidos para um dos seus registradores.

    E se o sinal inicial for emitido pelo receptor, requisitando dados, o transmissor responde colocando dados válidos na linha e o sinal avisando que foram colocados os dados solicitados.

    Observe que este esquema permite comunicação confiável entre unidades de velocidades distintas. A taxa de transferência se "auto-ajusta" de acordo com a da unidade mais lenta. Portanto, é o esquema mais utilizado.


Supondo que uma impressora e um terminal (monitor e teclado) são conectados ao processador e ambas as interfaces suportam controle de transferência de dados programado condicional e por interrupção, identifique o controle mais apropriado para as seguintes situações:

  1. um programa que ecoa os caracteres digitados pelo usuário.
  2. um programa que imprime um relatório armazenado sequencialmente na Memória.

  1. Um programa que ecoa os caracteres digitados pelo usuário é por natureza sequencial. Só se pode ecoar um dado após a sua entrada, ou seja o envio de um dado ao terminal está condicionado ao fato do teclado ter recebido o dado. E a recepção de um novo dado, por sua vez, deve estar condicionada ao envio do dado anterior, para não perder (sobreescrever) o dado existente no registrador de dados da interface. Portanto, o controle de E/S mais apropriado é o programado condicional.
  2. O programa deve ter o endereço inicial do relatório e a partir daí ler sequencialmente as palavras da Memória e enviá-las à impressora. Como o relatório já está integralmente na Memória, o único fator que limita a taxa de transferência de dados para a impressora é a velocidade da impressora. Toda vez que ela estiver "pronta" pode-se enviar uma nova palavra até chegar ao fim do relatório. Isso pode ser feito automaticamente via mecanismo de interrupção, ao invés de incluir explicitamente no programa instruções que testam se a impressora está pronta para receber novas palavras. Neste caso, é necessário prover uma rotina de serviço que lê o dado da Memória, envia-o para a impressora e atualiza o endereço do próximo dado a ser lido na ocorrência da próxima interrupção.

Quando se recomenda a transferência de dados via DMA?

    Quando se requer somente a transferência de grandes blocos de dados entre a Memória e os dispositivos de armazenamento de grande velocidade como unidades de CD ou de discos magnéticos.
    A transferência via DMA é também útil em aplicações interativas. Tipicamente, o conteúdo da tela de um terminal interativo raster é armazenado numa memória dedicada, conhecida como frame buffer. Quando ocorrem alterações neste conteúdo (p.ex., reposicionar uma janela da tela), a tela deve ser atualizada "em tempo real". Isso pode ser feita de forma eficiente via DMA.
    O uso do controlador DMA ( Direct Memory Acces), permite a transferência Periférico<->Memória diretamente sem precisar passar pela CPU. Neste modo de transferência, a CPU delega o gerenciamento dos barramentos de dados e de endereços (bus grant) ao controlador e deixa que este controle o sentido do fluxo de dados.
    Observe que durante a transferência por DMA, a CPU não pode processar nenhuma instrução que requeira o acesso a barramentos, nem mesmo a busca de uma instrução! Mas, pode processar instruções que atuem exclusivamente em seus registradores.

Na comunicação serial assíncrona, como o receptor consegue reconstruir um caracter a partir dos bits recebidos?

    Na comunicação serial assíncrona os dados são transferidos em grupo de bits denominados caracteres.Cada caracter é composto por bits de "informação" e bits de controle. O intervalo de tempo entre dois caracteres é variável e neste intervalo a linha fica no denominado estado em repouso ou ocioso (idle state). Por convenção, este estado corresponde ao nível lógico 1.
    Quando o transmissor intenciona enviar dados, coloca na linha space level, conhecido também como start bit. Envia os bits de informação e de paridade. E o término de um caracter é sinalizado pelos stop bits.
    O receptor sincroniza a sua operação ao detectar na linha a transição de "1" para "0". Após o intervalo correspondente ao start bit, ele amostra, com base no seu relógio local, os N seguintes bits de informação, no centro nominal de cada bit. Os bits são agrupados para construir a nova palavra. Sua paridade é calculada e comparada com o bit de paridade recebido. Caso seja diferente, o bit de erro de paridade no registrador de estado da interface é setado.
    O aspecto mais crítico neste tipo de comunicação é o temporizador do receptor. Como vimos, a borda de descida do start bit dispara o temporizador do receptor, que procura amostrar os bits no seu centro nominal Se o relógio do receptor não for exatamente sincronizado com o relógio do transmissor, esta amostragem não ocorre exatamente no centro, podendo ocorrer por exemplo a cada (T + t) como mostra o seguinte esquema

    Assim o stop bit é amostrado no instante

    (T + t)/2 + N (T + t)

    O total de erro acumulado é então

    (T + t)/2 + N (T + t) - (T/2 + NT) = (2N + 1)t/2.
    Para garantir a correta transferência de todos os bits de um caracter é então necessário que

    T/2 > (2N + 1) t/2

    e a duração do stop bit deve ser tal que permite a resincronização.


O que é um bit de paridade?

    Durante a transmissão de uma informação podem ocorrer ruídos que alteram bits de 0 para 1, ou vice versa. Para detectar, ou até corrigi-los automaticamente, são utilizados códigos detectores, ou corretores, de erros. O código detector de erro mais popular é o bit de paridade. O bit de paridade é um bit adicional a uma mensagem binária de forma que o número total de 1's seja par (paridade par) ou ímpar (paridade ímpar), como exemplifica a seguinte tabela:

    Mensagem de 4 bits Bit de Paridade Par Bit de Paridade Ímpar
    0000 0 1
    0110 0 1
    1000 1 0
    1111 0 1


Na comunicação serial assíncrona são sempre colocados na linha dois stop bits após o envio de uma sequência de bits de dados?

    Não. No término do envio de um caracter, a linha deve ser mantido no nível lógico 1 (linha em repouso) por um intervalo suficiente para o transmissor e o receptor se resincronizarem. O intervalo de tempo necessário depende do equipamento. Alguns terminais eletromecânicos antigos usam dois stop bits, enquanto os terminais mais novos utilizam um stop bit. Alguns dispositivos modernos dispensam, sob o ponto de vista técnico, os stop bits.

Qual é a eficiência de comunicação serial assíncrona em termos de bits de dados transmitidos?

    Na comunicação serial assíncrona são transmitidos além dos bits de informação efetivos, os bits de controle - start bits, stop bits e bits de paridade. Supondo um caracter constituído por
    • 7 bits de informação
    • 1 start bit
    • 2 stop bits
    • e
    • 1 bit de paridade,
    então o fator de eficiência da transferênica em percentagem é
    7/(7+4) x 100% = 64%.
    Por exemplo, numa taxa de transferência de 110 bauds (número de bits por segundo) somente 70 bits de informação são efetivamente transferidos em cada segundo.

Quais são os problemas envolvidos na comunicação serial síncrona?

    Na comunicação serial são eliminados os bits delimitadores de bits de informação, tornando a comunicação mais eficiente. Ao invés de se enviar cada caracter separadamente, estes são enviados em bloco sequencialmente. Portanto, ela é muito utilizada em redes de computadores, onde os dispositivos interligados (computadores) são dispositivos rápidos. Entretanto, dois problemas críticos são inerentes a este tipo de comunicação:
    • sincronização; e
    • extração de informações a partir da sequência de bits recebidos.
    Uma forma de manter o sincronismo entre o transmissor e o receptor é codificar nos sinais enviados os sinais de relógio do transmissor, como mostra o seguinte esquema:

    Este sinal pode ser facilmente decodificado em sinais de dados e sinais de relógio no receptor. Qualquer desvio entre a frequência do transmissor e a do receptor pode ser identificado e ações de ajuste são tomadas, por exemplo pela interface, para manter o sincronismo.
    Quanto à extração correta de caracteres de informação a partir de um stream de bits, a estratégia consiste basicamente em utilizar uma sequência de bits especial para demarcar o início e o fim de cada bloco de mensagem. Uma vez identificado esta sequência de bits, os bits seguintes são lidos:
    • em caracter (comunicação orientada a caracter), para por exemplo dados em ASCII; ou
    • de bit a bit (comunicação orientada a bits), para dados binários.

    Conforme a seção VII.6.2 do livro-texto, quando a comunicação é orientada a caracter a sequência de bits especial é denominado o caracter de sincronismo. Em ASCII, o código 0010110 (SYN) é reservado para esta finalidade. Para evitar que uma sequência de bits crie um falso caracter SYN, envia-se sempre dois caracteres SYN sequencialmente. Um formato típico de uma mensagem na comunicação síncrona orientada a caracter é:

    SYN SYN SOH Cabeçalho da Mensagem STX Mensagem em caracteres ETX BCC

    onde SOH (0000001), STX (0000010) e ETX (0000011) são caracteres que indicam, respectivamente o início do cabeçalho, o início da mensagem e o fim da mensagem. O campo BCC contém códigos para verificação da ocorrência de erros durante a transmissão.
    Para comunicação orientada a bit, utiliza-se a sequência 01111110 como delimitador de uma mensagem, de acordo com o seguinte formato:

    01111110 Cabeçalho Sequência de bits Campo detector de erros 01111110

    Para evitar que o padrão 01111110 seja confundido com uma subsequência de bits da mensagem, é comum utilizar a técnica conhecida como bit-stuffing. Esta técnica consiste em inserir um 0 após uma sequência de cinco 1's durante a transmissão. O receptor, após receber a mensagem deve eliminar todos os 0's após uma sequência de cinco 1's para recuperar a sequência original.


Last modified: Fri Apr 14 12:03:29 BRA 2006

Sugestões para leopini@dca.fee.unicamp.br