Операционные системы реального времени и Windows NT

Процессы в Windows NT принадлежат двум различным классам приоритетов: динамическому и реального времени. Большинство процессов принадлежат динамическому классу, который допускает изменение своих приоритетов ОС в зависимости от таких факторов, как являются ли они фоновыми задачами или они недавно ожидают. Это хорошо для GPOS (General propose OS) , так как позволяет всем потокам быть запущенными и предоставляет пользователям более быструю реакцию от активного приложения. Однако правила, определяющие эти изменения приоритетов, не подходят для RTOS (real-time OS). Поэтому Microsoft включила ряд приоритетов выше динамического класса, назвав их (Real-Time Class) класс приоритетов реального времени. Процессы в классе реального времени имеют фиксированный приоритет, менять который может лишь само приложение, а приоритет процессов динамического класса может меняться диспетчером. В Windows NT имеется только 7 различных уровней для нити в данном процессе. А у большинства ОСРВ имеется по крайней мере 256 различных уровней (чем больше имеется уровней, тем более предсказуемо поведение системы). В Windows NT многие нити будут выполняться с одинаковыми приоритетами, то есть предсказуемость поведения системы будет посредственной. В Windows NT процессы выполняются в своем собственном пространстве памяти. Добиться этого позволяют механизмы виртуальной памяти и подкачки. Это для СРВ порождает непредсказуемость, особенно если система отправит страницу из памяти на диск.

Потоки, запущенные с этими приоритетами, выполняются до процессов, запущенных с приоритетами из динамического класса. ОС не изменяет их приоритет и определяет большой контроль за разработчиком. Microsoft не рекомендует, чтобы потоки тратили много времени в этом классе, так как они имеют приоритет выше, чем некоторые системные задачи, такие, как сброс кэша диска и контроль ввода. Блокировка инверсии приоритетов происходит в потоках, ожидающих мьютекса. Большинство RTOS решают эту проблему путем инверсии приоритетов, но Windows NT использует схему, где потоки, которые не запускаются некоторое время, принимают случайный приоритет, повышая возможность быть запущенным. Это приводит к непредсказуемости и поэтому неприемлемо для СРВ.

Базовая идея построения Windows NT основана на принципах модульности и объектно-ориентированного программирования. Эта идея распространена и на ядро ОС и определяет ее функциональную независимость от аппаратуры для чего используют уровень абстрагирования от аппаратуры (hardware abstraction layer, HAL). Структура Windows NT включает две части: одна работает в пользовательском режиме (защищенные подсистемы Windows NT), а другая – в режиме ядра (исполнительная система NT) (рис. 2.3).

Рис. 2.3. Блок схема Windows NT

Серверы Windows NT называются защищенными подсистемами (protected subsystems), так как каждый из них – это отдельный процесс, память которого защищена от других процессов системой виртуальной памяти исполнительной системы NT. Так как совместное использование памяти подсистемами не реализуется автоматически, то коммуникации между ними осуществляются путем передачи сообщений. Термин "сервер" подразумевает, что каждая защищенная подсистема обеспечивает API, который могут использовать программы. Когда приложение (или другой сервер) вызывает некоторую процедуру API, серверу, реализующему данную процедуру, посылается сообщение при помощи средства локального вызова процедур (local procedure call, LPC) – оптимизированного механизма исполнительной системы NT для локальной передачи сообщений. Сервер же посылает ответное сообщение, вызывающее программу.

В Windows NT имеется два типа защищенных подсистем: подсистемы среды (environment subsystems) и неотъемлемые подсистемы (integral subsystems). Подсистема среды – это сервер пользовательского режима, реализующий API некоторой ОС. Когда приложение вызывает функцию API, этот вызов доставляется посредством LPC подсистеме среды. Та исполняет вызов и возвращает результаты прикладному процессу, посылая другой LPC.

