close

Doğrudan bellek erişimi

Gezinmeye atla Aramaya atla
Image
DMAC ile bir sistemin çalışması

Bilgisayar biliminde , bir bilgisayarın DMA'sı ( Doğrudan Bellek Erişimi , " doğrudan bellek erişimi "), çevre birimleri gibi diğer alt sistemlerin, okuma ve/veya yazma sırasında, veri alışverişi yapmak için dahili belleğe doğrudan erişmesine izin veren mekanizmadır. olağan kesme mekanizması aracılığıyla aktarılan her bayt için kontrol birimini (CPU) ve ardından istenen işlem için talebi içerir, ancak aktarılan blok başına tek bir kesme oluşturarak. [1] [2]

Açıklama

DMA, bu nedenle, doğrudan erişim denetleyicisi (DMAC) aracılığıyla, BUS'tan geçen verileri yönetme görevine sahiptir ve farklı hızlarda çalışan çevre birimlerinin, CPU'yu ilgili işlemi sürekli olarak kesintiye uğratacak çok büyük bir kesme yüküne maruz bırakmadan iletişim kurmasını sağlar. döngü .

DMA, disk sürücüsü denetleyicileri , grafik kartları , kartları ve ses kartları gibi birçok donanım sistemi tarafından kullanılır .

Esasen, bir DMA aktarımında, bir bellek bloğu bir cihazdan diğerine kopyalanır. Veri yolunun iki çevre birimi arasında veri aktarımı için kullandığı DMA'nın kontrolüne atamak için işlemciden veri yolunun ayrılması , DMAC'ın talebi üzerine veri yolu anahtarları aracılığıyla gerçekleşir. Gerçek aktarım DMA denetleyicisi (DMAC) tarafından yapılırken CPU, veri yolunu serbest bırakarak aktarımı başlatır . Tipik bir durum, bir bellek bloğunu harici bir bellek sürücüsünden ana belleğe taşımaktır . Bu işlem DMA sayesinde olduğu gibi işlemciyi bloke etmezse diğer işlemleri yapmaya devam edebilir.

DMA, farklı hatlar (Onay, istek, kontrol) ve iki DC (Veri Sayacı) ve IOAR (Giriş / Çıkış Adres Kaydı) kayıtları kullanarak CPU ve çevre birimleri arasındaki aktarımları yönetir . CPU bellekte mevcut verilere ihtiyaç duyduğunda, IOAR'da işlemin başlayacağı adresi ve DC'de işlenecek ardışık veri sayısını yükler, DMA'yı bir okuma veya yazma işlemiyse daha fazla bit hakkında bilgilendirir. Bu noktada DMA, talebi çevre birimine gönderir ve onay sinyalini aldığında aktarımı başlatır. Her adımda IOAR artırılır ve DC, DC 0'a eşit olana kadar azalır.

DMA ve G/Ç arasındaki aktarım birkaç şekilde gerçekleşebilir:

  • Burst Transfer : Aktarım başladıktan sonra, DMA sonlandırılana kadar BUS'un kontrolünü CPU pahasına korur: CPU tarafından veriyoluna erişim aktarım boyunca reddedilir. Bu, cihazın ve belleğin, DMA Kontrolörünün ihtiyaç duyduğu kadar hızlı ve dayanıklı bir aktarıma izin verdiğini varsayar;
  • Döngü Çalma : DMA, kelime aktarımını bir seferde yalnızca bir tam döngü gerçekleştirir (yani her döngü için çevre birim ile arayüz oluşturur ve aktarımı yalnızca hazır olduğunda, yani bir anlaşma yaparak gerçekleştirir). Sonuç olarak, CPU'nun veri yoluna erişiminin reddedildiği süre daha parçalıdır;
  • Şeffaf / Gizli : DMA, BUS'u yalnızca CPU'nun ihtiyacı olmadığında işgal eder. Bunun gerçekleşmesi için, DMA CPU'yu izler ve yalnızca CPU'da yürütülen talimat buna izin verecek kadar uzunsa ve bu talimat BUS üzerindeki transferleri ilgilendirmiyorsa bir veri yolu döngüsü başlatır.

