Войти

Показать полную графическую версию : За что отвечают hal.dll, ntoskrnl.exe, Interrupts?


Котяра
17-07-2008, 23:35
А нагрузку дает hal, только куда копать не совсем ясно. »
За что отвечают hal.dll, ntoskrnl.exe, Interrupts? Знаю, что ntoskrnl отвечает за загрузку (там бутскрин).

Severny
17-07-2008, 23:40
Interrupts? »
Ну это и не процесс в нашем понимании..
Определение: Hardware interrupt
Аппаратное прерывание. Прерывание ЦП, генерируемое схемами процессора (или внешнего по отношению к нему контроллера) в ответ на внешние события, такие, как нажатие клавиши, прерывание от периферийного устройства, прерывания по сбою питания, прерывания от схем контроля работы компьютера и т. д., в отличие от программных прерываний, генерируемых по машинной команде типа INT и др.

hal.dll »
А вот тут (http://forum.oszone.net/showthread.php?t=7016) и создателю темы не мешает посмотреть.
:) :) хотя он там присутствует в последнем посте :)

Котяра
17-07-2008, 23:45
Severny, а за что отвечает hal?

Severny
17-07-2008, 23:49
Ядро, вернее его часть (http://ru.wikipedia.org/wiki/Hardware_abstraction_layer)

Котяра
17-07-2008, 23:51
Ядро »
А подробнее? Какие функции оно выполняет? Те же, что и ntoskrnl - ядро и загрузка. Знаю, что hal как-то зависит от типа ПК.

Drongo
18-07-2008, 02:16
Какие функции оно выполняет? »управляет всей работой операционной системы, будь то Поиск, Проводник и т.п. да и не только этим. Тоесть ядро обеспечивает взаимодействие между функциями самой операционной системы и программами. Если я ошибся, пинайте, до тех пор, пока не пойму. (К сожалению, минимум моих знаний, не позволяет объяснить это более профессионально. Хотя для себя я общее назначение кернела, системного ядра знаю.)

mrcnn
18-07-2008, 06:48
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. Асинхронные операции ввода-вывода

Admiral
18-07-2008, 12:48
Ещё про прерывания и зачем их придумали в статье Прервись на минутку (http://www.xakep.ru/magazine/xa/088/030/1.asp)

Котяра
18-07-2008, 14:14
Уровень абстракций железа »
Что он делает?

Dirk Diggler
18-07-2008, 15:57
Что он делает? »
Из википедии:

Hardware Abstraction Layer (HAL, Слой аппаратных абстракций) — слой абстрагирования, реализованный в программном обеспечении, находящийся между физическим уровнем аппаратного обеспечения и программным обеспечением, запускаемом на этом компьютере. HAL предназначен для скрытия различий в аппаратном обеспечении от основной части ядра операционной системы, таким образом чтобы большая часть кода, работающая в режиме ядра не нуждалась в изменении при её запуске на системах с различным аппаратным обеспечением. На персональных компьютерах HAL, по существу, может рассматриваться как драйвер материнской платы, позволяющий взаимодействовать инструкциям высокоуровневых языков программирования с низкоуровневыми компонентами, такими как аппаратное обеспечение, к примеру напрямую с аппаратным обеспечением.

В операционных системах семейства Windows NT HAL является частью ядра[1][2]. Это обеспечивает портируемость кода ОС Windows NT, работающего в режиме ядра на различные виды процессоров, с различными блоками управления памятью и на ряд систем с различными архитектурами шин ввода/вывода; большая часть этого кода выполняется без изменений на этих системах, при компиляции для системы команд оговоренных выше систем. К примеру рабочие станции, основанные на SGI Intel x86 были не совместимы с IBM PC-совместимыми рабочими станциями, но благодаря HAL Windows NT мог запускаться на них.

mrcnn
18-07-2008, 15:58
Цитата mrcnn:
Уровень абстракций железа »
Что он делает? »

Читай выше. Это делает HAL.

Запускаешь Far manager(Totalcmd) находишь hal.dll Жмешь тупо F3, листаешь до тех пор, пока не найдешь список API функций, заданных в модуле. Имена почти говорящие.
Начало означает подсистему. Дальше большая буква означает пробле и начало нового слова (это стандартный формат для WinAPI функций)

HalAllProcessorsStarted - эта функция возможно проверяет запустились ли все процессоры
ExReleaseFastMutex - (Executive) - освободить быстрый мьютекс. Мьютекс - сокращение от mutual exclusion (взаимное исключение)
ExAcquireFastMutex - (Executive) - получить быстрый мьютекс.
ExTryToAcquireFastMutex - попытаться получить быстрый мьютекс.
HalClearSoftwareInterrupt - (Hal) - очистить софтовое исключение
HalRequestSoftwareInterrupt - (Hal) - запросить софтовое исключение
KeLowerIrql KeRaiseIrql - см. выше про IRQL
KeGetCurrentIrql - получить текущий IRQL
KeRaiseIrqlToDpcLevel KeRaiseIrqlToSynchLevel - поднять IRQL на уровень DPC или на уровень синхронизации
HalAssignSlotResources - прописать ресурсы для слота
HalBeginSystemInterrupt - начать системное прерывание
HalDisableSystemInterrupt - отключить системные прерывания
HalEnableSystemInterrupt - включить системные прерывания
HalEndSystemInterrupt - закончить системные прерывания
HalGetBusData - получить данные шины (bus)
HalSetBusData - установить данные шины
HalGetBusDataByOffset - получить данные шины по определенному сдвигу
HalSetBusDataByOffset- установить данные шины по определенному сдвигу
HalGetEnvironmentVariable - получить переменные среды
HalSetEnvironmentVariable - установить переменные среды
HalGetAdapter- получить адаптер (возможно, видео)
HalAcquireDisplayOwnership - установить производителя дисплея
HalSetDisplayParameters - установить параметры отображения (видео?)
HalQueryDisplayParameters - запросить параметры отображения
HalInitializeProcessor - запустить процессор
HalMakeBeep - произвести звуоковй сигнал через системный динамик
HalProcessorIdle - проверить свободен ли процессор.
HalDisplayString - показать строку
HalReadDmaCounter - прочитать счетчик DMA
HalReportResourceUsage - доложить степень использования ресурсов
HalSetRealTimeClock - установить
IoAssignDriveLetters - назначить букву диску
IoFlushAdapterBuffers - очистить буферы адаптера
HalSetTimeIncrement - установить инкремент времени
IoWritePartitionTable - записать таблицу партийий
IoFreeAdapterChannel - освободить канал адаптера
IoReadPartitionTable - прочитать таблицу партиций
IoWritePartitionTable - записать в таблицу партиций
IoSetPartitionInformation - установить информацию о партиции
KeFlushWriteBuffer - очистить буфер для записи
READ_PORT_BUFFER_UCHAR READ_PORT_BUFFER_ULONG READ_PORT_BUFFER_USHORT READ_PORT_UCHAR READ_PORT_ULONG READ_PORT_USHORT - прочитать данные из порта в разных форматах
WRITE_PORT_BUFFER_UCHAR WRITE_PORT_BUFFER_ULONG WRITE_PORT_BUFFER_USHORT WRITE_PORT_UCHAR WRITE_PORT_ULONG WRITE_PORT_USHORT - записать данные в порт в разных форматах

Полный список:
HAL.dll ExAcquireFastMutex ExReleaseFastMutex ExTryToAcquireFastMutex HalClearSoftwareInterrupt HalRequestSoftwareInterrupt HalSystemVectorDispatchEntry KeAcquireInStackQueuedSpinLock KeAcquireInStackQueuedSpinLockRaiseToSynch KeAcquireQueuedSpinLock KeAcquireQueuedSpinLockRaiseToSynch KeAcquireSpinLockRaiseToSynch KeReleaseInStackQueuedSpinLock KeReleaseQueuedSpinLock KeTryToAcquireQueuedSpinLock KeTryToAcquireQueuedSpinLockRaiseToSynch KfAcquireSpinLock KfLowerIrql KfRaiseIrql KfReleaseSpinLock HalAcquireDisplayOwnership HalAdjustResourceList HalAllProcessorsStarted HalAllocateAdapterChannel HalAllocateCommonBuffer HalAllocateCrashDumpRegisters HalAssignSlotResources HalBeginSystemInterrupt HalCalibratePerformanceCounter HalDisableSystemInterrupt HalDisplayString HalEnableSystemInterrupt HalEndSystemInterrupt HalFlushCommonBuffer HalFreeCommonBuffer HalGetAdapter HalGetBusData HalGetBusDataByOffset HalGetEnvironmentVariable HalGetInterruptVector HalHandleNMI HalInitSystem HalInitializeProcessor HalMakeBeep HalProcessorIdle HalQueryDisplayParameters HalQueryRealTimeClock HalReadDmaCounter HalReportResourceUsage HalRequestIpi HalReturnToFirmware HalSetBusData HalSetBusDataByOffset HalSetDisplayParameters HalSetEnvironmentVariable HalSetProfileInterval HalSetRealTimeClock HalSetTimeIncrement HalStartNextProcessor HalStartProfileInterrupt HalStopProfileInterrupt HalTranslateBusAddress IoAssignDriveLetters IoFlushAdapterBuffers IoFreeAdapterChannel IoFreeMapRegisters IoMapTransfer IoReadPartitionTable IoSetPartitionInformation IoWritePartitionTable KdComPortInUse KeAcquireSpinLock KeFlushWriteBuffer KeGetCurrentIrql KeLowerIrql KeQueryPerformanceCounter KeRaiseIrql KeRaiseIrqlToDpcLevel KeRaiseIrqlToSynchLevel KeReleaseSpinLock KeStallExecutionProcessor READ_PORT_BUFFER_UCHAR READ_PORT_BUFFER_ULONG READ_PORT_BUFFER_USHORT READ_PORT_UCHAR READ_PORT_ULONG READ_PORT_USHORT WRITE_PORT_BUFFER_UCHAR WRITE_PORT_BUFFER_ULONG WRITE_PORT_BUFFER_USHORT WRITE_PORT_UCHAR WRITE_PORT_ULONG WRITE_PORT_USHORT

Чтобы определить, за что ответственен ntoskrnl.exe делаешь то же самое.




© OSzone.net 2001-2012