Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Сериализация, но не сериализация  (Прочитано 1019 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Impuls

  • Автор темы
  • Новичок
  • *
  • Сообщений: 25
  • hex, bugs, rock'n'roll
    • Просмотр профиля
Сериализация, но не сериализация
« : 17 Декабря 2010, 01:53:58 »
Доброго времени суток уважаемые эксперты. Решил реализовать штуку на подобие сериализации в java. Какова идея: сохранить на диск всю память, которую юзает приложение, и при повторном его запуске (либо при сбоях, да мало ли еще зачем ;)) Восстановить ее (память) в состояние, в которое она была сохранена. По идее такая штука должна откатить (либо наоборот восстановить) приложение в определенное состояние.
В связи с этим вижу множество проблем, основная из которых - это то, что приложению выделяются 4 Гб виртуальной (и это если архитектура 32 битная), а не физической памяти.
Может есть у кого какие-нибудь предложения, замечания, идеи, или хотя бы знаете куда отправить для прочтения мануалов? Милости прошу в эту тему.

З.Ы. Собственно идея находится в стадии усиленного обдумывания и выделения нюансов. За ранее спасибо за понимание.
Как правило, основные неприятности начинаются после фразы: "Я знаю как сделать ещё лучше!"

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Re: Сериализация, но не сериализация
« Ответ #1 : 17 Декабря 2010, 07:55:52 »
Какова идея: сохранить на диск всю память, которую юзает приложение
Память - полбеды. Вам ещё нужно будет как-то сохранять/загружать другие используемые программой системные ресурсы, как-то: дескрипторы ввода/вывода, потоки (нити), сокеты... Всё это будет прибито операционной системой как только вы закроете программу.
Поэтому уж лучше "сериализация как в java". :)
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Оффлайн Impuls

  • Автор темы
  • Новичок
  • *
  • Сообщений: 25
  • hex, bugs, rock'n'roll
    • Просмотр профиля
Re: Сериализация, но не сериализация
« Ответ #2 : 17 Декабря 2010, 12:51:58 »
Вам ещё нужно будет как-то сохранять/загружать другие используемые программой системные ресурсы, как-то: дескрипторы ввода/вывода, потоки (нити), сокеты... Всё это будет прибито операционной системой как только вы закроете программу.
Тоесть маловероятно такое сделать? Все равно останутся битые ссылки? Это плохо(((( Хотелось бы порадужнее перспективы.
Как правило, основные неприятности начинаются после фразы: "Я знаю как сделать ещё лучше!"

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Re: Сериализация, но не сериализация
« Ответ #3 : 17 Декабря 2010, 14:10:15 »
Все равно останутся битые ссылки? Это плохо(((( Хотелось бы порадужнее перспективы.
Ссылки может и не останутся, а вот ресурсы (открытые файлы, интернет-соединения, ...) операционка освободит тут же, как только процесс будет закрыт. Конечно, программа сама может пытаться их восстановить, но это значит, что её можно будет прерывать не в любой момент...

Ваша идея сродни отправки компьютера в спящий режим (hibernate). Только там приходится иметь дело не с "ресурсами", а с устройствами, которые теряют своё состояние при отключении питания. По выходу из спящего режима, ОС запускает все устройства заново и пытается восстановить их состояние.

В программе наверное тоже можно будет аналогичным образом "перезапускать" все ресурсы - переоткрывать файлы, заново подключаться к сетевым ресурсам и т.п. Решите этот вопрос?
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: Сериализация, но не сериализация
« Ответ #4 : 17 Декабря 2010, 18:24:25 »
Сериализация в C++ уже есть. Например в бусте имеется библиотека. А относительно хибернейта всего приложения, то это преодолимо.

Приложение как правило оперирует данными, которые определяют его состояние. Если изначально проектировать архитектуру классов так, что состояние приложения будет полностью описано определёнными классами, то останется только сделать их сериализуемыми и иметь некий реестр ссылок на объекты которые нужно включать в снапшоты.

Эта схема, разумеется, требует блокировки доступа на изменение объектов на время сохранения снапшота, но эта задача решается одним глобальным read-write locker'ом (таковой есть в pthread).

Не имеет смысла сохранять всю память приложения. Она всегда избыточна и содержит, как уже говорилось, много сущностей которые невозможно сохранить (сокеты, файловые дескрипторы и многое другое).

В любом случае нужно понимать, что полный хибернейт с возможностью отката до чекпоинтов нужен далеко не каждому приложению. В большинстве случаев игра просто не стоит свеч.

Оффлайн Impuls

  • Автор темы
  • Новичок
  • *
  • Сообщений: 25
  • hex, bugs, rock'n'roll
    • Просмотр профиля
Re: Сериализация, но не сериализация
« Ответ #5 : 20 Декабря 2010, 01:23:21 »
Сериализация в C++ уже есть. Например в бусте имеется библиотека.
Насчет сериализации в C++ - я в курсе. Но тут немного другая ситуация. Вы предлагаете мне сохранять приложение изнутри, в то время, когда я хочу сохранять его снаружи. Приведу пример. Пишем в консоли такие строки:
snapshot -save <timeout> <process_name> <way_to_snapshot>  #Сохранять снимок процесса каждые timeout мс
snapshot -load <process_name> <way_to_snapshot> #Восстановить снимок для процесса

Насчет данных - тут ситуация такова, что от избыточности невозможно избавиться снаружи приложения, ибо мы не знаем что за данные мы сохраняем. Т.о. битые ссылки всеже будут(((
« Последнее редактирование: 20 Декабря 2010, 01:26:13 от Impuls »
Как правило, основные неприятности начинаются после фразы: "Я знаю как сделать ещё лучше!"

Оффлайн dj--alex

  • Старожил
  • *
  • Сообщений: 3237
  • Понимаешь, я какбы беру в руки лопату и говорю...
    • Просмотр профиля
    • все мои творения и занятия
Re: Сериализация, но не сериализация
« Ответ #6 : 20 Декабря 2010, 04:41:45 »
hibernate ещё пару лет и все никак не сделают
а вы хотите сделать "Фантом ОС"
Ubuntu 18.04 MATE x64, 19.3 x64 Mate, MX-Linux 19 Mate Mate Mate Mate. PC:B450\Ryzen3200G\16Gb\6TB\1060gtx\512Gb-Netac
https://forum.ubuntu.ru/index.php?topic=199897.0

Оффлайн Impuls

  • Автор темы
  • Новичок
  • *
  • Сообщений: 25
  • hex, bugs, rock'n'roll
    • Просмотр профиля
Re: Сериализация, но не сериализация
« Ответ #7 : 20 Декабря 2010, 13:16:32 »
hibernate ещё пару лет и все никак не сделают
а вы хотите сделать "Фантом ОС"
А разве не заманчиво? Даже если не получится, то хотябы стоит обдумать... +Еще одна фича в инструментарий Linuxа))
Как правило, основные неприятности начинаются после фразы: "Я знаю как сделать ещё лучше!"

Оффлайн VestniK

  • Активист
  • *
  • Сообщений: 594
    • Просмотр профиля
Re: Сериализация, но не сериализация
« Ответ #8 : 20 Декабря 2010, 18:47:32 »
Я отлично понял про какую сериализацию ты говоришь. Я просто написал о том как такую задачу надо решать равильно. Сказки про прозрачные снапшоты в реальности станут непомерными тормозами и безсмысленной тратой ресурсов.

Поройся на лоре (http://linux.org.ru) в обсуждении новости о Фантом ОС назывались пару проектов которые такую сериализацию обеспечивают. Так же там приводился довольно хороший пример того, что эта сериализация ненужный бред:

Оффлайн Impuls

  • Автор темы
  • Новичок
  • *
  • Сообщений: 25
  • hex, bugs, rock'n'roll
    • Просмотр профиля
Re: Сериализация, но не сериализация
« Ответ #9 : 20 Декабря 2010, 22:42:13 »
Я отлично понял про какую сериализацию ты говоришь. Я просто написал о том как такую задачу надо решать равильно. Сказки про прозрачные снапшоты в реальности станут непомерными тормозами и безсмысленной тратой ресурсов.

Поройся на лоре (http://linux.org.ru) в обсуждении новости о Фантом ОС назывались пару проектов которые такую сериализацию обеспечивают. Так же там приводился довольно хороший пример того, что эта сериализация ненужный бред:

Сейчас буду смотреть.
Как правило, основные неприятности начинаются после фразы: "Я знаю как сделать ещё лучше!"

 

Страница сгенерирована за 0.016 секунд. Запросов: 22.