Самая важная подсистема среды в Windows NT – это подсистема Win32, которая предоставляет прикладным программам API 32-разрядной Windows и реализует графический интерфейс пользователя Windows NT и управляет всем вводом пользователя и выводом приложений. В Windows NT имеются подсистемы среды POSIX, OS/2, 16-разрядной Windows и MS-DOS. Данные подсистемы предоставляют свои API, но используют для получения пользовательского ввода и отображения результатов подсистему Win32.

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

Некоторые компоненты сетевого обеспечения Windows NT также реализованы как защищенные подсистемы: сервис рабочей станции и сервис сервера. Каждый из этих сервисов (services), как часто называют сетевые подсистемы, является процессом пользовательского режима, реализующим API для доступа и управления, соответственно, сетевым редиректором[4] и сервером LAN Manager. На удаленной машине такие запросы принимаются сервером. И редиректор, и сервер LAN Manager реализованы как драйверы файловых систем, т. е. являются частью системы ввода/вывода NT.

Исполнительная система NT (NT executive) – это часть Windows NT, исполняющаяся в режиме ядра; за исключением пользовательского интерфейса, она сама по себе является законченной ОС. Исполнительная система состоит из ряда компонентов, причем каждый из них реализует два набора функций: системные сервисы, к которым могут обращаться как подсистемы среды, так и компоненты исполнительной системы, а также внутренние процедуры, доступные только компонентам исполнительной системы. Исполнительная система NT способна поддерживать любое число серверных процессов. Серверы предоставляют исполнительной системе NT пользовательские и программные интерфейсы, а также обеспечивают среды для выполнения приложений разных типов.

Хотя исполнительная система и предоставляет системные сервисы, похожие на API, она отличается от подсистем среды. Исполнительная система не исполняется постоянно в собственном процессе, а работает в контексте некоторого существующего процесса, завладевая выполняющимся потоком, когда происходит важное системное событие. Компоненты исполнительной системы поддерживают независимость друг от друга, для чего каждый из них создает необходимые системные структуры данных и работает с ним. Интерфейсы между компонентами контролируются, можно удалить компонент и заменить другим, работающим иначе. Если новый компонент корректно реализует все системные сервисы и внутренние интерфейсы, то ОС работает как прежде. Сопровождение ОС также упрощается, поскольку компоненты исполнительной системы NT взаимодействуют предсказуемым образом.

Основные компоненты исполнительной системы и их области ответственности:

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

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

· Диспетчер процессов создает и завершает процессы и потоки, а также приостанавливает и возобновляет исполнение потоков, хранит и выдает информацию о процессах и потоках NT.

· Средство локального вызова процедур (LPC)передает сообщения между клиентскими и серверными процессами, расположенными на одном и том же компьютере. LPC – это гибкая, оптимизированная версия удаленного вызова процедур (remote procedure call, RPC), средства коммуникации между клиентскими и серверными процессами по сети, являющегося промышленным стандартом.

· Диспетчер виртуальной памяти реализует виртуальную память (virtual memory, VM) – схему управления памятью в виде подкачки страниц (paging), которая предоставляет каждому процессу большое собственное адресное пространство и защищает это пространство от других процессов. Если память используется интенсивно, то диспетчер виртуальной памяти переносит содержимое выбранного блока памяти на диск и загружает обратно, когда он снова понадобится.

· Ядро реагирует на прерывания и исключения, направляет потоки на выполнение, выполняет межпроцессорную синхронизацию и предоставляет набор элементарных объектов и интерфейсов, используемый остальными частями исполнительной системы NT для реализации объектов более высокого уровня.

· Система ввода/вывода состоит из группы компонентов, отвечающих за выполнение ввода/вывода на разнообразные устройства. В систему ввода/вывода входят следующие подкомпоненты:

· Диспетчер ввода/вывода реализует средства ввода/вывода, не зависящие от типа устройства, и устанавливает модель для ввода/вывода исполнительной системы NT .

· Файловые системы образуют драйверы NT, принимающие запросы файлового ввода/вывода и транслирующие их в запросы, привязанные к конкретному устройству.

