Uma CPU congela completamente ao usar um DMA?


19

Tenho uma pergunta bastante direta, mas não consegui encontrar uma resposta para ela em nenhum lugar.

Em um sistema Von-Neumann em que código e dados residem na mesma RAM, a CPU deve buscar todas as instruções na memória. Agora, para mover grandes quantidades de dados entre os componentes do computador, existe um controlador de acesso direto à memória que permite que os periféricos tenham acesso à RAM do sistema principal.

Minha pergunta é a seguinte: se o DMA está permitindo uma transferência de dados (possivelmente muito longa) entre, digamos, o disco rígido e a RAM, isso não significa que a CPU não pode usar RAM e, portanto, não pode buscar sua próxima instrução?

Em resumo, o DMA deve substituir o processador, arbitrando todas as leituras e gravações de E / S, a fim de liberar o processador para fazer outras coisas. No entanto, se não puder buscar suas instruções na RAM, não será liberado de qualquer maneira.

Há alguns detalhes que estou perdendo aqui?

obrigado


7
Sim. O DMA raramente é executado na largura de banda completa da memória. Ele apenas rouba um ciclo (ou uma explosão de ciclos) de vez em quando, controlado pela taxa do dispositivo de E / S.
Dave Tweed

O computador doméstico Amiga contornou isso observando que a CPU usada na verdade só acessava o barramento dois ciclos e depois permanecia fora do barramento por dois ciclos, quando ainda estava funcionando a toda velocidade. Os periféricos baseados em DMA (gráficos, áudio, disco) usavam os ciclos intermediários. Não é uma resposta para a sua pergunta, pois a pergunta é hipotética e os computadores são sempre arruinados por detalhes práticos. :)
tubo de

2
@pipe: Isso não parece certo. O Amiga usava uma CPU M68K, que possui um barramento completamente assíncrono. Você pode estar pensando no Apple II, que aproveitou o fato de que sua CPU 6502 usa apenas o barramento para metade de cada ciclo de clock e a outra metade para a saída de vídeo, que também serviu para manter a DRAM atualizada.
Dave Tweed

4
As CPUs modernas têm caches que, em média, resolvem 95% dos acessos à memória. Contanto que a CPU não precise de RAM, o DMA não estará interferindo.
precisa saber é o seguinte

2
@DaveTweed Nope. Se você observar os tempos do barramento para o 68000, cada "ciclo de barramento" (leitura ou gravação) é dividido em 8 estados, com um mínimo de 4 ciclos de clock reais, dos quais apenas alguns deles dirigem o barramento de dados. Porém, essa multiplexação requer algum hardware extra, porque aciona o barramento de endereços o tempo todo.
tubo de

Respostas:


18

Você está certo de que a CPU não pode acessar a memória durante uma transferência DMA. No entanto, existem dois fatores que, combinados, permitem o acesso aparente à memória paralela pela CPU e pelo dispositivo que realiza a transferência do DMA:

  • A CPU leva vários ciclos de clock para executar uma instrução. Depois de buscar a instrução, que leva talvez um ou dois ciclos, ela pode executar a instrução inteira sem acesso adicional à memória (a menos que seja uma instrução que acesse a memória, como uma movinstrução com operando indireto).
  • O dispositivo que realiza a transferência de DMA é significativamente mais lento que a velocidade da CPU, portanto, a CPU não precisará interromper todas as instruções, mas apenas ocasionalmente quando o dispositivo DMA estiver acessando a memória.

Em conjunto, esses dois fatores significam que o dispositivo que realiza a transferência de DMA terá pouco impacto na velocidade da CPU.

EDIT: Esqueci de mencionar que também há o fator de cache da CPU, que, enquanto o código que a CPU está executando estiver no cache, ele não precisará acessar a memória real para buscar instruções, portanto, uma transferência de DMA não será para atrapalhar (embora se a instrução precisar acessar a memória, obviamente ocorrerá um acesso real à memória - potencialmente, será necessário aguardar uma pausa no uso da memória do dispositivo DMA).


