Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Множественные прикладные среды Windows 2000.




Семейство ОС компании Microsoft

 

Структура Windows 2000, executive и защищенные подсистемы

    Режим ядра и пользовательский режим

Микропроцессор Pentium имеет четыре уровня привилегий (privilege levels), известных также как кольца (rings), которые управляют, например, доступом к памяти, возможностью использовать некоторые критичные команды процессора (такие как команды, связанные с защитой) и т.д. Каждый поток выполняется на одном из этих уровней привилегий. Кольцо 0 - наиболее привилегированный уровень, с полным доступом ко всей памяти и ко всем командам процессора. Кольцо 3 - наименее привилегированный уровень.

Для обеспечения совместимости с системами на базе процессоров, отличных от тех, что выпускает компания Intel, Windows поддерживает только два уровня привилегий - кольца 0 и 3. Если поток работает в кольце 0, говорят, что он выполняется в режиме ядра (kernel mode). Если поток выполняется в кольце 3, говорят, что он работает в пользовательском режиме (user mode). Низкоуровневый код операционной системы действует в режиме ядра, тогда как пользовательские при­ложения выполняются в основном в пользовательском режиме.

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

Но как только завершается выполнение той части кода, которая относится к режиму ядра, пользовательский поток автоматически переключается обратно в пользовательский режим. Такой подход лишает возможности писать код, предназначенный для работы в режиме ядра, программист может только вызывать выполняющиеся в режиме ядра системные функции (system functions). При работе с Windows NT можно определить, когда поток выполняется в пользователъском режиме, а когда - в режиме ядра. Для этого используется утилита Performance Monitor (Системный монитор) из пункта Administrative Tools (Администрирование) меню Start. (Пуск).

 

Интересно, что драйверы устройств работают в режиме ядра. Это обстоятельство имеет два следствия. Во-первых, в отличие от неправильно выполняющегося приложения неправильно работающий драйвер устройства может нарушить работу всей системы, так как он имеет доступ и ко всему системному коду, и ко всей памяти. Во-вторых, прикладной программист может получить доступ к защищенным ресурсам, написав драйвер псевдоустройства (fake device), хотя это и нелегкая задача.

Термин сервис (service) имеет в среде Windows множество значений. Ниже представлены некоторые из них, имеющие отношение к рассматриваемой теме:

Сервис АРI - функция или подпрограмма API, которая реализует некото­рое действие (сервис) операционной системы, такое как создание файла или работа с графикой (рисование линий или окружностей). Например, функ­ция API CreateProcess используется в Windows для создания нового про­цесса; системный сервис - недокументированная (undocumented) функция, которая может вызываться из пользовательского режима. Эти функции часто ис­пользуются функциями Win32 API для предоставления низкоуровневых сервисов; внутренний (internal) сервис - функция или подпрограмма, которая может вызываться только из кода, выполняемого в режиме ядра. Эти функции от­носятся к низкоуровневой части кода Windows: к исполнительной системе Windows NT, к ядру или к слою абстрагирования от аппаратуры (HAL).

Системные процессы (system processes) - это особые процессы, обслуживающие операционную систему. В системе Windows постоянно задействованы следующие системные процессы (учтите, что все они, кроме процесса system, выполняются в пользовательском режиме):

- процесс idle, который состоит из одного потока, управляющего временем простоя процессора;

- процесс system - специальный про­цесс, выполняющийся только в режиме ядра. Его потоки называются системными потоками (system threads);

- процесс Session Manager (диспетчер сеансов) - SMSS.EXE;

- подсистема Win32 - CSRSS.EXE;

- процесс регистрации в системе — WinLogon (WINLOGON.EXE).

