Copy Link
Add to Bookmark
Report

10: Controladores DMA

eZine's profile picture
Published in 
Masters of Shadow
 · 1 Apr 2023

Vc ja deve ter ouvido falar sobre controladores DMA. O unico problema e q nao sabe pra servem, ou o q sao... ate agora.

Os processos que usam dispositivos rapidos como fitas e discos, frequentemente tem de ler ou escrever milhares de caracteres de cada vez. Os dispositivos e processos poderao ser muito mais eficientes se um bloco de caracteres for transferido em cada operacao em vez de um unico caractere O acesso direto a memoria (Direct Memory Acess - DMA, Eureca !), permite a transferencia de bloco de caracteres. Ele permite que o controlador acesse a memoria por si mesmo

Com a E/S programada, a CPU tinha de transferir cada um dos caracteres e o controlador baseado em DMA representa um nivel maior de sofisticacao.

		    ____________________________ 
| Memoria |
---------------------------
O controlador pode A A O controlador pode
ler dados da memoria | | ler dados da memoria e
e armazenar dados na | | armazenar dados na mememoria.
V V moria.
_____________ __________
| Controlador | <----> | CPU |
------------- ----------

A CPU ativa
o controlador e o
controlador interrompe
a CPU.

O desenho, mostra um controlador DMA e uma CPU. Quando um processo em execucao precisa ler ou escrever dados: o driver ativa o controlador como antes, mas nao transfere dado algum. Em vez disso, ele manda ao controlador as informacoes necessarias. As informacoes sao essas (acho qe nao esqueci de nenhuma, qq coisa corrija-me):

  • A operacao a ser executada.
  • Um endereco indicando a posicao de memoria que ele deve acessar.
  • O numero de caracteres a transferir.
  • O dispositivo envolvido

Logo que o controlador recebe essa informacoes, ele inicia o acesso a memoria. Se o comando era uma solicitacao d escrita, o controlador acessa o numero especificado de caracteres contiguos, comecando no endereco especificado, e coloca os caracteres no dispositivo. Quando o controlador, interrompe a CPU, como antes, o sistema operacional responde a interrupcao. Se a solicitacao de E/S era para uma leitura, ocorrem acoes analogas A vantagem, naturalmente, e qe ha menos de interrupcoes. Isso faz como que a CPU fique ainda mais disponivel para os outros processos. Mesmo que nao haja outros processos(por exemplo, sistema monotarefa), menos interrupcoes significam maior eficiencia.

Roubo de Ciclo

Os acessos simultaneos a memoria por dois componentes distintos de hardware criam um novo problema: E se eles entrarem conflito ? Se tanto o controlador como a CPU utilizam os mesmos barramentos, o que acontecera se ambos o par de dois (:P), tentarem acessar a memoria ao mesmo tempo ? Mesmo que eles usem diferentes barramentos, o que acontecera c ambos tentarem acessar o mesmo modulo de memoria simultaneamente ? De qq forma, o resultado e o mesmo: ha um conflito porque o Hardware pode atender somente a um acesso de cada vez !

Em casos assim, um arbitro da a preferencia ao controlador. A CPU fica impedida de acessar o barramento ou o modulo d memoria durante alguns ciclos de relogio interno, e assim a CPU e retardada. Chamamos isso "roubo de ciclo", ja que o controlador rouba alguns ciclos da CPU. Note que essa nao e uma interrupcao como aquelas descritas na secao anterior. A CPU nao foi interrompida, mas sim retardada. A CPU nao salva o estado atual do processo nem chama um manipulador d interrupcao. O retardamento ocorre estritamente no hardware.

Uso de Buffers

Quando um driver inicia uma operacao de E/S para um processo, ele dev especificar uma posicao de memoria - mas qual ? Pareceria logico especificar a posicao indicada pelo processo; no entanto, frequentemente isso nao e feito. Em vez disso, o driver em geral especifica uma area separada de memoria, chamada buffer. Mas por que nao transferir os dados entre o dispositivo e a memoria do processo ? Ha varias razoes A primeira e que o processo requer e o que o controlador fornece podem nao ser a mesma coisa. Por exemplo, vamos supunhetar qe um processo queira ler um registro , declarado em um programa Pascal (Rulez) ou Cobol (SuX), d um arquivo de disco. Em virtude das caracteristicas dos discos, o controlador na realidade le um setor inteiro contendo um registro. Mas onde, o controlador coloca os dados do setor ? Provavelmente esse contem muito mais dados que o processo queria, e o processo nao tem o espaco para eles. Um buffer e usado para guardar conteudo do setor. So entao, o registro e transferido do buffer para memoria do processo Vale notar que solicitacoes subsequentes de leitura para registros que ja estao no buffer, nao causam uma transferencia fisica de dados. Como os dados ja forma lidos, eles precisam apenas ser movidos do buffer pra a memoria do processo. Devemos observar, que embora o uso de buffers seja comum, as vezes os dados sao transferidos diretamente p/ ou da memoria do processo. A vantagem e que isso elimina uma etapa extra. A desvantagem e que a parte do processo nao pode ser removida da memoria, deixando menos memoria disponivel para os outros processos.

Kosmos

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT