Директан приступ меморији
Директан приступ меморији (DMA) је особина модерних рачунара која омогућава одређеном хардверском подсистему унутар рачунара да приступи системској меморији независно од процесора.
Без DMA, када процесор користи програмирани улаз/излаз, углавном је потпуно окупиран током целокупног трајања операције читања или писања, и услед тога недоступан да обавља друге послове. Користећи DMA, процесор започне трансфер, ради друге операције док трансфер траје, и прима прекид од стране DMA контролера када се операција заврши. Ова особина је корисна сваки пут када процесор не може да испрати брзину преноса, или када треба да ради нешто корисно док чека да се релативно спора улазно/излазна операција заврши. Пуно хардверских система користи DMA, укључујући контролере диска за складиштење, графичке картице, мрежне адаптере и звучне картице. DMA се такође користи за трансфер података међу чиповима унутар вишејезгарних процесора. Рачунари који имају DMA канале могу да пребацују податке ка и од уређаја са много мање процесорских губитака од оних који немају. Слично томе, процесни елемент унутар вишејезгарног процесора може да пребацује податке ка и од локалне меморије без заузимања свог процесорског времена, омогућавајући да се рачунање и пренос података извршавају паралелно.
DMA се такође може користити за копирање између меморија или померање података унутар меморије. DMA може да растерети процесор захтевних меморијских операција, као што су велика копирања или векторски улаз/излаз, на рачун наменског DMA уређаја. Пример имплементације је I/O Acceleration Technology.
Принципи
[уреди | уреди извор]DMA контролер може да генерише адресе и започиње меморијске циклусе читања или писања. Он садржи неколико регистара који могу бити уписивани и читани од стране процесора. Исти укључују адресне регистре, бајт бројачке регистре, и један или више контролних регистара. Контролни регистри одређују који улазно/излазни порт се користи, смер трансфера (читање из улазно/излазног уређаја или писање у улазно/излазни уређај), величину јединице трансфера (бајт или реч), и број бајтова који се преносе из цуга.[1]
Да би извршио улазну, излазну или међумеморијску операцију, процесор иницијализује DMA контролер са бројем речи које треба пренети, и меморијском адресом коју треба да користи. Процесор затим шаље команду периферном урешају да започне трансфер података. DMA контролер затим обезбеђујед адресе и контролне линије читања/писања ка системској меморији. Сваки пут кад је реч података спремна да буде пренесена између периферног уређаја и меморије, DMA контролер повећава свој интерни адресни региистар док се не пренесе цео блок података.
DMA трансфер се могу извршавати или реч по реч или одједанпут узастопно. Ако се извршава реч по реч, то омогућује процесору да приступи меморији на супротном циклусу радног такта магистрале - ово се зове крађа циклуса с обзиром да се DMA контролер и процесор боре за приступ меморији. У узастопном моду DMA, процесор може бити стављен на чекање за време DMA трансфера и цео блок од стотину или хиљаду речи може бити копиран.[2] Када су меморијски цилкуси бржи од процесорских, могућ је испрекидани DMA циклус, где DMA контролер приступа меморији само кад процесор не може.
Код система где један уређај влада магистралом, и процесор и периферије могу добити контролу над меморијском магистралом. Када периферија добије контролу над магистралом, може директно да врши упис у системску меморију без укључивања процесора у ту операцију, самостало обезбеђујући адресне и контролне сигнале по потреби. Нека мера мора бити предузета да се процесор стави у стање чекања да не би дошло до конфликта око магистрале.
Модови рада
[уреди | уреди извор]Узастопни мод
[уреди | уреди извор]Цео блок података се преноси у једној узастопној секвенци. Када DMA контролер добије приступ системској магистрали од стране процесора, он може да пренесе све бајтове података из блока података пре ослобађања системске магистрале назад процесору, али оставља процесор неактивним током релативно дугог периода. Овај мод се такође назива "мод блоковског трансфера“.
Мод крађе циклуса
[уреди | уреди извор]Мод крађе циклуса се користи код система чији процесор не сме бити неактиван за време трајања узастопног преноса. Код крађе циклуса, DMA добија приступ системској магистрали на исти начин као код узастопног мода, коришћењем BR (захтев магистрале) и BG (одобрење магистрале) сигнала, који контролишу интерфејс између процесора и DMA контролера. Међутим, код крађе циклуса, након преноса једног бајта података, контрола над системском магистралом се препушта процесору преко BG сигнала. Она се затим континуално поново захтева преко BR сигнала, преносечи један бајт података по захтеву, док се не пренесе цео блок података. Континуалним узимањем и отпуштањем контроле над системском магистралом, DMA контролер наизменично поскакује између извршавања инструкција и преноса података. Процесор обради инструкцију, затим DMA контролер пренесе јединицу података, и тако даље. С једне стране, блок података није пренесен брзо као у узастопном моду, али с друге стране процесор није неактиван дуго као што је у утастопном моду. Мод крађе података је користан за контролере који надгледају податке у реалном времену.
Транспарентни мод
[уреди | уреди извор]Транспарентни мод одузима највише времена за пренос блока података, али је и најефикаснији у смислу укупних системских перформанси. DMA контролер преноси податке само када процесор обавља операције које не укључују коришћење системске магистрале. Примарна предност транспарентног мода је што процесор никад не стаје са извршавањем својих програма и DMA трансфер је слободан у смислу времена. Мана транспарентног мода је што хардвер мора да утврди када процесор не користи системску магистралу, што може бити сложено.
Кохерентност кеша
[уреди | уреди извор]DMA може довести до проблема кохерентности кеша. Замислите процесор са својим кешом и екстерном меморијом којој уређаји могу директно приступити преко DMA. Када процесор приступи локацији X у меморији, тренутна вредност ће бити копирана у кеш. Наредне операције над X ће ажурирати кеширану копију X, али не и ону копију у екстерној меморији, под претпоставком да ће бити ажурирана у тренутку када она копија у кешу буде замењена другом меморијском локацијом. Ако уређај покуша да приступи X (њеној копији у екстерној меморији) пре него што је она ажурирана из кеша, уређај ће добити нетачну вредност X.
Similarly, if the cached copy of X is not invalidated when a device writes a new value to the memory, then the CPU will operate on a stale value of X.
Овај проблем се може решити на један од два начина при дизајну система: Кеш-кохерентни системи имплементирају хардверски метод при коме су екстерни уписи сигнализирани кеш контролеру који затим извршава инвалидацију кеша (брише ту вредност из кеша) за DMA уписе или ажурирање екстерне меморије у случају DMA читања. Некохерентни системи препуштају ово софтверу, где оперативни систем мора да се осигура да је екстерна меморија ажурирна на основу кеша преко него што отпочне DMA читање и да је кеш обрисан пре него што DMA изврши операцију уписа над еквивалетном меморијском локацијом у екстерној меморији. Оперативни систем мора бити сигуран да се истом меморијском опсегу не приступа од стране ниједне од покренутих нити у међувремену. Овај задњи приступ доводи до неких ресурсних губитака код DMA операција, с обзиром да већина хардвера захтева петљу да би обрисала сваку кеш линију индивидуално.
Такође постоје и хибриди, код којих је секундарни L2 кеш кохерентан док је L1 кеш (типично на процесору) контролисан од стране софтвера.
Примери
[уреди | уреди извор]ISA
[уреди | уреди извор]Код оригиналног IBM PC-а, постојао је само један Intel 8237 DMA контролер са четири DMA канала (обележених као 0–3), као део такозване Industry Standard Architecture, или ISA. Ови DMA канали су обављали 8-битне преносе и могли су адресирати само први мегабајт RAM меморије. Са IBM PC AT, додат је други 8237 DMA контролер (канали 5—7; канал 4 је неупотребљив), и странични регистар је преповезан да адресира пун адресни простор од 16 MB меморије 80286 процесора. Овај други контролер је обављао 16-битне трансфере.
Због својих заосталих перформанси (2.5 Mbit/s[3]), ови уређају су већински превазиђени од појаве 80386 процесора 1985-е и свог капацитета за 32-битне трансфере. И даље су подржани у одређеној мери чисто да подрже уграђени стари PC хардвер на модерним машинама. Једино хардвер који је и даље релативно чест, а који користи ISA DMA су уграђени флопи диск контролери многих PC матичних плоча и IEEE 1284 паралелни портови који подржавају брзи ECP мод.
Сваки DMA канал има 16-битни адресни регистар и 16-битни бројачки регистар у вези с њим. Да би започео пренос података драјвер уређаја поставља адресни и бројачки регистар DMA канала заједно са смером трансфера података, читања или писања. Затим даје инструкцију DMA хардверу да започне трансфер. Када се трансфер заврши, уређај шаље прекид процесору.
DMA са векторским улазом/излазом омогућава трансфер података ка и од више меморијских опсега при једној DMA трансакцији. То је еквивалентно ланчању вишеструких једноставних DMA захтева. Поента је да се процесор растерети вишеструких улазно/излазних прекида и операција копирања података.
DRQ је скраћеница за захтев за податком; DACK за допуштање података. Ови симболи, виђени на хардверским шемама рачунарских система са DMA функционалношћу, представљају електронске сигналне линије између процесора и DMA контролера. Сваки DMA канал има једну линију за захтев и једну за признање. Уређај који користи DMA мора бити подешен да користи обе линије додељеног DMA канала.
Стандардни ISA DMA преноси:
0. DRAM освежавање (превазиђено),
1. Кориснички хардвер,
2. Флопи диск контролер,
3. Тврди диск (превазиђено са PIO модом, и замењено UDMA модом),
4. Серијски са XT DMA контролера,
5. Тврди диск (PS/2 порт), кориснички хардвер за све остало,
6. Кориснички хардвер.
7. Кориснички хардвер.
PCI
[уреди | уреди извор]PCI архитектура нема централни DMA контролер controller, за разлику од ISA. Уместо тога, било која PCI компонента може захтевати контролу над магистралом ("постати власник магистрале") и захтевати упис или читање из системске меморије. Прецизније, PCI компонента захтева власништво над магистралом од контролера PCI магистрале (углавном јужни мост чипсета у модерном рачунарском дизајну), који ће вршити распоређивање уколико више уређаја затражи контролу магистрале истовремено, с обзиром да само један може користити магистралу истовремено. Када компонента добије контролу, она ће поставити нормалне команде читања и писања на PCI магистралу, које ће бити препознате од стране контролера магистрале и прослеђене меморијском контролеру коришћењем шеме која је специфична за сваки чипсет.
Као пример, на модерном AMD Socket AM2-базираном рачунару, јужни мост ће проследити трансакцију северном мосту (који је интегрисан на чипу процесора) коришћењем HyperTransport-а, који ће их конвертовати у DDR2 операције и поставити на DDR2 меморијску магистралу. Као што се може видети, доста је корака укључено у PCI DMA трансфер; међутим, то представља мали проблем, с обзиром да је PCI уређај или сама PCI магистрала за неколико редова величине спорија од остатка компоненти.
Модерни x86 процесор може да користи више од 4 GB меморије, уз помоћ PAE (проширења физичке адресе), 36-битног адресног мода, или природног 64-битног мода код x86-64 процесора. У том случају, уређај који користи DMA са 32-битном адресном магистралом није у могућности да адресира меморију изнад 4 GB. Нови механизам дуплог адресног циклуса (DAC), у случају да је имплементиран на обе PCI магистрале и на самом уређају,[4] омогућава 64-битно DMA адресирање. У супротном, оперативни систем би морао да реши проблем или коришћењем скупих дуплих бафера (DOS/Windows номенклатура) такође познатих као bounce buffer (FreeBSD/Linux), или може користити IOMMU да обезбеди превођење адресе уколико је доступан.
I/OAT
[уреди | уреди извор]Као пример DMA машине укључене у општенаменски процесор, новији Интел Xeon чипсетови садрже DMA технологију под називом I/O Acceleration Technology (I/OAT), намењену да побољша мрежне перформансе на високопропусним мрежним интерфејсима, првенствено гигабитном етернету и бржим.[5] Међутим, разни бенчмаркови овог приступа од стране Интеловог [[Линукс језгро|Линукс] програмера Andrew-а Grover-а показују не вишњ од 10% побољшања перформанси по питању опетерећења процесора при оптерећењу, и никаква побољшања при слању података.[6]
AHB
[уреди | уреди извор]Код система на чипу и интегрисаних система, типична инфраструктура системске магистрале је комплексна магистрала на чипу као што је AMBA магистрала високих перформанси. AMBA дефинише две врсте AHB компоненти: master и slave. Slave интерфејс је сличан програмираном улазу/излазу кроз који софтвер (који ради на интегрисаном процесору, нпр. ARM) можте да пише/чита улазно/излазне регистре или (ређе) локалне меморијске блокове унутар уређаја. Маster интерфејс може бити коришћен од стране уређаја да изрвшава DMA трансакције ка и од системске меморије без великог оптерећивања процесора.
Због тога, уређаји високе пропусне моћи као што су мрежни контролери који преносе велике количине података ка и од системске меморије ће имати два интерфејсна адаптера ка AHB-у: master и slave интерфејс. То је зато што магистрале на чипу као што је AHB не подржавају магистралу са три стања или промену смера било које линије магистрале. Као и код PCI, није потребан централни DMA контролер с обзиром да DMA контролише магистралу, али је потребан арбитар у случају да постоји више мастера на систему.
Интерно, вишеканална DMA машина је углавном присутна у уређају ради извођења вишеструких конкурентних векторских улаза/излаза програмираних од стране софтвера.
Cell (процесор)
[уреди | уреди извор]Као пример примене DMA код мултипроцесорских система на чипу, IBM/Sony/Toshiba Cell процесор поседује DMA машину за сваки од 9 процесних елемената укључујући један Главни процесорски елемент (PPE) и осам синергијских процесорских елемената (SPEs). С обзиром да инструкције учитавања/складиштења SPE јединица могу да читају/пишу само своју локалну меморију, SPE у потпуности зависи од DMA по питању трансфера података ка и од главне меморије и локалних меморија других SPE елемената. Иако DMA служи као главно средство транспорта података међу језгрима унутар овог процесора (за разлику од кеш-кохерентне CMP архитектуре код Интеловог отказаног Larrabee графичког процесора опште намене.
DMA код Cell процесора је потпуно кеш кохерентна (додуше локална складишта SPE елемената којима оперише DMA нису глобално кохерентни кеш у стандардном смислу). И код читања ("get") и код писања ("put"), DMA команда може пренети или један блок величине до 16KB, или листу од 2 до 2048 таквих блокова. DMA команда се издаје одређивањем пара локалне адресе и удаљене адресе: на пример када SPE програм изда DMA команду писања, он одређује адресу своје локалне меморије као извор и адресу виртуелне меморије (која показује или на главну меморију или на локалну меморију другог SPE елемента) као одредишта, заједно са величином блока. По недавним експериментимаing, ефективни врхунац перформанси DMA контроле код Cell процесора (3 GHz, при уједначеном саобраћају) износи 200GB по секунди.[7]
Референце
[уреди | уреди извор]- ^ Osborne, Adam (1980). An Introduction to Microcomputers: Volume 1: Basic Concepts (2nd изд.). Osborne McGraw Hill. стр. 5–64through 5–93. ISBN 978-0-931988-34-9.
- ^ Horowitz & Winfield 1989, стр. 702
- ^ Intel publication 03040, Aug 1989
- ^ „Physical Address Extension — PAE Memory and Windows”. Microsoft Windows Hardware Development Central. 2005. Архивирано из оригинала 06. 04. 2008. г. Приступљено 7. 4. 2008.
- ^ Corbet, Jonathan (6. 12. 2005). „Memory copies in hardware”. LWN.net (December 8, 2005). Приступљено 12. 11. 2006.
- ^ Grover, Andrew (1. 6. 2006). „I/OAT on LinuxNet wiki”. Overview of I/OAT on Linux, with links to several benchmarks. Архивирано из оригинала 09. 12. 2006. г. Приступљено 12. 12. 2006.
- ^ Kistler, Michael (2006). „Cell Multiprocessor Communication Network”. Extensive benchmarks of DMA performance in Cell Broadband Engine.
Литература
[уреди | уреди извор]- Horowitz, Paul; Hill, Winfield (1989). The Art of Electronics (Second изд.). Cambridge University Press. стр. 702. ISBN 978-0-521-37095-0.
- Osborne, Adam (1980). An Introduction to Microcomputers: Volume 1: Basic Concepts (2nd изд.). Osborne McGraw Hill. стр. 5–64through 5–93. ISBN 978-0-931988-34-9.
Спољашње везе
[уреди | уреди извор]- DMA Fundamentals on Various PC Platforms, from A. F. Harvey and Data Acquisition Division Staff NATIONAL INSTRUMENTS
- mmap() and DMA, from Linux Device Drivers, 2nd Edition, Alessandro Rubini & Jonathan Corbet
- Memory Mapping and DMA, from Linux Device Drivers, 3rd Edition, Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman
- DMA and Interrupt Handling
- DMA Modes & Bus Mastering