Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Отложенный вызов процедуры (Deferred Procedure Call)Содержание книги
Поиск на нашем сайте § ISRs(процедуры обработки прерывания), работающие на определенном IRQL (DIRQLx), могут предотвратить выполнение других ISR на более нижних IRQLs § Это увеличивает время ожидания для системных прерываний § Чтобы уменьшить Задержку прерывания, ISRs: § Выполняют абсолютный минимум работ на DIRQLx § Запрашивают DPC выполнить объем работы на DISPATCH_LEVEL () § Позволяют системе быстро обработать другие прерывания § DPCs используются, чтобы задержать обработку прерывания на более нижних IRQLs () § Структура KDPC представляет DPC § Содержит функцию повторного вызова (подпрограмма DPC) § Структура KDPC поставлена в очередь в специальный список DPC CPU в KPCR.PrcbData.DpcListHead § Подпрограммы DPC выполняются: § В произвольном контексте потока в IRQL == DISPATCH_LEVEL § Используя специальный стек ЦП, указатель которого в KPCR.PrcbData.DpcStack
§ Используется для выполнения функции в контексте определенного потока § APC, выполненные на PASSIVE_LEVEL или APC_LEVEL § KTHREAD.ApcState. ApcListHead [] содержит список APCs, ожидающих потока o Содержит начала списка (list heads) UserMode & KernelMode § Структура KAPC представляет APC o KAPC вставлен в Очередь потока APC o Организация очередей APC не вызывает поток к ожиданию аварийного завершения § Кроме случаев, когда target поток ждет в alertable состоянии ожидания в обращении к WaitForSingleObjectEx (), SleepEx () и т.д. § Подпрограмма APC имеет приоритет по non-APC коду
§ Подпрограммы KAPC o RundownRoutine – Выполняется, когда APC отброшен во время завершения потока o KernelRoutine – Выполняется на APC_LEVEL o NormalRoutine – Выполняется на PASSIVE_LEVEL Типы APC(режим ядра)
§ Специальный режим ядра o KAPC.KernelRoutine выполняется на APC_LEVEL o KAPC.NormalRoutine == NULL o Delivered перед APCs нормального режима ядра § Вставлен в очередь APC потоков после других специальных APCs o Deliverable, если § IRQL == PASSIVE_LEVEL § Поток не находится в защищенной области (KTHREAD.SpecialApcDisable! = 0) o Подпрограмма APC не может получить мьютексы, доступные в IRQL == 0 o Используется для завершения процесса
§ Нормальный Режим Ядра o KAPC.NormalRoutine на PASSIVE_LEVEL o Deliverable, если § IRQL == PASSIVE_LEVEL § Поток не находится в критической секции (KTHREAD.KernelApcDisable! = 0) § Поток не выполняет APC ядра o Подпрограмме APC разрешено делать все системные вызовы o Используется ОС для завершения IRP Типы APC (Пользовательский режим)
§ Пользовательский режим § KAPC.NormalRoutine выполняется на PASSIVE_LEVEL § Deliverable, только если поток находится в alertable состоянии ожидания § Поток может ввести alertable состояние ожидания, вызвав · WaitForSingleObectEx с Alertable = TRUE · WaitForMultipleObjectsEx с Alertable = TRUE § Queued через подтверждение посредством API Win32 (QueueUserApc()) § Используется ОС, чтобы выполнить подпрограммы завершения ввода-вывода пользовательского режима § KAPC режима ядра/пользовательского режима может содержать опцию KAPC.KernelRoutine § Выполняется в IRQL == APC_LEVEL § Выполняется перед NormalRoutine § Для APCs пользовательского режима KAPC.KernelRoutine и KAPC.NormalRoutine выполняются только, когда поток находится в пользовательском режиме alertable ожидания Единицы работы
§ В ОС предусмотрен механизм to execute a custom driver provided function на PASSIVE_LEVEL в контексте системного потока § WORK_QUEUE_ITEM использовался в NT4 и предшествующих § IO_WORKITEMs были представлены в Win2K · Ссылка устанавливается на объект устройства так, чтобы она не была удалена, пока выполняется рабочая единица подпрограммы
Расположение Виртуального Адресного Пространства Режима Ядра
Пулы памяти
§ Выделение динамической памяти в режиме ядра осуществляется из пулов памяти, то есть из хипов в режиме ядра § Страничный пул – страничная память § Нестраничный пул – page locked физически фрагментированная память (такой пул используется обработчиками прерываний) § Session Pool – особый страничный пул, в котором располагаются данные сессии § Специальный пул – страничный/нестраничный с возможностью обнаружения нарушения целостности данных (используется для отладки) § Страничные/нестраничные пулы растут до установленного максимума системы § Максимальный размер пулов задается при системном запуске в реестре на основании количества физической памяти в системе § У системы есть multiple страничные пулы во избежание сериализации вызовов пула § При выделения памяти для пула можно передать 4-х символьный тег (которым будет помечен выделенный блок памяти на границе страницы. Обычно тег соответствует названию драйвера, выделившего память.) § Это полезно для отладки повреждений и утечек данных пула
Структура данных пула
§ Система содержит структуру POOL_DESCRIPTOR для каждого пула § Переменная PoolVector содержит массив указателей, которые указывают на дескрипторы страничных/нестраничных пулов § Точка входа страничного пула указывает на массив дескрипторов пула § Точка входа нестраничного пула указывает на единственный дескриптор пула
§ Блокам пула предшествует структура POOL_HEADER которая содержит отслеживаемую информацию о выделенных и свободных блоках § POOL_HEADER содержит: · Тег пула для блока пула · Указатель EPROCESS, который является квотой, взимаемой за блок пула · Индекс пула, которому блок принадлежит (только для страничных пулов) · Размер блока пула и размер предыдущего блока
Расположение объектов
§ Данные объектов хранятся в нестраничном пуле § Диспетчер объектов использует известные теги для объектов § Может использоваться для идентификации объектов в пуле § Например, у объектов файла есть тег 'Файл' § Дескрипторы защиты размещаются в страничном пуле § Указатель на дескриптор защиты хранится в заголовке объекта § Таблица указателей размещается в страничном пуле. Каждый элемент таблицы: § описывается типом HANDLE_TABLE_ENTRY § содержит указатель на объект и биты Granted Access (с разрешенным доступом)
|
||
|
Последнее изменение этой страницы: 2016-08-26; просмотров: 479; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.009 с.) |