Bir DMA kullanırken CPU tamamen donuyor mu?


19

Oldukça basit bir sorum var, ama hiçbir yerde cevap bulamadım.

Kod ve verilerin aynı RAM'de yaşadığı bir Von-Neumann sisteminde, CPU tüm talimatlarını bellekten almalıdır. Şimdi, bilgisayar bileşenleri arasında büyük miktarda veri taşımak için, çevre birimlerinin ana sistem RAM'lerine erişmesine izin veren Doğrudan Bellek Erişimi denetleyicisi vardır.

Benim sorum şudur: DMA, diyelim ki, sabit disk ve RAM arasında (muhtemelen çok uzun) bir veri transferine izin veriyorsa, CPU'nun RAM kullanamayacağı ve bu nedenle bir sonraki talimatını getiremeyeceği anlamına gelmez mi?

Kısacası DMA, işlemciyi başka şeyler yapmak üzere serbest bırakmak için tüm G / Ç okuma ve yazma işlemlerini düzenleyen işlemcinin yerini almayı amaçlamaktadır. Ancak, talimatlarını RAM'den alamazsa, yine de serbest bırakılmamıştır.

Burada eksik olduğum bir ayrıntı var mı?

Teşekkürler


7
Evet. DMA nadiren belleğin tüm bant genişliğinde çalışır. Sadece arada bir G / Ç cihazının hızı ile kontrol edilen bir döngüyü (veya döngü döngüsünü) çalar.
Dave Tweed

Amiga ev bilgisayarı, kullanılan CPU'nun aslında otobüse sadece iki devire eriştiğini gözlemledikten sonra, hala tam hızda çalışırken otobüsten iki devir kaldı. DMA tabanlı çevre birimleri (grafik, ses, disk) aradaki döngüleri kullandı. Soru varsayımsal olduğundan ve bilgisayarlar her zaman pratik detaylarla mahvolduğundan, sorunuzun cevabı değil. :)
boru

2
@pipe: Kulağa doğru gelmiyor. Amiga, tamamen senkronize olmayan bir veri yoluna sahip bir M68K CPU kullandı. 6502 CPU'sunun veri yolunu sadece her saat döngüsünün yarısı için kullandığı ve diğer yarısını da DRAM'ın yenilenmesini sağlamaya yarayan video çıkışı için kullanan Apple II'yi düşünüyor olabilirsiniz.
Dave Tweed

4
Modern CPU'lar bellek erişiminin ortalama% 95'ini çözen önbelleklere sahiptir. CPU RAM gerektirmediği sürece, DMA yine de karışmaz.
MSalters

2
@DaveTweed Hayır. 68000 için veriyolu zamanlamalarına bakarsanız, her "veri yolu çevrimi" (okuma veya yazma) 8 duruma bölünür ve en az 4 gerçek saat çevrimi yapılır, bunlardan sadece bazıları veri yolunu kullanır. Bu çoğullama, adres veri yolunu her zaman sürdüğü için fazladan donanım gerektirir.
boru

Yanıtlar:


18

Bir DMA aktarımı sırasında CPU'nun belleğe erişemediğinden eminsiniz. Bununla birlikte, CPU ve DMA aktarımını gerçekleştiren cihaz tarafından açıkça paralel bellek erişimine izin veren iki faktör vardır:

  • CPU, bir talimatın yürütülmesi için birden fazla saat döngüsü alır. Belki bir veya iki döngü alan bir talimat getirdikten sonra, daha fazla hafıza erişimi olmadan tüm talimatı yürütebilir ( movdolaylı bir işlenenle talimat gibi hafızaya kendisi erişen bir talimat olmadığı sürece ).
  • DMA aktarımını gerçekleştiren aygıt CPU hızından önemli ölçüde yavaştır, bu nedenle CPU'nun her talimatta durması gerekmeyecektir, ancak ara sıra DMA cihazı belleğe eriştiğinde.

Bu iki faktör birlikte, DMA aktarımını gerçekleştiren cihazın CPU hızı üzerinde çok az etkisi olacağı anlamına gelir.

DÜZENLEME: CPU önbelleği faktörünün de var olduğunu ve CPU'nun yürüttüğü kod önbellekte olduğu sürece, talimatları almak için gerçek belleğe erişmesi gerekmediğini, bu nedenle bir DMA aktarımının gitmediğini belirtmeyi unuttum (talimatın belleğe erişmesi gerekiyorsa, açıkçası gerçek bir bellek erişimi gerçekleşecektir - potansiyel olarak DMA cihazının belleği kullanmasında bir mola beklemek zorunda kalacaktır).


