Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Операционные системы семейства Windows.

Поиск

Теоретическая часть.

Ядро Windows 9x

 

Ядро Windows 3.1 состояло из трех составных частей - Kernel, User и GDI. Все три части были полностью 16-разрядными. В Windows 9х эти модули стали 32-разрядными, хотя система и сохранила в себе часть 16-разрядного кода.

Общая схема ядра Windows 9x показана на рис. ниже:

USER32

User32.dll и User.exe создают и контролируют окна на экране, выполняя все запросы по созданию, перемещению, изменению размеров и уничтожению окон. User.exe, кроме того, обрабатывает запросы, относящиеся к значкам и другим элементам интерфейса пользователя, а также переадресует события, порожден­ные различными устройствами ввода, соответствующим приложениям.

GDI32

Gdi32.dll и Gdi.exe контролируют интерфейс графических устройств (Graphics Device Interface - GDI). GDI выполняет графические операции при создании изоб­ражения на системном дисплее, принтере и других устройствах.

KERNEL32

Kernel32.dll выполняет базовые функции операционной системы, в том числе:

· управление памятью:

· файловый ввод/вывод;

· загрузку программы;

· выполнение программы.

И 16-разрядные компоненты

Из схемы видно, что Kernel32 никогда не обращается к Кеrnе116. Последний модуль задействуется только при загрузке Windows. При запуске Windows 9х загружает 32-разрядные виртуальные драйверы (*.vxd) для всех знакомых ей устройств, в противном случае остается драйвер 16-разрядного реального режима (*.drv).

Комбинация 16-разрядного и 32-разрядного кода позволяет сохранить совместимость с существующими приложениями и драйверами и одновременно увеличить производи­тельность системы по сравнению с Windows 3.х. Для включения в Windows 95 16-разрядных компонентов есть три основные причины:

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

· в некоторых случаях 16-разрядный код выполняется быстрее, чем аналогич­ный 32-разрядный;

· 32-разрядный код требует больше памяти, чем эквивалентный 16-разрядный.

Подсистемы ввода/вывода и драйверы устройств, включая сетевые и файловые системы, являются полностью 32-разрядными, как и все компоненты управления памятью и планирования. Часто возникающая при этом проблема вызова 32-разрядной функции из 16-разрядного приложения (или наоборот) решается при помощи шлюзования.

Эта операция выполняется, когда операционная система преобразует вызов 16-разрядной функции в вызов 32-разрядной. Процессы Windows 95 и Windows NT не могут содержать одновременно и 16-разрядный, и 32-разрядный код. Шлюз позволяет коду с одной стороны границы вызывать код с другой ее стороны.

 

Итак, Windows 9х поддерживает два режима многозадачности:

· Кооперативный режим многозадачности является наследием Windows 3.х. Сама ОС не управляет переключением приложений Win16, это делают за нее сами приложе­ния, которые по закольцованной цепочке передают друг другу управление (в этой очереди стоит и сама ОС). Активное в данный момент приложение распоряжается практически всеми системными ресурсами и передает управление другому приложению только по своей инициативе. Таким образом, приложение может выполняться сколь угодно долго, не передавая другим управление (вспомните операции с диском). Если же это приложение еще неправильно работает и может "зависнуть", то другие при­ложения никогда не получат управления, в т. ч. и ОС, что приведет к краху всей сис­темы;

· Вытесняющий режим многозадачности отличается тем, что ОС может получить контроль над процессом без согласия выполняющего приложения (вытеснение). Процессорное время распределяется при помощи механизма приоритетов (0-32). Приоритеты могут динамичеки изменяться – например, если приложение А с низким приоритетом использует ре­сурс, нужный приложению В, которое имеет более высокий приоритет, то приоритет приложения А времен­но повышается, чтобы оно могло как можно быстрее освободить ресурс. Потом приоритет А вновь понижается.

При работе системы Windows 9x создается следующая виртуальная машина (для защиты адресного пространства и повышения стабильности системы):

Из схемы видно, что все приложения Win16 образуют один процесс (в NT каждое 16-разрядное приложение выполняется как отдельный процесс), каждое приложение MS-DOS и Win32 является отдельным процессом. Каждый процесс Win32 может в свою очередь породить несколь­ко потоков.

Так как внутри процесса задачи Win16 выполняются в режиме кооперативной многозадачности (Windows 9x), при крахе одного из приложений Win16 могут "зависнуть" другие приложения Win16, а сама ОС и остальные процессы не должны повредится. Но в некоторых случаях могут "зависнуть" и остальные процессы (см. выше про кооперативный режим многозадачности).

Архитектура Windows NT

Когда в 1989 году Microsoft приступила к разработке Windows NT, было выдвинуто несколько ключевых требований к новой операционной системе. Это должна была быть полностью 32-разрядная ОС, способная работать на многочисленных аппаратных платформах с разной архитектурой.

Кроме того, от NT требовалось выполнение большинства существующих 16-разрядных приложений для MS-DOS и Windows 3.х.

В целях обеспечения эффективности и целостности работы ОС в системе Windows NT реализуются два режима работы (см. рис):

