Doğrudan bellek erişimi

Doğrudan Bellek Erişimi (Direct Memory Access; DMA), merkezi işlem biriminden (Central Processing Unit; CPU) bağımsız olarak, çevresel bileşenlerin Rastgele Erişimli Hafıza (Random Access Memory; RAM) bloğuna erişebilmesini sağlayan bir özelliktir.

DMA, disk sürücü kontrol birimleri, grafik kartları, ağ kartları ve ses kartları dahil olmak üzere birçok donanım bileşeni tarafından kullanılmaktadır. DMA kanalı olan sistemler, DMA kanalı olmayan sistemlere göre daha hızlı bir şekilde veri transferi yapabilmektedir. DMA, bilhassa gerçek zamanlı uygulamalar için oldukça yararlı bir özelliktir.

İşleyiş ilkesi
DMA, bütün modern bilgisayarların önemli bir özelliğidir, zira cihazların, CPU'nun işlem gücünü harcamadan 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 veriyolunu ilgilendiren diğer görevleri gerçekleştiremez, ama veriyolu 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 veriyolu 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ş veriyolu tasarımları genel olarak, cihazın veriyolunun kontrolünü ele geçirdiği ve transferi kendisinin gerçekleştirdiği veriyolu 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.

Örnekler
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.

Kaynakça
DMA
mmap() and DMA
Memory Mapping and DMA
DMA and Interrupt Handling
DMA Modes & Bus Mastering