Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Ветеран


Сообщения: 1405
Благодарности: 135

Профиль | Отправить PM | Цитировать


HAL - код, который обеспечивает независимость ядра, драйверов и управляющей части Windows от определяемых железом различий в платформе.(The hardware abstraction layer (HAL) is a layer of code that isolates the kernel, device drivers, and the rest of the Windows 2000 executive from platform-specific hardware differences (such as differences between motherboards).
Executive (управляющая часть) - содержит базовые системные сервисы, такие как управление памятью, управление потоками и процессами, безопасность, ввод-вывод и взаимодействие между процессами
Ядро состоит из низкоуровневых системных функций, таких как запуск потоков, прерывание и обработка исключений, синхронизация между несколькими процессами.
Драйвера - транслируют вызовы функций ввода-вывода в специальные запросы драйверов
Графическая часть - определяет GUI функции, которая работает с окнами, пользовательским интерфейсом и рисованием.

Файлы ядра:
Ntoskrnl.exe - управляющая часть и ядро
Ntkrnlpa.exe - управляющая часть и ядро с поддержкой до 64 гигов оперативной памяти. Кто тут писал, что Windows XP не поддерживает более 3 гигов оперативы? Может стоило покопаться и ядро поменять?
Hal.dll - Hardware abstraction layer - Уровень абстракций железа
Win32k.sys - Часть подсистемы win32, работающая на уровне ядра
Ntdll.dll - Внутренние функции и системные сервисы, связанные и управляющей частью. (Internal support functions and system service dispatch stubs to executive functions )
Основные библиотеки ядра Win32:
Kernel32.dll,Advapi32.dll,User32.dll,Gdi32.dll

Прерывания и исключения - это состояния ОС, которые заставляют выйти процессор из нормального режима работы. Термин trap (ловушка) связан с механизмом процессора для захвата и выполнения потока, когда происходит исключение или прерывание и передает управление фиксированной части ОС. Процессор передает управление trap handler (обработчику ловушки), функции специфичной для определенного прерывания или исключения.
Прерывание (Interrupt) - это асинхронное событие (которое может случится в любое время), которое не связано с тем, что выполняет процессор в данное время. Прерывания генерируются главным образом устройствами ввода-вывода, тактами процессора или таймерами. Они могут быть выключены или включены.
Исключение -это синхронное состояние, которое вызвано исполнением конкретной инструкции. Запуск программы второй раз с тем же набором данных и с теми же условиями может вновь вызвать исключение. Примеры исключений: нарушение зоны доступа к памяти, ошибки деления на ноль и инструкции отладчика. Ядро также отрабатывает вызовы системных сервисов как исключения.
Исключения и прерывания могут генерироваться как железом, так и софтом.

Когда сгенерировано исключение или прерывание, процессор записывает состояние, чтобы вернуться к этой точке управления потоком и продолжить выполенние так, как будто ничего не произошло. Чтобы сделать это, процессор создает trap frame в стеке ядра прерываемого потока, в котором он сохраняет состояние потока.

Железячные прерывания вызываются устройствами ввода-вывода, которые должны уведомить процессор в том, что им необходимо обслуживание. Устройства, управляемые прерываниями, позволяют ОС получить максимальную степень использования процессора, нагружая центральный процесор I/O операциями. Поток начинает передачу данных от или к устройству и затем вполняет другую полезную работу, пока устройство завершает передачу. Когда устройство заканчивает, оно прерывает процессор для обслуживания. Главным образом управляются прерываниями устройства рисования, принтеры, клавиатуры, диски и сетевые кабели.

Прерывания могут генерировать системный софт. Ядро может отключить прерывания процессора в критические моменты, когда он обрабатывает исключение или прерывание.

Ядро устанавливает interrupt trap handlers, чтобы ответить на прерывания устройств. interrupt trap handlers передают управление либо внешним процедурам (interrupt service routine-ISR), которые обрабатывают прерывание либо внутрненим процедурам ядра, которые отвечают на прерывания. Драйвера обеспечивают ISR для прерываний устройств, а ядро обеспечивает обработку других типов прерываний.

На х86 системах внешние I/O прерывания помещаются в одну из линий контроллера прерываний. Когда процессор получает прерывание, он делает запрос контроллеру на получение запроса прерывания (interrupt request, IRQ). Контроллер прерывания транслирует IRQ в определенный номер, помещает этот номер как индекс в структуру IDT (interrupt dispatch table) и передает управление соответствующим процедурам. При загрузке Windows ядро создает IDT с указателями на процедуры ядра, которые обрабатывают каждое прерывание и исключение.

Windows создает собственную схему приоритетов прерываний, называемую IRQL ( interrupt request levels). Ядро представляет IRQL в виде чисел от 1 до N, с номерами отображающими степень приоритета прерываний (чем больше номер, те выше приоритет). Хотя ядро определяет стандартный набор IRQL для софтовых прерываний, HAL помещает номера прерываний железа в IRQL.В результате получается таблица вида

31- High
30- Power fail
29- Inter processor interrupt
28- Clock
27- Profile
26- Device n
....
03-Device 1 <- Прерывания железа
02-DPC/Dispatch <- Прерывания софта
01-APC
00-Passive <-Нормальное выполнение потока

Прерывания обслуживаются в соответствии с проритетом. Когда случается прерывание с высоким уровнем приоритета, процессор сохраняет состояние прерываемого потока и вызывает trap dispatcher, связанный с прерыванием. trap dispatcher повышает IRQL и вызывает функцию обслуживания прерывания. После завершения работы процедурой, trap dispatcher понижает IRQL до того уровня, где он был до того, как он вызвал прерывание и загружает сохраненное состояние. Прерванный поток продолжает исполнение. Повышение и понижения IRQL происходит с помощью процедур KeRaiseIrql или KeLowerIrql или через вызов функций, которые получают объект синхронизации с ядром.

High - полный останов системы на keBugCheckEx и скрытие всех других прерываний
Power fail - не используется
Inter processor interrupt - запрос к другому процессору на выполнени действий
Clock - системные часы
Profile
Device n....Device 1 - прерывания драйверов в порядке приоритета
DPC/Dispatch и APC - прерывания софта, вызываемые ядром и драйверами
Passive - нормальное выполнение потока

Софтовые прерывания генерируются для следующих задач:
1. Initiating thread dispatching
2. Не критическое по времени обработка прерываний
3. Обработка истечения времени таймера
4. Асинхронное выполнени процедуры в контексте данного потока
5. Асинхронные операции ввода-вывода

-------
Ehhh.. what's up, doc?..

Это сообщение посчитали полезным следующие участники:

Отправлено: 06:48, 18-07-2008 | #7