· режим ядра (kernel mode)

· режим пользователя (user mode)

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

· прямой доступ к оборудованию;

· прямой доступ ко всем видам памяти компьюте­ра;

· возможность работы без передачи на жесткий диск в файл подкачки виртуальной памяти;

· более высокий приоритет испол­нения, чем процессы режима пользователя.

Функционирование режима ядра Windows NT обеспечивает­ся исполняющей системой Windows NT (Windows NT Execu­tive), состоящей из следующих компонентов:

· сервис исполняющей системы - управление памятью, процессами, потоками, безопасностью, вводом/выводом, межпроцессорными обменами (см. схему);

· ядро Windows NT (ntoskrnl.exe) выполняет низкоуровневые функции операционной системы: диспетчеризация потоков, прерываний и исключений, синхронизация процессоров, отложенный вызов процедур. В отличие от остальной исполняемой части операционной системы, ядро никогда не выгружается из оперативной памяти, его выполнение никогда не прерывается другими потоками. Код ядра написан в основном на Си, а части, дающие наибольшую нагрузку на процессор, на языке Ассемблера. Ядро расположено между слоем системных служб и HAL;

· слой абстракции от оборудования (HAL - Hardware Abstraction Layer) изолирует ядро, драйверы устройств и исполняемую часть NT от аппаратных платформ, на которых должна работать операционная система. Этот про­граммный слой позволяет скрыть особенности аппаратных платформ, предоставив ОС стандартные точки входа в процеду­ры, благодаря чему для нее исчезают различия между платформами и архитектурами. Поэтому ОС может функционировать на разных платформах с разными процессорами (остались только Intel и Alpha). Кроме того, Windows NT спо­собна работать на одно- и многопроцессорных компьютерах;

 

Кроме того в режиме ядра работают:

· драйверы устройств включают как файловую систему, так и аппаратные драйверы, которые транслируют пользовательские вызовы функций ввода/вывода в запросы физических устройств ввода/вывода;

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

Режим пользователя - менее приви­легированный по сравнению с режимом ядра работы процессора.

· не имеет прямого доступа к аппаратуре. Это сделано в целях защиты от неверно работаю­щих приложений или от несанкционированного доступа. Запро­сы на использование аппаратных ресурсов должны быть разре­шены компонентом режима ядра;

· ограничен размерами выделенного адресного простран­ства, что позволяет обеспечить дополнительную защиту ОС. Системные службы он вызывает через интерфейсы прикладных программ (Applica­tion Program Interface - API);

· может быть выгружен из физической памяти в виртуальную па­мять на жестком диске. Виртуальная память (virtual memory, VRAM) использует пространство на жестком диске как дополни­тельную оперативную память;

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

Имеется четыре базовых типа пользовательских процессов:

· Специальные процессы поддержки системы, например, процесс регистрации пользователя и менеджер сессий, которые не являются службами NT;

· Процессы сервера, которые являются службами NT (аналог демонов в ОС Unix). Примером может быть регистратор событий (Event Logger);

· Подсистемы среды, которые обеспечивают пользовательским приложениям среду других операционных систем. Windows NT поставляется с тремя подсистемами: Win32, Posix и OS/2 2.1;

· Пользовательские приложения одного из пяти типов: Win32, Windows 3.1 (Win16), MS-DOS, Posix или OS/2 2.1.

Аритектура ядра Windows NT.

На рис. приведена общая архитектура Windows NT и ее компонентов. Элементы над разделительной линией представляют собой процессы пользовательского режима, а под ней располагаются процессы операционной системы, выполняемые ядром. Потоки пользовательского режима выполняются в защищенном адресном пространстве. Однако, во время их выполнения в режиме ядра, они получают доступ к системному пространству. Таким образом, системные процессы, процессы сервера (службы), подсистема среды или пользовательское приложение имеют свое собственное адресное пространство.

Режим ядра

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

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

В режиме ядра выполняются следующие компоненты ОС:

§ исполняемая часть NT, которая включает управление памятью, процессами, потоками, безопасностью, вводом/выводом, межпроцессорными обменами;

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

§ слой абстракции от оборудования (HAL - Hardware Abstraction Layer), изолирует ядро, драйверы устройств и исполняемую часть NT от аппаратных платформ, на которых должна работать операционная система;

§ драйверы устройств включают как файловую систему, так и аппаратные драйверы, которые транслируют пользовательские вызовы функций ввода/вывода в запросы физических устройств ввода/вывода;

§ функции графического интерфейса пользователя работают с окнами, элементами управления и рисунками.

Исполняемая часть

Исполняемая часть Windows NT - верхний слой программы - ядра NTOSKRNL.EXE. (Само ядро - это нижний слой). Исполняемая часть содержит следующие компоненты.

§ Менеджер процессов и потоков управляет процессами и потоками. Фактически потоки и процессы поддерживаются в NT нижележащим слоем. Исполняемая часть добавляет дополнительную семантику и функции к этим объектам нижнего уровня.

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

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

