Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> НАДЕЖНОЕ сохранение потока данных, Еще раз о проекции файла в память 
:(
    Опции темы
avnemchenko
Дата 27.7.2009, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 10.7.2009

Репутация: нет
Всего: нет



Добрый день!

Интересует такой вопрос. Создается аппаратно-программная система для опроса датчиков и сохранения результатов на диск. Суммарный файл - большой (258 Мб). Доступ к частям файла - произвольный (по мере изменения положения датчиков данные закидываются в разные места, да плюс визуализация результатов). Задача - сохранить данные НАДЕЖНО.

Мне кажется, что лучше всего использовать технологию проекции файла в память. То бишь, 1) создать сразу весь файл, 2) позаботиться о его дефрагментации, 3) создать проекцию файла в память. Если файл только создан, то его надо "обнулить". Если же он уже был создан, то просто беру его начало в памяти и использую как адрес гигантского массива. Этим убивается заяц произвольного доступа.

А вот теперь вопрос о надежности. ИБП - это хорошо, но в теории, когда он есть и юзер не смолит при этом в сотне метров от компа. Посему мне кажется, что имеет смысл использовать NT версию с NTFS.

Время от времени надо данные скидывать на диск (Flush...() ). А вот если произошла такая ситуация:

1) пишем с адреса 100000h по 200000h - запустили функцию (не помню как ее там в WinAPI...), которая асинхронно скидывает буффер на диск.

2) БУКВАЛЬНО СРАЗУ (ну пусть там будет десяток мсек) пришли данные и я их закидываю по адресу 100001h.

3) ну и тоже очень быстро тухнет свет  smile . Будем считать, что буфер успел закинуться на диск.

Так вот, данные из п. 2) - они будут на диске или нет? По идее, нет?..



Это сообщение отредактировал(а) avnemchenko - 27.7.2009, 13:15
PM ICQ   Вверх
GoldFinch
Дата 27.7.2009, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 2
Всего: 26



в момент когда железо обесточится данные потеряются. в это время данные могуз быть в ОЗУ, в кеше винча, в процессе записи из кеша винча на диск.
ставь бесперебойник, он не поможет от длительных выключений, зато даст почти 100% гарантию что те данные что есть - не пропадут.
PM MAIL ICQ   Вверх
avnemchenko
Дата 27.7.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 10.7.2009

Репутация: нет
Всего: нет



Цитата(GoldFinch @ 27.7.2009,  14:31)
ставь бесперебойник...

Ну... Проблема все равно стоит - юзера рядом может не быть.

Кстати говоря, каким образом может прикладная программа опросить состояние бесперебойника? Или каким-то другим образом узнать, что пора ПИСАТЬ ВСЕ НА ДИСК  smile  ?
PM ICQ   Вверх
kolobok0
Дата 27.7.2009, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 24.12.2008

Репутация: нет
Всего: 2



Цитата(avnemchenko @ 27.7.2009,  14:42)
...другим образом узнать, что пора ПИСАТЬ ВСЕ НА ДИСК...

при стандартном подсоединении бесперебойника к ОСи (шнурком данных я имею ввиду и установки софта от ИБП) - в ось прийдёт сигнальчик типа шутдаун. все программки его получат.

Так, что отгрузка программы будет корректной.

Прямой доступ к памяти не получится с очень большим объёмом файла. Там есть размер сегмента который отображается в память. делать его сверх большим - лишино особого смысла (если он не покрывает целяком сам файл). Так, что скидывать на диск потребуется и при перемапировании другого кусочка в память. Это раз.
 А два - можно предусмотреть сегмент восстановления. Т.е. при приходе данных (одним куском, длина которого = константа) пишим их сразу в этот сегмент, далее возвращаем управление вызывающей стороне. параллельный поток читает из сегмента, парсит, разбрасывает по адресам, сбрасывает сегмент восстановления. Понятное дело, что это простая модель. Надо организовать очередь таких сегментов и т.п.. Но поверьте мне - задача решаема smile


удачи Вам
(круглый)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0429 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.