ru:os2faq:os2gen:os2gen.013

[Q]: Что такое “hibernate”, “Dedicated DOS mode”, и как этим пользоваться?

[A]: Andrew Belov (2:5020/181.2)

В OS/2 v 4.x есть средства, позволяющие сохранять текущее состояние (т.е. все запущенные программы) на HDD в файл \SWAPPER2.DAT и при следующей загрузке восстанавливать все в том же виде, как до сохранения - это именуется термином “hibernation”. Кроме того, на базе этой технологии есть несколько надстроек:

1. “Trapdoor” - после hibernate автоматически загружается boot-sector Win95,

 NT или DOS, после перезагрузки также автоматически восстанавливается
 окружение OS/2.

2. “Dedicated DOS mode” - запуск DOS-программ в реальном режиме посредством

 запуска "чистого" IBM DOS в Trapdoor. В OS/2 указывается название программы
 и ее параметры, т.е. возможно добиться функционирования этого сеанса в
 автономном режиме.

3. “Suspend” - на ATX можно вместо Boot-сектора подсунуть Trapdoor программу,

 выключающую PC с помощью соответствующей функции APM.

У вышеописанной технологии есть существенные ограничения:

0. Основная проблема - Hibernate никогда не был популярен и не поддерживается

 IBM'ом в основной ветке OS/2, в результате чего за время его существования
 функциональность деградировала. Ряд драйверов некорректно отрабаывает
 IOCTL, связанные с сохранением/восстановлением состояния для Hibernate.

1. Hе работает с SMP.

2. В OS/2 v 4.50 не поддерживается SCSI.

3. Ядра OS/2 v 4.00 при наличии более 64M RAM сообщают “Out of memory” при

 входе в режим Hibernate. В 4.50 не наблюдается.

4. Если загрузочный раздел заканчивается за пределами 8G, то работоспособность

 под вопросом.

5. Если загружен драйвер EXT2FLT.FLT с опцией /A, то \SWAPPER2.DAT, несмотря

 на успешное завершение Hibernate, оказывается битым, и обратно восстановить
 систему не получается.

Кроме того, в исходной реализации есть и другие проблемы, которые можно устранить патчем:

ftp://hobbes.nmsu.edu/pub/os2/util/patches/hibertkt.zip

1. Требовалось, чтобы загpyзочным pазделом для OS/2 был C: Primary FAT16.

 Патч позволяет работать с FAT16 и HPFS на любых разделах.

2. С некоторой версии ядра (9.030 или 9.032?) Hibernate не работает, если

 установлены NETWKSTA.200, HPFS386.IFS и пpочие файловые системы, отличные
 от стандартных HPFS.IFS и CDFS.IFS. Лечится это только откатом ядpа до
 9.029 (XR_M005), или патчем из HIBERTKT.ZIP (см. выше).

3. Другая особенность новых ядер (9.036?) - HYBERNAT.EXE виснет, если запущен

 NBTCP.EXE из комплекта IBM Peer/IBM LAN Server. Точно так же лечится
 HIBERTKT.ZIP. Побочный эффект от такого "лечения" - после выхода из
 hibernate может отказать драйвер "мыши".

4. TVFS.IFS (2.09) после восстановления системы перестает функционировать.

 Можно поставить "hook" для отключения TVFS перед входом в Hibernate.

Hibernate можно прикрутить к Warp 3 + XR_W042, что я, собственно, и сделал в первую очередь. Соответствующая пpоцедypа описана в HIBERTKT.ZIP.

Hibernate осyществляется пpогpаммой C:\OS2\SYSTEM\HYBERNAT.EXE, выход из спячки - пpи следyющей загpyзке OS/2. Uptime сохpаняется (!) - это для любителей ставить pекоpды. HYBERNAT.EXE поддерживает следующие параметры:

IBM HYBERNAT.EXE (OS/2 v 4.00);

/r - перезагрузка после сохранения на диск
/p - сброс всей нерезидентной памяти в SWAPPER.DAT перед сохранением
 /n<xxx> - вместо "Hibernation in progress..." будет выдаваться
           "Starting <xxx>..."
/s - "Sticky hibernate". Заhibernate'ив систему один раз, можно
           получить "слепок", с которого она будет в последующем грузиться
           многократно. После трапов и перезагрузок всегда будет
           восстанавливаться та среда, которая существовала на момент
           последнего запуска HYBERNAT /s. Выход из этого режима делается
           удалением \SWAPPER2.DAT и перезагрузкой.
 /t<xxx> - путь к EXE'шнику
 /w<xxx> - рабочая директория

Параметры, добавленные в Hibernation Toolkit v 2.x и osFree:

      /t - (без параметров) "Trapdoor", требует ключ /b
 /b<xxx> - указание раздела или имиджа boot-сектора для Trapdoor. Hапример,
           /bC: - грузиться с диска C:, или /bE:\STUFF\MYMBR.BIN - взять
           512 байт из файла MYMBR.BIN и запустить как boot-сектор.
      /c - не создавать \CONFIG.SYS и \AUTOEXEC.BAT для "dedicated DOS
           mode". Полезно при использовании System Commander'а.
/u1<xxx> - программа, запускаемая непосредственно перед hibernate'ом.
           Позволяет отключить TVFS и прочие несовместимые демоны.
/u2<xxx> - программа, запускаемая непосредственно после выхода из hibernate.
      /i - опустить некоторые проверки (ОПАСHО!)

SET HIBER_OPT - позволяет указать все эти параметры в CONFIG.SYS.

Если нет Мерлина или WPS, то программы в “Dedicated DOS mode” запускаются так:

 HYBERNAT /t"C:\PATH\FILENAME.EXE" /n"Some program" /w"C:\SOMEDIR"

Примечания:

1. Hадпись “Unable to hibernate the system.” означает, что ядро выдало ошибку.

 Скорее всего, это нехватка памяти (см. примечание про 64M) или какое-то
 иное ограничение.

2. Hibernate нельзя запускать в фоне, и нельзя переключаться в другие задачи

 после того, как он уже стартовал, иначе не будет восстановлен PM'ный
 графрежим.

3. Трапы/повисания, связанные с hibernate, могут быть вызваны драйверами,

 которые придется искать итеративно, начав от "чистой загрузки" по Alt+F1,
 F2.