§ Система ввода/вывода использует независимый от устройств ввод/вывод и отвечает за пересылку данных соответствующим драйверам для дальнейшей обработки.

§ Менеджер кэш-памяти улучшает производительность системы ввода/вывода файлов, размещая читаемые с диска данные в основной памяти для ускорения доступа к ним, а также откладывая на короткое время запись измененных данных на диск.

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

§ Менеджер объектов, который создает, удаляет объекты и абстрактные типы данных, а также управляет ими. Объекты используются в Windows NT для представления таких ресурсов операционной системы, как процессы, потоки и объекты синхронизации.

§ LPC передает сообщения между клиентским процессом и процессом сервера на том же самом компьютере. По сути, LPC - это оптимизированная версия известной процедуры удаленного вызова RPC (Remote Procedure Call), стандарта для организации взаимодействия процессов в архитектуре клиент/сервер.

§ Широкий набор библиотечных функций общего типа: обработка строк, арифметические операции, преобразование типов данных, обработка структур.

§ Процедуры распределения памяти, взаимообмен между процессами через память, два специальных типа объектов синхронизации - ресурсы и объекты fast mutex.

Ядро

Ядро NTOSKRNL.EXE выполняет большинство основных операций NT, определяющих порядок использования процессора: диспетчеризация потоков; диспетчеризация и обработка исключений; cинхронизация работы процессоров; обеспечение базовых объектов ядра, которые используются исполняемой частью (и в некоторых случаях экспортируются в режим пользователя).

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

Объекты ядра. Одна из функций ядра - обеспечение низкоуровневой базы для хорошо определенных примитивов операционной системы, которые обеспечивают работу компонентов высшего уровня. Ядро изолирует само себя от остальной части ОС, что позволяет вынести принятие политических решений из ядра, за исключением диспетчеризации потоков. Ядро использует набор простейших объектов, называемых объектами ядра, позволяющих управлять работой центрального процессора и порядком создания вычисляемых объектов. Большинство вычисляемых объектов включает в себя один или более объектов ядра, включая определенные ядром атрибуты. Один из наборов объектов называется объектами управления и включает объект процесса ядра, объект АРС, объект процедуры отложенного вызова DPC (Deferred Procedure Call) и несколько объектов, используемых системой ввода/вывода (например, объект обработки прерывания).

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

Поддержка оборудования. Другой главнейшей задачей ядра является абстрагирование (или изоляция) исполняемой части и драйверов устройств от различий микропроцессорных платформ, на которых способна работать Windows NT: х86 и Alpha AXP. Специфичные для архитектуры функции (такие, как контекстное переключение потока) реализованы в ядре. Функции, которые могут отличаться от машины к машине, реализованы в составе HAL.

Ядро поддерживает набор интерфейсов, семантически идентичных для всех архитектур. Некоторые из интерфейсов реализованы по-разному для разных архитектур, однако, и идентичны внешне интерфейсы реализованы с помощью специфичного для архитектуры кода. Независимый от архитектуры интерфейс может быть вызван на любой машине, и его семантика будет той же, несмотря на то, зависит ли код от архитектуры или нет. Некоторые интерфейсы ядра (например, процедуры синхронизации SMP) реализованы в HAL, поскольку их реализация может изменяться даже внутри одного семейства компьютеров. В качестве примера зависящего от архитектуры кода можно назвать также поддержку кэша центрального процессора.

Абстракция от оборудования

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

Драйверы устройств. Драйверы устройств - это загружаемые модули, которые работают в режиме ядра, обеспечивая интерфейс между системой ввода/ вывода и соответствующим оборудованием. Названия этих модулей обычно имеют расширение.SYS. Все они, как правило, написаны на Си (иногда С++) с использованием вызовов процедур HAL и могут быть переносимыми на уровне двоичного кода между платформами, поддерживаемыми NT. Имеется несколько типов драйверов устройств:

§ Драйверы, манипулирующие устройствами (с использованием HAL) для записи выходных данных или получения входных данных от физических устройств или через сеть.

§ Драйверы файловой системы, которые принимают запросы на файловый ввод/вывод и транслируют их в запросы ввода/вывода, связанные с конкретными устройствами.

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

§ Сетевые драйверы, которые передают и принимают удаленные запросы на ввод/вывод.

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

Пользовательские процессы

Имеется четыре базовых типа пользовательских процессов.

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

§ Процессы сервера, которые являются службами NT (аналог демонов в ОС Unix). Примером может быть регистратор событий (Event Logger). Многие дополнительно устанавливаемые приложения, такие как Microsoft SQL Server и Exchange Server, также включают компоненты, работающие как службы NT.

§ Подсистемы среды, которые обеспечивают пользовательским приложениям среду других операционных систем. Windows NT поставляется с тремя подсистемами: Win32, Posix и OS/2 2.1.

§ Пользовательские приложения одного из пяти типов: Win32, Windows 3.1, MS-DOS, Posix или OS/2 1.2.



Поделиться:


Последнее изменение этой страницы: 2016-04-26; просмотров: 838; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.53.246 (0.009 с.)