4
Ek bir yaklaşım olarak, bazı sistemler belleğe erişmek için birden fazla kanal sunabilir. DMA motoru diğerinde çalışırken CPU'nun bir kanal kullanmasına izin verilebilir
Cort Ammon - Reinstate Monica

1
@CortAmmon Çift kanallı belleğin genellikle fiziksel adres alanına yayıldığına inanıyorum, bu nedenle örneğin 2GB RAM'iniz varsa daha düşük 1GB ilk kanalda ve üst 1GB ikinci kanaldadır. Bu durumda, hem CPU hem de DMA aynı 1GB bellek alanına erişmek istiyorsa, aynı kanalda olacaklar ve potansiyel olarak çakışacaklardır.
Micheal Johnson

Birçok gerçek sistemin gerçek bir VNM mimarisi kullanıp kullanmadığından emin değilim. Darboğaz sadece çok dardı. Gerçekten CS'de kullanılan teorik bir cihazdı. Düşünebildiğim en yakın, 1970'lerde RAM'de kayıtları olan Texas 16 bitlik bir cihazdı. Çift portalı RAM'in kullanıldığı bir ekran kartı düşünüyorum. ARM gibi çipler, üst uç olanlar gibi birçok dahili otobüsde (AHP, APB, Yığınlar) aynı şeyi başarır. futureelectronics.com/en/memory/dual-ports.aspx idt.com/products/memory-logic/multi-port-memory/...
ChrisR

1
Sorunun katı bir Von-Neumann CPU'su hakkında sorulduğunu düşünmüyorum, aksine gevşek bir Von-Neumann olan x86 veya ARM gibi pratik bir soru soruyordum. Herhangi bir dahili kayıt olmadan katı bir Von-Neumann durumunda, CPU'nun DMA sırasında çalışmaya devam edebilmesi, cevabımdaki DMA'nın tüm bellek bant genişliğini kullanmadığı benim ikinci noktaya kadar geliyor.
Micheal Johnson

20

Tek bir bellek arayüzü varsa, istekler arasında tahkim edilecek donanım olacaktır. Tipik olarak bir işlemciye, G / Ç'yi aç olmadan G / Ç'ye göre öncelik verilirdi, ancak G / Ç her zaman önceliğe sahip olsa bile, G / Ç'nin daha düşük bant genişliği taleplerine sahip olma ve aralıklı olma eğiliminde olduğu için işlemcinin belleğe erişme fırsatları olur.

