close

Directe geheugentoegang

Spring naar navigatie Spring naar zoeken
Image
Werking van een systeem met DMAC

In de informatica is de DMA ( Direct Memory Access , " direct memory access ") van een computer het mechanisme waarmee andere subsystemen, zoals randapparatuur , rechtstreeks toegang hebben tot het interne geheugen om gegevens uit te wisselen , bij lezen en/of schrijven, zonder waarbij de besturingseenheid (CPU) wordt betrokken voor elke byte die wordt overgedragen via het gebruikelijke onderbrekingsmechanisme en het daaropvolgende verzoek om de gewenste bewerking, maar door een enkele onderbreking per overgedragen blok te genereren. [1] [2]

Beschrijving

De DMA heeft daarom, via de Direct Access Controller (DMAC), de taak om de gegevens die door de BUS gaan, te beheren, waardoor randapparatuur die met verschillende snelheden werkt, kan communiceren zonder de CPU te onderwerpen aan een enorme onderbrekingsbelasting die de respectieve verwerking voortdurend zou onderbreken. cyclus .

DMA wordt door veel hardwaresystemen gebruikt , zoals schijfcontrollers , grafische kaarten , netwerkkaarten en geluidskaarten .

In wezen wordt bij een DMA-overdracht een geheugenblok van het ene apparaat naar het andere gekopieerd. Het loskoppelen van de databus van de processor om deze toe te wijzen aan de besturing van de DMA, die deze laatste gebruikt voor de gegevensoverdracht tussen de twee randapparatuur, gebeurt op verzoek van de DMAC via busswitches . De CPU start eenvoudig de overdracht door de databus vrij te geven, terwijl de daadwerkelijke overdracht wordt gedaan door de DMA-controller (DMAC). Een typisch geval is het verplaatsen van een geheugenblok van een externe geheugenschijf naar het hoofdgeheugen . Als deze bewerking, zoals dankzij DMA gebeurt, de processor niet blokkeert, kan hij andere bewerkingen blijven uitvoeren.

De DMA beheert de overdrachten tussen CPU en randapparatuur door het gebruik van verschillende lijnen (Acknowledge, request, control) en de twee DC (Data Counter) en IOAR (Input/Output Address Register) registers . Wanneer de CPU gegevens in het geheugen nodig heeft, laadt deze het adres van waaruit de bewerking in IOAR moet worden gestart en het aantal opeenvolgende gegevens dat in DC moet worden verwerkt, en informeert de DMA over nog een bit of het een lees- of schrijfbewerking is. Op dit punt stuurt de DMA het verzoek naar het randapparaat en wanneer het het bevestigingssignaal ontvangt, begint het met de overdracht. Bij elke stap wordt IOAR verhoogd en DC verlaagd totdat DC gelijk is aan 0.

De overdracht tussen DMA en I/O kan op verschillende manieren plaatsvinden:

  • Burst-overdracht : zodra de overdracht is begonnen, behoudt de DMA de controle over de BUS ten koste van de CPU, totdat deze wordt beëindigd: toegang tot de bus door de CPU blijft gedurende de hele overdracht geweigerd. Dit veronderstelt dat het apparaat en het geheugen een even snelle en duurzame overdracht mogelijk maken als de DMA-controller nodig heeft;
  • Cyclus stelen : de DMA voert de woordoverdracht slechts één volledige cyclus tegelijk uit (dwz voor elke cyclus maakt hij een interface met het randapparaat en voert de overdracht alleen uit als deze gereed is, met andere woorden door een handshake uit te voeren). Als gevolg hiervan is de tijd waarin de CPU de toegang tot de databus wordt ontzegd, meer gefragmenteerd;
  • Transparant / verborgen : de DMA bezet de BUS alleen wanneer de CPU deze niet nodig heeft. Om dit mogelijk te maken, bewaakt de DMA de CPU en start een buscyclus alleen als de instructie die in de CPU wordt uitgevoerd lang genoeg is om dit toe te staan ​​en als deze instructie geen overdrachten op de BUS betreft.

De scatter-gather DMA-techniek maakt de overdracht van gegevens naar meerdere geheugengebieden mogelijk tijdens een enkele DMA-transactie. Het resultaat is gelijk aan een reeks normale DMA-verzoeken, maar dit ontlast de CPU verder van onderbrekingen en gegevenskopieerbewerkingen.

De afkorting DMREQ staat voor DMA REQuest . DMACK staat voor DMA-erkenning .

Operatie

De DMA-chip heeft ten minste vier registers die toegankelijk zijn voor de software die in de CPU wordt uitgevoerd:

  1. De eerste bevat het startgeheugenadres voor lezen of schrijven
  2. De tweede telt het aantal bytes (of woorden) dat moet worden overgedragen
  3. De derde specificeert het apparaatnummer of de te gebruiken I / O-adresruimte, die het gewenste I / O-apparaat bepaalt
  4. De vierde bepaalt of de gegevens van het I / O-apparaat moeten worden gelezen of ernaar moeten worden geschreven

Om daarom een ​​blok van 32 bytes van het geheugenadres 100 naar de terminal (dit is apparaat 4) over te brengen, schrijft de CPU de nummers 100, 32 en 4 in de eerste drie DMA-registers, plus de code om te schrijven (in dit geval we stel dat het 1) in het vierde register is. Op dit punt doet de DMA een busverzoek om byte 100 uit het geheugen te lezen, vergelijkbaar met hoe de CPU zou doen. Zodra de byte is verkregen, zou de DMA-controller een I / O-verzoek doen aan apparaat 4 gericht op het schrijven van de byte. Na voltooiing van deze bewerkingen verhoogt de DMA-controller zijn adresregister met 1 en verlaagt zijn tellerregister met 1. Als het tellerregister nog steeds positief is, gaat het verder met het uitlezen van een andere byte en het schrijven ervan in het apparaat.

Ten slotte, wanneer de teller leeg is, stopt de DMA-controller met het overbrengen van gegevens en stuurt een puls op de onderbrekingslijn die is aangesloten op de CPU-chip. In aanwezigheid van DMA hoeft de CPU slechts een paar registers te initialiseren, waarna hij vrij is om andere taken uit te voeren totdat de overdracht is voltooid, gesignaleerd door een onderbreking van de DMA-controller. Sommige DMA-controllers hebben twee, drie of meer sets registers om gelijktijdige overdrachten te regelen.

Hoewel DMA de CPU ontlast van de zware belasting van I/O, is het proces niet helemaal gratis. Als een apparaat met hoge snelheid, zoals een schijf, wordt overgedragen via DMA, duurt het vele buscycli om toegang te krijgen tot het geheugen en het apparaat. Tijdens deze cycli moet de CPU wachten (DMA heeft altijd een busprioriteit hoger dan die van de CPU, omdat I/O-apparaten nauwelijks vertragingen tolereren). Het fenomeen dat optreedt wanneer de DMA-controller buscycli van de CPU steelt, wordt cycle stealing genoemd . Zelfs de winst om geen interrupt per byte (of per woord) te hoeven afhandelen, vergoedt grotendeels de schade die wordt veroorzaakt door het toe-eigenen van lussen.

Opmerkingen

  1. ^ Tanenbaum , blz. 374-375 .
  2. ^ Bucci 137-143

Bibliografie

Gerelateerde items

Andere projecten

Externe links