Doğrudan bellek erişimi

Doğrudan belleğe erişim (Direct memory access; DMA), modern bilgisayarlarda bulunan, merkezi işlem biriminden bağımsız olarak okuma ve/veya yazmak için, belirli donanım alt sistemleri içinde sistem belleğine erişim sağlayan bir özelliktir.
DMA, disk sürücü kontrol birimleri, grafik kartları, ağ kartları ve ses kartları dahil birçok donanım sistemi tarafından kullanılmaktadır. DMA kanalı olan bilgisayarlar, DMA kanalı olmayan bilgisayarlara nazaran, cihazlardan ya da cihazlara çok daha hızlı bir şekilde veri transferi yapabilmektedir. Bu, gerçek zamanlı uygulamalar için çok yararlıdır.

İşleyiş ilkesi

DMA, bütün modern bilgisayarların önemli bir özelliğidir, zira cihazların, CPU'yu ağır ek yüklere maruz bırakmadan veri transferi yapmalarına olanak sağlamaktadır. Aksi takdirde, CPU, her veri parçasını kaynaktan hedefe kopyalamak zorunda kalırdı. Bu genel olarak, normal bellek bloklarının kopyalanmasından çok daha yavaştır. Çünkü bir çevresel birimin I/O aracılığıyla merkez cihazına erişimi, genel olarak normal sistem RAM’ından daha yavaştır. Bu zaman içinde CPU, CPU veri yolunu ilgilendiren diğer görevleri gerçekleştiremez, ama veri yolu erişimini gerektirmeyen diğer işleri yapmaya devam edebilir.
Bir DMA transferi esas olarak, bir bellek bloğunu bir cihazdan diğerine kopyalar. Her ne kadar transferi CPU başlatsa da, o gerçekleştirmez. Sözde “üçüncü şahıs” DMA için, ISA veri yolu ile normal olarak kullanıldığı şekilde, transfer, genel olarak ana kart yonga kümesinin parçası olan bir DMA kontrol birimi tarafından gerçekleştirilmektedir. PCI gibi daha gelişmiş veri yolu tasarımları genel olarak, cihazın veri yolunun kontrolünü ele geçirdiği ve transferi kendisinin gerçekleştirdiği veri yolu idaresi (bus mastering) DMA’sı kullanmaktadır.
DMA’nın genel bir kullanımı, sistem RAM’ından bir bellek blokunun, cihazdaki arabelleğe kopyalaması ya da tam tersi olarak cihazdaki arabellekten sistem RAM'ine bir bellek bloğunun kopyalanmasıdır. Böyle bir işlem işlemciyi geciktirmez. Bu sayede CPU başka görevleri yapmak üzere programlanabilir. DMA transferleri, yüksek performanslı tümleşik sistemler için çok önemlidir. Ayrıca, çevre cihaz sürücülerinin sıfır-kopya denilen uygulamalarının yanı sıra, ağ paketi yol ataması, ses yeniden oynatımı ve duraksız video işlemi gibi işlevsellikleri sağlaması açısından da çok önemlidir.

DMA motorları

DMA, donanım etkileşimine ilave olarak, CPU’dan belirli bir DMA motoruna büyük kopyalar veya saçılım-toplama işlemleri gibi, pahalı bellek işlemlerinin başka yere yönlendirmek amacıyla da kullanılabilir. Bugünün masa üstü bilgisayarları için bellek kopyalamaları başka bir yere yönlendirilmeye değmeyecek kadar küçük işlemler olsa da, daha sınırlı kaynaklar nedeniyle, tümleşik cihazlarda daha sık kullanılmaktadır.

ISA (Sanayi Standardı Mimari)

Örneğin, bir bilgisayarın ISA DMA kontrol biriminin 16 DMA kanalı olup, bunların 7 adedi, bilgisayarın CPU’su tarafından kullanılmak içindir. Her DMA kanalıyla ilintili olarak, 16-bit’lik bir adres kaydı ve 16-bit’lik sayma kaydı bulunmaktadır. Bir veri transferi başlatmak içini cihaz sürücüsü DMA kanalının adresi ve sayma kaydedicisi ile birlikte, transferin yönünü ayarlar, okuma veya yazma; sonra, DMA donanımına transferi başlatması komutunu verir. Transfer tamamlanınca, cihaz CPU’yu keser.
“Saçılım-toplama” DMA, tek bir DMA hareketi ile birden fazla bellek alanına ve alanından veri transferine izin verir. Birden fazla basit DMA talebinin birbirine zincirlenmesine eşdeğerdir. Yine, amaç çoklu giriş/çıkış kesintilerini ve veri kopyalama görevlerini CPU’dan başka yerlere aktarmaktır.
DRQ, DMA talebi anlamına, DACK, DMA kabulü/alındısı anlamına gelmektedir. Bu semboller genelde, DMA işlevi bulunan bilgisayar sistemlerinin donanım şematiğinde görülmektedir. CPU ile DMA kontrol birimi arasındaki elektronik sinyal hatlarını simgelemektedir.