Пристрої системної підтримки дослідницька робота № 7
Фахівцям з апаратного забезпечення і системним програмістам, що працюють
з платформою PC, добре знайомий "джентльменський набір" мікросхем системної
підтримки: контролер прямого доступу до пам'яті (DMA) Intel 8237 (К1810ВТ37),
контролер переривань Intel 8259A (К1810ВН59А), системний таймер Intel 8254
(К1810ВІ54). Незважаючи на те, що на сучасній материнській платі вже давно
не можна побачити перераховані компоненти у вигляді окремих мікросхем (вони
реалізовані в складі "південного моста" чіпсета) на рівні програмної моделі вони,
як і стародавня шина ISA, як і раніше існують.
Але час йде, і вимоги до материнських плат істотно зростають.
Тому, інженери пішли по шляху додавання нових пристроїв системної підтримки,
зі збереженням старих, для забезпечення сумісності. Розглянемо докладніше,
чому сучасних розробників вже не влаштовують ці "старі знайомі", і
які пристрої прийшли їм на зміну.
Прикладом пристрою, до сих пір використовує "старий" контролер DMA,
є контролер гнучких дисків, його не перевели на нову технологію, так як
швидкість передачі даних тут істотно обмежена можливостями самого
дисковода.
"Старий" контролер переривань. заснований на двох каскадно-включених
мікросхемах Intel 8259A, має 15 ліній запитів на переривання. для сучасної
платформи, це, звичайно ж, мало, але застосування технології IRQ Sharing,
що дозволяє декільком пристроям спільно використовувати одну лінію IRQ,
витіснило дану проблему на другий план. На першому ж плані, при прийнятті
рішення про перехід до нової реалізації підсистеми переривань, стояла підтримка
мультипроцесорних систем (включаючи
Multi-Core і
Hyper-Threading системи). У таких системах межпроцессорной взаємодія
базується на переривання IPI (Inter-Processor Interrupt). переданих
від одного процесора до іншого. Також ускладнився алгоритм арбітражу: тепер
потрібно не тільки вибирати найбільш пріоритетний запит IRQ з декількох
одночасно активних, але і вибирати найменш пріоритетний процесор, на який
буде спрямований даний запит, так як логічніше перервати виконання найменш
важливої процедури. Пріоритети процесорів змінюються динамічно відповідно до
пріоритетами виконуваних ними процедур. Для вирішення цих завдань була розроблена
архітектура APIC (Advanced Programmable Interrupt Controller). що прийшла
на зміну контролерам Intel 8259. Також отримала розвиток технологія MSI
(Message Signaled Interrupts). заснована на передачі запитів на переривання
невиділення сигнальними лініями, а циклами записи в пам'ять (повідомленнями).
Зрозуміло, використовується запис не в оперативну пам'ять, а в регістри APIC,
розташовані в просторі пам'яті.
Розрядність "старого" таймера (16 біт) і роздільна здатність (1 / 1.193 MHz
= 838 наносекунд) не влаштовують сучасні програми. також існує
потреба в більш гнучкому управлінні генерацією переривань. Тому був
розроблений таймер HPET (High Precision Event Timer). детально
розглянутий в даній статті.
Примітка. Термін HPET має застарілий синонім - MMT або
Multimedia Timer.
Про предметної області
HPET або High Precision Event Timer фізично розташований в
складі "південного моста" чіпсета. У модельному ряду чіпсетів Intel, таймер HPET
вперше з'явився в мікросхемі ICH5, яку використовують як "південного моста"
чіпсетів Intel 865, 875, 848. У модельному ряду чіпсетів AMD, таймер HPET вперше
з'явився в мікросхемі 8111 (Hyper-Transport I / O Hub), яка входить до складу
чіпсета AMD8000 (хронологічно перший чіпсет для платформи AMD64).
Memory-mapped I / O (MMIO)
Пояснимо сказане на прикладі. Припустимо, нам необхідно в регістрі управління
деякого пристрою встановити в "1" біт 7, залишивши інші біти без
змін. Якщо регістр розташований в просторі введення-виведення, необхідно три
інструкції:
Якщо регістр розташований в просторі пам'яті, достатньо однієї інструкції:
Але що станеться, якщо цю технологію застосувати при читанні регістра статусу
деякого пристрою? Припустимо, наша програма чекає в циклі установки біта
готовності в регістрі статусу:
WB (Write-Back) - дозволені всі дії для оптимізації
продуктивності: кешування, випереджаюче читання і відкладений запис. зазвичай
цей статус призначається регіонах, в яких знаходиться ОЗУ (RAM).
WT (Write-Through) - дозволені всі дії для оптимізації
продуктивності, крім відкладеної запису. При роботі з даним регіоном, в
випадку записи в пам'ять, процесор повинен відразу оновити дані в кеш і
оперативної пам'яті. Цим даний статус відрізняється від статусу Write-Back, при
якому дані оновлюються в кеш, а запис в ОЗУ відбувається "при зручному
випадку ": коли вільна шина, коли рядок витісняється з кеш новими даними або
при примусової очистити кеш.
UC (Uncacheable) - заборонено кешування і всі дії, спрямовані
на збільшення продуктивності. Для регіонів пам'яті, що мають такий статус,
процесор виконує тільки ті операції, які згідно чітко зазначених у в програмі.
Заборонена будь-яка "ініціатива" з боку процесора зі зміни розрядності
шинних циклів і порядку їх виконання. Цей статус призначається регіонах, в
яких знаходяться регістри управління і стану різних пристроїв (MMIO,
Memory-mapped I / O), він дозволяє зберегти протокол взаємодії з пристроєм
на рівні шинних циклів в тому вигляді, в якому його написав програміст.
Подробиці в [5], [10], [14], [15], [16].
Розглянутий в даній статті таймер HPET використовує MMIO, його регістри
розташовані в просторі пам'яті, це одне з його відмінностей від "старого" таймера
Intel 8254, що використовує порти 0040h-0043h. Як було показано вище, регіон
пам'яті, що містить MMIO повинен мати статус Uncacheable. присвоєння цього
статусу (тобто програмування MTRR) виконує BIOS при старті платформи.
Джерела інформації
Електронні документи, доступні на сайті
developer.intel.com.
1) IA-PC HPET (High Precision Event Timers) Specification. Revision 1.0a.
2) Intel 64 and IA-32 Architectures Software Developer's Manual. Volume 1: Basic
Architecture. Order Number 253665-023US.
3) Intel 64 and IA-32 Architectures Software Developer's Manual. Volume 2A:
Instruction Set Reference, A-M. Order Number 253666-023US.
4) Intel 64 and IA-32 Architectures Software Developer's Manual. Volume 2B:
Instruction Set Reference, N-Z. Order Number 253667-023US.
5) Intel 64 and IA-32 Architectures Software Developer's Manual. Volume 3A:
System Programming Guide, Part 1. Order Number 253668-023US.
6) Intel 64 and IA-32 Architectures Software Developer's Manual. Volume 3B:
System Programming Guide, Part 2. Order Number 253669-023US.
7) Intel 915G / 915P Express Chipset Datasheet. Document Number 301467-001.
8) Intel I / O Controller Hub 6 (ICH6) Family Datasheet. Document Number
301473-001.
Електронні документи, доступні на сайті
developer.amd.com.
9) AMD64 Architecture Programmer's Manual. Volume 1: Application Programming.
Publication No. 24592.
10) AMD64 Architecture Programmer's Manual. Volume 2: System Programming.
Publication No. 24593.
11) AMD64 Architecture Programmer's Manual. Volume 3: General-Purpose and System
Instructions. Publication No. 24594.
12) AMD64 Architecture Programmer's Manual. Volume 4: 128-Bit Media
Instructions. Publication No. 26568.
13) AMD64 Architecture Programmer's Manual. Volume 5: 64-Bit Media and x87
Floating-Point Instructions. Publication No. 26569.
14) BIOS and Kernel Developer's Guide for AMD Athlon 64 and AMD Opteron
Processors. Publication No. 26094.
15) BIOS and Kernel Developer's Guide for AMD NPT Family 0Fh Processors.
Publication No. 32559.
16) BIOS and Kernel Developer's Guide (BKDG) For AMD Family 10h Processors.
Publication No. 31116.
Електронні документи, доступні на сайті
pcisig.com.
17) PCI BIOS Specification. Revision 2.1.
Електронні документи, доступні на сайті
acpi.info.
18) Advanced Configuration and Power Interface Specification. Hewlett-Packard
Corporation, Intel Corporation, Microsoft Corporation, Phoenix Technologies
Ltd. Toshiba Corporation. Revision 3.0.
Покажи цю статтю друзям: