Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MS Windows. Элементы архитектуры и системное программирование..pdf
Скачиваний:
273
Добавлен:
01.05.2014
Размер:
1.98 Mб
Скачать

Сидякин И.М.

MS Windows.

Элементы

архитектуры исистемное

программирование.

(курслекций)

MS Windows. Элементы архитектуры и системное программирование.(Курс лекций) ИУ-3.МГТУ. 2000 Автор: Сидякин И.М.

Email: sidiakin@iu3.bmstu.ru

 

Содержание

 

Программная архитектура микропроцессоров семейства Intel x86. Краткое

 

описание...................................................................................................................................

5

Основные программные характеристики МП 8086. ...........................................................

5

Основные программные характеристики МП 80286. .........................................................

6

Основные программные характеристики МП 80386. .........................................................

7

Адресация в защищённом режиме МП8086 .......................................................................

7

Сегменты и схема вычисления виртуального адреса. ......................................................

7

Страничная адресация. ........................................................................................................

9

Защита памяти. ...................................................................................................................

10

Расширение памяти за счёт дискового пространства. ....................................................

11

Поддержка многозадачного исполнения кода. Плоская модель памяти. ......................

12

Обзор архитектуры операционных систем Windows 95 и Windows NT.....................

13

Обзор архитектуры операционной системы MS Windows 95..........................................

13

Виртуальные Машины. .......................................................................................................

13

Системные службы. ............................................................................................................

13

32-х разрядные приложения Windows (Win32).................................................................

14

16-ти разрядные приложения Windows (Win16). ..............................................................

16

Менеджер Конфигурации (Configuration Manager). ..........................................................

16

Менеджер виртуальных машин. (Virtual Machine Manager).............................................

17

Менеджер Файловой системы (Installable File System Manager). ...................................

18

Драйверы устройств............................................................................................................

18

Обзор архитектуры MS Windows NT..................................................................................

19

Hardware Abstraction Level (HAL). ......................................................................................

19

Ядро (Kernel)........................................................................................................................

19

Менеджер Объектов (Object Manager). .............................................................................

20

Менеджер Процессов (Process Manager)..........................................................................

20

Менеджер виртуальной памяти (Virtual Memory Manager) ..............................................

20

Модуль Вызова Локальных Процедур (Local Procedure Call Facility). ............................

21

Менеджер ввода-вывода (I/O Manager). ...........................................................................

21

Монитор защиты (Security reference monitor)....................................................................

22

Подсистема Win32...............................................................................................................

22

Управление памятью в операционных системах Windows 95 и NT. .........................

24

Основные задачи управления памятью............................................................................

24

Страничная организация памяти.......................................................................................

25

Структура виртуального адресного пространства Windows 95. .....................................

25

Типы памяти. .......................................................................................................................

26

Ассоциативный кэш буфер страничного преобразования. .............................................

27

Общая память......................................................................................................................

27

Технология копирования при записи.................................................................................

29

Переключение контекстов памяти.....................................................................................

29

Управление физической памятью в Windows NT. Рабочие наборы страниц (Working

 

Sets)......................................................................................................................................

30

База данных страниц (Page Frame Database). .................................................................

30

Детали организации общей памяти в Windows NT. .........................................................

32

Функции для управления памятью. ...................................................................................

33

Функции управления виртуальной памятью. ....................................................................

33

