Системное программное обеспечение персональных ЭВМ


Пример 2



Пример 2

/*= ПРИМЕР 4.3. =*/ /*========== Горячая перезагрузка системы ===========*/ #include <dos.h> main() { /* 2-й и 3-й параметры вызова нулевые, т.к. для прерывания 0x19 никаких параметров не требуется */ int86(0x19,00,00); }

Вы обратили внимание на слово "возможно" в предыдущей фразе? Скорее всего, программа приведет к "зависанию" системы. Дело в том, что при "горячей" перезагрузке не переустанавливаются векторы прерываний BIOS, таким образом, если прерывания BIOS были к моменту выдачи INT 19H перехвачены какими-то резидентными программами, после перезагрузки системы эти векторы будут указывать неизвестно куда. Поэтому не следует возлагать больших надежд на "горячую" перезагрузку.

В "холодном" и "теплом" вариантах перезагрузка выполняется с самого начала - с выполнения программы POST. Различие между "холодным" и "теплым вариантами заключается в том, что в первом случае POST выполняется в полном объеме - как при нажатии кнопки RESET, а во втором из нее исключается тестирование оборудования и оперативной памяти - как при нажатии комбинации клавиш Ctrl+ Alt+Del. Для запуска перезагрузки надо просто передать управление по адресу FFFF:0000. Тип перезагрузки BIOS определяет из содержимого слова по адресу 0040:0072 - если там находится код 0x1234, выполняется "теплая" перезагрузка, иначе - "холодная". Программное выполнение такой перезагрузки представлено в примере 4.4.




- Начало -  - Назад -  - Вперед -