[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.