Pages Menu
Categories Menu

Опубликовано | Нет комментариев

Поддержка оборудования Windows

Другой основной задачей ядра является абстрагирование или изоляция исполняющей системы и драйверов устройств от различий аппаратных архитектур, поддерживаемых Windows. Эта задача включает обработку вариантов в таких функциях, как обработка прерываний, диспетчеризация исключений и мультипроцессорная синхронизация.

Даже для этих, зависящих от аппаратных особенностей, функций конструкция ядра пытается максимизировать объем общего кода. Ядро поддерживает набор переносимых и семантически идентичных для разных архитектур интерфейсов.

Основная часть кода, реализующего эти переносимые интерфейсы, также идентична для разных архитектур.

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

Некоторые интерфейсы ядра в действительности реализованы на уровне аппаратных абстракций — HAL, поскольку их реализация может варьироваться для систем внутри одного и того же архитектурного семейства.

Ядро также содержит небольшой объем кода с интерфейсами для x86-систем, необходимыми для поддержки старых программ MS-DOS. Эти x86-интерфейсы не обладают переносимостью, в том смысле, что они не могут вызываться на машинах, основанных на каких-нибудь других архитектурах; их там просто не будет. Этот код, предназначенный для x86-систем, к примеру, поддерживает вызовы для обращения с таблицами глобальных дескрипторов (GDT) и таблицами локальных дескрипторов (LDT), являющихся аппаратными особенностями x86.

Другие примеры кода ядра, зависящего от конкретной архитектуры, включают интерфейсы для обеспечения поддержки буфера трансляции и кэш-памяти центрального процессора. Из-за способов реализации кэш-памяти эта поддержка требует применения разного кода для разных архитектур.

Другим примером может послужить переключение контекста. Хотя на высоком уровне для выбора потока и переключения контекста используется один и тот же алгоритм (контекст предыдущего потока сохраняется, загружается контекст нового потока и запускается новый поток), в реализациях на разных процессорах существуют архитектурные различия.

Поскольку контекст описывается состоянием процессора (его регистров и т. д.), сохраняемый и загружаемый контекст варьируется в зависимости от архитектуры.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.

↓