Особливості реалізації режиму DMA на системних платах із шиною PCI

Режим прямого доступу до пам'яті (Direct Memory Access, скорочено DMA) забезпечує можливість обміну даними між периферійними пристроями та оперативною пам'яттю комп'ютера без участі процесора. В першу чергу він необхідний у тому випадку, якщо периферійні пристрої, що використовуються, мають невеликі вбудовані буфери пам'яті (такі пристрої потребують негайного обслуговування і не можуть чекати, поки процесор звільниться від виконання завдань з вищим пріоритетом). Крім того, в деяких випадках режим DMA забезпечує більшу швидкість передачі даних, ніж режим РЮ.

На жаль, у сучасних персональних комп'ютерів прямий доступ до пам'яті реалізовано досить дивно. Проблема DMA має історичне коріння: при розробці архітектури комп'ютерів з дешевими 8-розрядними процесорами режим прямого доступу намагалися взагалі виключити із системи з метою зниження її собівартості. При переході на мікропроцесори з 16-розрядною, а потім 32-розрядною архітектурою виникла потреба в режимі DMA, і інженерам довелося використовувати різноманітні хитрощі, щоб не втратити сумісність зі старим програмним забезпеченням.

p align="justify"> Робота з жорстким диском на персональних комп'ютерах, сумісних з IBM AT, спочатку здійснювалася через процесор, тобто тільки в режимі РЮ, так як канал DMA шини ISA взагалі функціонує з недостатньо високою швидкістю, а для роботи з диском був зарезервований 8-розрядний канал. Після того, як контролер дисків був інтегрований у системну плату та приєднаний до шини PCI, з'явилася можливість використання каналу DMA цієї шини під час роботи з дисками. PCI DMA забезпечує деякий виграш за швидкістю порівняно з РЮ не тільки за рахунок власне прямого доступу до пам'яті, а й за рахунок більшоїрозрядності переданого слова (у режимі РЮ - 16 розрядів, у режимі PCI DMA - 32 розряди).

Контролер PCI IDE може працювати в одному з двох режимів – у режимі сумісності або в режимі чистої PCI. У режимі сумісності розміщення регістрів та розподіл ліній переривання повністю збігається з тим, що прийнято для шини ISA (див. табл. 6.27 та 6.28).

Працювати з контролером PCI IDE можна за допомогою функцій PCI BIOS, описаних у розділі 3 "Особливості роботи з пристроями, підключеними до шини РС1". Щоб отримати доступ до конфігураційного простору контролера PCI IDE, потрібно визначити його координати на шині PCI, а зробити це можна або за кодом виробу та кодом виробника, або за кодом класу контролера. Перший спосіб придатний тільки в тому випадку, якщо програмне забезпечення орієнтоване на будь-який чіпсет певного виробника. Другий спосіб більш універсальний, але вимагає перебору кількох можливих варіантів значення молодшого байта (байта інтерфейсу) коду класу (обидва старші байти коду містять значення Olh). Розряди байта інтерфейсу коду класу (див. рис. 3.4 у розділі 3 «Особливості роботи з пристроями, підключеними до шини РС1») контролера 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 А покладається на операційну систему. На сучасних системних платах налаштування часових параметрів циклів РЮ та DMA для встановлених у системі дисків здійснює при включенні комп'ютера процедура початкового завантаження BIOS.

Таблиця 6.46. Блок регістрів введення-виводу PCI IDE