
- •Системное программное обеспечение
- •Структура Windows NT
- •Структура Windows NT
- •Структура Windows NT
- •Структура Windows NT
- •Структура Windows NT
- •Структура Windows NT
- •Структура Windows NT
- •Структура Windows NT
- •Драйверы устройств в Windows NT
- •Драйверы устройств в Windows NT
- •Драйверы устройств в Windows NT
- •Драйверы устройств в Windows NT
- •Драйверы устройств в Windows NT
- •Драйверы устройств в Windows NT
- •Драйверы устройств в Windows NT
- •Драйверы устройств в Windows NT
- •Драйверы устройств в Windows NT
- •Драйверы устройств в Windows NT
- •Драйверы устройств в Windows NT
- •Драйверы устройств в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Структура простейшего драйвера режима ядра в Windows NT
- •Лекция № 11 «Использование ассемблера с языками высокого уровня»
- •Использование ассемблера с языками высокого уровня
- •Использование ассемблера с языками высокого уровня
- •Использование ассемблера с языками высокого уровня
- •Использование ассемблера с языками высокого уровня
- •some_proc
- •Главный недостаток этого подхода — сложность создания функции с изменяемым числом параметров, аналогичных
- •Запись some_proc(a,b,c,d,e)
- •some_proc proc push bp
- •some_proc proc
- •эквивалентно
- •Таблица объясняет соглашения о передаче параметров. Например, передача параметров stdcall отличается и от
- •то реально компилятор пишет call _some_proc
- •Пример. C
- •Пример. Pascal

Системное программное обеспечение
Лекция № 10 «Драйверы устройств в MS Windows»

Структура Windows NT
Внутренний мир Windows NT (здесь и далее под Windows NT имеется в виду вся линейка - NT4, 2000, XP, 2003 и т.д.) разделен на две части с четко обозначенными границами, как в плане адресного пространства, так и в плане прав и обязанностей кода в этом адресном пространстве выполняющегося.
Сразделением адресного пространства все на удивление просто. Все четыре, доступных в 32-х разрядной архитектуре, гигабайта виртуальной памяти разделены на две равные части. Нижняя половина отдана процессам пользовательского режима, верхняя принадлежит ядру.
Сразделением прав и обязанностей немного сложнее.

Структура Windows NT
К пользовательским относятся следующие процессы:
•Процессы поддержки системы (System Support Processes) - например, процесс входа в систему Winlogon (реализован в \%SystemRoot%\ System32\Winlogon.exe);
•Процессы сервисов (Service Processes) - например, спулер печати (реализован в \%SystemRoot%\System32\spoolsv.exe);
•Пользовательские приложения (User Applications) - бывают пяти типов: Win32, Windows 3.1, MS-DOS, POSIX (обеспечивает совместимость UNIX-программ) и OS/2;
•Подсистемы окружения (Environment Subsystems) - поддерживается три подсистемы окружения: Win32 (реализована в \%SystemRoot%\ System32\Csrss.exe), POSIX (реализована в \%SystemRoot%\System32\ Psxss.exe), OS/2 (реализована в \%SystemRoot%\System32\os2ss.exe).
Начиная с Windows XP поддержка POSIX и OS/2 прекращена.

Структура Windows NT
Ядро состоит из следующих компонентов:
•Исполнительная система (Executive) - управление памятью, процессами и потоками и др.;
•Ядро (Kernel) - планирование потоков, диспетчеризация прерываний и исключений и др. (реализовано в \%SystemRoot%\System32\Ntoskrnl.exe);
•Драйверы устройств (Device Drivers) - драйверы аппаратных устройств, сетевые драйверы, драйверы файловых систем;
•Уровень абстрагирования от оборудования (Hardware Abstraction Layer, HAL) - изолирует три вышеперечисленных компонента от различий между аппаратными архитектурами (реализован в \ %SystemRoot%\System32\Hal.dll);

Структура Windows NT
•Подсистема поддержки окон и графики (Windowing And Graphics System) - функции графического пользовательского интерфейса (Graphic User Interface, GUI) (реализована в \%SystemRoot%\ System32\Win32k.sys).

Структура Windows NT
Хотя процессоры семейства Intel x86 поддерживают четыре уровня привилегий (называемых кольцами защиты), в Windows используются только два:
•0-ой для режима ядра
•3-ий для режима пользователя.
Это связано с поддержкой других RISC (Reduced Instruction Set Computing — вычисления с сокращённым набором команд) процессоров (alpha, mips – RISC процессоры фирм DEC и MIPS Technologies), в которых реализовано только два уровня привилегий.
Windows NT4.0 поддерживала эти архитектуры, но начиная с Windows 2000 осталась поддержка только x86.

Структура Windows NT
Процессы пользовательского режима:
•имеют свои защищенные адресные пространства,
•потоки этих процессов выполняются в непривилегированном режиме процессора (называемом пользовательским или третьим кольцом защиты),
•не могут выполнять привилегированные команды процессора,
•имеют ограниченный и опосредованный доступ к системным данным и к системному адресному пространству,
•не имеют прямого доступа к оборудованию.
Процессы пользовательского режима рассматриваются как потенциально опасные с точки зрения стабильности системы. Их права ограничиваются. И всяческие попытки выйти за пределы этих ограничений жестко пресекаются.

Структура Windows NT
Правда, в процессе своей работы, потоки этих процессов, вызывая системные сервисы, переходят в режим ядра, но в этом случае полностью теряют контроль над своим выполнением до возвращения обратно в режим пользователя.
Компоненты ядра:
•разделяют единое адресное пространство (верхние два гигабайта),
•выполняются в привилегированном режиме процессора (называемом режимом ядра или нулевым кольцом защиты),
•могут выполнять все, в том числе и привилегированные команды процессора,
•имеют неограниченный и прямой доступ к системным данным и коду,
•имеют прямой, или через HAL, доступ к оборудованию.

Структура Windows NT
Код ядра (собственно это и есть сама система) рассматривается как полностью доверяемый (т.е. этому коду доверено делать все, что он пожелает). Поэтому, будучи загруженным в системное адресное пространство, драйвер становится частью системы и на него не накладываются какие-либо ограничения.
Таким образом пользовательские приложения отделены от собственно операционной системы.
Если поставить целью написать сколь-нибудь серьезное приложение, для работы которого необходим доступ к внутренним функциям или структурам данных системы, то возникнет множество ограничений, преодолеть которые можно только разместив свой код в системном адресном пространстве.

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