180
Прикладным программам выделяется 2 Гбайт локального (собственно-
го) линейного (неструктурированного) адресного пространства от границы
64 Кбайт до 2 Гбайт (первые 64 Кбайт полностью недоступны). Приклад-
ные программы изолированы друг от друга, хотя могут общаться через
буфер обмена (clipboard), механизмы DDE и OLE.
В верхней части каждой 2-гигабайтной области прикладной программы
размещен код системных DLL кольца 3, который выполняет перенаправ-
ление вызовов в совершенно изолированное адресное пространство, где
содержится уже собственно системный код. Этот системный код, высту-
пающий как сервер-процесс (server process), проверяет значения парамет-
ров, исполняет запрошенную функцию и пересылает результаты назад в
адресное пространство прикладной программы. Хотя сервер-процесс сам
по себе остается процессом прикладного уровня, он полностью защищен
от
вызывающей его прикладной программы и изолирован от нее.
Между отметками 2 и 4 Гбайт расположены низкоуровневые систем-
ные компоненты Windows NT кольца 0, в том числе ядро, планировщик
потоков и диспетчер виртуальной памяти. Системные страницы в этой об-
ласти наделены привилегиями супервизора, которые задаются физически-
ми схемами кольцевой защиты процессора. Это делает низкоуровневый
системный код
невидимым и недоступным для записи для программ при-
кладного уровня, но приводит к падению производительности во время
переходов между кольцами.
Процессами выделения памяти, ее резервирования, освобождения и
подкачки управляет диспетчер виртуальной памяти Windows NT (Windows
NT virtual memory manager, VMM). В своей работе этот компонент реали-
зует сложную стратегию учета требований к коду и данным процесса для
минимизации
доступа к диску, поскольку реализация виртуальной памяти
часто приводит к большому количеству дисковых операций.
Вся виртуальная память в Windows NT подразделяется на классы: заре-
зервированную (reserved), выделенную (committed) и доступную
(available).
Зарезервированная память представляет собой набор непрерывных ад-
ресов, которые диспетчер виртуальной памяти выделяет для процесса, но
не учитывает в общей квоте памяти процесса до
тех пор, пока она не будет
фактически использована. Когда процессу требуется выполнить запись в
память, ему выделяется нужный объем из зарезервированной памяти. Если
процессу потребуется больший объем памяти, то дополнительная память
может быть одновременно зарезервирована и использована, если в систе-
ме имеется доступная память
Память выделена, если диспетчер VMM резервирует для
нее место в
файле Pagefile.sys на тот случай, когда потребуется выгрузить содержимое
памяти на диск. Объем выделенной памяти процесса характеризует фак-
тически потребляемый им объем памяти. Выделенная память ограничива-
ется размером файла подкачки. Предельный объем выделенной памяти в