· Сетевой редиректор (network redirector) и сетевой сервер (network server) это драйверы файловой системы, передающие удаленные запросы ввода/вывода на машины в сети и принимающие от них такие запросы.

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

· Диспетчер кэша повышает производительность файлового ввода/вывода, сохраняя информацию, считанную с диска последней, в системной памяти, использует средство подкачки страниц диспетчера виртуальной памяти для автоматической записи информации на диск в фоновом режиме.

· Слой абстрагирования от оборудования (HAL) это кодовая прослойка между исполнительной системой NT и аппаратной платформой, на которой работает ОС. Она скрывает аппаратно-зависимые детали, такие как интерфейсы ввода/вывода, контроллеры прерываний и механизмы межпроцессорных связей. Чтобы обращаться к аппаратуре непосредственно, исполнительная система NT сохраняет максимальную переносимость, обращаясь к функциям HAL, когда ей нужна платформенно-зависимая информация.

Windows NT – это переносимая ОС с ограничением объема кода, который зависит от конкретной архитектуры оборудования. Код, зависящий от платформы, т. е. от способа реализации производителем, располагается в HAL и поставляется с компьютером. Драйверы устройств содержат код, зависящий от устройства, но избегают кода, зависящего от процессора или платформы, вызывая процедуры ядра NT и HAL.

 

 

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

В Windows NT за создание, удаление и взаимодействие процессов отвечает диспетчер процессов (process manager). Базовые процессы NT имеют ряд характеристик, отличающих их от процессов других ОС:

· процессы NT реализованы как объекты, и доступ к ним осуществляется посредством объектных сервисов;

· в адресном пространстве процесса NT может исполняться несколько потоков;

· как объект-процесс, так и объект-поток имеют встроенные возможности синхронизации;

· диспетчер процессов NT не поддерживает между создаваемыми им процессами отношений родитель-потомок или каких-либо иных.

В Windows NT процесс, чтобы он мог работать, должен включать четыре элемента:

· исполняемой программы, которая определяет начальный код и данные;

· закрытого адресного пространства (address space), т. е. набора адресов виртуальной памяти, который процесс может использовать;

· системных ресурсов, таких, как семафоры, коммуникационные порта и файлы, выделяемых ОС процессу во время выполнения программы;

· по крайней мере один поток управления (thread of execution).

Адресное пространство. Каждый процесс не должен иметь неограниченного права управления другими процессами. Одним из способов достижения этого в Windows NT служит система виртуальной памяти (virtual memory). Виртуальная память включается с самого начала и каждый процесс запускается в своем собственном адресном пространстве. Это увеличивает надежность, предотвращая процессы от разрушающего воздействия других процессов, но изолирует задачи от аппаратуры и ухудшают доступ к ним непосредственно.

Управление виртуальной памятью включает механизм свопинга. Для СРВ, которые должны откликаться на внешние события в предопределенных временных рамках, это ведет к непредсказуемости, когда система должна получить страницу памяти с диска. Windows NT позволяет закрыть страницы в памяти, вызвав функцию VirtualLock. Память для окна свопируется, если оно сжато в иконку. При этом проблемы свопинга для приложений реального времени можно избежать, ограничиваясь доступной физической памятью. Однако на уровне драйвера устройств свопинг можно обойти.

При обращении процесса по виртуальному адресу система виртуальной памяти транслирует этот адрес в физический. Она предотвращает непосредственный доступ процесса к виртуальной памяти, занятой другими процессами или ОС. Для исполнения кода ОС или доступа к памяти ОС поток исполняется в привилегированном режиме процессора – так называемом режиме ядра (kernel mode). Однако большинство процессов – это процессы пользовательского режима, потоки которого исполняются в основном в непривилегированном режиме процессора – пользовательском режиме (user mode).

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

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

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

В исполнительной системе NT процессы – это объекты, создаваемые и уничтожаемые диспетчером объектов. Объект-процесс, как и другие объекты, содержит заголовок, создаваемый и инициализируемый диспетчером объектов. В заголовке хранятся стандартные атрибуты объекта, такие, как дескриптор защиты объекта-процесса, имя процесса (может назначаться ему в целях совместного использования) и каталог объектов, в котором хранится имя, если оно есть.

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

