Восстановление при исключениях, сгенерированных операционной системой
Восстановление при исключениях, сгенерированных операционной системой
Среди событий, включающих исключения, есть сигналы, посылаемые операционной системой, некоторые из которых являются следствием аппаратных прерываний. Примеры: арифметическое переполнение сверху и снизу, невозможные операции ввода-вывода, запрещенные команды, обращение к недоступной памяти, прерывания от пользователя (например, нажата клавиша break).
Теоретически можно рассматривать такие условия, как нарушение утверждений. Если a+b приводит к переполнению, то это означает, что вызов не удовлетворяет неявному предусловию функции + для целых или вещественных чисел, устанавливающее, что сумма двух чисел должна быть представима в компьютере. Подобное неявное предусловие задается при создании новых объектов (создание копии) - памяти должно быть достаточно. Отказы встречаются из-за того, что окружение - файлы, устройства, пользователи - не отвечают условиям применимости. Но в таких случаях непрактично или невозможно задавать утверждения, допуская их независимую проверку. Единственное решение - пытаться выполнить операцию, и, если аппаратура или операционная система выдает сигнал о ненормальном состоянии, рассматривать его как исключение.
Рассмотрим проблему написания функции quasi_inverse, возвращающей для каждого вещественного x обратную величину 1/x или 0, если x слишком мало.
Подобные задачи по существу нельзя реализовать, не используя механизм исключений. Единственный практичный способ узнать, можно ли для данного x получить обратную величину, это выполнить деление. Но деление может спровоцировать переполнение, и если нет механизма управления исключениями, то программа завершится отказом, и будет слишком поздно возвращать 0 в качестве результата.
На некоторых платформах можно написать функцию invertible, такую что invertible(x) равна true, если и только если обратная величина может быть вычислена. Тогда можно написать и quasi_inverse. Но это решение не будет переносимым, и может приводить к потере производительности при интенсивном использовании этой функции.Механизм rescue-retry позволяет просто решить эту проблему, по крайней мере, на платформе, включающей сигнал при арифметическом переполнении:
quasi_inverse (x: REAL): REAL is
-- 1/x, если возможно, иначе 0
local
division_tried: BOOLEAN
do
if not division_tried then
Result := 1/x
end
rescue
division_tried := True
retry
end
Правила инициализации устанавливают значение false для division_tried в начале каждого вызова. В теле не нужно предложение else, поскольку инициализация установит Result равным 0.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
1.1.8. Антивирусная утилита AVZ — лечение и восстановление операционной системы
1.1.8. Антивирусная утилита AVZ — лечение и восстановление операционной системы Я уже предупреждал, что AVZ не является полноценной антивирусной программой, заменой вашему основному антивирусу она не станет (утилита не лечит сами программы, зараженные компьютерными
3.2. Восстановление операционной системы
3.2. Восстановление операционной системы Для восстановления диска запускаем программу. (Рис. 151) В открывшемся окне программы кликаем кнопку «Restore». (Рис. 152) Далее «Next». (Рис. 153) В следующем окне выбираем архив с сохраненной копией и кликаем кнопку «Next». (Рис. 154) Далее
Кое-что об исключениях
Кое-что об исключениях Итак, типичная форма POSIX-команды в обобщенном виде выглядит следующим образом:$ command -[options] [arguments] Из этого правила выбиваются немногочисленные, но весьма полезные и часто используемые команды. Однако и для таких команд с нестандартным синтаксисом
2.4 УПРАВЛЕНИЕ СИСТЕМОЙ
2.4 УПРАВЛЕНИЕ СИСТЕМОЙ К управляющим процессам, грубо говоря, относятся те процессы, которые выполняют различные функции по обеспечению благополучной работы пользователей системы. К таким функциям относятся форматирование дисков, создание новых файловых систем,
6.4.2 Взаимодействие с операционной системой через вызовы системных функций
6.4.2 Взаимодействие с операционной системой через вызовы системных функций Такого рода взаимодействие с ядром было предметом рассмотрения в предыдущих главах, где шла речь об обычном вызове функций. Очевидно, что обычная последовательность команд обращения к функции не
9.2. Создание безопасного при исключениях конструктора
9.2. Создание безопасного при исключениях конструктора ПроблемаВаш конструктор должен обеспечить базовые и строгие гарантии безопасности исключений. См. обсуждение, которое следует за определением «базовых» и «строгих» гарантий.РешениеИспользуйте в конструкторе блоки
9.3. Создание безопасного при исключениях списка инициализации
9.3. Создание безопасного при исключениях списка инициализации ПроблемаНеобходимо инициализировать ваши данные-члены в списке инициализации конструктора, и поэтому вы не можете воспользоваться подходом, описанным в рецепте 9.2.РешениеИспользуйте специальный формат
9.4. Создание безопасных при исключениях функций-членов
9.4. Создание безопасных при исключениях функций-членов ПроблемаСоздается функция-член и необходимо обеспечить базовые и строгие гарантии ее безопасности при исключениях, а именно отсутствие утечки ресурсов и то, что объект не будет иметь недопустимое состояние в том
13.8. Редактирование видео на устройстве с операционной системой iOS
13.8. Редактирование видео на устройстве с операционной системой iOS Постановка задачи Требуется, чтобы пользователь, просматривающий видео, мог редактировать видео в этом же
19.8. Настройка возможности доступа к талонам в приложениях, работающих на устройстве с операционной системой iOS
19.8. Настройка возможности доступа к талонам в приложениях, работающих на устройстве с операционной системой iOS Постановка задачи Требуется развернуть приложение с поддержкой Passbook на устройстве с операционной системой iOS и гарантировать, что ваше приложение сможет
2.6. Работа со справочной системой
2.6. Работа со справочной системой Пакет Nero 8 Premium содержит целый набор инструкций для работы с входящими в него приложениями. Эти инструкции составляют справочную систему Nero, и обратиться к ней можно двумя способами.Во-первых, вы можете запустить приложение и обратиться к
Работа со справочной системой
Работа со справочной системой Справочная система программы Sound Forge (на английском языке) содержит все необходимые сведения для работы с ней. Для вызова справки нужно нажать клавишу F1 или выполнить в главном окне программы команду Help ? Contents and Index (Помощь ? Содержание и
Управление системой
Управление системой Управление системой подразумевает подготовку технической инфраструктуры и организацию системного администрирования для рабочей системы SAP.Организация системного администрированияОрганизация системного администрирования подразумевает
Глава 5 Восстановление операционной системы и данных
Глава 5 Восстановление операционной системы и данных Операционная система Windows Vista не зря претендует на звание одной из самых устойчивых систем. Наличие разнообразных механизмов защиты и наблюдения позволяет максимально защитить ее от различных непредвиденных