> Vi pratar nog föbi varandra lite. I min värld så är själva uppräknaren av minnespekaren en liten del.
Om du menar PC (programräknaren) så var det inte det jag menade.
Jag menar att om DMA'n ska göra i kod så behöver koden även hantera
något slags pakare för indexerad adressering. Denna behöver hanteras
av koden och det kan vara lika mycket som själva flytten av datat.
Pakeren ska läsas in, ökas och skrivas tillbaka. Sen så har många
arkitekturer auto-increment som som en option till indexerad
adressering, men det bli lite överkurs...
Sen så spelar cache och pipelanes inte så stor roll, de förutsätter i alla
fall att minnsbussen är tillgänglig normalt. CPU'n har ju inte heller någon
aning om att en DMA pågår, det är bara några minnesacesser som kommer
att ta lite mer tid än normalt. Så CPU'n kan inte aktivt välja vad den ska
göra under tiden. Och den kan inte välja så speciellt mycket ändå, det
styrs ju av den aktuella koden som ska köras vad den ska göra. Så den kan
inte aktivt välja att "köra från cachen"
istället för att vänta...
Med de sagt, så visst har även DMA hanteringen utvecklats sedan PDP8 tiden.
En del gör att köra multiplexat på minnesbussen med CPUns egna accesser o.s.v.
Hur som helst (det blev en lite för stor utvikning detta) så gäller det nog generellt
både för en PDP8 och för dagens processorer att DMA är snabbare än att göra
samma sak i koden direkt.