API функции работы с реестром.
*-отмечены наиболее часто используемые.
RegCreateKey(), RegCreateKeyEx() – создает раздел или если существует – то открывает.
RegDeleteKey() – удаляет раздел и его подразделы.
RegDeleteValue() – удаляет значение.
RegEnumKey(), RegEnumKeyEx() – составляет список всех параметров раздела.
RegEnumValue() – составляет список всех параметров данного открытого раздела.
RegFlushKey() – записывает атрибуты заданного раздела в реестр.
RegGetKeySecurity() – возвращает дескриптор безопасности заданного открытого раздела.
RegOpenKey(), RegOpenKeyEx() – открываетуказанныйраздел.
*RegQueryInfoKey() – читаетвсюинфуоботкрытомразделе.
RegQueryValue() – читаетзначенияпараметра.
*RegQueryValueEx() – читает значения параметра.
RegSaveKey() – сохраняет указанный раздел, подразделы, и параметры в файле.
RegSetValue() –записывает данные в параметр.
*RegSetValueEx() – записывает данные в параметр.
RegSetKeySecurity() – устанавливает атрибут безопасности открытого раздела.
RegCloseKey() – закрывает дескриптор указанного раздела, без его обновления.
Параметрыбезопасностинекоторыхф-ийприменимы только в NT.
Значения, размер которых > 2 кб, записываются в виде внешних файлов (имя_файла сохраняется в реестре).
21.Основы механизма обработки прерываний и исключений в современных операционных системах. Функции и классы обработки исключений языка С++.
Прерывания – механизм, позволяющий координировать параллельное функционирование отдельных устройств вычислит.системы и реагировать на особые состояния, возникающие при работе процессора.
Прерывание – принудительная передача управления от выполняемой проги к системе, происходящая при возникновении определенного события.
Сигналы аппаратных прерываний поступают в процессор через 2 контроллера прерываний (ведомый и ведущий контроллеры).
Обработка прерываний включает в себя:
1.Установление факта прерывания и его идентификация.
2.Запоминание состояния прерванного процесса.
3.Передача управления подпрограмме обработки прерывания.
4.Сохранение информации о прерванной проге, если не удалось на 2 шаге.
5.Обработка прерывания.
6.Восстановление инф-ции прерванного процесса.
7.Возврат в прерваннуюпрогу.
1-3 пункт реализуются аппаратно
4-7 – программно.
Внешние – вызываются асинхр. событиями, происходящими вне прерванного процесса.:
-прерывания таймера
-вв/вывод (от внешних устр-в)
-по нарушению питания
-действия оператора
-от другой вычислит.системы
Внутренние – вызываются событиями, связанными с работой процессора и синхронны с его операциями.:
-нарушение адресации
-наличие незадействованной двоичной комбинации
-деление на ноль
-переполнение/исчезновение порядка
-ошибки встроенных средств контроля.
Программные прерывания – происходят по соответствующей команде прерывания. Процессор осуществляет те же действия, что и при внутреннем прерывании.
Выбор 1 из возникших сигналов прерывания для обработки осуществляется на основе приоритетов:
Дисциплины обслуживания прерываний:
-с относительными приоритетами обслуживания. Обслуживание не прерывается даже запросами с более высоким приоритетом.
-с абсолютным приоритетом. Всегда обслуживается прерывание с наивысшим приоритетом.
-LCFS. Запросы с низким приоритетом могут прерывать обработку прерывания с высоким приоритетом.
Супервизор прерываний сохраняет в дескрипторе текущей задачи рабочие регистры процессора, определяющие контекст прерываемого вычислит.процесса.
Исключения возникают синхронно как результат выполнения определенных операторов проги; служат сигналом свидетельствуующим о наличии ошибочных условий.
Обработка исключений заключается в создании спец. блоков прогр. кода, к-рые запускаются при возникновении исключительных ситуаций.
В процессе поиска соответствующего блока кода, для конкретной исключит. Ситуации, система сначала просматривает текущую процедуру; другие активные отложенные процедуры этого же процесса; переходит к системным обработчикам.
Функции и классы обработки исключений языка С++.
В Windowsкаждому прерыванию назначается определенный приоритет – уровень запроса прерывания (IRQL). IRQLназначается источнику прерывания.
Изменение IRQL центрального процессора позволяет системе блокировать прерывания с более низким приоритетом.
Этот приоритет могут изменить только системные сервисы, работающие на уровне ядра.
Если процессор работает при самом низком IRQL – происходит нормальное выполнение потока и разрешается обраб. всех прерываний.
Когда перехватчик вызывает процедуру обслуживания прерывания ISR–он назначает ЦП тот же IRQL, что и у перехваченного сигнала. На время выполнения ISR,прерывания более низкого уровня – блокируются.
Время от времени ЦП переключается на самый низкий IRQL, чтобы возобновить выполнение прерванных потоков.
Перехватчик ищет подпрограммы обработки прерывания в таблице распределения прерываний (IDT).
При загрузке в систему новый драйвер устройства записывает в IDTсобственный обработчик.
Исключения, определяемые на уровне ядра Windows:
-несоответствие типов данных
-прерывание отладчика
-пошаговая отладка
-деление на ноль
-переполнение и потеря разрядов
-зарезервированный операнд
-нарушение защиты страницы
-недопустимый оператор
-переполнение
-нарушение прав доступа к памяти
-ошибка чтения страницы
-превышение квоты страничного файла
-привилегированный оператор
GetExceptionCode() – позволяет определить тип возникшего исключения. Возвращает код исключения.
Блок кода на С++ должен начинаться с tryи catch.
try – помечает фрагмент проги, к-рый может породить исключение.
catch – содержит прогу, запускающуюся при наличии исключения.
В VisualC++обраб. исключений поддерживается с помощью:
-ф-ий обеспечивающих структурированную обработку исключений
-классов, отвечающих за обработку определенных типов исключений
-макрокоманд, позволяющих осуществить структуризацию обработки искл. Приложения
-ф-ий, предназначенных для генерации исключений различных типов.
Для обраб. искл. ситуаций применяются MFCкласс CExceptionи его производные классы:
CMemoryException – нехватка памяти
CNotSupportedException – недопустимая операция
CArhiveException – работа с архивами
CFileException – при операциях с файлами
CResourceException – ресурс не найден, не вызван
COleException –OLE-исключения
CDBException – операции с БД
CUserException – невозможно найти ресурс
CDaoException – с объектами доступа к БД
CInternetException – с работой в Интернет
Для получения подробной инфы об исключении исп-ся: GetErrorMessage(), ReportError().
Основы организации ввода-вывода в современных операционных систем. Понятие файловой системы и системы управления файлами. Синхронный и асинхронный ввод-вывод. Основные API-функции для организации ввода-вывода в ОС Windows.