DMA (Direct Memory Access: Direkt Bellek Erişimi) belleğe veri aktarımını ve bellekten veri okumayı; Merkezi İşlem Birimi’ni veri transferi işleminde devre dışı bırakarak, sistemin çalışmasını hızlandıran ve işlemci yükünü azaltan bir yöntemdir.
Normal şartlardan bellekten(/belleğe) veri okumak(/yazmak) istediğimizde, veri ilk önce bellekten(/kaynaktan) okunur ve işlemciye taşınır. İşlemci üzerinden tekrar taşımak istediğimiz adrese; yani aygıta (RAM, HD vb) gönderilir. Buradaki sakınca şudur: Taşımak istediğimiz veride hiçbir değişik yapmasak bile işlemci bu transferlerde etkin rol oynar ve taşınan veri her seferinde işlemciye uğrar. Sistem kaynaklarını bu şekilde kullanmak; fazladan işlem gücü, zaman kaybı ve sistem yavaşlığı olarak sistem performansına yansır. Ayrıca bu taşıma sırasında işlemci yapabileceği diğer işlemleri de yapamaz. Eğer taşıdığımız veriler çok büyükse -örnek olarak veri görüntü kayıt kartından veya ağ kartından geliyorsa- bu işlemler sistemimizin performansını büyük ölçüde yavaşlatır.
Veri transferleri sırasında oluşacak bu negatif etkinin önüne geçmek için; işlemciyi bu akışın içinden çıkarmak ve veri transferi yapmak isteyen aygıta bellek erişimine izin verecek bir yöntem gereklidir. Çeşitli tipleri (mod’ları) olan bu yönteme genel olarak DMA diyoruz. Çalışma mantığını biraz daha açarsak iş akışı şöyle özetlenebilir.
Diyelim ki DMA ile kullanacağımız aygıt video kayıt kartı (frame grabber). Kameradan gelen görüntüleri algılayıp, gerekli işlemleri (filtreleme, analog-dijital çevrim-parlaklık vs) yaptıktan sonra oluşan görüntüyü -640*480 çözünürlük, 256 renk ve saniyede 25 frame ile bir saniyelik veri büyüklüğü 7.3MiB veri transferine eşittir- sistem belleğine atmak için DMA denetleyicinden veri yollarının kontorlünü alır. Bu aşamadan sonra işlemci veri transferlerine karışmaz ve transfer dışında kalan işlemleri yapmaya devam edebilir. Video kayıt kartımız (PCI olduğunu varsayarsak sn 133 MiB veri transferi şansı vardır. Bu da 7.3 MiB’lık veri için 50 ms sürer) görüntüyü belleğe attıktan sonra işlemciyi -genellikle kendine ayrılmış interrupt ile- veri transfer işleminin bittiğine dair uyarır ve veri yolunun kontrolünü bırakır. Bu yöntemle çok büyük veriler işlemcinin yaptığı işe ara vermesine gerek bıraktırmadan taşınabilir. Teorik olarak bu veri transferinin işlemciye yükü %0'dır.
Pratikte görebileceğimiz en iyi örnek ise CD*ROM’u DMA modundan PIO moduna alıp CD’den veri okumaya başladığımız durumdur. Bu durumda işlemci yükü %20'nin üstüne rahatlıkla çıkabilir. DMA’nın Multiword DMA, Ultra-DMA gibi farklı çeşitleri de vardır.
1
Normal şartlardan bellekten(/belleğe) veri okumak(/yazmak) istediğimizde, veri ilk önce bellekten(/kaynaktan) okunur ve işlemciye taşınır. İşlemci üzerinden tekrar taşımak istediğimiz adrese; yani aygıta (RAM, HD vb) gönderilir. Buradaki sakınca şudur: Taşımak istediğimiz veride hiçbir değişik yapmasak bile işlemci bu transferlerde etkin rol oynar ve taşınan veri her seferinde işlemciye uğrar. Sistem kaynaklarını bu şekilde kullanmak; fazladan işlem gücü, zaman kaybı ve sistem yavaşlığı olarak sistem performansına yansır. Ayrıca bu taşıma sırasında işlemci yapabileceği diğer işlemleri de yapamaz. Eğer taşıdığımız veriler çok büyükse -örnek olarak veri görüntü kayıt kartından veya ağ kartından geliyorsa- bu işlemler sistemimizin performansını büyük ölçüde yavaşlatır.
Veri transferleri sırasında oluşacak bu negatif etkinin önüne geçmek için; işlemciyi bu akışın içinden çıkarmak ve veri transferi yapmak isteyen aygıta bellek erişimine izin verecek bir yöntem gereklidir. Çeşitli tipleri (mod’ları) olan bu yönteme genel olarak DMA diyoruz. Çalışma mantığını biraz daha açarsak iş akışı şöyle özetlenebilir.
Diyelim ki DMA ile kullanacağımız aygıt video kayıt kartı (frame grabber). Kameradan gelen görüntüleri algılayıp, gerekli işlemleri (filtreleme, analog-dijital çevrim-parlaklık vs) yaptıktan sonra oluşan görüntüyü -640*480 çözünürlük, 256 renk ve saniyede 25 frame ile bir saniyelik veri büyüklüğü 7.3MiB veri transferine eşittir- sistem belleğine atmak için DMA denetleyicinden veri yollarının kontorlünü alır. Bu aşamadan sonra işlemci veri transferlerine karışmaz ve transfer dışında kalan işlemleri yapmaya devam edebilir. Video kayıt kartımız (PCI olduğunu varsayarsak sn 133 MiB veri transferi şansı vardır. Bu da 7.3 MiB’lık veri için 50 ms sürer) görüntüyü belleğe attıktan sonra işlemciyi -genellikle kendine ayrılmış interrupt ile- veri transfer işleminin bittiğine dair uyarır ve veri yolunun kontrolünü bırakır. Bu yöntemle çok büyük veriler işlemcinin yaptığı işe ara vermesine gerek bıraktırmadan taşınabilir. Teorik olarak bu veri transferinin işlemciye yükü %0'dır.
Pratikte görebileceğimiz en iyi örnek ise CD*ROM’u DMA modundan PIO moduna alıp CD’den veri okumaya başladığımız durumdur. Bu durumda işlemci yükü %20'nin üstüne rahatlıkla çıkabilir. DMA’nın Multiword DMA, Ultra-DMA gibi farklı çeşitleri de vardır.
1