Характеристики на прилагането на режима DMA на дънни платки с PCI шина
Режимът за директен достъп до паметта (Direct Memory Access, съкратено DMA) предоставя възможност за обмен на данни между периферни устройства и RAM на компютъра без пряко участие на процесора. На първо място, това е необходимо, ако използваните периферни устройства имат малки вградени буфери на паметта (такива устройства се нуждаят от незабавно обслужване и не могат да чакат, докато процесорът се освободи от изпълнение на задачи с по-висок приоритет). В допълнение, в някои случаи режимът DMA осигурява по-висока скорост на данни от режима RIO.
За съжаление съвременните персонални компютри прилагат DMA по доста неразбираем начин. Проблемът с DMA има исторически корени: при разработването на архитектурата на компютри с евтини 8-битови процесори те се опитаха напълно да изключат режима на директен достъп от системата, за да намалят цената му. С прехода към микропроцесори с 16-битова и след това 32-битова архитектура се появи необходимостта от режим DMA и инженерите трябваше да използват различни трикове, за да не загубят съвместимост със стар софтуер.
Работата с твърд диск на персонални компютри, съвместими с IBM AT, първоначално се извършваше чрез процесора, тоест само в режим RIO, тъй като DMA каналът на шината ISA обикновено не работи с достатъчно висока скорост и 8-битов канал беше запазен за работа с диска. След като дисковият контролер беше интегриран в дънната платка и свързан към PCI шината, стана възможно използването на DMA канала на тази шина при работа с дискове. PCI DMA осигурява известно увеличение на скоростта в сравнение с RYU, не само поради самия директен достъп до паметта, но и поради по-голямотобитова дълбочина на предаваната дума (в режим Ryu - 16 бита, в режим PCI DMA - 32 бита).
PCI IDE контролерът може да работи в един от двата режима - Compatibility Mode или Pure PCI Mode. В режим на съвместимост разположението на регистрите и разпределението на линиите за прекъсване напълно съвпада с това, прието за шината ISA (виж таблици 6.27 и 6.28).
Можете да работите с PCI IDE контролера, като използвате функциите на PCI BIOS, описани в Глава 3 "Особености при работа с устройства, свързани към PC1 Bus". За да получите достъп до конфигурационното пространство на PCI IDE контролера, трябва да определите неговите координати на PCI шината и можете да направите това или чрез кода на продукта и кода на производителя, или чрез кода на класа на контролера. Първият метод е подходящ само ако софтуерът е ориентиран към чипсет от определен производител. Вторият метод е по-универсален, но изисква повторение на няколко възможни опции за стойността на ниския байт (интерфейсен байт) на кода на класа (и двата високи байта на кода съдържат Olh стойности). Битовете на интерфейсния байт на кода на класа (вижте Фигура 3.4 в Глава 3 „Особености при работа с устройства, свързани към PC1 Bus“) на PCI IDE контролера имат следното предназначение:
• бит 0 — режим на работа на основния канал (0 — режим на съвместимост, 1 — чист PCI режим). Съдържанието на този бит е значимо само ако стойността на бит 1 е нула;
• бит 1 — знак за поддръжка от първичния канал на двата режима на работа (0 — поддържа се само режимът, определен от бит 0, 1 — поддържат се и двата режима);
• бит 2 — режим на работа на вторичен канал (0 — режим на съвместимост, 1 — чист PCI режим). Съдържанието на този бит е значимо само ако стойността на бит 3 е нула;
• малко3 - знак за поддръжка от вторичния канал на двата режима на работа (0 - поддържа се само режимът, определен от бит 2, 1 - поддържат се и двата режима);
• битове 4-6 не се използват (трябва да бъдат зададени на 0);
• бит 7 — индикация за поддръжка на режима Bus Master (0 — режимът не се поддържа, 1 — режимът се поддържа).
За да може да работи с дискове в режим DMA, PCI контролерът трябва да може да улавя шината, тоест да поддържа режима Bus Master IDE. Тъй като контролерите на съвременните дънни платки поддържат едни и същи режими и на двата канала, стойността на интерфейсния байт може да бъде равна на 80h, 85h или 8Ah. Съответно, търсенето на контролера трябва да се извърши с помощта на три възможни кода за клас: 010180h, 010185h и 01018Ah.
Програматорът обикновено не работи с регистрите на PCI конфигурационното пространство - програмирането на PCI IDE контролера и моста PCI-to-IS A се възлага на операционната система. На съвременните дънни платки времето на циклите RIO и DMA за дисковете, инсталирани в системата, се конфигурира, когато компютърът е включен чрез процедурата за зареждане на BIOS.
Таблица 6.46. PCI IDE I/O Register Block