Начну издалека.
Винчестер подключается к материнской плате кабелем. Этот кабель, по сути, соединяет электронику винчестера с контроллером дисков на материнской плате. Тип кабеля (IDE, SATA, ...) не имеет значения. Да, у каждого типа кабеля есть свои физические ограничения по передаче данных, но это указывает лишь на то, под какой поток данных затачивалось "железо" на его концах.
Дисковый контроллер умеет работать с дисками в нескольких разных режимах. Электроника винчестера, в свою очередь, тоже поддерживает разные режимы работы с дисковым контроллером. Наборы режимов диска/контроллера могут несовпадать и, чаще всего, именно так и бывает.
По умолчанию, операционной системой выбирается наиболее скоростной режим работы из тех, что одновременно поддерживает и контроллер, и диск.
Для многих понятнее игровые аналогии, поэтому воспользуюсь одной из них.
Все знают, что 3D бывает программное (Software Rendering) и аппаратное (Direct3D, OpenGL).
В программном 3D каждый кадр высчитывается процессором, а видеокарта отвечает только за вывод полученной картинки на экран. Трёхмерные просчёты используют дикое количество математики, что сильно нагружает процессор, выдавая при этом достаточно посредственный результат. Почему так происходит? Дело в том, что Центральный Процессор (ЦП) — он универсальный, то есть, приспособлен под вычисления абсолютно разного рода. Трёхмерные вычисления представляют собой лишь узкий класс задач, которые способен выполнять ЦП. И получается, что универсальный ЦП работает с графикой неоптимально.
В случае аппаратного 3D процессор накидывает в видеокарту примитивы (текстуры, модели и т.д.) и даёт команды на их обработку, а построение сцены и красивые эффекты делает уже сама карта — с помощью своего, графического спецпроцессора (GPU, ГП), заточенного как раз под такие задачи. Вычисления на нём идут заметно быстрее, при этом центральный процессор не нагружается.
Так вот, PIO — это типа программного 3D: вся работа с диском осуществляется через ЦП. Очень медленно и ресурсоёмко.
А DMA — аппаратная обработка данных, использующая всевозможные "ускорители". Лишь бы они поддерживались контроллером и самим диском.
Винда работает с дисками в режиме DMA. Ну, как правило.
При определённых условиях (например, если произошло несколько специфических ошибок чтения-записи) винда переключает режим работы с диском в PIO. Сразу, намертво и без возможности реабилитации.
После этого заставить систему работать с диском в режиме DMA стандартными способами нельзя.
Про нестандартные — чуть ниже.
В современных реалиях, когда жёсткие диски являются самыми медленными устройствами компьютера, "узким местом", тормозящим работу программ — даже двукратное падение их скорости может стать катастрофическим.
Открываем «Диспетчер устройств» в «Консоли управления» компьютером.
ПКМ на «Мой компьютер» (на рабочем столе или в панели «Пуск», не имеет значения) → «Управление».
Раскрываем в дереве ветку контроллера диска («IDE ATA/ATAPI контроллеры») и находим канал, к которому подключен наш винт.
Давим ПКМ → «Свойства» (или просто делаем двойной клик левой кнопкой мыши)
Если «Режим передачи» установлен в «DMA, если доступно», а по факту винчестер работает в режиме PIO (см. картинку ниже), то всё плохо, и это наш случай.
Для исправления ошибки достаточно удалить инвалидное устройство и установить его заново. Сделать это можно из того же «Диспетчера устройств».
Или лезем в реестр.
В реестре («Пуск» → «Выполнить» → regedit
) надо зайти в ветку по адресу:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}
Подветки:
0000
— настройки самого контроллера.
0001
— настройки первичного канала (Primary IDE Chanell).
0002
— настройки вторичного канала (Secondary IDE Chanell).
Ключи:
MasterDeviceTimingModeAllowed
— максимальный по скорости режим, в котором разрешено работать основному (Master) устройству в канале. По сути, значение ключа представляет собой бинарную маску. Ограничивает выбор «Режимов передачи» из диалогового окна.
MasterDeviceTimingMode
— текущий режим работы основного устройства в канале. Соответствует параметру «Текущий режим передачи» диалогового окна.
Те же самые ключи, начинающиеся со Slave
, а не Master
действуют для подчинённого устройства в канале:
SlaveDeviceTimingModeAllowed
SlaveDeviceTimingMode
Если в диалоговом окне «Тип устройства» был выбран вручную, соответствующие настройки хранятся в ключах с префиксом User:
UserMasterDeviceTimingModeAllowed
UserMasterDeviceTimingMode
UserSlaveDeviceTimingModeAllowed
UserSlaveDeviceTimingMode
Значение любого ключа [...]DeviceTimingModeAllowed
должно быть равно 0xffffffff
. Это означает, что выбранное устройство может работать в любом режиме передачи данных, без ограничений.
Если значение ключа равно 0x00000001f
(HEX 1f), то устройство может работать только в режиме PIO.
Меняем значение нужного [...]DeviceTimingModeAllowed
на "ffffffff
" и перезагружаемся.
Коды режимов работы:
0х0000001f
— PIO
0x00000410
— Multi-Word DMA Mode 2 и PIO 4.
0x00002010
— UDMA Mode 2 (ATA33).
0x00008010
— UDMA Mode 4 (ATA66). Для включения можно использовать маску "0x0000ffff
"
0x00010010
— UDMA Mode 5 (ATA100). Для включения можно использовать маску "0x000fffff
"
Версии ATA/ATAPI (...4,5,6...) - это версии ATA/ATAPI спецификации утверждаемые комитетом X3T13. А PIO (Programmed Input-Output) и DMA/UDMA - это режимы передачи данных. Одно с другим никак не связано. Режимы PIO подразумевают обязательное задействование CPU при передаче данных - при чтении данных с носителя, CPU их читает из порта контроллера (команда IN процессора), при записи - CPU пишет в порт (команда OUT). При DMA (UDMA) режимах CPU только инициализирует пересылку (а предварительно еще и контроллер DMA) - всю остальную работу выполняют контроллер DMA (Direct Memory Access) и контроллер IDE (в режиме Bus Master). Понятно что последний вариант выгоднее - меньше загрузка процессора - поэтому PIO режимы после 1995 года никто больше не развивал, и в утвержденных ATA/ATAPI спецификациях (мне все равно, кто чего предлагал на заседаниях X3T13) PIO-5 никогда не было. А UltraDMA 44 - это UltraDMA 3 - этот режим существует, просто им почти никто не пользуется (так как его поддержка есть везде, где есть UDMA 4 - 66). Кстати ATA/ATAPI-6 еще не утвержден, этот документ существует в предварительной версии, так называемый working draft, и возможно еще будет меняться (но вряд-ли туда добавят PIO-5). Последний из утвержденных - версии 5. И UDMA66 появилось при ATA-4, а UDMA100 - при ATA-5... В спецификациях есть рекомендации по применению режимов передачи данных, а вовсе не обязательные требования их поддержки... Есть винты соответствующие ATA-5, но поддерживающие только UDMA66 (например Quantum Fireball+ LM). А еще есть CD-ROM'ы с поддержкой UDMA33 и с соответствием ATAPI-4 и 5... Начиная с версии 4, спецификации ATA и ATAPI объединили в один документ.
http://forum.ixbt.com/topic.cgi?id=11:13794 (http://forum.ixbt.com/topic.cgi?id=11:13794)
Это происходит если XP обнаруживает что устройство не стабильно работает в выбранном для него режиме. Определяется это по количеству ошибок чтения, получаемых с привода. Обычно это означает что привод находится в плохом состоянии, и про правде ему надо бы на покой. Но выбрасывать вроде бы работающий привод жалко, поэтому такие устройства можно встретить в машинах наших читателей. Хотя, благодаря механизмам контроля ошибок, многие такие приводы могут работать долго, счастливо и беспроблемно, не смотря на мнение XP о них. Единственное, что портит кровь их владельцам, это постоянные тормоза системы, из за PIO режима. У меня нет полной уверенности, как работает и чем управляется система контроля ошибок в XP, поэтому я не могу гарантировать что этот совет сработает во всех случаях. Но попробовать можно.
Для отключения режима отслеживания ошибок можно попробовать выставить в 0 ключ ErrorControl расположенный по адресу HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Cdfs\
http://old.windowsfaq.ru/ubb/Forum4/HTML/005268.html (http://old.windowsfaq.ru/ubb/Forum4/HTML/005268.html)
Для винчестеров данная рекомендация не работает, не помогает от вылетов в PIO.