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

При вызове API из прикладной программы, DLL клиентской стороны обращаются к локальным процедурам(Local Process Communication-LPC), которые передают вызов в совершенно изолированное адресное пространство, где содержится собственно системный код.

Схема именования объектов — иерархическая.

Она поддерживается с помощью объектов-каталогов

Имя объекта применяется для его открытия, совместного использования и защиты.

Процесс, который знает имя требующегося ему объекта, может его открыть в одном из поддерживаемых режимов.

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

Дескрипторами открытых объектов процессов могут пользоваться все его потоки.

Возможно и совместное использование объекта процессами, каждый из которых открыл его и получил описатель. Система отслеживает число дескрипторов открытого объекта, чтобы закрыть его, когда он больше не нужен.

Защита объектов

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

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

Этот объект служит официальным «удостоверением личности» процесса, когда тот запрашивает какой-либо системный ресурс.

Он содержит список контроля доступа (Access Control List, ACL) - список прав доступа, присоединяемый к каждому создаваемому пользователем объекту в том случае, если пользователь не задал права доступа к объекту явно, и они не наследуются от другого объекта.

 

Управление оперативной памятью в Microsoft Windows 2000/XP.

Логическое распределение адресного пространства процесса приведено на рис. 13.2.

Рис. 13.2. Модель распределения виртуальной памяти в Windows 2000

  • Все системные программные модули находятся в своих собственных виртуальных адресных пространствах, и доступ к ним со стороны прикладных программ невозможен.
  • Ядро системы и некоторые драйверы работают в нулевом кольце защиты в отдельном адресном пространстве.
  • остальные программные модули самой операционной системы, которые выступают как серверные процессы по отношению к прикладным программам (клиентам), функционируют также в своем собственном системном виртуальном адресном пространстве, невидимом для прикладных процессов.
  • Прикладным программам выделяется 2 Гбайт локального (собственного) линейного (неструктурированного) адресного пространства от границы 64 Кбайт до 2 Гбайт (первые 64 Кбайт полностью недоступны).

Прикладные программы изолированы друг от друга, хотя могутобщаться через буфер обмена (clipboard), механизмы DDE и OLE.

  • В верхней части каждой 2-гигабайтной области прикладной программы размещены системные DLL кольца 3, которые выполняет перенаправление вызовов в совершенно изолированное адресное пространство, где содержится уже собственно системный код. Этот системный код, выступающий как сервер-процесс (server process), проверяет значения параметров, исполняет запрошенную функцию и пересылает результаты назад в адресное пространство прикладной программы. Хотя сервер-процесс сам по себе остается процессом прикладного уровня, он полностью защищен от вызывающей его прикладной программы и изолирован от нее.

Между отметками 2 и 4 Гбайт расположены низкоуровневые системные компоненты Windows NT кольца 0, в том числе ядро, диспетчер потоков и диспетчер виртуальной памяти. Системные страницы в этой области наделены привилегиями супервизора, которые задаются физическими схемами кольцевой защиты процессора.

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

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

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

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

Процессами выделения памяти, ее резервирования, освобождения и подкачки , управляет диспетчер виртуальной памяти (virtual memory manager - VMM).

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

  • Каждая виртуальная страница памяти, отображаемая на физическую страницу, переносится в так называемый страничный фрейм (page frame).
  • Прежде чем код или данные можно будет переместить с диска в память, диспетчер виртуальной памяти (VMM) должен найти или создать свободный страничный фрейм или фрейм, заполненный нулями.

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

Диспетчер виртуальной памяти может быстро и относительно легко удовлетворить программные прерывания типа «ошибка страницы» (page fault).

Что касается аппаратных прерываний типа «ошибка страницы», то они приводят к подкачке (paging), которая снижает производительность системы.