Cameroon
14.06.2010, 00:36
Устройства, работающие с переферийной памятью, когда-то давным давно обращались к процессору напрямую, прямо по основной шине (Programmed Input/Output).
Так как прямой обмен данными проходит "через" процессор, он вынужден регулировать каждый цикл (чтения порта -> считывание одного байта в свой регистр -> передача напрямую в память) передачи информации до тех пор, пока она все не будет передана.
С тех пор прогресс шагнул далеко вперед (тактовые частоты процессров гораздо выше, чем интерфейсные), и скорость работы переферийных устройств памяти очень сильно отстает от остальных, поэтому прямые обращения таким методом вызовут дикие необоснованные тормоза системы и очень высокую загрузку процессора.
Чтобы избежать этого, был введен отдельный DMA-контроллер (Direct Memory Access), асинхронно регулирующий обращение медленных устройств к быстрой шине памяти. Процессор в этом случае лишь программирует сам контроллер, не дожидаясь прерываний обменивается данными с переферией, поэтому все остальные устройства могут обращаться к нему без задержек.
__________________
Однако, иногда происходит сброс режима работы контроллера с DMA в PIO. Происходит это автоматически по достижении порога потери пакетов данных при возникающих ошибках контроллера и интерфейса. Контроллер сам "отключается", считая, что он работает неэффективно, переводя работу в устаревший медленный режим, который поддерживается большинством устройств. Когда как на самом деле это приводит только к ухудшению положения.
__________________
Как узнать, работает ли мой оптический привод или жесткий диск в режиме PIO?
Пуск -> Панель управления -> Свойства-системы -> Дополнительно -> Диспетчер устройств.
Находим Первичный/Вторичный канал IDE. Открываем Свойства - Дополнительные параметры. В графе Текущий режим передачи данный и находится искомая информация.
__________________
Перевод устройств из режима PIO в режим Ultra DMA
Вариант 1.
В графу Режим передачи выставляем DMA, если доступно.
Перезагружаемся.
http://www.thg.ru/forum/attachment.php?attachmentid=7860
__________________
Вариант 2.
Но обычно такой простой способ не позволяет переключить режимы с PIO в DMA.
Воспользуйтесь этим скриптом: скачать (http://www.thg.ru/forum/attachment.php?attachmentid=8870&d=1275891353) (распакуйте, запустите двойным кликом, согласитесь с применением).
Перезагружаемся.
9005
__________________
Вариант 3.
Однако, даже этот способ иногда не помогает. Тогда можно попробовать действовать грубо...
Так как система обычно "даунгрейдит" режим при возникновении более шести ошибок передачи данных , то можно "подтереть" эту статистику через реестр.
Открываем редактор реестра: Пуск -> Выполнить -> regedit -> Enter
Ищем в появившемся окне ветку: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}
Там видим подразделы типа 000х, где под "х" будет порядковый номер начиная с нуля шагом 1. В каждом из таких подразделов могут быть строковые параметры MasterIdDataChecksum и SlaveIdDataChecksum, в которых и хранятся служебные данные от ошибках суммы.
Из каждого подраздела удаляем эти параметры.
Закрываем редактор реестра.
Перезагружаемся.
9006
__________________
Вариант 4.
Как упрощенную версию Варианта 3 "для ленивых" можно рассматривать полное удаление устройств.
Пуск -> Панель управления -> Свойства-системы -> Дополнительно -> Диспетчер устройств.
Правый клик на Первичный/Вторичный каналы IDE -> Удалить.
Перезагружаемся. Система надет и установит оборудование заново.
__________________
Информация (http://winhlp.com/node/10) (на английском)
Так как прямой обмен данными проходит "через" процессор, он вынужден регулировать каждый цикл (чтения порта -> считывание одного байта в свой регистр -> передача напрямую в память) передачи информации до тех пор, пока она все не будет передана.
С тех пор прогресс шагнул далеко вперед (тактовые частоты процессров гораздо выше, чем интерфейсные), и скорость работы переферийных устройств памяти очень сильно отстает от остальных, поэтому прямые обращения таким методом вызовут дикие необоснованные тормоза системы и очень высокую загрузку процессора.
Чтобы избежать этого, был введен отдельный DMA-контроллер (Direct Memory Access), асинхронно регулирующий обращение медленных устройств к быстрой шине памяти. Процессор в этом случае лишь программирует сам контроллер, не дожидаясь прерываний обменивается данными с переферией, поэтому все остальные устройства могут обращаться к нему без задержек.
__________________
Однако, иногда происходит сброс режима работы контроллера с DMA в PIO. Происходит это автоматически по достижении порога потери пакетов данных при возникающих ошибках контроллера и интерфейса. Контроллер сам "отключается", считая, что он работает неэффективно, переводя работу в устаревший медленный режим, который поддерживается большинством устройств. Когда как на самом деле это приводит только к ухудшению положения.
__________________
Как узнать, работает ли мой оптический привод или жесткий диск в режиме PIO?
Пуск -> Панель управления -> Свойства-системы -> Дополнительно -> Диспетчер устройств.
Находим Первичный/Вторичный канал IDE. Открываем Свойства - Дополнительные параметры. В графе Текущий режим передачи данный и находится искомая информация.
__________________
Перевод устройств из режима PIO в режим Ultra DMA
Вариант 1.
В графу Режим передачи выставляем DMA, если доступно.
Перезагружаемся.
http://www.thg.ru/forum/attachment.php?attachmentid=7860
__________________
Вариант 2.
Но обычно такой простой способ не позволяет переключить режимы с PIO в DMA.
Воспользуйтесь этим скриптом: скачать (http://www.thg.ru/forum/attachment.php?attachmentid=8870&d=1275891353) (распакуйте, запустите двойным кликом, согласитесь с применением).
Перезагружаемся.
9005
__________________
Вариант 3.
Однако, даже этот способ иногда не помогает. Тогда можно попробовать действовать грубо...
Так как система обычно "даунгрейдит" режим при возникновении более шести ошибок передачи данных , то можно "подтереть" эту статистику через реестр.
Открываем редактор реестра: Пуск -> Выполнить -> regedit -> Enter
Ищем в появившемся окне ветку: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Contro l\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}
Там видим подразделы типа 000х, где под "х" будет порядковый номер начиная с нуля шагом 1. В каждом из таких подразделов могут быть строковые параметры MasterIdDataChecksum и SlaveIdDataChecksum, в которых и хранятся служебные данные от ошибках суммы.
Из каждого подраздела удаляем эти параметры.
Закрываем редактор реестра.
Перезагружаемся.
9006
__________________
Вариант 4.
Как упрощенную версию Варианта 3 "для ленивых" можно рассматривать полное удаление устройств.
Пуск -> Панель управления -> Свойства-системы -> Дополнительно -> Диспетчер устройств.
Правый клик на Первичный/Вторичный каналы IDE -> Удалить.
Перезагружаемся. Система надет и установит оборудование заново.
__________________
Информация (http://winhlp.com/node/10) (на английском)