Lection 3
.doc
Лекция 3
Архітектура операційної системи Windows NT Огляд архітектури ОС Windows NT Захищені підсистеми ОС Windows NT Керування пам’ятью
Структура и особенности операционных систем семейства Windows NT
К семейству ОС Windows NT относятся ОС Windows NT 3.51, 4.0, 2000, XP, их различные модификации, такие как Windows 2000 Advanced Server, Windows 2000 DataCenter, Windows XP Professional, Windows XP Home. Они отличаются между собой интерфейсами, вариантами поставок, возможностями работы с различной аппаратурой, но в целом они очень близки друг к другу.
При разработке архитектуры Windows NT была в значительной степени использована концепция микроядра. В соответствии с этой концепцией ОС разделена на несколько подсистем, каждая из которых выполняет отдельный набор сервисных функций. Например, сервис памяти, сервис по созданию процессов, или сервис по планированию процессов. Каждый сервис выполняется в пользовательском режиме, выполняя цикл проверки запроса от клиента на одну из его сервисных функций. Клиент, которым может быть либо другая компонента ОС, либо прикладная программа, запрашивает сервис, посылая сообщение на сервер. Ядро ОС (или микроядро), работая в привилегированном режиме, доставляет сообщение нужному сервису, затем сервис выполняет операцию, после этого ядро возвращает результаты клиенту с помощью другого сообщения.
Структурно Windows NT может быть представлена в виде двух частей:
-
часть операционной системы, работающая в режиме пользователя,
-
часть операционной системы, работающая в режиме ядра.
Часть Windows NT, работающая в режиме ядра и содержащая компоненты, которые управляют виртуальной памятью, объектами (ресурсами), вводом-выводом и файловой системой (включая сетевые драйверы), взаимодействием процессов и частично системой безопасности, называется NT executive - исполнительной частью (выделена серым цветом на рис. 2.3). В режиме ядра работает не только исполнительная часть Windows NT, но и другие компоненты, такие как: интерфейс графических устройств, драйвера, уровень аппаратной абстракции, ядро. Эти компоненты взаимодействуют между собой с помощью межмодульной связи. Каждая компонента вызывает другие с помощью набора тщательно специфицированных внутренних процедур.
Часть Windows NT, работающую в режиме пользователя, составляют сервисы или серверы - так называемые защищенные подсистемы (рис. 2.3). Серверы Windows NT называются защищенными подсистемами, так как каждый из них выполняется в отдельном процессе, память которого отделена от других процессов системой управления виртуальной памятью NT executive. Так как подсистемы автоматически не могут совместно использовать память, они общаются друг с другом посредством посылки сообщений. Сообщения могут передаваться как между клиентом и сервером, так и между двумя серверами. Все сообщения проходят через исполнительную часть Windows NT. Ядро Windows NT планирует потоки защищенных подсистем точно так же, как и потоки обычных прикладных процессов.
Рисунок 2.3. – Структура Windows NT
Поддержку защищенных подсистем обеспечивает исполнительная часть - Windows NT executive (рис. 2.3), которая работает в пространстве ядра и никогда не сбрасывается на диск.
Состав исполнительной части – NT executive.
-
Менеджер объектов. Создает, удаляет и управляет объектами NT executive - абстрактными типами данных, используемых для представления ресурсов системы. Менеджер объектов NT выполняет следующие функции.
-
Выделяет память для объекта.
-
Присоединяет к объекту так называемый дескриптор безопасности, который определяет права доступа и использования объекта.
-
Создает и манипулирует структурой каталога объектов, в котором хранятся имена объектов.
-
Создает дескриптор объекта и возвращает его вызывающему процессу.
-
Менеджер процессов. Создает и завершает, приостанавливает и возобновляет процессы и потоки, а также хранит о них информацию.
-
Менеджер безопасности. Устанавливает правила защиты на компьютере.
-
Менеджер виртуальной памяти. Обеспечивает для процессов такие наборы функций: управление виртуальным адресным пространством процесса; разделение памяти между процессами; защита виртуальной памяти одного процесса от других процессов. В Windows NT реализованы такие механизмы защиты памяти:
1. Каждый процесс имеет собственное адресное пространство. Доступ к физическим адресам другого процесса запрещается на аппаратном уровне;
2. Наличие режимов ядра и пользователя. В режиме ядра потоки имеют доступ к системным данным, а в пользовательском режиме это запрещено.
3. Страничный механизм защиты. Для каждой виртуальной страницы определен набор признаков, определяющий разрешенные типы доступа в пользовательском режиме и в режиме ядра.
4. Защита памяти с использованием объектно-ориентированного подхода. Монитор ссылок безопасности проверяет, разрешен ли доступ процесса к данному объекту при каждом открытии процессом указателя к странице памяти.
-
Менеджер кэша. Обеспечивает хранение блоков диска в памяти, которые недавно использовались, определяет какие блоки могут потребоваться в дальнейшем, а какие нет. Этот менеджер взаимодействует с менеджером виртуальной памяти и с файловой системой. Если на компьютере используется несколько файловых систем, то этот менеджер поддерживает все эти системы.
-
Менеджер plug and play. При обнаружении нового устройства при загрузке системы или при подключении устройства через шину USB этот менеджер получает сообщение о новом устройстве и устанавливает соответствующий драйвер.
-
Менеджер энергопотребления. Управляет потреблением электроэнергии, отключает монитор и диски если к ним нет обращений некоторое время, а на портативных компьютерах он следит за состоянием батарей. В случае если уровень заряда батарей приближается к определенному значению, он сообщает об этом пользователю и готовит компьютер к коректному выключению.
-
Менеджер конфигурации. Отвечает за состояние реестра, добавляет новые и ищет необходимые ключи.
-
Менеджер локального вызова процедур. Обеспечивает взаимодействие между процессами и подсистемами. Основным средством, объединяющим все подсистемы Windows NT в единое целое, является механизм вызова локальных процедур (Local Procedure Call - LPC). LPC представляет собой оптимизированный вариант более общего средства - удаленного вызова процедур (RPC), которое используется для связи клиентов и серверов, расположенных на разных машинах сети. Средства LPC поддерживают несколько способов передачи данных между клиентами и серверами: один обычно используется для передачи коротких сообщений, другой - для длинных сообщений, а третий оптимизирован специально для использования подсистемой Win32. Каждая подсистема устанавливает порт - канал связи, посредством которого с ней могут связываться другие процессы. Порты реализуются как объекты.
В режиме ядра работают и такие важные подситемы как:
-
Менеджер (подсистема) ввода-вывода. Включает в себя следующие компоненты: менеджер ввода-вывода, предоставляющий средства ввода-вывода, независимые от устройств; файловые системы - NT-драйверы, выполняющие файл-ориентированные запросы на ввод-вывод и транслирующие их в вызовы обычных устройств; сетевой редиректор и сетевой сервер - драйверы файловых систем, передающие удаленные запросы на ввод-вывод на машины сети и получающие запросы от них; драйверы устройств NT executive - низкоуровневые драйверы, которые непосредственно управляют устройством;
-
Интерфейс графических устройств GDI (Graphics Device Interface) выполняет задачи управления графическими изображениями, поступающими на монитор и принтер. Этот интерфейс позволяет выводить данные на монитор и принтер вне зависимости от конкретного устройства. В ОС семейства Windows NT этот интерфейс реализован на уровне ядра, а в других ОС семейста Windows он был реализован на уровне пользователя. Это позволяет существенно повысить производительность системы.
Исполнительная часть, в свою очередь, основывается на службах нижнего уровня, предоставляемых ядром (его можно назвать и микроядром) NT. В функции ядра входит:
-
планирование процессов,
-
обработка прерываний и исключительных ситуаций,
-
синхронизация процессоров для многопроцессорных систем,
-
восстановление системы после сбоев.
Ядро работает в привилегированном режиме и никогда не удаляется из памяти. Обратиться к ядру можно только посредством прерывания. Ядро расположено над уровнем аппаратных абстракций (Hardware Abstraction Level HAL), который концентрирует в одном месте большую часть машинно-зависимых процедур. HAL располагается между NT executive и аппаратным обеспечением и скрывает от системы такие детали, как контроллеры прерываний, интерфейсы ввода/вывода и механизмы взаимодействия между процессорами. Такое решение позволяет легко переносить Windows NT с одной платформы на другую путем замены только слоя HAL.
Защищенные подсистемы Windows NT работают в пользовательском режиме и создаются Windows NT во время загрузки операционной системы. Сразу после создания они начинают бесконечный цикл своего выполнения, отвечая на сообщения, поступающие к ним от прикладных процессов и других подсистем. Среди защищенных подсистем можно выделить подкласс, называемый подсистемами окружения. Подсистемы окружения реализуют интерфейсы приложений операционной системы (API). Другие типы подсистем, называемые интегральными подсистемами, исполняют необходимые операционной системе задачи. Например, большая часть системы безопасности Windows NT реализована в виде интегральной подсистемы, сетевые серверы также выполнены как интегральные подсистемы.
Наиболее важной подсистемой окружения является Win32 - подсистема, которая обеспечивает доступ для приложений к 32-bit Windows API. Дополнительно эта система обеспечивает графический интерфейс с пользователем и управляет вводом/выводом данных пользователя. Также поддерживаются подсистемы POSIX, OS/2,16-разрядная Windows и MS-DOS.
Каждая защищенная подсистема работает в режиме пользователя, вызывая системный сервис NT executive для выполнения привилегированных действий в режиме ядра. Сетевые сервмсы могут выполняться как в режиме пользователя, так и в режиме ядра, в зависимости от того, как они разработаны. Windows NT использует защищенные подсистемы для того, чтобы:
-
обеспечить несколько программных интерфейсов (API), по возможности не усложняя при этом базовый программный код (NT executive);
-
изолировать базовую операционную систему от изменений или расширений в поддерживаемых API.;
-
объединить часть глобальных данных, требующихся всем API, и в то же время отделить данные, использующиеся каждым отдельным API от данных, использующихся другими API;
-
защитить окружение каждого API от приложений, а также от окружений других API, и защитить базовую операционную систему от различных окружений;
-
позволить операционной системе расширяться в будущем за счет новых API.
Подсистемы связываются между собой путем передачи сообщений. Когда, например, пользовательское приложение вызывает какую-нибудь API-процедуру, подсистема окружения, обеспечивающая эту процедуру, получает сообщение и выполняет ее либо обращаясь к ядру, либо посылая сообщение другой подсистеме. После завершения процедуры подсистема окружения посылает приложению сообщение, содержащее возвращаемое значение. Посылка сообщений и другая деятельность защищенных подсистем невидима для пользователя.
Таким образом, реализация частей ОС в виде серверов, выполняющихся в режиме пользователя, является важнейшей частью проекта Windows NT и оказывает глубокое воздействие на все функционирование системы.
Важной особенностью ОС семейства NT является обеспечение поддержки двух уже существующих программных интерфейсов OS/2 и POSIX, а также возможности добавления других API в будущем.
Для того чтобы программа, написанная для одной ОС, могла быть выполнена в рамках другой ОС, недостаточно лишь обеспечить совместимость API, но еще необходимо обеспечить ей ее окружение: структуру процесса, средства управления памятью, средства обработки ошибок и исключительных ситуаций, механизмы защиты ресурсов и семантику файлового доступа. Windows NT поддерживает пять прикладных сред операционных систем: MS-DOS, 16-разрядный Windows (Win16), OS/2 1.x, POSIX и 32-разрядный Windows (Win32). Все пять прикладных сред реализованы как подсистемы окружения. Каждая работает в собственном защищенном пользовательском пространстве. Подсистема Win32 обеспечивает поддержку дисплея, клавиатуры и мыши для четырех оставшихся подсистем.
16-битовые приложения DOS и Windows работают на VDM (virtual DOS machines - виртуальные машины DOS), каждая из которых эмулирует полный 80x86 процессор с MS-DOS. В NT VDM является приложением Win32, значит, как и обычные модули прикладных сред для UNIX, приложения DOS и 16-битовой Windows расположены в слое непосредственно над подсистемой Win32.
Несмотря на наличие возможностей по обеспечению работы программ стандартов OS/2 и POSIX в реальности эти возможности очень ограничены.
В основе операционных систем семейства NT лежат объекты. Все преимущества, которые реализованы в семействе NT - единообразная форма именования, совместного использования и учета системных ресурсов, система обеспечения безопасности, простота модификации достигнуты за счет использования объектно-ориентированного подхода.
В Windows NT любой ресурс системы, который одновременно может быть использован более чем одним процессом, включая файлы, совместно используемую память и физические устройства, реализован в виде объекта и управляется рядом функций. Такой подход сокращает число изменений, которые необходимо внести в операционную систему в процессе ее эксплуатации. Если, скажем, изменилось что-то в аппаратуре, то все, что необходимо сделать - заменить соответствующий объект. Аналогично, если требуется поддержка новых ресурсов, то надо добавить только новый объект, не изменяя при этом остального кода операционной системы.
При разработке части NT executive использованы объекты для представления системных ресурсов, потому что они обеспечивают централизованные средства для выполнения трех важных задач ОС:
-
поддержка воспринимаемых человеком имен системных ресурсов;
-
разделение ресурсов и данных между процессами;
-
защита ресурсов от несанкционированного доступа.
В виде объектов реализованы только такие данные, которые нужно разделять, защищать, именовать или делать видимыми для программ пользовательского режима (с помощью системных функций). Структуры, которые используются только одним компонентом executive для выполнения внутренних функций, не являются объектами.
В Windows NT процесс - это просто объект, создаваемый и уничтожаемый менеджером объектов. Объект-процесс, как и другие объекты, содержит заголовок, который создает и инициализирует менеджер объектов. Менеджер процессов определяет атрибуты, хранимые в теле объекта-процесса, а также обеспечивает системный сервис, который восстанавливает и изменяет эти атрибуты.
В число атрибутов объекта-процесса входят.
-
Идентификатор процесса - уникальное значение, которое идентифицирует процесс в рамках операционной системы.
-
Токен доступа - исполняемый объект, содержащий информацию о безопасности.
-
Базовый приоритет - основа для исполнительного приоритета потока процесса.
-
Процессорная совместимость - набор процессоров, на которых могут выполняться потоки процесса.
-
Предельные значения квот - максимальное количество страничной и нестраничной системной памяти, дискового пространства, процессорного времени – доступные для использования процессами пользователя.
-
Время исполнения - общее количество времени, в течение которого выполняются все потоки процесса.
Поток является выполняемой единицей, которая располагается в адресном пространстве процесса и использует ресурсы, выделенные процессу. Поток реализован также в форме объекта и управляется менеджером объектов. Поток имеет следующие атрибуты.
-
Идентификатор клиента - уникальное значение, которое идентифицирует поток при ее обращении к серверу.
-
Контекст потока - информация, которая необходима ОС для того, чтобы продолжить выполнение прерванного потока. В контексте потока содержится текущее состояние регистров, стеков и индивидуальной области памяти, которая используется подсистемами и библиотеками.
-
Динамический приоритет - значение приоритета потока в данный момент.
-
Базовый приоритет - нижний предел динамического приоритета потока.
-
Процессорная совместимость потока - перечень типов процессоров, на которых может выполняться поток.
-
Время выполнения потока - время выполнения потока в пользовательском режиме и в режиме ядра, накопленное за период существования потока.
-
Состояние предупреждения - флаг, который показывает, что поток должен выполнять вызов асинхронной процедуры.
-
Счетчик приостановок - текущее количество приостановок выполнения потока.
Кроме перечисленных имеются и некоторые другие атрибуты.
В ОС семейства Windows NT используются файловые системы FAT 16, FAT 32, NTFS. Первые две файловые системы являются общими для всех ОС семейства Windows, а последняя реализована только в ОС семейства Windows NT.
В последних версиях ОС Windows семейства NT появилось новое понятие – нити (fibers). Как известно переключение между потоками осуществляется в соответствии с принципом приоритетности. В некоторых ситуациях может потребоваться особый контроль над передачей управления между участками кода программы. В этих случаях применяют нити (fibers). Нити представляют собой более усложненную форму длинного перехода. В Windows нити используются редко, однако в других операционных системах подобный механизм находит широкое применение. Нити удобны в случае, если требуется адаптировать для Windows 2000 код, написанный для какой-либо другой операционной системы, например, Unix.
Для операционной системы каждая нить — это поток, который выполняет эту нить в текущий момент. Отличие состоит в том, что нить может контролировать, какой из других нитей того же самого потока будет передано управление. Переключение между потоками осуществляется в прежнем режиме. Нити контролируют взаимную передачу управления только в рамках потока, к которому они принадлежат. Другие потоки выполняются независимо от этого.
Если в программе не требуется осуществлять контроль над переключением между выполнением разных участков кода, то можно обойтись без использования нитей. Обычно большинство задач, связанных с параллельным выполнением различных действий, можно решить при помощи потоков.
2.3. Управление памятью в ОС Windows
ОС семейства Windows используют программно формируемые адреса, называемые виртуальными адресами, которые в свою очередь формируют виртуальное адресное пространство (виртуальная память). Большинство систем виртуальной памяти, в частности, система, реализованная в ОС Windows, используют страничную организацию памяти. Когда используется механизм виртуальной памяти, виртуальные адреса передаются диспетчеру памяти, который отображает виртуальные адреса на физические адреса памяти.
Пространство виртуальных адресов разделено на части (единицы), называемые страницами. Соответствующие единицы в физической памяти называются страничными блоками. Страница – это определенная область памяти с данными, имеющая фиксированный размер, зависящий от конкретного процессора. Например, на компьютерах с процессором Pentium размер страницы равен 4 Кбайт, а для процессора Itanium он может біть рамен 8 или 16 Кбайтам. Страницы подгружаются по требованию приложений или операционной системы. Передача данных между оперативной памятью и жестким диском всегда происходит в страницах.
В ОС Windows у каждого пользовательского процесса есть собственное виртуальное адресное пространство. Виртуальные адреса являются 32-разрядными. Это дает возможность предоставить каждому процессу до 4 Гбайт виртуального адресного пространства. Нижние 2 Гбайт исключая 256 Мбайт, доступны для программы и данных процесса, а верхние 2 Гбайт защищенным образом отображаются на память ядра. Организация виртуального адресного пространства для процесса показана на рис. 2.4. Белым цветом на рисунке изображена область данных, принадлежащая только данному процессу. Остальные области представляют собой память, совместно используемую всеми процессами. Нижние и верхние 64 Кбайт каждого виртуального адресного пространства в обычном состоянии не отображаются на физическую память. Это сделано для обеспечения перехвата программных ошибок, поскольку недействительные указатели часто имеют значение 0 или 1. Попытки использования таких указателей в ОС Windows вызовут немедленное прерывание вместо чтения или записи по неверному адресу. При запуске программ из MS-DOS в режиме эмуляции нижние 64 Кбайт могут отображаться на физическую память.
Рисунок. 2.4. Организация виртуального адресного пространства для пользовательского процесса
Данные, принадлежащие процессу, и программа пользователя могут занимать почти 2 Гбайт. Последний фрагмент этой области памяти содержит некоторые системные указатели и таймеры, используемые совместно всеми пользователями в режиме доступа «только для чтения». Это дает возможность всем процессам получать доступ к этим данным без лишних системных вызовов.
Верхние 2 Гбайт виртуального адресного пространства содержат операционную систему, включая код, данные и выгружаемый и невыгружаемый пулы (используемые для объектов и т. д.). Верхние 2 Гбайт используются совместно всеми процессами. Таблицы страниц, принадлежат каждому процессу индивидуально. Программы в режиме пользователя не могут записывать данные в верхние 2 Гбайта памяти. Чтение из этого пространства памяти также ограничено. Использование верхних 2 Гбайт памяти для размещения указанных выше компонент дает возможность потоку при обращении к системному вызову переключатся в режим ядра и оставатся все тем же потоком. При этом вся операционная система и все ее структуры данных (как и весь пользовательский процесс) становятся видимыми в адресном пространстве потока, когда он переключается в режим ядра. Это дает возможность отказаться от изменения карты памяти или выгрузки кэша при входе в ядро. Единственное действие, которое необходимо сделать - это переключиться на стек режима ядра. Обеспечение быстрых системных вызовов при таком подходе приводит к уменьшению адресного пространства для каждого процесса. Иногда для работы некоторых систем, в частности, СУБД, пространства в 2 Гбайта становится недостаточно и поэтому в версиях Windows 2000 Advanced server и Datacenter Server есть возможность использования 3 Гбайт для адресного пространства пользовательских процессов.
Каждая виртуальная страница может находиться в одном из трех состояний:
Свободная страница. Это страница, которая не используется в настоящий момент. При обращении к ней вызывается страничное прерывание. Когда процесс запускается, все его страницы находятся в свободном состоянии, пока программа и исходные данные не будут отображены на их адресное пространство.
Фиксированной страница становится сразу, как только данные или программа отображаются на нее. Обращение к этой странице преобразуется при помощи аппаратного обеспечения виртуальной памяти и завершается успехом, если эта страница находится в оперативной памяти. В противном случае происходит страничное прерывание, операционная система находит требуемую страницу на диске и считывает ее в оперативную память.
Зарезервированной страница может быть в том случае если она не может отображаться, пока резервирование не будет явно удалено программой, резервировавшей страницу. Такое состояние полезно в том случае, если необходимо обеспечить резервирование определенного непрерывного адресного пространства памяти для работы программы.
Кроме этих состояний страница может иметь атрибут доступности для чтения, записи или исполнения. У свободных и зарезервированных страниц никогда не бывает копий страниц на диске и обращение к ним всегда приводит к страничным прерываниям. Копии страниц на диске организованы в один или несколько файлов подкачки. Может быть организовано до 16 файлов подкачки. Для повышения производительности операций ввода-вывода они могут быть распределены по отдельным дискам, которых также может быть до 16. У каждого файла подкачки есть начальный размер и максимальный размер, до которого он может вырасти. При установке ОС может быть создан файл подкачки максимального размера. Это позволяет уменьшить вероятность его сильной фрагментации, однако при помощи Панели управления позднее можно создать новые файлы подкачки и изменить их размер. Операционная система следит за тем, какие виртуальные страницы на какую часть файла подкачки отображаются. Страницы, содержащие исполняемый код программ, не дублируются в файлах подкачки. В файлах подкачки хранятся только изменяемые страницы.
Процессом перемещения страниц из памяти на диск и обратно управляет операционная система. Для каждого процесса ядро поддерживает так называемую таблицу страниц - внутреннюю структуру, которая позволяет преобразовать виртуальные адреса в физические. Когда страница перемещается в физическую память, ядро обновляет таблицы страниц соответствующих процессов. Если ядру требуется место в физической памяти, оно вытесняет самые старые страницы физической памяти в страничный файл. Манипуляции ядра с физической памятью совершенно незаметны (прозрачны) для приложений, которые работают только со своими виртуальными адресными пространствами.
При каждом обращении к памяти происходит чтение из таблицы страниц информации о виртуальной странице, к которой произошло обращение. Если данная виртуальная страница находится в оперативной памяти, то выполняется преобразование виртуального адреса в физический. Если же нужная виртуальная страница в данный момент выгружена на диск, то происходит так называемое страничное прерывание. Выполняющийся процесс переводится в состояние ожидания, и активизируется другой процесс из очереди готовых. Параллельно программа обработки страничного прерывания находит на диске требуемую виртуальную страницу и пытается загрузить ее в оперативную память. Если в памяти имеется свободная физическая страница, то загрузка выполняется немедленно, если же свободных страниц нет, то решается вопрос, какую страницу следует выгрузить из оперативной памяти. В данной ситуации может быть использовано много разных критериев выбора, наиболее популярные из них следующие: