GNU/Linux >> Znalost Linux >  >> Linux

Jaký je rozdíl mezi DMA a paměťově mapovanou IO?

Memory-mapped IO znamená, že registry zařízení jsou mapovány do paměťového prostoru stroje – když tyto paměťové oblasti čte nebo zapisuje CPU, jedná se spíše o čtení nebo zápis do zařízení než o skutečnou paměť. Pro přenos dat ze zařízení do skutečné vyrovnávací paměti musí CPU číst data z registrů zařízení mapovaných v paměti a zapisovat je do vyrovnávací paměti (a naopak pro přenos dat do zařízení).

S přenosem DMA je zařízení schopno přímo přenášet data do nebo ze skutečné vyrovnávací paměti samotné. CPU sdělí zařízení umístění vyrovnávací paměti a poté může provádět jinou práci, zatímco zařízení přímo přistupuje k paměti.


Protože na otázku již odpověděli jiní, přidám jen trochu historie.

Za starých časů na x86 (PC) hardwaru byl pouze I/O prostor a paměťový prostor. Jednalo se o dva různé adresní prostory, ke kterým se přistupovalo pomocí odlišného sběrnicového protokolu a různých instrukcí CPU, ale bylo možné hovořit přes stejný slot pro zásuvnou kartu.

Většina zařízení využívala I/O prostor jak pro řídicí rozhraní, tak pro rozhraní pro hromadný přenos dat. Jednoduchým způsobem přístupu k datům bylo provedení velkého množství instrukcí CPU pro přenos dat jedno slovo po druhém z I/O adresy na adresu paměti (někdy známé jako "bit-bang".)

Aby bylo možné autonomně přesouvat data ze zařízení do paměti hostitele, protokol sběrnice ISA nepodporoval zařízení pro zahájení přenosů. Bylo vynalezeno kompromisní řešení:řadič DMA. Jednalo se o kus hardwaru, který se usadil u CPU a inicioval přenosy pro přesun dat z I/O adresy zařízení do paměti nebo naopak. Protože I/O adresa je stejná, řadič DMA provádí přesně stejné operace jako CPU, ale o něco efektivněji a umožňuje určitou volnost běhu na pozadí (i když možná ne tak dlouho, protože to nemůže být možné). mluvit do paměti).

Rychle vpřed do dob PCI a protokoly sběrnice se staly mnohem chytřejšími:jakékoli zařízení může zahájit přenos. Je tedy možné, řekněme, že karta řadiče RAID přesune veškerá data, která se jim zlíbí, na hostitele nebo z hostitele, kdykoli bude chtít. Tomu se říká režim „hlavní sběrnice“, ale z žádného konkrétního důvodu lidé tento režim nadále označují jako „DMA“, i když starý řadič DMA je již dávno pryč. Na rozdíl od starých DMA přenosů často neexistuje žádná odpovídající I/O adresa a režim hlavního sběrnice je často jediným rozhraním přítomným na zařízení, bez režimu „bit-banging“ CPU.


Paměťově mapované I/O umožňují CPU řídit hardware čtením a zápisem specifických adres paměti. Obvykle se to používá pro operace s nízkou šířkou pásma, jako je změna řídicích bitů.

DMA umožňuje hardwaru přímo číst a zapisovat paměť bez zahrnující CPU. Obvykle se to používá pro operace s velkou šířkou pásma, jako je vstup/výstup disku nebo vstup videa z kamery.

Zde je článek s důkladným srovnáním mezi MMIO a DMA.

Pokyny pro návrh pro vysoce výkonné systémy RDMA


Direct Memory Access (DMA) je technika pro přenos dat z I/O do paměti az paměti do I/O bez zásahu CPU. K tomuto účelu slouží speciální čip, pojmenovaný DMA controller, který řídí veškeré činnosti a synchronizaci dat. Výsledkem je, že v porovnání s jinými technikami přenosu dat je DMA mnohem rychlejší.

Na druhou stranu virtuální paměť funguje jako mezipaměť mezi hlavní pamětí a sekundární pamětí. Data jsou načítána předem ze sekundární paměti (pevného disku) do hlavní paměti, takže data jsou v případě potřeby již dostupná v hlavní paměti. Umožňuje nám spouštět v systému více aplikací, než kolik máme dostatek fyzické paměti k podpoře.


Linux
  1. Jaký je rozdíl mezi DMA-Engine a DMA-Controller?

  2. Jaký je rozdíl mezi adduser a useradd?

  3. Jaký je rozdíl mezi `su -` a `su --login`?

  1. Rozdíl mezi [[ $a ==Z* ]] a [ $a ==Z* ]?

  2. Jaký je rozdíl mezi vyrovnávací pamětí a mezipamětí v Linuxu?

  3. Jaký je rozdíl mezi zápisem do souboru a namapovanou pamětí?

  1. Jaký je rozdíl mezi strtok_r a strtok_s v C?

  2. Jaký je rozdíl mezi fsck a e2fsck?

  3. Jaký je rozdíl mezi ls a l?