Обзор современных ОС Windows NT Windows NT Windows
Обзор современных ОС Windows NT
Windows NT Windows NT - многопользовательская многозадачная полностью 32-разрядная операционная система.
Цели разработки Надежность Безопасность Переносимость
Выпущенные версии
Отличия между Windows 95/98 и Windows NT 4.0
Структура Windows NT
Концепция микроядра Изначально при разработке Windows NT была использована концепция микроядра. Начиная с версии NT 4.0 большая часть ОС была возвращена в ядро.
Концепция микроядра ОС делится на несколько подсистем-серверов, каждая из которых выполняет отдельный набор сервисных функций (сервис памяти, сервис по созданию процессов, сервис по планированию процессов и т.д.). Каждый сервер выполняется в пользовательском режиме, выполняя циклическую проверку, не появился ли запрос от клиента на одну из его сервисных функций. Клиент (другая компонента ОС или прикладная программа) запрашивает сервис, посылая сообщение на сервер. Этот запрос перехватывается микроядром. Ядро ОС, работая в привилегированном режиме, доставляет сообщение нужному серверу. Сервер выполняет операцию, после чего ядро возвращает результаты клиенту с помощью другого сообщения.
Структура ОС на базе микроядра Приложение Микроядро Аппаратура Файловый сервер Сервер процессов Принт сервер Сетевой сервер Сервер памяти Ответ Ответ Запрос Запрос Режим пользователя Режим ядра
Концепция микроядра Использование концепции микроядра способствует переносимости ОС Весь машинно-зависимый код изолирован в микроядре Для переноса системы требуется меньше изменений, и все они логически сгруппированы вместе.
Пересылка сообщений менее быстра, чем обычные вызовы функций. Поэтому, в Windows NT не используется модель микроядра в чистом виде. Кроме микроядра, в привилегированном режиме работает часть Windows NT, называемая executive - исполнительная подсистема.
Структурно Windows NT может быть представлена в виде двух частей: часть операционной системы, работающая в режиме пользователя часть операционной системы, работающая в режиме ядра
HAL Уровень аппаратных абстракций (Hardware Abstraction Level HAL) концентрирует в одном месте основную часть машинно-зависимых процедур. HAL находится ядром и аппаратным обеспечением HAL скрывает от системы такие детали, как контроллеры прерываний, интерфейсы ввода/вывода и механизмы взаимодействия между процессорами. Это позволяет легко переносить Windows NT с одной платформы на другую путем замены только слоя HAL.
HAL Работа уровня HAL заключается в том, что бы предоставлять остальной системе абстрактные аппаратные устройства. Эти устройства представляются в виде машинно-независимых служб. В HAL включены те службы, которые зависят от набора микросхем материнской платы. HAL разработан, что бы скрывать различия между материнскими платами, но не процессорами.
Службы уровня HAL Доступ к регистрам устройств Адресация к устройствам, независящим от шины Обработка прерываний и возврат из прерываний Операции DMA Управление таймерами, часами реального времени, спин-блокировками нижнего уровня Синхронизация многопроцессорных конфигураций Интерфейс с BIOS Доступ к CMOS-памяти
Уровень ядра Основное назначение – сделать остальную часть ОС независимой от аппаратуры и как следствие легко переносимой на другие платформы. Ядро построено на низкоуровневых службах HAL, формируя из них абстракции более высоких уровней.
Функции ядра В функции ядра входит: планирование нитей, обработка прерываний и исключительных ситуаций, синхронизация процессоров для мультипроцессорных систем, восстановление системы после сбоев. На службах нижнего уровня, предоставляемых ядром основывается исполнительная система.
Ядро работает в привилегированном режиме и никогда не удаляется из памяти. Обратиться к ядру можно только посредством прерывания.
Исполнительная подсистема Часть Windows NT, работающая в режиме ядра, называется executive - исполнительной подсистемой (ИП). ИП не зависит от архитектуры и относительно легко может быть перенесена на новые машины. ИП включает компоненты, управляющие виртуальной памятью, объектами (ресурсами), вводом-выводом и файловой системой (включая сетевые драйверы), взаимодействием процессов и частично системой безопасности.
Исполнительная подсистема Компоненты ИП взаимодействуют между собой с помощью межмодульной связи. Каждая компонента вызывает другие с помощью набора тщательно специфицированных внутренних процедур.
Компоненты исполнительной подсистемы Менеджер объектов Менеджер ввода вывода Менеджер процессов Менеджер памяти Менеджер безопасности Менеджер кэша Менеджер Plug and Play Менеджер энергопотребления Менеджер конфигурации Средства локального вызова процедур
Менеджер объектов Управляет всеми объектами известными ОС (процессы, потоки, файлы, каталоги, семафоры, устройства ввода-вывода, таймеры и т.д.). Управляет пространством имен, в которое помещается созданный объект.
Подсистема ввода-вывода Включает в себя: менеджер ввода-вывода - предоставляет средства ввода-вывода, независимые от устройств; файловые системы, NT-драйверы, выполняющие файл-ориентированные запросы на ввод-вывод, транслирующие их в вызовы обычных устройств; сетевой редиректор и сетевой сервер, драйверы файловых систем, передающие удаленные запросы на ввод-вывод на машины сети и получающие запросы от них; драйверы устройств NT executive, низкоуровневые драйверы, которые непосредственно управляют устройством; менеджер кэша, реализующий кэширование диска.
Менеджер ввода-вывода Формирует каркас для управления устройствами ввода-вывода и предоставляет общие службы ввода-вывода. Предоставляет остальной части системы независимый от устройств ввод-вывод, вызывая для выполнения физического ввода-вывода необходимый драйвер.
Менеджер ввода-вывода Файловые системы являются драйверами устройств под управлением менеджера ввода-вывода. Существуют два независимых друг от друга драйверов для файловых систем: FAT и NTFS.
Менеджер процессов Управляет процессами и потоками: создает и завершает, приостанавливает и возобновляет процессы и нити, а также хранит информацию о них.
Менеджер памяти Реализует архитектуру виртуальной памяти со страничной подкачкой. Управляет преобразованием виртуальных страниц в физические блоки Реализует правила защиты, ограничивающие доступ процессов только к страницам, принадлежащим другим процессам Контролирует часть системных вызовов относящихся к виртуальной памяти
Менеджер безопасности Приводит в исполнение механизм безопасности ОС Windows. Устанавливает правила защиты на локальном компьютере. Охраняет ресурсы ОС, выполняет защиту и регистрацию исполняемых объектов.
Менеджер кэша Хранит в памяти блоки диска, которые использовались в последнее время, чтобы ускорить доступ к ним, если они понадобятся вновь. Обслуживает все файловые системы используемы ОС.
Менеджер plug and play Получает уведомления об установленных новых устройствах, находит и загружает соответствующий драйвер.
Менеджер энергопотребления Управляет потреблением электроэнергии. Отключает некоторые устройства (монитор, жесткие диски), следит за состоянием батарей.
Менеджер конфигурации Отвечает за состояние реестра Добавляет новые записи Ищет запрашиваемые ключи
Менеджер вызова локальных процедур Обеспечивает высокоэффективное взаимодействие между процессами и их подсистемами Обеспечивает передачу сообщений между клиентскими и серверными процессами одного и того же компьютера.
Интерфейс графических устройств GDI Graphic Device Interface (GDI) занимается управлением графическими изображениями для монитора и принтера. Предоставляет системные вызовы, позволяющие пользовательским программам выводить данные на монитор/принтер независыящим от устройства способом. Содержит оконный менеджер и драйвер дисплея
Системные службы Данный уровень предоставляет интерфейс к исполняющей системе. Принимает настоящие системные вызовы Windows и вызывает другие части исполнительной системы для их выполнения.
Файлы ОС При загрузке Windows 2000 загружается в память как набор файлов. Ntoskrnl.exe – основная часть ОС: ядро и исполняющая система Hal.dll – уровень HAL Win32k.sys – интерфейс win32 и интерфейс графических устройств *.sys – драйверы устройств Ntdll.dll – диспетчер перехода из режима пользователя в режим ядра Csrss.exe – процесс подсистемы окружения Win32 Kernel32.dll – большая часть системных вызовов ядра (неграфических) Gdi32.dll – шрифт, текст, цвет. Кисть, перо, растровые изображения, палитра, рисование и т.д. User32.dll – окна, значки, меню, курсоры, диалоговые окна, буфер обмена и т.д. Advapi32.dll – Защита, шифрование , реестр
Программный интерфейс Win32 API В Windows есть свой набор системных вызовов, которые она может выполнять (не публикуется, часто меняется). Win32API (Win32 Application Programming Interface – интерфейс прикладного программирования) – набор функциональных вызовов (опубликованы, документированы, существующие вызовы не изменяются)
Программный интерфейс Win32 API Функциональные вызовы представляют собой библиотечные процедуры, которые либо обращаются к системным вызовам, чтобы выполнить некоторую работу, либо ( в некоторых случаях) выполняют работу прямо в пространстве пользователя.
Программный интерфейс Win32 API Двоичные программы для процессоров Intel x86 придерживающиеся интерфейса Win32 API будут без каких либо изменений работать на всех версиях Windows.
Программный интерфейс Win32 API Прикладная программа Win32 Интерфейс прикладного программирования Win32 API Win32s Windows 3.x Windows 95/98 Windows NT Windows 2000,…
Режим пользователя
Режим пользователя В режиме пользователя работают следующие компоненты ОС: Динамические библиотеки DLL Подсистемы окружения Служебные процессы Эти компоненты работают вместе, предоставляя каждому пользовательскому процессу интерфейс, отличный от интерфейса системных вызовов Windows.
Windows 2000 поддерживает интерфейса API: Win32, POSIX, OS/2. У каждого интерфейса есть список библиотечных вызовов, которые могут использовать программисты.
Работа библиотек и подсистем окружения заключается в том, чтобы реализовать функциональные возможности опубликованного интерфейса, скрывая истинный интерфейс системных вызовов от прикладных программ.
Пример Системный интерфейс (ntdll.dll) GDI32.dll User32.dll Kernel32.dll Вызов 1 Вызов 2 Вызов 3 Процесс пользователя Подсистема win32 Процесс подсистемы окружения (csrss.exe) Операционная система Пространство ядра Пространство пользователя 2а 2б 3а 4б 3б 1
Подсистемы окружения Среди всех защищенных подсистем можно выделить подсистемы окружения: Win32, Win16, DOS, OS/2, Posix. Каждая из этих подсистем реализует соответствующий прикладной программный интерфейс.
Подсистемы окружения Наиболее важной подсистемой окружения является Win32 - подсистема, которая обеспечивает доступ для приложений к 32-bit Windows API. Дополнительно эта система обеспечивает графический интерфейс с пользователем и управляет вводом/выводом данных пользователя.
Цели использования подсистем окружения Обеспечить несколько программных интерфейсов (APIs), сохраняя как можно более простым базовый программный код (NT executive). Экранировать базовую ОС от изменений или расширений в поддерживаемых API. Объединить часть глобальных данных, требуемых всем API, и в то же время отделить данные, требуемые одному API от данных, требуемых другим API. Защитить окружение каждого API от приложений, а также от окружений других API и защитить базовую ОС от различных окружений. Позволить ОС расширяться в будущем за счет новых API.
Множественные прикладные среды
При разработке NT важнейшим рыночным требованием являлось обеспечение поддержки по крайней мере двух уже существующих программных интерфейсов OS/2 и POSIX, а также возможности добавления других API в будущем.
Для того, чтобы программа, написанная для одной ОС, могла быть выполнена в рамках другой ОС, недостаточно обеспечить совместимость API. Необходимо обеспечить ей "родное" окружение: структуру процесса, средства управления памятью, средства обработки ошибок и исключительных ситуаций, механизмы защиты ресурсов и семантику файлового доступа.
Windows NT поддерживает пять прикладных сред операционных систем: MS-DOS, 16-разрядный Windows, OS/2 1.x, POSIX и 32-разрядный Windows (Win32). Все пять прикладных сред реализованы как подсистемы окружения. Каждая работает в собственном защищенном пользовательском пространстве. Подсистема Win32 обеспечивает поддержку дисплея, клавиатуры и мыши для четырех оставшихся подсистем.
16-битовые приложения DOS и Windows работают на VDM (virtual DOS machines - виртуальные машины DOS), каждая из которых эмулирует полный 80x86 процессор с MS-DOS. В NT VDM является приложением Win32, значит приложения DOS и 16-битовой Windows расположены в слое непосредственно над подсистемой Win32.
Подсистемы OS/2 и POSIX в качестве полноценных подсистем NT могут взаимодействовать с подсистемой Win32 для получения доступа к вводу и выводу, но также могут обращаться непосредственно к исполнительной системе NT за другими средствами операционной системы. Подсистема OS/2 может выполнять многие имеющиеся приложения OS/2 символьного режима, включая OS/2 SQL Server.
Возможности подсистемы POSIX ограничены: Приложения POSIX должны быть откомпилированы специально для Windows NT. NT не поддерживает двоичный код, предназначенный для других POSIX-совместимых систем, таких как UNIX. и т.д.
Реализация множественных прикладных сред в Windows NT
Объектно-ориентированный подход
Хотя NT и не является полностью объектно-ориентированной, в ее основе лежат объекты. Единообразная форма именования, совместного использования и учета системных ресурсов, простой и дешевый способ обеспечения безопасности системы и ее модификации - все эти преимущества могут быть достигнуты при использовании объектной модели.
В Windows NT любой ресурс системы, который одновременно может быть использован более чем одним процессом (файлы, совместно используемая память и физические устройства) реализован в виде объекта и управляется рядом функций. Такой подход сокращает число изменений, которые необходимо внести в операционную систему в процессе ее эксплуатации.
Наиболее фундаментальное отличие между объектом и обыкновенной структурой данных – внутренняя структура данных объекта скрыта от наблюдения. Для того, чтобы получить данные из объекта или поместить данные в объект необходимо вызвать объектную функцию. Это отделяет средства реализации объекта от кода, который только использует его, такая техника позволяет легко изменять в последствии реализацию объектов.
Для представления системных ресурсов используются объекты, т.к. объекты обеспечивают централизованные средства для выполнения трех важных задач ОС: Поддержка воспринимаемых человеком имен системных ресурсов; Разделение ресурсов и данных между процессами; Защита ресурсов от несанкционированного доступа.
Объектами сделаны только данные, которые нужно разделять, защищать, именовать или делать видимыми для программ пользовательского режима. Структуры, которые используются только одним компонентом executive для выполнения внутренних функций, не являются объектами.
Менеджер объектов Менеджер объектов - это компонент NT executive, который ответствен за создание, удаление, защиту и слежение за NT-объектами. Менеджер объектов централизует операции управления ресурсами, которые в противном случае будут разбросаны по всей ОС.
Функции менеджера объектов Выделяет память для объекта. Присоединяет к объекту называемый дескриптор безопасности, который определяет, кому разрешено использовать объект, и что они могут с ним делать. Создает и манипулирует структурой каталога объектов, в котором хранятся имена объектов. Создает описатель объекта и возвращает его вызывающему процессу.
Процессы пользовательского режима, включая подсистемы окружения, должны иметь описатель объекта перед тем, как их нити смогут использовать этот объект. Каждый NT-объект является объектом определенного типа. Тип определяет данные, которые хранит объект, и "родные" системные функции, которые могут к нему применяться. Для единообразного управления различными объектами, менеджер объектов требует, чтобы каждый объект содержал несколько полей стандартной информации в определенном месте объекта. До тех пор, пока эти данные имеются, менеджер объектов не заботится о том, что еще хранится в объекте.
Каждый объект состоит из двух частей - заголовка объекта и тела объекта, которые содержат стандартные и переменные данные объекта соответственно. Менеджер объектов работает с заголовком объекта, а другие компоненты executive работают с телами объектов тех типов, которые они сами создают.
Заголовок объекта используется менеджером без учета типа объекта. В заголовке объекта любого типа содержится имя, каталог, дескриптор безопасности, квоты на использование ресурсов, счетчик открытых описателей, база данных открытых описателей, признак постоянный/временный, режим пользователя/ядра, указатель на тип объекта.
Формат и содержание тела объекта уникально определяется типом этого объекта; у всех объектов одного и того же типа одинаковый формат тела. При создании объекта исполнительная часть может оперировать данными в телах всех объектов этого типа.
Процессы и нити
Процессы Процессы Windows NT имеют следующие характерные свойства: реализованы в форме объектов, и доступ к ним осуществляется посредством службы объектов. процесс Windows NT имеет многонитевую организацию как объекты-процессы, так и объекты-нити имеют встроенные средства синхронизации менеджер процессов Windows NT не поддерживает между процессами отношений типа "родитель-потомок".
Понятие "процесс" включает следующее: исполняемый код, собственное адресное пространство, которое представляет собой совокупность виртуальных адресов, которые может использовать процесс, ресурсы системы (файлы, семафоры и т.п., которые назначены процессу ОС). хотя бы одну выполняемую нить.
Адресное пространство каждого процесса защищено от вмешательства в него других процессов (обеспечивается механизмами виртуальной памяти). ОС защищена от прикладных процессов. Чтобы выполнить процедуру ОС или прочитать что-либо из ее области памяти, нить должна выполняться в режиме ядра. Пользовательские процессы получают доступ к функциям ядра посредством системных вызовов.
В Windows NT процесс - это просто объект, создаваемый и уничтожаемый менеджером объектов. Объект-процесс, как и другие объекты, содержит заголовок, который создает и инициализирует менеджер объектов. Менеджер процессов определяет атрибуты, хранимые в теле объекта-процесса, а также обеспечивает системный сервис, который восстанавливает и изменяет эти атрибуты.
Атрибуты тела объекта-процесса Идентификатор процесса - уникальное значение, которое идентифицирует процесс в рамках операционной системы. Токен доступа - исполняемый объект, содержащий информацию о безопасности. Базовый приоритет - основа для исполнительного приоритета нитей процесса. Процессорная совместимость - набор процессоров, на которых могут выполняться нити процесса. Предельные значения квот - максимальное количество страничной и нестраничной системной памяти, дискового пространства, предназначенного для выгрузки страниц, процессорного времени - которые могут быть использованы процессами пользователя. Время исполнения - общее количество времени, в течение которого выполняются все нити процесса.
Нить Нить является выполняемой единицей, которая располагается в адресном пространстве процесса и использует ресурсы, выделенные процессу. Подобно процессу нить в Windows NT реализована в форме объекта и управляется менеджером объектов.
Атрибуты тела объекта-нити Идентификатор клиента - уникальное значение, которое идентифицирует нить при ее обращении к серверу. Контекст нити - информация, которая необходима ОС для того, чтобы продолжить выполнение прерванной нити. Контекст нити содержит текущее состояние регистров, стеков и индивидуальной области памяти, которая используется подсистемами и библиотеками. Динамический приоритет - значение приоритета нити в данный момент. Базовый приоритет - нижний предел динамического приоритета нити. Процессорная совместимость нитей - перечень типов процессоров, на которых может выполняться нить. Время выполнения нити - суммарное время выполнения нити в пользовательском режиме и в режиме ядра, накопленное за период существования нити. Состояние предупреждения - флаг, который показывает, что нить должна выполнять вызов асинхронной процедуры. Счетчик приостановок - текущее количество приостановок выполнения нити.
Планирование процессов и нитей
В Windows NT используется механизм многозадачности с вытеснением (preemptive multitasking). Windows NT поддерживает симметричную мультипроцессорную организацию вычислительного процесса - ОС может выполняться на любом свободном процессоре или на всех процессорах одновременно. Так как многозадачность реализуется на уровне нитей, разные части одного и того же процесса могут выполняться параллельно. Следовательно, многонитевые серверы могут одновременно обслуживать более одного клиента.
Состояния нити Готовность. При поиске нити на выполнение диспетчер просматривает только нити, находящиеся в состоянии готовности, у которых есть все для выполнения, но не хватает только процессора. Первоочередная готовность (standby). Для каждого процессора системы выбирается одна нить, которая будет выполняться следующей (самая первая нить в очереди). Когда условия позволяют, происходит переключение на контекст этой нити. Выполнение. Как только происходит переключение контекстов, нить переходит в состояние выполнения и находится в нем до тех пор, пока либо ядро не вытеснит ее из-за того, что появилась более приоритетная нить или закончился квант времени, выделенный этой нити, либо нить завершится вообще, либо она по собственной инициативе перейдет в состояние ожидания.
Состояния нити Ожидание. Нить может входить в состояние ожидания несколькими способами: нить по своей инициативе ожидает некоторый объект для того, чтобы синхронизировать свое выполнение; операционная система (например, подсистема ввода-вывода) может ожидать в интересах нити; подсистема окружения может непосредственно заставить нить приостановить себя. Переходное состояние. Нить входит в переходное состояние, если она готова к выполнению, но ресурсы, которые ей нужны, заняты. При освобождении ресурсов нить переходит в состояние готовности. Завершение. Когда выполнение нити закончилось, она входит в состояние завершения. Находясь в этом состоянии, нить может быть удалена.
Диспетчер ядра использует для определения порядка выполнения нитей алгоритм, основанный на приоритетах Каждой нити присваивается приоритет; нити с более высоким приоритетом выполняются раньше нитей с меньшим приоритетом.
В начале нить получает приоритет от процесса, который создает ее. Процесс получает приоритет, когда его создает подсистема той или иной прикладной среды. Значение базового приоритета присваивается процессу системой по умолчанию или системным администратором. Нить наследует базовый приоритет и может изменить его, немного увеличив или уменьшив.
Windows NT поддерживает 32 уровня приоритетов, разделенных на два класса класс реального времени класс переменных приоритетов.
Каждый раз, когда необходимо выбрать нить для выполнения, диспетчер прежде всего просматривает очередь готовых нитей реального времени и обращается к другим нитям, только когда очередь нитей реального времени пуста.
Большинство нитей в системе попадают в класс нитей с переменными приоритетами, диапазон приоритетов которых от 0 до 15. Этот класс имеет название "переменные приоритеты" потому, что диспетчер настраивает систему, выбирая (понижая или повышая) приоритеты нитей этого класса.
Алгоритм планирования нитей в Windows NT объединяет в себе две базовые концепции - квантование и приоритеты.
Каждой нити назначается квант, в течение которого она может выполняться. Нить освобождает процессор, если: блокируется, уходя в состояние ожидания; завершается; исчерпан квант; в очереди готовых появляется более приоритетная нить.
Использование динамических приоритетов позволяет реализовать адаптивное планирование, при котором не дискриминируются интерактивные задачи, часто выполняющие операции ввода-вывода и недоиспользующие выделенные им кванты. Если нить полностью исчерпала свой квант, то ее приоритет понижается на некоторую величину. Приоритет нитей, которые перешли в состояние ожидания, не использовав полностью выделенный им квант, повышается. Приоритет не изменяется, если нить вытеснена более приоритетной нитью.
Абсолютные приоритеты Для обеспечения лучшего времени реакции системы, алгоритм планирования использует наряду с квантованием концепцию абсолютных приоритетов: при появлении в очереди готовых нитей такой, у которой приоритет выше, чем у выполняющейся в данный момент, происходит смена активной нити на нить с самым высоким приоритетом.
Процессы и потоки
Задание (task) – набор процессов с общими квотами и лимитами, управляемый как единое целое Процесс (process) – контейнер для ресурсов Поток (thread) – сущность, планируемая ядром Волокно (fiber) – облегченный поток, управляемый полностью в пространстве пользователя
Каждый процесс содержит по крайней мере один поток Каждый поток содержит по крайней мере одно волокно (нить) Процессы могут объединяться в задания
Планирование процессов В Windows NT используется механизм многозадачности с вытеснением (preemptive multitasking). При планировании потоков в Windows NT используются концепции квантования, абсолютных приоритетов и динамических приоритетов.
Windows NT поддерживает симметричную мультипроцессорную организацию вычислительного процесса – ОС может выполняться на любом свободном процессоре или на всех процессорах одновременно. Разные части одного процесса могут выполняться параллельно.
Квант Квант не измеряется в каких бы то ни было единицах времени, а выражается целым числом. Для каждого потока хранится текущее значение его кванта. Когда потоку выделяется квант процессорного времени, это значит, что его квант устанавливается в начальное значение. Для Win2000 Professional начальное значение кванта равно 6, а для Win2000 Server - 36.
Квант Всякий раз, когда возникает прерывание от таймера, из кванта потока вычитается 3, и так до тех пор, пока он не достигнет нуля. Частота срабатывания таймера зависит от аппаратной платформы. Например, для большинства однопроцессорных x86 систем он составляет 10мс, а на большинстве многопроцессорных x86 систем - 15мс.
Управление квантованием Параметр реестра HKLM\SYSTEM\CurrentControlSet\Control\PriorityControl\ Win32PrioritySeparation предназначен для управления квантованием.
Список событий, которые приводят к перепланированию потоков создание и завершение потока; выделенный потоку квант исчерпан; поток вышел из состояния ожидания; поток перешел в состояние ожидания; изменен приоритет потока; изменена привязка к процессору.
Граф состояний потока
Приоритеты Каждому потоку присваивается приоритет Потоки с более высоким приоритетом выполняются раньше потоков с меньшим приоритетом. В начале поток получает приоритет породившего его процесса. Процесс получает приоритет в момент, когда его создает подсистема среды. Поток наследует этот базовый приоритет и может изменить его, немного увеличив или уменьшив. На основании получившегося в результате приоритета, называемого приоритетом планирования, начинается выполнение потока.
Windows NT поддерживает 32 уровня приоритетов, разделенных на два класса класс реального времени (16-31) класс переменных приоритетов (1-15) 0 - приоритет потока обнуления страниц В Windows NT определено 4 класса приоритетов процессов: IDLE_PRIORITY_CLASS - уровень 4 NORMAL_PRIORITY_CLASS - уровень 9 при интерактивной работе процесса (forground) и уровень 7 при работе в фоновом режиме (background) HIGH_PRIORITY_CLASS - уровень 13 REALTIME_PRIORITY_CLASS - уровень 24
В ходе своего выполнения поток может изменить свой приоритет относительного базового приоритета процесса с помощью системного вызова SetThreadPriority. Этот вызов имеет параметр, который может принимать 5 относительных значений, понижая приоритет относительно базового на 2 или 1 единицу, повышая его на 2 или 1 единицу или делая его равным базовому. Имеется еще 2 абсолютных значения этого параметра - IDLE и CRITICAL. Значение IDLE делает приоритет нити равным 1 независимо от его базового приоритета (для процессов REALTIME приоритет становится равным 16), а значение CRITICAL повышает приоритет до 15 для всех процессов (для процессов REALTIME приоритет повышается до 31).
На выполнение всегда выбирается нить с самым высоким приоритетом. Сначала выполняются нити реального времени
Если нить полностью использовала выделенный ей квант, она переводится в очередь готовых нитей, а ее приоритет понижается. Если выполнение нити было прервано появлением в очереди готовых нитей с более высоким приоритетом, то она также возвращается в очередь готовых нитей, а ее приоритет остается неизменным. В случае перехода нити по собственной инициативе в состояние ожидания некоторого события, ее приоритет повышается на некоторую величину, компенсируя этой нити недоиспользованную ею часть кванта.
Управление памятью
Windows NT поддерживает сегментно-страничную модель виртуальной памяти и использует для этих целей аппаратную поддержку таких процессоров. Для этого в NT executive имеется специальный компонент - менеджер виртуальной памяти.
Менеджер ВП обеспечивает для процессов следующие наборы функций: управление виртуальным адресным пространством процесса; разделение памяти между процессами; защита виртуальной памяти одного процесса от других процессов.
Средства защиты памяти в Windows NT существуют в четырех формах: Отдельное адресное пространство для каждого процесса. Аппаратура запрещает нити доступ к физическим адресам другого процесса. Два режима работы: режим ядра, в котором нитям разрешен доступ к системным данным, и пользовательский режим, в котором это запрещено. Страничный механизм защиты. Каждая виртуальная страница имеет набор признаков, который определяет разрешенные типы доступа в пользовательском режиме и в режиме ядра. Объектно-ориентированная защита памяти. Каждый раз, когда процесс открывает указатель на секцию, монитор ссылок безопасности проверяет, разрешен ли доступ процесса к данному объекту.
Каждый процесс имеет виртуальное адресное пространство размером в 4Гб, из которых 2 Гб резервируются для системных нужд. Младшие адреса виртуального адресного пространства доступны для нитей, работающих и в пользовательском и в привилегированном режимах, они указывают на области памяти, уникальные для каждого процесса. Старшая часть адресов доступна для нитей только тогда, когда они выполняются в привилегированном режиме.
В нижней (младшей) части системной области памяти располагаются код и данные ядра, они никогда не вытесняются из памяти. Поскольку адреса из этого диапазона транслируются аппаратурой и всегда бывают действительными, доступ к этой области памяти осуществляется очень быстро. Она используется для тех частей ядра, от которых требуется максимальная производительность, например, для кода, который диспетчирует нити.
Верхняя часть системной памяти управляется менеджером виртуальной памяти и используется для хранения остальных системных данных и кода. Часть этой области резервируется для кода и данных, которые могут быть вытеснены на диск с помощью страничного механизма, а другая часть никогда не вытесняется из памяти (в ней, например, размещается код, который осуществляет страничный обмен).
Пейджер Пейджер (pager) компонент, входящий в составе менеджера виртуальной памяти. Пейджер перемещает страницы между диском и памятью, представляя собой промежуточное звено между аппаратными механизмами и программно-реализуемыми стратегиями. Функции пейджера: загрузка страницы в память при возникновении страничного прерывания, проверка прав доступа к отсутствующим страницам и дополнение аппаратных средств защиты страниц, загруженных в память, обновление структур данных подсистемы управления памятью.
Процесс принятия решения о замене страниц системой виртуальной памяти обычно включает три фазы: извлечение, размещение, замена.
Этап извлечения Этап извлечения связан с выбором условия, при выполнении которого страница перемещается с диска в память. Существует два типа стратегий извлечения: с упреждением, когда страницы загружаются в память до того, как они оказываются необходимыми процессу, и стратегии загрузки по требованию, в соответствии с которыми страница перемещается в память только при наступлении страничного прерывания. При использовании стратегий "по требованию" при старте каждой нити происходит интенсивная загрузка страниц. Эти страницы называются начальным набором страниц. После загрузки начального набора интенсивность загрузки страниц заметно уменьшается. Менеджер виртуальной памяти Windows NT использует стратегию "по требованию" с кластеризацией. При возникновении страничного прерывания менеджер виртуальной памяти загружает в память вызвавшую прерывание страницу, а также небольшое количество окружающих ее страниц.
Этап размещения Набор правил, используемых для определения места размещения новой страницы в памяти, называется стратегией размещения. В Windows NT менеджер виртуальной памяти просто выбирает первую страницу из списка свободных физических страниц.
Этап замещения Если при возникновении страничного прерывания в физической памяти нет свободных страниц, то используется стратегия замещения, которая определяет, какую виртуальную страницу нужно удалить из памяти для освобождения места для размещения новой страницы. Менеджер виртуальной памяти Windows NT использует локальный алгоритм FIFO (First Input First Output). Из памяти удаляется та страница, которая дольше всего там находится. Локальность означает, что поиск страницы-кандидата на выгрузку осуществляется только среди страниц того процесса, который требует загрузки новой страницы. Существуют и глобальные стратегии, в соответствии с которыми поиск замещаемой страницы выполняется на множестве страниц всех процессов. Локальный вариант стратегии не дает одному процессу возможность захватить всю имеющуюся память.
При старте процессу назначается минимальный рабочий набор страниц. Процесс может его увеличивать до некоторого максимального размера. Если процесс требует еще больше страниц, то менеджер виртуальной памяти удаляет из рабочего набора по одной странице при загрузке каждой новой страницы. Когда размер свободной физической памяти уменьшается до некоторой критической границы, то менеджер виртуальной памяти использует прием, называемый автоматическим триммингом рабочего набора. Он просматривает страницы каждого процесса, находящиеся в памяти, сравнивает их количество с минимальным размером рабочего набора и удаляет избыточные страницы из памяти.
В Windows NT реализована сегментно-страничная модель распределения памяти. Для хранения информации о состоянии виртуальных сегментов используется набор структур, называемых дескрипторами виртуальных адресов. Когда процессу назначается новая область памяти, менеджер виртуальной памяти создает дескриптор, в котором хранится вся информация, связанная с этой областью, такая как диапазон адресов, признаки того, является ли память разделяемой или частной, будет ли процесс-потомок наследовать содержимое этой области, признаки защиты. Затем дескриптор встраивается в двоичное дерево дескрипторов данного процесса, используемое для ускорения поиска.
Для снижения количества страничных прерываний предпринимаются следующие меры: Каждому процессу предоставляется рабочий набор страниц достаточно большого размера, чтобы избежать частых страничных отказов. Менеджер виртуальной памяти производит автоматический тримминг рабочего набора каждого процесса, чтобы сделать доступными для других процессов области памяти, занимаемые редко используемыми страницами.
Управление вводом-выводом в Windows NT
При разработке подсистемы ввода-вывода Windows NT ставились следующие задачи: обеспечить поддержку нескольких файловых систем: FAT, CDFS, NTFS; предоставить средства для упрощения разработки драйверов устройств; обеспечить возможность динамического добавления и удаления драйверов из системы; обеспечить возможность ввода-вывода для отображаемых в памяти файлов.
Каждый запрос на ввод-вывод представлен пакетом IRP (I/O Request Packet). Пакеты передаются от одной подсистемы ввода-вывода к другой. Менеджер ввода-вывода определяет порядок доставки пакетов IRP файловым системам и драйверам устройств. Менеджер не выполняет операций ввода-вывода, он только создает пакет IRP, передает его нужному драйверу и удаляет пакет, когда операция завершается. Драйвер, получив IRP, выполняет операцию ввода-вывода, а затем возвращает пакет менеджеру для уничтожения или передачи другому драйверу.
Кроме передачи пакетов, менеджер ввода-вывода выполняет следующие действия: предоставляет драйверам некоторые общие функции, например, для вызова одного драйвера другим, управляет буферами для запросов ввода-вывода, управляет тайм-аутом для драйверов, ведет записи о том, какие файловые системы установлены.
Особенностью Windows NT является общая структура ее драйверов. В Windows NT и драйвер устройства, и драйвер ФС построены единым образом, и для остальной части ОС имеют один и тот же вид. Каждый драйвер - это самодостаточный компонент, который может быть динамически добавлен или удален из системы.
Основные черты модели драйвера Драйверы переносимы. Они написаны на языке высокого уровня и мало зависят от архитектуры процессора. Операции ввода-вывода управляются пакетами IRP. Система ввода-вывода может динамически назначать драйверы для новых устройств при изменении конфигурации системы. Драйверы должны синхронизировать свой доступ к глобальным данным драйвера - из-за того, что выполнение драйвера может быть прервано либо высокоприоритетной нитью, либо высокоприоритетным прерыванием. Кроме того, драйвер может выполняться на многопроцессорном компьютере, что повышает вероятность одновременного обращения нескольких копий драйвера к общим глобальным данным. Интерфейс драйверов с менеджером ввода-вывода стандартизирован, что позволяет менеджеру вызывать их "вслепую", не зная их особенностей или структур внутренних данных.
В Windows NT чаще используется многоуровневая модель обработки запроса ввода-вывода, но для простых устройств может применяться и одноуровневая модель, когда менеджер вызывает только драйвер устройства.
22688-lekciya_18._obzor_os._windows_nt.ppt
- Количество слайдов: 134