Dağılım-topla DMA tekniği, tek bir DMA işlemi sırasında verilerin birden çok bellek bölgesine aktarılmasına izin verir. Sonuç, normal DMA istekleri zincirine eşdeğerdir, ancak bu, CPU'yu kesintilerden ve veri kopyalama işlemlerinden daha da kurtarır.

DMREQ kısaltması, DMA REQuest anlamına gelir . DMACK, DMA onayı anlamına gelir .

İşlem

DMA çipinin içinde, CPU'da çalışan yazılım tarafından erişilebilen en az dört kayıt vardır:

  1. İlki, okuma veya yazma için başlangıç ​​hafıza adresini içerir.
  2. İkincisi, aktarılacak bayt (veya kelime) sayısını sayar
  3. Üçüncüsü, istenen G / Ç cihazını belirleyen cihaz numarasını veya kullanılacak G / Ç adres alanını belirtir.
  4. Dördüncüsü, verilerin I/O cihazından mı okunacağını yoksa ona mı yazılacağını belirler.

Bu nedenle, bellek adresi 100'den terminale (bu cihaz 4) 32 baytlık bir bloğu aktarmak için CPU, ilk üç DMA kaydına 100, 32 ve 4 sayılarını ve ayrıca yazma kodunu yazar (bu durumda biz dördüncü kayıtta 1) olduğunu varsayalım. Bu noktada DMA, CPU'nun yapacağına benzer şekilde, bellekten bayt 100'ü okumak için bir veri yolu talebi yapar. Bayt elde edildikten sonra, DMA denetleyicisi, baytı yazmayı amaçlayan cihaz 4'e bir G/Ç talebi yapacaktır. Bu işlemlerin tamamlanmasının ardından, DMA denetleyicisi adres kaydını 1 artırır ve sayaç kaydını 1 azaltır. Sayaç kaydı hala pozitif ise, başka bir baytın hafıza okuması ve cihaza yazılması ile devam eder.

Son olarak, sayaç temizlendiğinde, DMA denetleyicisi veri aktarımını durdurur ve CPU çipine bağlı kesme hattına bir darbe gönderir. DMA'nın varlığında, CPU'nun yalnızca birkaç kaydı başlatması gerekir, bunun ardından aktarım tamamlanana kadar DMA denetleyicisinden gelen bir kesme ile sinyal verilene kadar diğer görevleri gerçekleştirmek serbesttir. Bazı DMA denetleyicilerinde, eşzamanlı aktarımları kontrol etmek için iki, üç veya daha fazla kayıt seti bulunur.

DMA, CPU'yu yoğun G/Ç yükünden kurtarırken, süreç tamamen ücretsiz değildir. Disk gibi yüksek hızlı bir cihaz DMA tarafından aktarılıyorsa, belleğe ve cihaza erişmek için birçok veri yolu döngüsü gerekir. Bu döngüler sırasında CPU'nun beklemesi gerekir (DMA her zaman CPU'nunkinden daha yüksek bir veri yolu önceliğine sahiptir, çünkü G / Ç cihazları gecikmeleri pek tolere etmez). DMA kontrolörü CPU'dan veri yolu çevrimlerini çaldığında meydana gelen olaya çevrim çalma denir . Bayt başına (veya kelime başına) bir kesmeyi işlemek zorunda kalmamanın kazancı bile, döngülerin tahsis edilmesinden kaynaklanan hasarı büyük ölçüde geri ödemez.

Notlar

  1. ^ Tanenbaum , s. 374-375 .
  2. ^ Bucci 137-143

Kaynakça

İlgili öğeler

Diğer projeler

Dış bağlantılar