В одном из драйверов IDE диска для ПК11/16 сделали так: драйвер после старта затирает свой хвост где был код используемый только при старте драйвера (получение свойств диска, регистрация), - там создаются 4-ре функции, каждая из которых по 256 инструкций ( в каждой функции своя). Одна функция копирование в сторону диска, вторая из диска, третья заполнение константой и последняя - фиктивное вычитывание ненужных байт с сектора. Вот такой полный unroll на 256, одна функция отрабатывает полностью сектор в 512 байт, но можно прыгнуть в середину такой функции, если нужно отработать только часть слов. Очень компактный драйвер, за счёт косвенных вызовов функций.
За счет DMA можно ожидать минимум двух кратного ускорения обменом с диском. В идеале DMA должен работать асинхронно с процессором, но для этого ОС должна быть рассчитана на то, что выход из функции чтения диска не означает, что данные уже в памяти.




Ответить с цитированием