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