Ek olarak, genellikle belleğe birden fazla arabirim vardır. Daha yüksek performanslı işlemciler genellikle önbelleklere sahiptir (DMA tutarlı değilse, önbelleklerin gözetlenmesi gerekmez; Gözetleme ile bile, genel olarak önbellek ve ana bellek arasındaki bant genişliği farkı nedeniyle (DMA L3'e aktarıldığında) küçük olur. önbellek) L3 önbellek ve L1 önbellek arasında), belleğe erişmek için ayrı bir arayüz sağlar. Mikrodenetleyiciler genellikle ayrı bir flash tabanlı bellekten talimatlara erişerek DMA sırasında yonga üzerindeki belleğe devam etmesine izin verir ve genellikle bağımsız bir arabirimle (DMA çakışmalarını önlemek için birçok veri erişimine izin vererek) sıkıca bağlanmış belleğe sahiptir.

Tek bir bellek arayüzünde bile, tepe bant genişliği genellikle tipik olarak kullanılan bant genişliğinden daha yüksek olacaktır. (Talimat getirme için, hafızadan ortalama getirme yükünden daha geniş bir küçük tampon bile, başka bir ajan bellek arayüzünü kullanırken, kodun dallanmama eğiliminden yararlanarak tampondan talimat alınmasına izin verir.)

Ayrıca, bir işlemci verilere eriştiği için, tek bir bellek arabirimi varsa, veri erişimleri ile komut erişimi arasında tahkim için bir mekanizma olması gerektiğini unutmayın.

İşlemci (tek bir bellek arabirimine sahip), bir G / Ç aygıt arabelleğinden ana belleğe bir kopya uygulamak zorunda kaldıysa, kopyayı gerçekleştirmek için talimatlar da getirmesi gerekir. Bu, bellek-bellek işlemleriyle bir ISA'da aktarılan sözcük başına iki bellek erişimi anlamına gelebilir (artımlı bellek adresleme sağlanmamışsa, bir yük deposu ISA'sı üç veya daha fazla bellek erişimi gerektirebilir); eski sistemlerde ana bellekle aynı arabirimi paylaşabilen G / Ç erişimine ek olarak. Bir DMA motoru bellekteki talimatlara erişmez ve bu nedenle bu yükü önler.


2

DMA'nın bellek erişimi tarafından engellenen tek bir veri yolu sistemi olduğundan, DMA veri taşırken CPU çalışamaz ve bu nedenle durdurulur.

Bunun arkasındaki fikir şudur:

Ardışık verileri bellekten kopyalamak istiyorsanız, CPU'nun böyle bir şey yapması gerekir:

Adresi hesapla-> verileri oku-> yeni adresi hesapla (+ 1 kelime) -> verileri oku ...

Oysa DMA, yeni adresin hesaplamasını paralel olarak (moda bağlı olarak) yapar ve bu nedenle daha hızlıdır. Böylece DMA tam veri yolu iş hacminde (teorik olarak) çalışabilir.


"sadece tek bir veri yolu sistemi olduğu için ... ... bellekleri ve çevresel veri yolları farklı hızlarda çalışan modern bilgisayarlarla ve aralarında protokol çevirisi gerçekleşirken güvenli bir varsayım değil.
rackandboneman

3
Eski bilgisayarlarda: Apple II'de (ya da bir öncüsü / prototipi mi?) Bir tasarım denetimi vardı, çünkü CPU'yu tam anlamıyla durdurdular. 6502'deki kayıtlar dinamik bellek olarak uygulanır. CPU'yu durdurma şekli yenilemeyi durdurdu. Maksimum DMA uzunluğu makineye çok bağlıydı.
rackandboneman

Soru von neumann mimarisi ve DMA ile ilgili olduğundan, bu daha çok mikrodenetleyicilerle ilgili bir soruya benziyor (daha sonra örnekte sabit disklerden bahsediliyor). Ayrıca Paul A. Clayton'ın işaret ettiği gibi, çok düzeyli önbellek göz önüne alındığında daha da karmaşıklaşıyor. Bir kelimede birden fazla opcodun bulunduğu ve kendi önbelleği olan bir diğerinden veya cpus'dan sonra yürütüldüğü bir cpu hakkında düşünülebilir, cpu'nun çalışabileceği kod olurdu, ancak çıktı tamponlanmalıdır ... yani evet doğru sonsuz olasılıklar var.
NeinDochOah

2

Genel olarak, hayır.

Çoğu sistem mimarisinde, tüm bellek erişimi isteklerinin kendilerine atanmış bir önceliği vardır. Sistem için aynı anda işleyebileceğinden daha fazla eşzamanlı bellek isteği olduğunda, önce daha yüksek önceliğe sahip isteklere hizmet verilir. CPU tarafından başlatılan bellek isteklerine genellikle mümkün olan en yüksek öncelik verilir.


0

Genel olarak hayır.

Bazı sistemler emin, bir seferde sadece bir master. Durum böyleyse biraz daha eski bir tasarım (eski tasarımların bile genellikle paralel çözümleri vardı). Her veri yolu (adres, veri yazma, veri okuma) gibi modern bir veri yolu türü bağımsız olarak çalışır ve bir saat döngüsünün hangi işlemle ilişkili olduğunu göstermek için saat döngüsü başına bir etikete veya kimliğe sahiptir. Bu nedenle, her iki yönde de aynı anda uçuşta birçok / çok işlem yapabilirsiniz, farklı işlemler okuma veya yazma veri yollarında karıştırılır. Sırada kim var önceliğe dayalı olurdu, veri yolu üzerindeki işlemlerin yazılım talimatlarının düzenlendiği sırada dışarı çıkması gerektiğine dair bir kural yoktur, işlemci bunun diğerlerinden daha erken başlayabileceğini belirleyebilir, ve doğal olarak yanıtlar, hedefin ne kadar yakın ve hızlı olduğuna bağlı olarak farklı sıralarda geri gelecektir. Aynı şekilde getirmeler de düzensizdir, şube tahmini, istendiği zaman rastgele görünen getirileri tetikler.

Büyük bir dma işlemi, çok daha fazla veriyolu bant genişliği gerektirecektir, ancak işlemcinin durması gerektiğini söylemek, durumun değil, aynı zamanda mimariye ve koda da bağlıdır. Kod, transfer sinyali / olayının bu sonuna kadar durma talimatı verebilir ve işlemcinin boruda yapabileceklerini bitirip durduğundan emin olabilir. Ancak bu veya bazı mimariler durmanızı gerektirmeyebilir, yine de durmak için akıllıca değil, çok fazla boşa bant genişliği. Paralel olarak çalışmazsa dma'nın noktası ne olurdu, sadece bir döngüde aktarımı kodlayın, getirmeler belki de mimariye bağlı olarak dma mantık yükü, güç vb. dma bulunduğunuz mimari ve sistem için çalışır ve kullanmaya değer olup olmadığına karar verir,

Dma'nın nasıl çalıştığına dair genel bir cevap yoktur, büyük ölçüde sistem tasarımına ve sistemdeki tüm bileşenlere bağlıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.