LPVOID VirtualAlloc(...................................................................................................

33

BOOL VirtualFree( .........................................................................................................

33

Куча (Heap). .........................................................................................................................

34

Файлы отображаемые в память (Memory Mapped Files). ................................................

35

Функции для организации отображения файлов в память. ............................................

36

Создание Отображения файла (File Mapping)..................................................................

36

Создание окна (view) в файле отображаемом в память. ................................................

38

Деинициализация MMF.......................................................................................................

38

Принудительная запись на диск содержимого окон MMF. ..............................................

39

Объекты и ссылки................................................................................................................

40

Основные операции с объектами. .....................................................................................

40

Интерфейс объектов...........................................................................................................

40

Типы объектов. ....................................................................................................................

41

2

Объекты User.......................................................................................................................

41

Объекты GDI........................................................................................................................

41

Объекты Kernel....................................................................................................................

41

Имена объектов Kernel. ......................................................................................................

43

Наследование и дублирование ссылок на объекты Kernel............................................

43

Многозадачность Windows. ................................................................................................

45

Процессы и потоки. .............................................................................................................

45

Совместная и вытесняющая мультизадачность. .............................................................

46

Приоритеты потоков............................................................................................................

46

Классы приоритета..............................................................................................................

47

Базовый приоритет потока. ................................................................................................

48

Переключение потоков. ......................................................................................................

48

Блокировка потоков.............................................................................................................

49

Динамическое повышение приоритета (Priority boosts)...................................................

49

Инверсия приоритета (Priority inversion). ..........................................................................

49

Системы с несколькими процессорами.............................................................................

50

Создание потоков................................................................................................................

51

Завершение работы потоков..............................................................................................

53

Создание потоков в Visual C++ с использованием библиотеки классов Microsoft

 

Foundation Classes (MFC). ..................................................................................................

53

Создание потоков в Delphi с помощью класса TThread...................................................

53

Псевдопотоки (Fibers). ........................................................................................................

54

Локальные переменные потоков. ......................................................................................

54

Синхронизация потоков......................................................................................................

55

Объекты синхронизации.....................................................................................................

56

Индикаторы событий (Events). ...........................................................................................

56

Взаимоисключения (Mutexеs). ...........................................................................................

58

Семафоры (Semaphores)....................................................................................................

59

Ждущие таймеры (Waitable timers)....................................................................................

61

Критические секции (Critical sections)................................................................................

61

Функции ожидания...............................................................................................................

62

Потоки и графический интерфейс. ....................................................................................

65

Тупиковые ситуации (Deadlocks). ......................................................................................

67

Синхронный и асинхронный Ввод/вывод..........................................................................

68

Создание дочерних процессов. Запуск приложений. ......................................................

70

Динамические библиотеки..................................................................................................

73

Динамическая компоновка. ................................................................................................

74

Импорт функций. .................................................................................................................

74

Экспорт функций. ................................................................................................................

76

Прямая компоновка (Explicit loading). ................................................................................

77

Косвенная компоновка (Implicit loading).............................................................................

78

Процедура создания динамической библиотки. ..............................................................

80

Имена функций C и C++. ....................................................................................................

81

Точка входа DLL. .................................................................................................................

82

Использование Локальной Области Потока (Thread Local Storage) в динамических

 

библиотеках.........................................................................................................................

82

Реестр Windows.....................................................................................................................

85

Структура реестра Windows...............................................................................................

86

Корневые ключи (Root Keys). .............................................................................................

87

Функции API для работы с реестром.................................................................................

88

Пример работы с реестром на Delphi................................................................................

90

Файлы реестра. ...................................................................................................................

91

Оболочка Windows (Shell). .................................................................................................

92

Связь документов и приложений. ......................................................................................

92

Запуск приложений в процессе загрузки операционной системы. .................................

94

Размещение иконки в поле статуса Панели задач. .........................................................

94

Приложения Панели Управления (Control Panel Applets)................................................

97

Основы проектирования Виртуальных Устройств Windows 95 ...............................

102

Виртуальные Машины и Менеджер Виртуальных Машин (VMM). ...............................

103

Стандартные виртуальные устройства...........................................................................

104

Программная архитектура виртуальных устройств. ......................................................

105

Сегменты виртуальных устройств. ..................................................................................

105

Блок описания виртуального устройства........................................................................

106

Процедура обработки команд (Device control procedure). .............................................

107

Системные сообщения. ....................................................................................................

108

 

3

Системные сообщения (примеры)...................................................................................

108

Интерфейсы виртуальных устройств. .............................................................................

109

Интерфейс с приложениями Win32. ................................................................................

109

Интерфейс приложений Win32. Пользовательский уровень. .......................................

109

Интерфейс приложений Win32. Системный уровень. ...................................................

111

Интерфейсы приложений Win16 и MS-DOS. ..................................................................

113

Сервисы VxD (Services). ...................................................................................................

115

Базовая структура исходного текста VxD. ......................................................................

116

Динамически загружаемые виртуальные устройства....................................................

116

Разработка VxD на языке Си............................................................................................

117

Вызов сервисов виртуального устройства на языке Си. ...............................................

118

Реализация функций вызываемых извне (callback functions) на языке Си..................

119

Пример 1. Обработка аппаратных прерываний. ............................................................

120

Пример 2. Управление контроллером ПДП. ...................................................................

122

Пример 3. Асинхронные сообщения................................................................................

125

Сервисы Shell. ...................................................................................................................

125

Асинхронный ввод/вывод. ................................................................................................

125

Основы проектирования драйверов WDM для Windows 98/2K.................................

129

Средства проектирования драйверов WDM...................................................................

130

Использование оболочки Microsoft Visual C++ для создания драйверов. ...................

131

Регистрация драйверов WDM..........................................................................................

131

Организация обмена данными. Пакеты запросов ввода-вывода.................................

133

Точка входа драйвера WDM.............................................................................................

134

Устройства. Расширения и cимволические ссылки. ......................................................

135

Процедура создания объекта устройства.......................................................................

137

Типы объектов устройств. ................................................................................................

139

Интерфейсы устройств.....................................................................................................

140

Обработка пакетов запросов ввода-вывода (IRP). ........................................................

143

Синхронная обработка IRP. .............................................................................................

144

Асинхронная обработка IRP.............................................................................................

145

Передача IRP объекту устройства расположенного следующим в стеке....................

146

Отмена асинхронно исполняющихся запросов. .............................................................

150

Основные типы IRP...........................................................................................................

152

Формат кода команды DEVICE_CONTROL.....................................................................

153

Методы передачи данных. ...............................................................................................

154

Метод буферизации (BUFFERED)...................................................................................

155

Прямой метод передачи данных (DIRECT). ...................................................................

156

Простой метод передачи данных (NEITHER). ................................................................

156

Уровни приоритетов..........................................................................................................

157

Поддержка механизма Plug and Play в драйверах WDM...............................................

157

Пакеты запросов PnP и стек объектов устройств. .........................................................

160

Управление аппаратными ресурсами. Обработка IRP_MN_START_DЕVICE.............

161

4

Программная архитектура микропроцессоров семейства Intel x86. Краткое описание.

Автор: Сидякин И.М.

Московский Государственный Технический Университет им. Н.Э. Баумана. Кафедра ИУ-3, (11.1998)

Email:sidiakin@iu3.bmstu.ru

В этой главе даётся представление об основных элементах программной архитектуры микропроцессоров семейства x86. Системное программное обеспечение работает в тесном взаимодействии с аппаратурой. Основные принципы, на которых строится современная операционная система, такие как мультизадачность, управление памятью, защита данных, являются развитием свойств аппаратуры. Знание основ работы аппаратуры необходимо разработчику программного обеспечения. Информация, которая приводится в этой главе, послужит основой для последующего изложения принципов работы системного программного обеспечения.

Основные программные характеристики МП 8086.

Первое, и наиболее простое устройство из серии процессоров х86, которое мы рассмотрим это МП 8086. Старые операционные системы, такие как, например, DOS, разрабатывались в основном в расчёте на этот микропроцессор. Основные особенности программной архитектуры МП 8086 приведены в таблице.

 

 

 

Регистры данных.

16(8/8) бит: AX (AH/AL), BX(BH/BL), CX(CH/CL), DX(DH/DL)

Индексные регистры

16

бит: SI, DI , BP, SP, IP

и регистры

 

 

указателей.

 

 

Сегментные

16

бит: CS, DS, SS, ES

регистры.

 

 

Разрядность шины

16

бит.

данных

 

 

Разрядность шины

20

бит.

адреса

 

 

Адресуемый

1 МБ.

диапазон памяти

 

 

Для доступа к памяти это устройство использует так называемую сегментную схему адресации. Физический адрес вычисляется по двум заданным 16-ти разрядным значениям: СМЕЩЕНИЕ и СЕГМЕНТ. Эти значения МП извлекает из кода команды. Они могут быть определены косвенно или прямо в аргументах команды. Значение сегмента всегда извлекается из сегментного регистра. Имя сегментного регистра определяется кодом команды. В случае если имя регистра не определено в исходном тексте команды, используется ряд соглашений (см. ниже примеры). СМЕЩЕНИЕ может располагаться в одном из регистров данных, указателей или индексных регистров (пример.1), прямо прописываться в аргументах команды (пример.2), или вычислятся (пример. 3).

Ex.1

Mov

[SI], AX

;

сегмент

DS,

смещение

в SI

Ex.2

Mov

ES:[555h], AX

;

сегмент

ES,

смещение

равно 555

;(hexadecimal)

Ex.3 Mov [BP-2], AX ; сегмент SS, смещение равно ;содержимому BP минус 2.

МП вычисляет физический адрес (PHA) по следующей простой формуле:

PHA = (СЕГМЕНТ * 16) + СМЕЩЕНИЕ;

Содержимое 16-ти разрядного сегментного регистра умножается на 16 ( (или, что тоже самое, сдвигается влево на 4 разряда), затем к полученному 20 разрядному значению прибавляется 16-ти разрядное смещение.

5

МП 8086 имеет 20 разрядную шину адреса, что ограничивает адресуемое пространство одним мегабайтом (220 -1 максимальное значение адреса). Рассмотренная схема адресации позволяет вычислить любой адрес в пределах 1 МБ.

Архитектура МП 8086 имеет ряд особенностей. Среди прочих следует отметить:

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

Относительно небольшой диапазон адресного пространства. Современное программное обеспечение требует для работы, как правило, гораздо больше одного мегабайта памяти.

Перечисленные выше характеристики МП 8086 определяют сферу применения этого устройства, например, в качестве микроконтроллера в измерительной системе или системе управления. Но приложения такого типа здесь обсуждаться не будут.

Основные программные характеристики МП 80286.

В MП 80268 реализован новый защищённый режим работы. Этот МП может работать в двух режимах. В защищённом режиме доступны новые свойства, к которым относится отличное от схемы СЕГМЕНТ:СМЕЩЕНИЕ управление памятью, включая и защиту памяти. В то же время МП 80286 может работать как МП 8086. Этот режим называется реальным. В таблице приведены основные характеристики микропроцессора 80286.

 

Реальный режим

Защищённый режим

Регистры

Те же 16 разрядные

регистры МП 8086

Шина данных

16 бит

Шина адреса

24 бита

Адресуемый диапазон

до 1MБ + 64КБ - 16 байт

до 16 МБ

памяти

 

 

 

 

 

Защита памяти

Не возможна

Возможна

Он имеет тот же, что и МП 8086 набор 16-ти разрядных регистров и 16-ти разрядную шину данных. Но шина адреса расширена до 24 разрядов, что позволяет адресоваться к 224 (= 16МБ) внешней памяти. К сожалению, эту возможность нельзя использовать в реальном режиме потому, что изложенная выше схема вычисления адреса работает в пределах немного превышающих 1МБ. Шина адреса МП 8086 имеет 20 линий, что ограничивает максимальный физический адрес значением 220-1. МП 80286 имеет дополнительные линии шина адреса, что позволяет, хотя и незначительно, увеличить адресное пространство доступное программам работающим в реальном режиме. Определим максимальное значение адреса, которое может быть получено схемой сегментной адресации принятой в МП 8086 и реальных режимах следующих моделей семейства. Подставив максимальные (216 = 0xFFFF) значения сегмента и смещения в формулу для вычисления физического адреса получим

PHA = (СЕГМЕНТ * 16) + СМЕЩЕНИЕ = 0xFFFF*16 + 0xFFFF =

0xFFFF0 + 0xFFFF = 0x10FFEF.

«1 мегабайт плюс 64 килобайта минус 16 байт». Таким образом, используя дополнительно 21-ю линию шины адреса, можно расширить адресное пространство процессора в реальном режиме примерно на на 64 килобайта. Приведённые расчеты определяют предел схемы вычисления адреса в реальном режиме. Эти дополнительные 64К – 16 байт называются верхней областью памяти (High Memory Area /HMA/) и используются, как правило, операционной системой (DOS) для размещения драйверов. HMA используется в реальном режиме всех микропроцессоров семейства, начиная с МП 80286.

В защищённом режиме применяется другой метод адресации, который позволяет адресоваться к памяти в полном диапазоне 0 – 16МБ. Этот метод получил развитие в последующих моделях МП x86. Адресное пространство было увеличено до четырёх гигабайт. Более подробно схема работы процессора в защищённом режиме описана в следующем параграфе, который посвящён МП80386.

6

Основные программные характеристики МП 80386.

Этот микропроцессор является базовой моделью, на основе которой были разработаны последующие МП компании Intel включая МП 80486 и Pentium. Несмотря на значительные усовершенствования, отличающие последние модели микропроцессоров, существуют основные принципы архитектуры, которые их объединяют. Архитектура МП80386 построена на классических концепциях, которые операционные системы используют для управления памятью и процессом исполнения программ. Основные программные характеристики процессора приводятся в таблице:

 

 

Режимы работы

Реальный, Защищённый, Режим

 

виртуального MП8086 (V86)

Регистры общего назначения

32-х разрядные. (доступны)

Сегментные регистры

16-ти разрядные (используются по

 

разному в различных режимах)

Шина данных

32 бита

Шина адреса

32 бита

Адресуемый диапазон памяти

До 4-х ГБ в защищённом режиме

Основные свойства защищённого

Защита памяти, Мультизадачность,

режима:

Управление виртуальной памятью.

Это устройство может работать в трёх различных режимах.

Реальный режим. Регистры общего назначения процессора расширены до 32-х бит. Например регистр 16-ти разрядный регистр Aх составляет младшее слово 32-х разрядного регистра Eax. 32-х разрядные регистры могут использоваться в реальном режиме в логических и арифметических операциях. Однако для формирования смещения адреса в реальном режиме используются только младшие 16 разрядов этих регистров. Сегментные регистры этого МП так же 16-ти разрядные.

Режим виртуального МП8086 (V86). В этом режиме процессор эмулирует работу МП8086. Одновременно может быть запущено несколько виртуальных машин V86 которые разделяют процессорное время.

Защищённый режим. Этот режим работы процессора является основным. В защищённом режиме адресуемая память расширяется до 4ГБ. Появляется новые мощные средства управления памятью и псевдопараллельным исполнением программ. Управление памятью эта одна из наиболее важных проблем, которые операционная система решает в тесном взаимодействии с аппаратурой.

Адресация в защищённом режиме МП8086

В защищённом режиме для управления памятью микропроцессор использует дополнительные «внешние» данные. Эти данные располагаются в памяти. Поэтому процессоры Intel начиная с 808386, после включения питания запускаются в реальном, а не в защищённом режиме. Системное программное обеспечение перед переключением МП в защищённый режим размещает в памяти и инициализирует все необходимые структуры данных. Ссылки на эти структуры помещаются в специальные служебные регистры МП. После этих подготовительных операций МП переключается в защищённый режим.

Сегменты и схема вычисления виртуального адреса.

С «точки зрения» процессора память это набор блоков, которые называются сегментами. Следует отметить, что в реальном режиме СЕГМЕНТом называется параметр в формуле вычисления адреса. В защищённом режиме термин сегмент просто имеет другой смысл. Сегменты могут размещаться в любом месте 32-х разрядного адресного пространства процессора и могут иметь размеры до 4ГБ. Диапазоны адресов сегментов могут перекрываться. Характеристики каждого сегмента описываются в структуре, которая называется дескриптор сегмента. Дескриптор содержит начальный адрес сегмента, размер (limit), информацию о типе, уровне привилегий и других атрибутах сегмента. Упрощённый формат дескриптора приведён на рисунке 1. Следует отметить, что дескрипторы используются не только для описания сегментов содержащих код, данные или стеки программ. Некоторые системные структуры, как например, локальные дескрипторные таблицы и шлюзы так же

7

описываются дескрипторами. Форматы дескрипторов различных типов могут отличаться.

31

 

 

 

20

 

16

 

 

8

 

0

Base

G

x

0

x

Limit

 

P

DPL

Type

 

Base 23..16

31..24

 

 

 

 

19..16

 

 

 

 

 

 

 

 

Base 15..0

 

 

 

 

Limit 15..0

 

Base 32-х битовый базовый адрес сегмента.

Limit Размер сегмента в байтах или страницах (зависит от значения бита G).

G Гранулярность. Если G = 0 Limit указан в байтах, иначе в страницах (Размер страницы 4096 байт).

Type тип дескриптора.

DPL Уровень привилегий дескриптора. P бит присутствия.

Рисунок 1. Формат дескриптора.

Дескрипторы размешаются во внешней памяти в нескольких системных таблицах. Операционная система должна создать и проинициализировать некоторые из этих таблиц перед переключением МП в защищённый режим. ОС, по крайней мере, должна создать Глобальную дескрипторную таблицу (GDT) с одним или несколькими дескрипторами сегментов содержащих системный код, данные и стек. Кроме этого следует создать Дескрипторную таблицу прерываний (IDT) которая содержит дескрипторы обработчиков прерываний. Во время работы МП в защищённом режиме дескрипторы могут модифицироваться удаляться и добавляться. Обычно операционная система создаёт одну таблицу GDT и одну таблицу IDT. Дополнительно система может создать одну или несколько Локальных дескрипторных таблиц (LDT). Каждая такая таблица выделяется для дескрипторов сегментов отдельной пользовательской программы. Такой способ используется для защиты программ друг от друга. Адреса и размеры таблиц записываются в служебные регистры микропроцессора. В регистр GDTR заносится адрес GDT, в регистр IDTR адрес IDT и в регистр LDTR адрес текущей LDT. Содержимое регистра LDTR изменяется каждый раз, когда операционная система выделяет время для исполнения очередной программы. Сегментные регистры процессора используются для ссылки на дескриптор в одной из дескрипторных таблиц. Содержимое сегментного регистра называется селектором. Селектор содержит номер дескриптора в таблице и флаг, по которому определяется в какой из таблиц LDT или GDT расположен дескриптор. Кроме этого в селекторе указываются атрибуты защиты. 13 старших разрядов занимает номер дескриптора. Следовательно, каждая таблица может содержать до 213 = 8K дескрипторов. Бит 2 (считая с нуля) определяет таблицу, и два младших бита используются в механизме защиты памяти (Рисунок 2).

15

2

0

Index

TI

RPL

Index номер дескриптора в таблице.

TI выбор таблицы. Если TI = 0 используется GDT иначе LDT. RPL запрашиваемый уровень привилегий.

Рисунок 2. Формат селектора.

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

8

Рассмотрим процедуру вычисления адреса в защищённом режиме на примере

исполнения инструкции чтения памяти MOV AL, [EDI]. Эта инструкция считывает в

регистр AL байт из ячейки памяти, адрес которой вычисляется по схеме изображённой

на рисунке 3.

 

 

 

 

 

 

ПАМЯТЬ

 

 

Считать это в AL

 

 

 

 

 

 

Mov AL, [EDI]

 

GDT (или LDT)

 

 

 

 

Дескриптор

 

 

 

 

GDTR ( или LDTR)

 

 

Процессор

+

База и размер таблицы

 

 

 

Регистр DS.

Теневой регистр DS

 

 

Index

Base

Limit

Др. атрибуты

 

 

 

EDI

 

 

 

+

СМЕЩЕНИЕ

ВИРТУАЛЬНЫЙ АДРЕС

 

 

Рисунок 3. Схема вычисления виртуального адреса в защищённом режиме.

Страничная адресация.

Физический адрес, это значение, которое выставляется на шину адреса процессора. Схема представленная на рисунке 3 используется для вычисления так называемого виртуального адреса. Процессор имеет встроенный механизм преобразования виртуального адреса в физический. Значения этих адресов могут не совпадать. Этот механизм называется трансляция страниц. Трансляция страниц разрешается программно установкой бита PG(31) в служебном регистре процессора CR0. Если трансляция страниц запрещена, физический адрес всегда равен виртуальному. Трансляция страниц позволяет изменить 20 старших бит виртуального адреса перед выдачей его на шину. Таблица перекодировки виртуальных адресов в физические задаётся программно. Это важное свойство аппаратуры используется операционной системой для решения ряда важнейших задач. Управление физической памятью может быть скрыто от пользовательских программ. Каждая пользовательская программа работает с линейным непрерывным диапазоном виртуальных адресов, в то время как физическую основу этого диапазона формирует операционная система. Физически данные могут быть разделены на фрагменты, которые располагаться в любом порядке в оперативной памяти или на диске. Эта гибкость в размещении данных позволяет операционной системе оптимизировать работу с памятью. Для использования механизма трансляции станиц операционная система должна разместить в памяти специальные таблицы перекодировки адресов: каталог таблиц страниц (Page Directory (PD)) и таблицы страниц (Page Tables(PT)).

Форматы записей каталога и таблиц страниц приведены на рисунке 4. Схема трансляции адресов приведена на рисунке 5. Начальные адреса таблиц выровнены по границе 4К. Размер одой таблицы не может больше 4К. Следовательно, каждая таблица может содержать до 1024 32-х разрядных записей. Двухуровневая схема

9

трансляции адресов (см. рисунок 5) позволяет охватить 1024 (записи в PD)*1024(записи в PT)*4096(размер страницы) = 4GB адресов.

31

11

 

 

0

Физический адрес страницы (или таблицы

xx00

D

A

00

U/S

R/W

P

станиц для каталога)

 

 

 

 

 

 

 

Физический адрес измеряется в страницах, т.о. для адресации к любой станице в пределах 4GB достаточно 20 бит.

A бит доступа. МПУ устанавливает этот бит перед записью или чтением из страницы.

D МПУ устанавливает этот бит (только в записях таблиц страниц) перед записью в страницу.

U/S пользователь/супервизор. Определяет уровень привелегий страницы. Используется для защиты страниц.

R/W чтение/запись. Ограничивает доступ к странице чтением.

Pбит присутствия. Указывает на то, что страница присутствует в физической памяти.

Рисунок 4. Формат записи таблицы страниц/каталога страниц (PTE/PDE).

ВИРТУАЛЬНЫЙ АДРЕС

31

 

 

 

 

21

 

11

0

номер таблицы в

номер страницы в

смещение внутри 4к

 

каталоге

 

таблице

страницы.

 

 

 

 

 

 

 

Регистр CR3

 

 

 

 

 

+

 

 

 

физический адрес каталога

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

каталог

Таблица страниц

 

+

адрес страницы

+

адрес таблицы страниц

Страница

(4096 байт) ФИЗИЧЕСКИЙ АДРЕС

Рисунок 5. Трансляция виртуального адреса в физический.

Адресное пространство процессора разбивается на блоки размером 4096 байт. Эти блоки называются страницами. Процессор может отобразить любую страницу из виртуального диапазона адресов в физический. Операционная система управляет трансляцией страниц, модифицируя записи каталога и таблиц страниц. С помощью этого механизма решаются следующие основные задачи управления памятью.

Защита памяти.

МП 80386 обеспечивает защиту памяти на уровне сегментов и на уровне страниц. Это разные методы защиты. Защита на уровне сегментов основана на использовании битов поля DPL дескриптора сегмента. Значение этого поля определяет уровень приоритета

10

сегмента: 0 – самый высокий уровень (сегмент «наиболее защищён»), 1, 2 и 3. Эти уровни так же называются кольцами защиты. Основное правило защиты заключается в том, что код расположенный в сегменте с более низким уровнем приоритета не может получить доступ к данным (или коду), расположенным в сегменте с более высоким приоритетом. Пользовательские программы размещаются в сегментах с DLP > 0. Системные структуры, включая дескрипторные таблицы и таблицы страниц, располагаются в сегментах с DLP = 0. Защищённый код операционной системы так же располагается в сегментах с наивысшим уровнем привилегий. Этот код может модифицировать системные структуры и содержать привилегированные инструкции МП, которые используются для изменения содержимого служебных регистров. Пользовательское программное обеспечение может получить доступ к защищённым данным и коду, только под контролем операционной системы. Защита на уровне сегментов использует четыре уровня приоритетов. В механизме защиты памяти на уровне страниц применяется только два уровня. Для защиты страниц используются биты U/S и R/W записей таблиц страниц. Если бит U/S сброшен, страница относится к классу supervisor. Такая страница доступна только из 0-го кольца защиты. Если значение бита R/W равно 0, страница из любого кольца доступна только для чтения. В 32-х разрядных ОС Windows применяется двухуровневая схема защиты. Пользовательские приложения Win32 размещаются в сегментах (DPL = 3) покрывающих всё адресное пространство процессора. Однако, страницы в которых размещаются системные данные и код защищены от пользовательских приложений (U/S = 0). К этим страницам может обращаться только системное ПО размещённое в сегментах с DPL = 3. Сегменты с уровнями привилегий DPL = 1 и DPL = 2 не используются.

Расширение памяти за счёт дискового пространства.

Оперативная память вычислительной системы, как правило, занимает незначительную часть адресного пространства. Однако современное программное обеспечение, например, системы управления базами данных или обработки изображений требует для нормальной работы значительных объемов памяти. В мультизадачной операционной системе память расходуется на все параллельно работающие приложения. Объем памяти может быть существенно увеличен с помощью механизма трансляции страниц. В оперативной памяти можно располагать только необходимые в данный момент страницы. Остальные страницы могут быть временно сохранены на жёстком диске. Эта выгрузка страниц на диск производится операционной системой, в случае если ресурсы оперативной памяти исчерпаны. Бит присутствия (P) в записях таблиц станиц (PTE) используется для организации загрузки страницы с диска в оперативную память по запросу. Если страница находится в физической памяти бит P установлен в единицу и запись PTE содержит адрес страницы в памяти. Если страница находится на диске, бит P сброшен, и запись PTE содержит ссылку на месторасположения страницы на диске, вместо её адреса . При попытке обращения к не присутствующей в оперативной памяти странице процессор вырабатывает исключение (page fault exception). Исключение приводит к передаче управления по заранее определённому операционной системой адресу. Вызывается программа обработчик исключения. Обработчик загружает страницу в оперативную память по какому либо физическому адресу и корректирует запись в таблице страниц. После этого обработчик возвращает управление и операция, которая привела к исключению, повторяется. Операционная система также отвечает за выгрузку страниц на диск для освобождения памяти. При этом каждый раз выбирается страница, обращение к которой производилось наиболее давно. Схема загрузки страниц по запросу приводится на рисунке 6.

11

Данные из страницы

Физическая

Страница

 

 

присутствует в

Аппаратура

 

память

 

памяти

управления

ЧТЕНИЕ ПАМЯТИ

 

Страница

 

виртуальной

 

 

памятью

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Аппаратное исключение.

 

 

 

 

 

(страница не присутствует в

 

 

 

 

 

 

 

памяти)

 

 

 

 

Системное ПО

 

 

 

 

 

 

 

 

Таблица

 

 

загружает страницу

 

 

 

 

 

 

 

страниц

 

 

в память и

 

 

 

 

 

 

модифицирует

 

 

 

 

 

 

 

 

 

 

 

 

запись PTE.

 

 

 

запись PTE

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 6. Обработка исключения при обращении к памяти.

Поддержка многозадачного исполнения кода. Плоская модель памяти.

Процесс трансляции адресов управляется программно. Операционная система может модифицировать запись таблицы страниц, для изменения физического адреса одной страницы,, модифицировать запись каталога таблиц страниц изменив сразу же адреса 1024 страниц или полностью изменить структуру перекодировки адресов записав новое значение в регистр CR3. Корректировка таблиц используется для поддержки псевдопараллельного исполнения программ в операционных системах MS Windows. Код и данные 32-х разрядных пользовательских приложений Windows размещается в сегментах, размер которых равен 4ГБ. Эти сегменты перекрывают друг друга и покрывают всё адресное пространство процессора. Реально приложения могут использовать только часть страниц этих сегментов. В Windows 95, например, приложению выделяется область виртуальных адресов в диапазоне от 4МВ до 2ГБ. Каждое приложение имеет своё собственное виртуальное пространство. Это означает, что одинаковые виртуальные адреса двух разных приложений проецируются в разные физические. В виртуальном адресном пространстве приложения Win32 как бы наложены друг на друга. Однако для каждого приложения операционная система создаёт отдельную структуру таблиц страниц. Приложения Windows 95 исполняются псевдопараллельно. Операционная система выделяет каждому приложению небольшие интервалы процессорного времени. Когда время очередного интервала истекает, система передаёт управление очередному приложению. В этот момент происходит модификация структуры таблиц страниц.

12

Обзор архитектуры операционных систем Windows 95 и Windows NT.

Автор: Сидякин И.М.

Московский Государственный Технический Университет им. Н.Э. Баумана. Кафедра ИУ-3, (11.1998)

Email:sidiakin@iu3.bmstu.ru

Обзор архитектуры операционной системы MS Windows 95.

Общая структура операционной системы Windows 95 (Чикаго) приведена на рисунке 1. На этой схеме компоненты операционной системы разделены на две группы: пользовательские компоненты (user mode components) и компоненты ядра (kernel mode components). Компоненты ядра ОС защищены от пользовательских, так как они размещаются в памяти в нулевом кольце защиты а пользовательские в третьем кольце защиты.

 

 

 

Системная виртуальная машина

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MS DOS

 

 

 

 

 

 

 

 

 

 

 

 

 

MS DOS

 

 

 

 

 

 

 

 

 

 

 

 

virtual

 

 

 

 

 

 

 

 

 

 

 

 

Виртуальная

 

 

 

 

 

 

 

 

 

 

 

 

virtual

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложения Win 32

 

 

Приложения Win 16

 

 

 

 

machine

 

 

Компоненты

 

 

 

 

 

 

 

машина

 

 

 

 

 

 

 

 

 

 

 

machine

 

 

третьего

 

 

 

 

 

 

 

 

 

MS DOS

 

 

 

 

 

 

 

 

 

кольца защиты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

RING-3

 

Системные службы: 16 & 32 бит. KERNEL, USER, GDI

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Компоненты

Модуль

 

Модуль

 

Модуль

нулевого

управления

 

управления

 

управления

кольца защиты

виртуальными

 

файловой

 

конфигурацией.

RING-0

машинами

 

системой

 

(Configuration

 

VMM

 

IFSM

 

Manager.)

 

 

 

 

 

 

Драйверы устройств

Рисунок 1. Windows 95.

Виртуальные Машины.

По определению, которое приводится в документации MS Win 95 Resource Kit

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

Windows 95 создаёт одну Системную виртуальную машину для всех приложений Windows и системных служб и отдельные виртуальные машины для обслуживания каждого сеанса MS-DOS. Это свойство поддерживается на уровне аппаратуры (МП 80386) которая позволяет запускать несколько виртуальных машин МП 8086.

Системная ВМ работает в защищённом режиме МП 80386, а виртуальные машины V86 в режиме виртуального МП 8086.

Системные службы.

Системные службы, это часть системного ПО, расположенная в третьем кольце защиты. Системные службы обеспечивают программный интерфейс операционной системы и пользовательских приложений и выполняют ряд служебных функций.. Системные службы разделяются на три основных модуля, которые показаны на рисунке 2. В Чикаго каждый модуль реализован в виде пары динамических библиотек - 16-ти и 32-х разрядной.

13

GDI

графические функции, печать.

User

интерфейс с устройствами ввода например мышь и клавиатура, пользовательский интерфейс (окна, меню), таймер, звуковые карты и коммуникационные порты.

Kernel

управление виртуальной памятью, переключение задач, файловый ввод-вывод, обработка исключений и т.д.

USER16 - USER32, GDI16-GDI32, KERNEL16-KERNEL32

Рисунок 2. Системные службы.

16-ти разрядный код используется для обеспечения совместимости с приложениями Win16. Но 32-х разрядные приложения так же используют 16-ти разрядный системный код. Таким образом, нельзя утверждать, что Чикаго полностью 32-х разрядная операционная система. Системные службы содержат значительный набор функций, которые доступны пользовательским приложениям. Этот набор функций называется

API (Application Programming Interface) - Программный интерфейс приложения. Важно отметить, что системные динамические библиотеки тесно взаимодействуют с компонентами нулевого кольца.

32-х разрядные приложения Windows (Win32).

Windows может управлять одновременно одним или несколькими 32-х разрядными приложениями. Каждое приложение рассматривается операционной системой как отдельный процесс. (Часто, хотя и не вполне оправданно термины приложение и процесс используются как синонимы) Процесс может исполняться внутри одной виртуальной машины. Каждый процесс Win32 может работать с виртуальным адресным пространством размером 4ГБ. Каждому процессу выделяется частное адресное пространство для хранения его кода и данных размером до 2ГБ. Приложения Win32 не могут «видеть» друг друга в памяти, так как в этом частном диапазоне, для разных приложений (процессов), система обеспечивает различное отображение логических адресов в физические (рисунок 3). Оставшаяся половина адресов используется операционной системой. Виртуальные адреса в этом диапазоне частично защищены от пользовательских программ (компонентов третьего кольца защиты). Эти адреса в основном глобальные, т.е. отображаются в физические одинаково для всех процессов.

14

Виртуальная память

 

Физическая память

 

 

 

 

 

Процесс 1.

 

 

Свободная страница 1

 

 

Система, страница 4

 

 

 

 

 

 

 

 

Процесс 2, страница 3

Системная память

 

 

 

Процесс 1, страница 2

 

 

 

Процесс 2, страница 4

(2GB)

 

 

 

 

 

 

 

Система, страница 1

 

 

 

 

 

 

 

 

Процесс 1, страница 1

 

 

 

Память выделенная

 

Трансляция

 

Свободная страница 2

 

 

Процесс 1, страница 4

процессу (2GB)

 

страниц

 

 

 

Система, страница 5

 

 

 

 

 

 

 

 

 

 

 

 

Прцесс 2.

 

 

Система, страница 3

 

 

 

 

 

 

Процесс 2, страница 1

 

 

 

 

 

 

 

 

Свободная страница 5

Системная память

 

 

 

Процесс 2, страница 2

 

 

 

Процесс 2, страница 5

(2GB)

 

 

 

 

 

 

 

Свободная страница 4

 

 

 

 

Процесс 1, страница 3

 

 

 

Память выделенная

 

 

 

Свободная страница 3

 

 

 

Система, страница 2

процессу (2GB)

 

 

 

 

 

 

 

 

Рисунок 3. Отображение виртуальной памяти в физическую.

Каждое приложение Win32 имеет свою собственную очередь сообщений (рисунок 4). Это означает, что обработка сообщений в одном из приложений Win 32 запущенных в системе не оказывает влияния на работу других приложений. Эта схема обработки сообщений называется Асинхронный ввод (Desynchronized Input).

Системные сообщения

Входная очередь сообщений

и сообщения от

(сообщения от аппаратных

приложений

устройств)

очередь

сообщений приложения Win 32

очередь сообщений приложения Win 32

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение Win32

 

Приложение Win32

 

 

 

 

 

 

 

Рисунок 4. Каждое Win32 приложение имеет свою очередь сообщений (Десинхронизированный ввод).

15

16-ти разрядные приложения Windows (Win16).

16-ти разрядный код в Windows 95 поддерживается для совместимости с программным обеспечением разработанным для версий Windows 3.x. Кроме того, как было отмечено выше, часть системных служб ОС реализована в виде 16-разрядных динамических библиотек. 16-ти разрядный код и данные размещаются в общей (shared) области памяти адресного пространства. Это означает, что приложения Win16 не могут быть скрыты друг от друга в памяти как 32-х разрядные приложения. Они размещаются в верхних двух гигабайтах виртуального адресного пространства. Код и данные приложения Win16 теоретически доступны другим приложениям Win16 и Win32. Разумеется, приложения Win 16 не используют плоскую модель памяти с сегментами размером 4 гигабайта. Вместо этого каждому приложению Win16 выделяются несколько небольших сегментов (размером до 64K) для размещения кода стека и данных. Эти сегменты, как уже было отмечено, располагаются в верхних 2ГБ виртуального адресного пространства (точнее между вторым и третьим гигабайтом). Все приложения Win16 используют единственную очередь сообщений. (Рисунок 5). В этой схеме, во время, когда одно из приложений Win16 обрабатывает сообщение, извлечённое из общей очереди, другие приложения находятся в режиме ожидания. Этот метод называется синхронным вводом (Synchronized Input).

Системные сообщения и сообщения от приложений

Входная очередь сообщений

(сообщения от аппаратных устройств

Общая очередь сообщений Win16

БЛОКИРОВАНО БЛОКИРОВАНО

Приложение Win16

 

Приложение Win16

 

Приложение Win16

 

 

 

 

 

Рисунок 5. Все приложения Win16 совместно используют одну очередь сообщений. (Синхронизированный ввод)

Менеджер Конфигурации (Configuration Manager).

Менеджер конфигурации, это модуль, в задачу которого входит поддержка процедуры автоматического определения аппаратной конфигурации системы (Plug and Play). Модуль управляет процессом обнаружения аппаратных устройств и выделения им необходимых для работы системных ресурсов. Менеджер конфигурации взаимодействует с драйверами устройств, нумераторами (enumerator) и арбитраторами (arbitrator). Специальные системные драйверы, так называемые нумераторы, используются для обнаружения аппаратных устройств и определения системных ресурсов которые требуются каждому устройству для функционирования. С помощью нумераторов создаётся древовидная структура данных (Hardware Tree) в которой описывается всё обнаруженное оборудование. Каждое устройство в этой структуре представлено в этом дереве отдельным листом, который располагается в одной из ветвей. Ветви представляют отдельные шины, к которым могут быть подключены устройства (шина ISA, шина PCI, шина SCSI, шина USB, BIOS, MONITOR). Шина имеет

16

более широкое понятие. Так, например, BIOS в данном контексте считается шиной, к которой подключены стандартные системные устройства (контроллер прерываний и т.п.). Каждый системный ресурс (память, адресное пространство портов ввода вывода, аппаратные прерывания, и каналы ПДП) распределяется между устройствами соответствующими системными драйверами - арбитраторами.

Менеджер конфигурации

Драйверы

Enumerator Enumerator Enumerator

Нумераторы Арбитраторы устройств

Рисунок 6. Модуль управления конфигурацией (Configuration Manager).

Менеджер виртуальных машин. (Virtual Machine Manager).

Менеджер виртуальных машин (VMM) это основной компонент ядра (нулевого кольца) операционной системы. В его задачу входит создание и обслуживание виртуальных машин. Напомню, что все приложения Win32 и Win16 запускаются внутри одной системной виртуальной машины, плюс каждый сеанс MS-DOS запускается в отдельной виртуальной машине МП 8086. VMM выполняет следующие три основные задачи:

распределение процессорного времени между исполняемыми программными модулями.

управление памятью

поддержка приложений MS-DOS.

Мультизадачность одно из основных свойств операционной системы. Windows 95 поддерживает две схемы организации мультизадачности. Совместная мультизадачность (Cooperative Multitasking), применяется для обеспечения совместимости с приложениями, разработанными для Windows 3.x. Эта модель используется приложениями Win16, и предполагает, что переключение задач зависит от проверки общей очереди сообщений. Если какое либо приложение перестаёт выполнять эту операцию (например, в результате зависания) остальные 16-ти разрядные программы не смогут получить управление. Этот метод, следовательно, легко приводит к сбою всей системы при возникновении ошибки в одном из исполняющихся приложений. Важной особенностью данного способа является, то, что можно быть вполне уверенным в том, что операционная система не передаст управление другой задаче во время обработки очередного сообщения, но только после окончания обработки. Приложения Win32 используют другой метод, который называется Вытесняющая мультизадачность (Preemptive Multitasking). Этот метод не зависит от обработки сообщений. VMM принимает решение о переключении задач по «внутренним соображениям». Этот процесс конечно можно программно контролировать. Для этого операционная система предоставляет определённый набор средств, которые мы рассмотрим позднее. В вытесняющей мультизадачности вводится термин поток (Thread). Поток определяется как цепочка инструкций МП расположенная в адресном пространстве одного из запущенных процессов. Операционная система, загружая приложение Win32, создаёт новый процесс. Процессу выделяются сегменты размером 4GB и, как обсуждалось выше, частное адресное пространство в пределах младших двух гигабайт. В эти адреса помещается помимо прочего код приложения. Вместе с процессом система создаёт новый поток - первый поток процесса (primary thread) который начинается с первой инструкции программы. Для каждого приложения Win32 автоматически создаётся один процесс, и один поток, но в дальнейшем несколько потоков могут быть созданы в дополнение к первому. Операционная система предоставляет несколько API функций для создания и управления потоками. Поток это элемент в алгоритме распределения процессорного времени. Система периодически выделяет небольшие интервалы процессорного времени для исполнения каждого активного потока.

При работе с памятью Чикаго использует так называемую схему загрузки/выгрузки страниц по требованию (Demand paging). Страницы кода и данных приложений и системных модулей могут временно размещаться вне физической памяти - на жёстком

17

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

VMM так же обеспечивает интерфейс с ядром системы для программного обеспечения MS-DOS которое использует системные ресурсы.

Менеджер Файловой системы (Installable File System Manager).

Этот компонент операционной системы контролирует доступ к аппаратуре и системным программным модулям обслуживающим файловую систему. Программное обеспечение входящее в IFS полностью 32-х разрядное. IFS поддерживает файловую систему FAT32 (VFAT), файловую систему CD-ROM (VCDFS) и отвечает за перенаправление данных в сеть.

Драйверы устройств.

Windows 95 поддерживает различные типы драйверов т.е. программных модулей непосредственно работающих с аппаратурой. Некоторые типы унаследованы из предыдущих версий Windows и DOS. Для некоторых стандартных классов оборудования операционная система включает, так называемые универсальные драйверы (Universal drivers), которые реализуют набор основных и наиболее общих функций по работе с аппаратурой. Примером универсального драйвера является драйвер принтера UNIDRV. В дополнение к этому драйверу для каждой конкретной модели принтера разрабатывается и подключается к универсальному драйверу минидрайвер (Mini-driver) который содержит относительно небольшое количество кода и выполняет функции специфические для данной модели. (рисунок 7). Драйверы такого типа реализуются в виде динамических библиотек и следовательно принадлежат компонентам третьего кольца защиты операционной системы.

Другие компоненты ОС

Универсальный драйвер

Мини-драйвер

Устройство

Мини-драйвер

Устройство

Рисунок 7. Универсальные драйверы и мини-драйверы.

Драйверы, расположенные в нулевом кольце защиты называются виртуальными устройствами (Virtual Devices) или сокращённо VxD. Виртуальные устройства могут работать с аппаратурой за некоторым исключением напрямую без посредничества операционной системы. VxD могут использовать функции предоставляемые менеджером виртуальных машин и другими виртуальными устройствами. Этот набор функций отличается от API, который используют пользовательские программы (VxD не может вызывать функции API). В состав операционной системы входит ряд виртуальных устройств, которые управляют стандартной аппаратурой. Например, VPICD.VXD обслуживает программируемый контроллер прерываний, VDMAD.VXD управляет контроллером ПДП. Виртуальное устройство может быть не связано с какой либо аппаратурой. Такие VxD разрабатываются в случае, когда требуется использовать преимущества программного обеспечения расположенного в нулевом кольце защиты. Виртуальные устройства имеют интерфейс с другими VxD, приложениями Win32, Win16

и MS-DOS.

18