Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекції_СПр.docx
Скачиваний:
42
Добавлен:
21.08.2019
Размер:
947.09 Кб
Скачать
  1. Система відслідковування та обробки помилок у ос.

  2. Види помилок.

  3. Засоби С++ та Assembler для обробки помилок та виключних ситуацій.

Навчальна мета: Засвоїти основні поняття обробки помилок у ОС.

Виховна мета: Допомогти студентам усвідомити вагому роль застосування відслідковування помилок у ОС.

Актуальність: Донести до відома студентів, що на сьогоднішній день більшість програмного забезпечення має бути перевірене на наявність помилок.

Мотивація: Мотивацією вивчати даний напрямок у курсі ситемного програмування може стати бажання отримати позицію програміста.

Виключні ситуації

Виключні ситуація (exception) – подія, що виникає в результаті спроби виконання програмою команди, що з якихось причин не може бути виконана до кінця. Прикладами таких команд можуть бути спроби доступу до ресурсу при відсутності достатніх привілеїв або звертання до відсутньої сторінки пам'яті. Виняткові ситуації, як і системні виклики, є синхронними подіями, що виникають у контексті поточного завдання. Виняткові ситуації можна розділити на поправні й непоправні.

До поправного ставляться такі виняткові ситуації, як відсутність потрібної інформації в оперативній пам'яті. Після усунення причини поправної виняткової ситуації програма може виконуватися далі. Виникнення в процесі роботи операційної системи поправних виняткових ситуацій уважається нормальним явищем.

Непоправні виняткові ситуації найчастіше виникають у результаті помилок у програмах (наприклад, розподіл на нуль). Звичайно в таких випадках операційна система реагує завершенням програми, що викликала виняткову ситуацію.

Структурна обробки виняткових ситуацій (англ. SEH — Structured Exception Handling) — механізм обробки програмних и апаратних виняткових ситуацій  в ОС Microsoft Windows, що дозволяє програмістам контролювати обробку виняткових ситуацій.

Засоби С++. Реалізація.

Механізм підтримується Microsoft тільки на рівні компілятора за допомогою реалізації нестандартних синтаксичних конструкцій _try, _except і _finally. Ключове слово _try використається для виділення ділянки коду, у якому генерація виключення буде оброблена одним або декількома блоками _except. Код, що перебуває в блоці _finally, виконається завжди й незалежно від інших блоків _try і _except.

Приклад використання в мові C/C++

_try {

// захищений код,

// який міститься в SEH-фреймі

}

_except (фільтр виключень) {

// оброблювач виключень

}

_finally {

// код, що виконується в кожному разі

}

Як фільтр виключень можуть виступати звичайні функції, що повертають три константних вирази:

  • EXCEPTION_EXECUTE_З на можливість даного оброблювача обробити виключення. При одержанні такого значення операційна система припиняє пошук релевантних оброблювачів виключення й, виконавши розкручування стека, передає керування першому, що повернуло значення EXCEPTION_EXECUTE_HANDLER

  • EXCEPTION_CONTINUE_EXECUTION — указує на виправлення помилки. Система знову передасть керування на інструкцію, що викликала виключення, оскільки передбачається, що цього разу вона не викличе виключення.

  • EXCEPTION_CONTINUE_SEARCH — указує, що підходящий оброблювач може бути знайдений нагору по стеку. У той же час повернення цього значення може бути свідченням того, що помилка не оброблена.

Контрольні запитання:

  1. Виключні ситуації

  2. Засоби С++. Реалізація.

  3. Приклад використання в мові C/C++

Лекція 19 «Відеоадаптери»