4
Como uma abordagem adicional, alguns sistemas podem oferecer vários canais para acessar a memória. A CPU pode ter permissão para usar um canal enquanto o mecanismo DMA trabalha no outro
Cort Ammon - Restabelecer Monica

1
@CortAmmon Acredito que a memória de canal duplo geralmente é espalhada pelo espaço de endereço físico, por exemplo, se você tem 2 GB de RAM, o 1 GB inferior está no primeiro canal e o 1 GB superior está no segundo canal. Nesse caso, se a CPU e o DMA quiserem acessar a mesma área de 1 GB de memória, eles estarão no mesmo canal e, portanto, potencialmente entrarão em conflito.
Micheal Johnson

Não tenho certeza se muitos sistemas reais já usaram uma arquitetura VNM verdadeira. O gargalo era muito estreito. Realmente era um dispositivo teórico usado em CS. O mais próximo que consigo pensar era um dispositivo Texas de 16 bits dos anos 70 que tinha seus registros na RAM. Estou pensando em uma placa de vídeo em que a RAM de duas portas é usada. Chips como ARM, especialmente os de ponta, realizam o mesmo em muitos barramentos internos (AHP, APB, Stacks). futureelectronics.com/en/memory/dual-ports.aspx idt.com/products/memory-logic/multi-port-memory/…
ChrisR

1
Não achei que a pergunta fosse sobre um CPU Von-Neumann rigoroso, mas um prático, como o x86 ou o ARM, que são vagamente Von-Neumann. No caso de um Von-Neumann estrito, sem nenhum registro interno, a capacidade da CPU continuar em execução durante o DMA se resume ao meu segundo ponto na minha resposta: o DMA não está usando toda a largura de banda da memória.
precisa

20

Se houver uma única interface de memória, haveria hardware para arbitrar entre solicitações. Normalmente, um processador teria prioridade sobre a E / S sem passar por E / S, mas mesmo com a E / S sempre tendo prioridade, o processador teria algumas oportunidades para acessar a memória porque a E / S tende a ter demandas de largura de banda mais baixas e a ser intermitente.

Além disso, normalmente há mais de uma interface para a memória. Processadores com desempenho mais alto geralmente têm caches (se o DMA não é coerente, os caches nem precisam ser espionados; mesmo com espião, a sobrecarga geralmente seria pequena por causa da diferença de largura de banda entre o cache e a memória principal ou (quando o DMA é transferido para L3 cache) entre o cache L3 e o cache L1), fornecendo uma interface separada para acessar a memória. Os microcontroladores geralmente acessam as instruções de uma memória separada baseada em flash, permitindo que a busca prossiga durante o DMA para a memória no chip, e geralmente possuem memória fortemente acoplada a uma interface independente (permitindo muitos acessos de dados para evitar conflitos de DMA).

Mesmo com uma única interface de memória, o pico da largura de banda geralmente será maior do que a largura de banda normalmente usada. (Para busca de instruções, mesmo um buffer pequeno com carregamento de memória maior que a média da memória permitiria a busca de instruções do buffer enquanto outro agente estiver usando a interface de memória, explorando a tendência do código de não ramificar.)

Observe também que, como um processador acessa dados, se houver uma única interface de memória, deve haver um mecanismo de arbitragem entre acessos a dados e acessos a instruções.

Se o processador (com uma única interface de memória) fosse forçado a implementar uma cópia de um buffer de dispositivo de E / S para a memória principal, ele também precisaria buscar instruções para executar a cópia. Isso pode significar dois acessos à memória por palavra transferida, mesmo em um ISA com operações de memória / memória (um ISA de armazenamento de carga pode exigir três acessos à memória ou mais se o endereçamento de memória pós-incremento não for fornecido); isto é, além do acesso de E / S, que em sistemas antigos pode compartilhar a mesma interface que a memória principal. Um mecanismo DMA não acessa instruções na memória e evita essa sobrecarga.


2

Como existe apenas um sistema de barramento, que é bloqueado pelo acesso à memória do DMA, a CPU não pode funcionar enquanto o DMA estiver movendo dados e, portanto, é interrompido.