Вы можете убедиться в том, что эти системные процессы действительно выполняются в системе, посмотрев на вкладку Processes (Процессы) программы Task Manager (Диспетчер

Давайте рассмотрим вкратце некоторые из этих системных процессов.

Процесс Session Manager(менеджер сеансов)

Процесс Session Manager (SMSS.EXE) - один из первых процессов, созда­ваемых операционной системой в процессе загрузки. Он выполняет важные функции инициализации, такие как создание переменных окружения системы; задание имен устройств MS DOS, например, LPT1 и СОМ1; загрузка той части подсистемы Win32, которая относится к режиму ядра; запуск процесса регистрации в систе­ме WinLogon.

Процесс WinLogon

Этот системный процесс управляет входом пользователей в систему и выходом из нее. Вызывается специальной комбинацией клавиш Windows Ctrl+Alt+Delete. WinLogon отвечает за загрузку оболочки Windows (обычно это Windows Explorer).

Процесс system состоит из системных потоков (system threads), являющихся потоками режима ядра. Windows и многие драйверы устройств создают потоки прoцecca system для различных целей. Например, диспетчер памяти формирует системные потоки для решения задач управления виртуальной памятью, диспет­чер кэша использует системные потоки для управления кэш-памятью, а драйвер гибкого диска - для контроля над гибкими дисками.

Csrss.exe Данный процесс является частью подсистемы Win32, выполняющейся в непривилегированном режиме (Win32.sys является модулем привилегированного режима). Процесс Csrss представляет клиент-серверную подсистему времени выполнения. Данный процесс должен быть запущен все время. Процесс Csrss отвечает за консольные окна, создание и удаление потоков и за некоторые части 16-разрядной виртуальной среды MS-DOS.

Подсистема Win32 является разновидностью подсистемы среды (environment subsystem). Другие подсистемы среды Windows (не показаны на рисунке) включают POSIX и OS/2. POSIX является сокращением термина «переносимая операционная система па базе UNIX» (portable operating system based on UNIX) и реализует ограниченную поддержку операционной системы UNIX.

Назначение подсистемы среды - служить интерфейсом между пользовательски­ми приложениями и соответствующей частью исполнительной системы Windows. Каждая подсистема имеет свои функциональные возможности на базе единой исполнительной системы Windows. Любой выполняемый файл неразрывно связан с одной из этих подсистем. Подсистема Win32 содержит Win32 API в виде набора DLL, таких как KERNEL32.DLL, GDI32.DLL и USER32.DLL.

В Windows NT Microsoft перенесла часть подсистемы Win32 из пользовательского режима в режим ядра. В частности, драйвер устройства режима ядра WIN32K.SYS, который управляет отображением окон, вы­водом на экран, вводом данных с клавиатуры или при помощи мыши и передачей сообщений. Он включает также библиотеку интерфейсов графических устройств (Graphical Device Interface library – GDL.DLL), используемую для создания графических объектов и текста.

Сервисы исполнительной системы Windows составляют низкоуровневую часть Windows NT режима ядра, включенную в файл NTOSKRNL.EXE.

Cервисы исполнительной системы делят на две группы: исполнительную систему (executive), относящуюся к верхнему уровню, и ядро (kernel).

Ядро - это самый нижний уровень операционной системы, реализующий наиболее фундаментальные сервисы, такие как:

- планирование потоков;

- обработку исключений;

- обработку прерываний;

- синхронизацию процессоров в многопроцессорной системе;

- создание объектов ядра.

 

Ниже приведены некоторые наиболее важные составляющие исполнительной системы:

- диспетчер процессов и потоков создает и завершает и процессы, и потоки, используя сервисы низкоуровневого ядра;

- диспетчер виртуальной памяти реализует механизм виртуальной памяти;

- диспетчер ввода/вывода реализует аппаратно-независимый ввод/вывод и взаимодействует с драйверами устройств;

- диспетчер КЭШа управляет кэшированием диска;

- диспетчер объектов создает объекты исполнительной системы Windows и управляет ими. Windows использует объекты для представления разнооб­разных ресурсов, таких как процессы и потоки;

- библиотеки времени выполнения содержат такие функции, как обработки строк и арифметическиефункции.

Уровень абстрагирования от аппаратуры (HAL) - это библиотека режима ядра (HAL.DLL), которая реализует низкоуровневый интерфейс с аппаратурой. Компо­ненты Windows и драйверы устройств от других компаний взаимодействуют с аппа­ратурой посредством HAL. Существует много версий HAL под различные аппаратные платформы. Подходящий уровень выбирается в процессе установки Windows.

Процесс - это исполняемый экземпляр приложения инабор ресурсов, которые выделяются данному исполняемому приложению. Ресурсы включают в себя следующее:

- виртуальное адресное пространство;

- системные ресурсы, такие как растровые изображения, файлы, области памяти и т.д.;

- модули процесса, то есть исполняемые модули, которые отображены (загружены) в его адресное пространство. Это могут быть динамические библиотеки (DLL), драйверы (DRV) и управляющие элементы (OCX), основной загрузочный модуль (ЕХЕ) процесса, который иногда и называют собственно модулем. Модуль данных (или программный модуль) может или находиться на диске, или быть загруженным в физическую память (RAM) Правда, термин «загружен» (loaded) имеет иное значение, относящееся к виртуальному адресному пространству процесса. Здесь больше подходит термин «отображен» (mapped), так как само отображение - это просто назначение виртуальным адресам физических адресов. После того как модуль загружен в физическую память, его физические адреса могут отображаться в различные виртуальные адресные пространств, при этом возможно использование в каждом процессе разных виртуальных адресов. Отображение не обязательно требует физического перемещения реальных данных или программ (хотя, как вы увидите позже, бывает и так); уникальный идентификационный номер, называемый идентификатором процесса; один или несколько потоков управления.

Поток - это внутренняя составляющая процесса, которой операционная система выделяет процессорное время. Каждый процесс должен иметь, по крайней мере, один поток. Поток включает:

· текущее состояние регистров процессора;

· два стека, один из которых используется при выполнении в режиме ядра, второй - при выполнении в пользовательском режиме;

· участок памяти для работы подсистем, библиотеки времени выполнения,

· динамические библиотеки;

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

Состояние регистров, содержимое стека и области памяти называют контекстом потока (thread's context).

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

Множественные прикладные среды Windows 2000.

Важнейшим рыночным требованием являлось обеспечение поддержки по крайней мере двух уже существующих программных интерфейсов OS/2 и POSIX, а также возможности добавления других API в будущем.

Заметим, что для того, чтобы программа, написанная для одной ОС, могла быть выполнена в рамках другой ОС, недостаточно лишь обеспечить совместимость API. Кроме этого, необходимо обеспечить ей "родное" окружение: структуру процесса, средства управления памятью, средства обработки ошибок и исключительных ситуаций, механизмы защиты ресурсов и семантику файлового доступа. Отсюда ясно, что поддержка нескольких прикладных программных сред является очень сложной задачей, тесно связанной со структурой операционной системы. Эта задача была успешно решена в Windows 2000, при этом в полной мере был использован опыт разработчиков ОС Mach из университета Карнеги-Меллона, которые смогли в своей клиент-серверной реализации UNIX'а отделить базовые механизмы операционной системы от серверов API различных ОС.

Windows 2000 поддерживает пять прикладных сред операционных систем: MS-DOS, 16-разрядный Windows, 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 они могут взаимодействовать с подсистемой Win32 для получения доступа к вводу и выводу, но также могут обращаться непосредственно к исполнительной системе NT за другими средствами операционной системы. Подсистема OS/2 может выполнять многие имеющиеся приложения OS/2 символьного режима, включая OS/2 SQL Server, и поддерживает именованные каналы и NetBIOS.

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

Рис. 7.5. Реализация множественных прикладных сред в Windows 2000

На рисунке 7.5 показана структура, обеспечивающая в Windows 2000 поддержку множественных прикладных сред.

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

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










Последнее изменение этой страницы: 2018-05-10; просмотров: 229.

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