» Файлы » Методы достижения производительности
Методы достижения производительности
Основные возможности драйвера
Поддержка регистра статуса прерываний шириной в 8, 16, 32, 64 бита;
Автоматическое определение формата регистра статуса прерываний, если таковой реализован в оборудовании;
Поддержка как Port I/O, так и Memory Mapped I/O оборудования;
Полная поддержка PNP в соответствии с требованиями Windows 2000/XP/2003;
Поддержка всех распространённых Super IO контроллеров;
Обслуживание COM-портов в соответствии с требованиями Windows DDK к драйверам последовательных асинхронных портов;
Поиск ISA-карт, на которых расположены последовательные порты, и автоматическое определение IRQ (практически полный PNP);
Поддержка мультипортовых плат как с регистром статуса прерываний, так и без него;
Автоматическое определение реальной глубины FIFO-буфферов, как на прием, так и на передачу;
Автоматическое определение наличия аппаратного flow-control;
Определение реальной скорости UART-портов и соответствующее управление;
Управление питанием по спецификации «OnNow»;
Возможность обслуживания UART-портов размещенных на другом комбинированном устройстве через Serial_XP_Lik_Interface;
Полный loopback-тест всех портов.
Методология подхода
При разработке программной модели драйвера последовательных портов SerialXp.sys исповедовались следующие принципы, которые, по мнению автора, должны обеспечить эффективность кода и оптимизацию загрузки центрального процессора при обработке операций в пространстве портов ввода-вывода:
Несколько обработчиков прерываний, каждый из которых оптимизирован под конкретный режим работы UART в зависимости от требований приложения;
Никогда не используется «Global Cancel Spin Lock»;
На платформах Windows XP/W2K3 используются «Queued Spin Locks»;
Используется более быстрые чем системные «Cancelable IRP Queues»;
Более оптимальный, по сравнению с serial.sys, исходных код;
Алгоритмическая совместимость с условиями «no aliasing» для возможности более существенной оптимизации средствами компилятора;
Используется оптимизирующий компилятор MS C++ 13.0, в режиме единой глобальной оптимизации по всему исполняемому модулю;
Используются прямые Interlocked-инструкции и набор команд процессоров Intel.
Объем проделанной работы
Исходный код драйвера (не включая Windows DDK) состоит из 46 файлов С++, 49 h-файлов; всего более 47 тысяч строк, более полутора мегабайт исходного кода. Драйвер SerialXP (также как ExactPerformance, StreamLabs Alpha и CronyxDvbBundle) основывается на библиотеке шаблонов C++ для разработки драйверов Windows 2000/XP/W2K3 (C++ templates and classes library for Windows 2000/XP/W2K3 device drivers).
05.02.2025

