Цитата:
Дело в том, что без DMA придется читать/записывать данные побайтово. Кроме того, флоппик сам по себе очень медленное устройство, так что какой бы контроллер DMA не использовался, он не будет уменьшать скорость передачи данных при взаимодействии с флоппиком.
//Phantom-84 29.10.2007, 14:05
DMA действительно уменьшать скорость обмена не будет -- как и увеличивать, поскольку она ограничена приводом, а отнюдь не памятью, шиной, процессором и т.п. Но в чём загвоздка-то? Если речь идёт о загрузке системы, то там абсолютно без разницы, программно производится чтение или с использованием DMA -- система грузиться быстрее не станет. Если же подразумевается работа с флопиком в уже загруженной системе, то DMA на первый взгляд имеет определённые преимущества: пока идёт обмен данными, процессор свободен для другой работы. Однако не следует забывать, что после чтения (или перед записью) придётся, скорее всего, осуществлять перемещение содержимого буфера из его реального местоположения в памяти куда-то в нижнюю память, куда может дотянуться допотопный контроллер DMA 8237 -- а это затраты времени процессора, поскольку пересылать информацию придётся ему (и что обидно, при этом будет впустую гробиться часть кэша процессора). В то же время ничто не мешает реализовать обмен с флопиком по прерываниям, что будет, конечно, подтормаживать работу других задач (процессору придётся отвлекаться на обслуживание прерывания для передачи каждого байта), однако при этом можно избежать лишней пересылки данных из памяти в память -- достаточно обработчику прерывания указать, по какому адресу буфер находится (естественно, при этом нельзя изменять отображение этой страницы памяти, т.е. она должна быть закреплена, но никаких принципиальных сложностей при этом не возникает -- собственно, то же самое приходится проделывать и при использовании DMA). Получаются только накладные расходы на переключение контекста процессора, но если не раздувать обработчик прерывания (в частности, выполнять его в контексте текущей задачи), они будут не слишком высоки. Какой подход окажется выгоднее -- сказать не берусь.