A idéia por trás disso é a seguinte:

Se você deseja copiar dados consecutivos da memória, a CPU precisaria fazer algo assim:

Calcular endereço-> ler dados-> calcular novo endereço (+ 1 palavra) -> ler dados ...

Enquanto o DMA faz o cálculo do novo endereço em paralelo (dependendo do modo) e, portanto, é mais rápido. Portanto, o DMA pode funcionar com a capacidade total do barramento (teoricamente).


"como existe apenas um único sistema de barramento" ... não é uma suposição segura a ser feita com computadores modernos com memória e barramento periférico em velocidade diferente e com a tradução de protocolo entre eles.
precisa saber é o seguinte

3
Em computadores mais antigos: havia uma supervisão de design no Apple II (ou algum antecessor / protótipo dele), na medida em que eles literalmente interromperam a CPU. Os registros em um 6502 são implementados como memória dinâmica. A maneira como eles interromperam a CPU interrompeu a atualização. O comprimento máximo do DMA acabou sendo muito, muito dependente da máquina.
precisa saber é o seguinte

Como a pergunta era sobre arquitetura von neumann e DMA, isso soa mais como uma pergunta sobre microcontroladores (então, novamente, discos rígidos são mencionados no exemplo). Também como Paul A. Clayton aponta, fica ainda mais complicado quando você considera o cache multinível. Pode-se também pensar em uma CPU em que vários opcodes estão contidos em uma palavra e são executados após o outro ou com cache próprio, onde haveria código que a CPU poderia executar, mas a saída teria que ser armazenada em buffer ... então sim, você está ali existem infinitas possibilidades.
precisa saber é o seguinte

2

De um modo geral, não.

Na maioria das arquiteturas de sistema, todos os pedidos de acesso à memória têm uma prioridade atribuída a eles. Quando há mais solicitações simultâneas de memória do que o sistema pode atender por vez, as solicitações com prioridade mais alta são atendidas primeiro. Solicitações de memória iniciadas pela CPU geralmente recebem a maior prioridade possível.


0

Em geral não.

Alguns sistemas com certeza, apenas um mestre de cada vez. Um design um pouco mais antigo, se for esse o caso (mesmo os designs antigos costumavam ter soluções paralelas). Um tipo moderno de barramento através de cada barramento (endereço, gravação de dados, leitura de dados) opera independentemente e possui um tag ou ID por ciclo de clock para mostrar a qual transação esse ciclo de clock está associado. Assim, você pode ter muitas / muitas transações em andamento ao mesmo tempo nas duas direções, com diferentes transações embaralhadas juntas nos barramentos de leitura ou gravação de dados. Quem será o próximo seria baseado em prioridade, não há regra de que as transações no barramento precisem ser realizadas na ordem em que as instruções do software são definidas, o processador pode determinar que pode iniciar algumas antes das outras, e, naturalmente, as respostas voltarão em diferentes ordens, dependendo da proximidade e rapidez do alvo. Da mesma forma, as buscas não estão em ordem, a previsão de ramificação dispara buscas de aparência aleatória sempre que necessário.

Uma transação de dma grande exigiria muito mais largura de banda de barramento, mas dizer que o processador trava, não necessariamente o caso, também depende da arquitetura e do código. O código pode ter uma instrução que diz parar até que esse final do sinal / evento de transferência aconteça e, em seguida, garantir que o processador termine o que pode fazer no tubo e depois pare. Mas isso ou algumas arquiteturas podem não exigir que você pare, não é realmente sensato parar de qualquer maneira, com tanta largura de banda desperdiçada. Qual seria o sentido do dma de qualquer maneira, se ele não operar em paralelo, apenas codifique a transferência em um loop, as buscas adicionam alguns ciclos, talvez dependendo da arquitetura, que não são tão dispendiosos quanto a sobrecarga, a energia etc. da lógica do dma. O dma funciona para a arquitetura e o sistema específicos em que você está e decide se vale a pena usar,

Não existe uma resposta genérica para como o dma funciona, ele depende muito do design do sistema e de todos os componentes dentro do sistema.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.