Wikisage is op 1 na de grootste internet-encyclopedie in het Nederlands. Iedereen kan de hier verzamelde kennis gratis gebruiken, zonder storende advertenties. De Koninklijke Bibliotheek van Nederland heeft Wikisage in 2018 aangemerkt als digitaal erfgoed.
- Wilt u meehelpen om Wikisage te laten groeien? Maak dan een account aan. U bent van harte welkom. Zie: Portaal:Gebruikers.
- Bent u blij met Wikisage, of wilt u juist meer? Dan stellen we een bescheiden donatie om de kosten te bestrijden zeer op prijs. Zie: Portaal:Donaties.
DMA
DMA oftewel Direct Memory Access laat toe data over te brengen van een niveau in de geheugenhiërarchie met een minimale tussenkomst van de Centrale Verwerkingseenheid (of Central Processing Unit). Aangezien dit parallel gebeurt met de bewerkingen die op dat moment op de CPU lopen, vormt DMA een essentieel onderdeel in de aanspreking van de hardware en de basis van efficiënte en performante drivers en applicaties.
In veel toepassingen staat DMA tegenover cache-operaties. Simpel gezegd, DMA laat toe efficiënter te werken dan de cache controller kan toelaten, maar vereist een duidelijk inzicht van de programmeur in het algoritme of code.
Sommige processoren zoals Digital Signal Processors bezitten bovendien ook geen cache controller (of cache) of wordt de cache-operatie afgezet voor expliciete prestatiedoeleinden; cache-operaties zijn namelijk altijd onderhevig aan een inschatting van de cache controller over welke data nodig zal zijn in een volgende stap.
Voorbeeld
Op een eenvoudige microcontroller wordt niet met DMA gewerkt. Dat betekent dat de CPU steeds de besturing van de bus heeft. Wil de CPU gegevens van een schijf lezen, dan gaat dat als volgt:
- De CPU geeft een leesopdracht aan de schijfprocessor. Daarbij wordt opgegeven welke gegevens gelezen moeten worden.
- De CPU gaat verder met andere werkzaamheden.
- De schijfprocessor geeft een interrupt als de gegevens gereed zijn.
- De CPU haalt de gegevens uit de schijfprocessor en zet ze in het geheugen.
Bij DMA is dit de werkwijze:
- De CPU geeft een leesopdracht aan de schijfprocessor. Daarbij wordt opgegeven welke gegevens gelezen moeten worden en op welk geheugenadres ze moeten worden opgeslagen.
- De CPU gaat verder met andere werkzaamheden.
- De schijfprocessor leest de gegevens en zet ze in het geheugen.
- De schijfprocessor geeft een interrupt als de procedure voltooid is.
Busconflict
Een probleem met DMA is dat twee processors tegelijk gebruik maken van het geheugen. Om een busconflict te vermijden worden er besturingsignalen tussen de processors uitgewisseld. De ene processor krijgt toegang tot de bus als de andere processor even met een interne verwerking bezig is. Ook is het mogelijk dat de bus tijdens het verloop van de verwerking in twee delen wordt gedeeld, zodat de twee processors onafhankelijk van elkaar kunnen werken.
Video
Een klassiek voorbeeld van DMA komt voor bij video. Een deel van het computergeheugen is aangewezen als videogeheugen. De inhoud van dit geheugen wordt op het scherm afgebeeld. Daarvoor is het nodig dat de videoprocessor het geheugen continu uitleest. Maar natuurlijk wil de CPU soms ook toegang hebben tot het videogeheugen.
Ook hier is het mogelijk dat een processor toegang krijgt tot het videogeheugen tijdens de korte momenten dat de andere processor het geheugen niet nodig heeft. De videoprocessor heeft tijdens de terugslagtijd het geheugen niet nodig. Een andere, minder fraaie, oplossing is dat de CPU op elk moment het videogeheugen mag benaderen, waarbij de videoprocessor even niets kan lezen. Deze oplossing leidt tot vlekken op het scherm op het moment dat de CPU het videogeheugen benadert. De fraaiste oplossing bestaat uit videogeheugen dat tegelijk van twee kanten benaderd kan worden.