Базовый приоритет процесса помогает ядру NT регулировать приоритет потоков в системе. Приоритеты отдельных потоков изменяются, но всегда остаются в диапазоне базовых приоритетов их процессов. Подсистемы среды могут использовать базовый приоритет, чтобы повлиять на то, потоки какого процесса будут выбраны ядром NT для исполнения в первую очередь. Подсистема Win32 при помощи сервисов NT повышает базовый приоритет процесса выбранного пользователем приложения и понижает базовый приоритет процессов фоновых приложений, давая интерактивным приложениям преимущество над другими. Размеры квот, процессорное сродство и базовый приоритет входят в состав тех атрибутов и структур данных процесса, которые могут наследоваться от него другим процессом.

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

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

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

· уникальный идентификатор, называемый идентификатором клиента;

· содержимое набора регистров, отображающее состояние процессора;

· два стека: один используется потоком при работе в пользовательском режиме, а другой – в режиме ядра;

· собственная область памяти, предназначенная для использования подсистемами, библиотеками периода выполнения и динамически подключаемыми библиотеками (DLL).

Регистры, стек и собственная область памяти образуют контекст (context) потока. Фактические данные, составляющие контекст потока, зависят от типа процессора.

Объект-поток. Процесс NT остается безжизненным, пока у него нет потока, который можно направить на выполнение. Поток – это сущность внутри процесса, которую ядро NT направляет на исполнение. Без него программа процесса не может выполняться, и если у процесса есть поток, последний может создать дополнительные потоки.

Как и процессы, потоки исполнительной системы NT реализованы в виде объектов, создаваемых и уничтожаемых диспетчером объектов. Диспетчер процессов определяет тело объекта-потока и сервисы, используемые для работы с потоками после их создания. Некоторые атрибуты потока напоминают атрибуты объекта. Одни атрибуты, такие как процессорное сродство потока и динамический приоритет, фактически усиливают или ослабляют ограничения, заданные для процесса в целом. Процессорное сродство каждого потока – это неполное подмножество (равно или меньше) процессорного сродства процесса. Можно заставить потоки процесса выполняться на разных группах процессоров. Каждый поток имеет базовый уровень приоритета, который лежит в диапазоне от двух уровней ниже базового приоритета процесса до двух уровней выше этого приоритета (рис. 2.4). На рис. 2.4 показан динамический приоритет потока, нижней границей которого является базовый приоритет потока, а верхняя зависит от вида работ, исполняемых потоком. Снижая приоритет одного процесса и поднимая приоритет другого, подсистемы могут управлять относительной приоритетностью потоков внутри процесса. Базовый приоритет процесса определяет, сколь сильно могут различаться приоритеты потоков процесса и как они соотносятся с приоритетами потоков других процессов.

Рис. 2.4. Соотношение приоритетов

Как и приоритеты, другие атрибуты объекта-потока предназначены для того, чтобы предоставить ОС (и в частности, подсистемам среды) возможность управления созданным ею потоком. Контекст потока содержит все, что нужно ОС для возобновления исполнения прерванного потока: содержимое регистров процессора и стеков пользователя и ядра. Приостановив поток, изменив его контекст и запустив поток снова, подсистема среды может изменить его поведение или начать его выполнение с адреса, отличного от точки останова.

Hа рис. 2.4 приведены потоки переменного приоритета, которые выполняются на уровне приоритета от 0 до 15. Потоки реального времени исполняются на уровнях приоритета от 16 до 31.

Другой сервис, предоставляемый объектам-потокам, – посылка потоку оповещений – это средство, позволяющее подсистемам среды или другим частям ОС асинхронно уведомлять поток о необходимости выполнения им заданной процедуры. Поток, предполагающий получение оповещения, может вызвать сервис для проверки его наличия.

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

 

 








Дата добавления: 2016-04-06; просмотров: 1425;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.019 сек.