реклама на сайте
подробности

 
 
> Windows: отключить кэширование чтения для USB MSD, или (еще лучше) заставить периодически обновлять кэш (делать рефреш)
Ruslan1
сообщение Sep 3 2012, 20:11
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Здравствуйте!
Собрал устройство, которое со стороны винды видно как USB Mass Storage Device.

Некоторые изменяемые данные видны со стороны Винды тоже как файлы (ну, например, текущее время контроллера).
Проблема в том, что однажды прочитав такой диск, винда больше вообще к нему не обращается (то есть не пытается читать секторы). Как результат- хотя файл обновляется (и его содержимое, и информация в соответствующем ему RootDir секторе), винда продолжает показывть старый файл из кэша диска.

Как-то с этим можно бороться? Еужно либо полностью отключить кэширование (чтобы все шло напрямую к диску), либо сделать принудительное обновление содержимого кэша, скажем, 1 раз в секунду.

Насколько я понял после недолгого гугления, проблема эта существует:
http://www.experts-exchange.com/Storage/Misc/Q_27825263.html
http://www.embeddedrelated.com/groups/lpc2000/show/49476.php

на уровне написания своего софта проблема (вроде бы!) решаема:
http://msdn.microsoft.com/en-us/library/aa...8(v=vs.85).aspx

Но вот так ли это? И нет ли каких-то вариантов инициировать обновление кэше со стороны USB MSD устройства, например, выдавая кучу ошибок в ответ на запросы Винды?
Или кто-то уже писал софт, позволяющий достучаться до секторов на USB MSD, минуя кэш? то есть специальная программка, делающая все нужное для обновления кэша?

Крайний вариант- это обрубить USB, тогда устройство переподключится, но в винде это сопровождается кучей визуальных эффектов sad.gif

Пока что штатно нашел в винде включение-отключение кэширования записи, но про кэширования чтения видимо не подумали. sad.gif

Помогите, пожалуйста. Кто чем может.....
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
gerber
сообщение Sep 4 2012, 10:07
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088



Кэширование здесь ни при чём. Чтение файлов не кэшируется - в некоторых ОС кэшируется (откладывается) запись файлов, с целью ускорения записи путём объединения операций записи в одну.
Ни винда, ни любая другая ОС не может непрерывно сканировать все файлы на диске на предмет - а не изменился ли какой файл сам собою, произвольно. Все модификации файловой системы и самих файлов должны идти через ОС - это один из постулатов ОС. Либо юзер должен нажать кнопку "Обновить".

Однако, существуют механизмы, позволяющие уведомить ОС об изменениях в файловой системе, чтобы она перечитала файлы или каталоги. Это решается двумя способами:
1) диск должен быть виден как сетевой диск, изменения на сетевых дисках нотифицируются всем подключенным клиентам,
2) применительно к USB - нужно использовать не Mass Storage, а MTP - Media Transfer Protocol. На таком протоколе работают многие современные фотокамеры и медиа-плееры (ведь в фотокамере новая фотка может появиться независимо от ОС). Там в протокол заложена возможность уведомления системы об изменениях в файлах.

С Mass Storage без доп. софта ничего путного в этом ракурсе выловить не получится.


--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 08:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01339 секунд с 7
ELECTRONIX ©2004-2016