![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| avnemchenko |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 10.7.2009 Репутация: нет Всего: нет |
Добрый день!
Интересует такой вопрос. Создается аппаратно-программная система для опроса датчиков и сохранения результатов на диск. Суммарный файл - большой (258 Мб). Доступ к частям файла - произвольный (по мере изменения положения датчиков данные закидываются в разные места, да плюс визуализация результатов). Задача - сохранить данные НАДЕЖНО. Мне кажется, что лучше всего использовать технологию проекции файла в память. То бишь, 1) создать сразу весь файл, 2) позаботиться о его дефрагментации, 3) создать проекцию файла в память. Если файл только создан, то его надо "обнулить". Если же он уже был создан, то просто беру его начало в памяти и использую как адрес гигантского массива. Этим убивается заяц произвольного доступа. А вот теперь вопрос о надежности. ИБП - это хорошо, но в теории, когда он есть и юзер не смолит при этом в сотне метров от компа. Посему мне кажется, что имеет смысл использовать NT версию с NTFS. Время от времени надо данные скидывать на диск (Flush...() ). А вот если произошла такая ситуация: 1) пишем с адреса 100000h по 200000h - запустили функцию (не помню как ее там в WinAPI...), которая асинхронно скидывает буффер на диск. 2) БУКВАЛЬНО СРАЗУ (ну пусть там будет десяток мсек) пришли данные и я их закидываю по адресу 100001h. 3) ну и тоже очень быстро тухнет свет Так вот, данные из п. 2) - они будут на диске или нет? По идее, нет?.. Это сообщение отредактировал(а) avnemchenko - 27.7.2009, 13:15 |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 2 Всего: 26 |
в момент когда железо обесточится данные потеряются. в это время данные могуз быть в ОЗУ, в кеше винча, в процессе записи из кеша винча на диск.
ставь бесперебойник, он не поможет от длительных выключений, зато даст почти 100% гарантию что те данные что есть - не пропадут. |
|||
|
||||
| avnemchenko |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 10.7.2009 Репутация: нет Всего: нет |
Ну... Проблема все равно стоит - юзера рядом может не быть. Кстати говоря, каким образом может прикладная программа опросить состояние бесперебойника? Или каким-то другим образом узнать, что пора ПИСАТЬ ВСЕ НА ДИСК |
|||
|
||||
| kolobok0 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 24.12.2008 Репутация: нет Всего: 2 |
при стандартном подсоединении бесперебойника к ОСи (шнурком данных я имею ввиду и установки софта от ИБП) - в ось прийдёт сигнальчик типа шутдаун. все программки его получат. Так, что отгрузка программы будет корректной. Прямой доступ к памяти не получится с очень большим объёмом файла. Там есть размер сегмента который отображается в память. делать его сверх большим - лишино особого смысла (если он не покрывает целяком сам файл). Так, что скидывать на диск потребуется и при перемапировании другого кусочка в память. Это раз. А два - можно предусмотреть сегмент восстановления. Т.е. при приходе данных (одним куском, длина которого = константа) пишим их сразу в этот сегмент, далее возвращаем управление вызывающей стороне. параллельный поток читает из сегмента, парсит, разбрасывает по адресам, сбрасывает сегмент восстановления. Понятное дело, что это простая модель. Надо организовать очередь таких сегментов и т.п.. Но поверьте мне - задача решаема удачи Вам (круглый) |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |