Аннотация: В лекции рассмотрены следующие вопросы: история Windows; роль Windows NT; архитектура Windows; ядро; исполнительная подсистема; подсистемы окружения.
Презентацию к данной лекции Вы можете скачать здесь.
Введение
Windows – наиболее распространенное семейство операционных систем для настольных и портативных компьютеров. Имеются также версии Windows для мобильных устройств (Windows Mobile) и для компьютерных кластеров. Можно без преувеличения сказать, что Windows – это тот мир, в котором живут и работают миллионы программистов. Windows в своем развитии бурно прогрессирует. Значительно повысилась надежность системы, значительно возросли ее возможности.
В данной и следующей лекциях рассмотрены история, архитектура и возможности Windows.
В
«Обзор архитектуры и возможностей систем Windows 2000/XP/2003/Vista/2008/7»
и
«Системные механизмы Windows»
рассмотрены следующие вопросы:
- История
- Принципы проектирования
- Компоненты системы
- Подсистемы окружения
- Файловая система
- Работа в сети
- Программный интерфейс.
Система Windows 2000
Windows 2000 – это 32-битовая многозадачная операционная система для микропроцессоров типа Intel. Windows 2000 продолжает линию развития, начатую в середине 1990-х гг. системой Windows NT.
Основные цели разработки Windows 2000 и последующих новых версий Windows (2003/2008/7):
- переносимость
- безопасность
- соответствие POSIX
- поддержка многопроцессорности
- расширяемость
- поддержка интернационализации
- совместимость приложений с MS-DOS и ранними версиями Microsoft Windows.
Новые версии Windows используют архитектуру микроядра.
Windows 2000 доступна в нескольких версиях — Professional, Server, Advanced Server, National Server.
История Windows
Для большинства отечественных пользователей, включая автора, Windows стала доступной впервые в конце 1980-х гг. как графическая оболочка, запускаемая в среде операционной системы MS DOS командой win. Уже тогда были ощутимы основные характерные черты Windows, хотя она еще не была операционной системой, — удобный многооконный (как тогда называли) графический пользовательский интерфейс.
Затем появились наиболее известные в те годы версии — Windows 3.0, Windows 3.11, Windows for Workgroups (Windows для рабочих групп). Все они поддерживали исполнение приложений под управлением графической многооконной оболочки.
В 1988 Microsoft приняла решение о разработке переносимой ОС «new technology» (NT), которая поддерживала бы и OS/2, и POSIX API.
Первоначально Windows NT должна была использовать OS/2 API как свое естественное окружение, однако в процессе разработки NT была изменена и стала использовать Win32 API, что отражает популярность Windows 3.0.
Именно Windows NT, появившаяся к середине 1990-х гг., сыграла решающую роль в изменении отношения пользователей к Windows. До ее появления на рынке существовала точка зрения о недостаточной надежности Windows и невозможности ее использования как серверной ОС, вследствие чего в качестве серверных ОС многие предпочитали использовать Solaris или другие версии UNIX. Однако Windows NT Server, с ее передовой надежной архитектурой, расширенной поддержкой сети, поддержкой совместимости снизу вверх для приложений, разработанных для предшествующих ОС, изменила ситуацию на рынке до такой степени, что к середине 1990-х гг. лицензий на Windows NT было продано больше, чем на UNIX.
Весьма важной линией развития Windows стало семейство клиентских ОС — Windows 9x – Windows 95 и Windows 98, затем – Windows Millennium. В этих операционных системах были реализованы расширенные мультимедийные возможности, поддержка драйверов самых разнообразных устройств (в том числе – механизм Plug-and-Play автоматического распознавания новых устройств и установки их драйверов), а также кодеки для обработки мультимедийной информации. Пользовательский интерфейс Windows 95 (с его «летающими листками» и характерным дизайном окон) стал эталоном для разработчиков GUI. Не случайно Microsoft значительно продлила срок поддержки Windows 98 для пользователей. Автору, так же как и миллионам других разработчиков, не хотелось «расставаться» с комфортным интерфейсом Windows 95 / 98.
Значительным рубежом в развитии ОС стал выпуск в 2001 г. ОС Windows XP, которая и в настоящее время, почти через 10 лет (дополненная Service Packs 1, 2 и 3), является одной из наиболее широко используемых ОС в мире. Кодовое название Windows XP – whistler (свистулька),по-видимому, из-за характерной мелодии, сопровождающей вход в системы и выход их системы. Windows XP популярна среди пользователей, благодаря удобному инсталлятору, повышенной надежности, удобному и эстетичному пользовательскому интерфейсу, расширенной поддержке драйверов устройств (начиная с Windows XP, практически никаких проблем с драйверами при установке новых устройств пользователи Windows не испытывают).
ОС Windows 2003 Server характерна прежде всего своей повышенной безопасностью – например, браузер в этой системе явным образом запрашивает у пользователя подтверждение надежности каждого конкретного нового сайта.
ОС Windows 2008 – серверная ОС с удобными средствами конфигурирования, удобной поддержкой сети, поддержкой параллельного программирования. Выпущена также ее специальная версия Windows 2008 HPC – High Performance Computing, с расширенной поддержкой параллелизма.
Недавно на рынке ОС появилась Windows 7 – клиентская ОС, по отзывам пользователей, весьма надежная и удобная.
Таков лишь очень краткий перечень уникальных результатов фирмы Microsoft в области операционных систем – за небольшой отрезок времени разработано более десятка клиентских и серверных ОС семейства Windows, значительно повышена их надежность и безопасность, расширены пользовательские возможности.
Наиболее значительной представляется линия развития ОС Windows NT – Windows 2000 – Windows XP – Windows 2003 – Windows Vista — Windows 2008 – Windows 7. Это семейство ОС использует общие принципы архитектуры и общую кодовую базу (код ядра). Поэтому в дальнейшем в данной и следующей лекциях, рассматривая принципы организации Windows 2000, мы фактически рассматриваем архитектуру всех новых ОС семейства Windows.
Принципы проектирования Windows 2000 – расширяемость, переносимость, надежность, безопасность, совместимость, производительность, поддержка интернационализации и локализации.
Расширяемость. Windows 2000 имеет многоуровневую архитектуру. Ядро и его исполнительная подсистема (executive),исполняемое в защищенном режиме, обеспечивает базовые системные сервисы. Поверх ядра реализованы несколько серверных подсистем, работающих в пользовательском режиме. Модульная структура позволяет добавлять новые подсистемы окружения без модификации ядра.
Переносимость.Благодаря своим принципам проектирования и архитектуры, Windows 2000 может быть перенесена с одной аппаратной платформы на другую со сравнительно небольшими изменениями. Система написана на языках высокого уровня — C и C++. Код, зависящий от процессора, изолирован в динамически линкуемую библиотеку (DLL), называемую уровень абстрагирования от аппаратуры — hardware abstraction layer (HAL).Идея HAL была реализована фирмой Microsoft, по признанию ее менеджеров, гораздо раньше – при разработке в 1980-х гг. пакета Microsoft Office для различных аппаратных платформ, включая Macintosh / MacOS (ОС Windows тогда еще не было). Эта же идея была использована и в Windows 2000, и еще позднее – при реализации академической версии .NET – SSCLI (Rotor), работающей на трех различных платформах.
Надежность. Windows 2000 использует аппаратную защиту для виртуальной памяти и программные защитные механизмы для ресурсов ОС.
Безопасность. Как уже было сказано в предыдущих лекциях, именно с улучшения безопасности Windows 2000 была начата инициатива trustworthy computing, и с тех пор в каждой новой ОС Microsoft уделяет особое внимание безопасности.
Совместимость. Приложения, которые разработаны с учетом требований стандарта IEEE 1003.1 (POSIX), могут компилироваться для Windows 2000 без изменений в исходном коде и исполняться в среде Windows 2000.
Производительность. Подсистемы Windows 2000 могут взаимодействовать друг с другом с помощью высокопроизводительной передачи сообщений. Прерывание низкоприоритетных потоков позволяет системе быстро реагировать на внешние события. Windows 2000 спроектирована для поддержки симметричного мультипроцессирования.
Поддержка интернационализации (i18n) и локализации (l10n).Windows 2000 поддерживает различные языки и культурные среды (locales) с помощью специализированных библиотек — NLS API.
Архитектура Windows 2000
ОС Windows 2000 с точки зрения архитектуры организована как многоуровневая система модулей. Система поддерживает защищенный (системный) режим, в котором выполняются HAL, ядро и исполнительная подсистема (executive). В пользовательском режиме исполняется набор подсистем, среди которых — подсистемы окружения, эмулирующие различные ОС, с целью совместимости приложений. Подсистемы защиты реализуют различные функции безопасности.
Схема архитектуры Windows 2000 приведена на
рис.
27.1.
В последующей части лекции рассмотрим подробнее основные компоненты архитектуры Windows 2000.
Ядро Windows 2000
Ядро в системе является основой функционирования исполнительной подсистемы (executive) и подсистем, выполняемых в пользовательском режиме. Отказы страниц в ядре исключены. Его исполнение никогда не прерывается.
Ядро выполняет следующие основные функции:
- Планирование потоков
- Обработка прерываний и исключений
- Низкоуровневую синхронизацию процессов
- Восстановление после отказов электропитания.
Особенно важной и принципиально новой в операционных системах особенностью является то, что ядро системы Windows — объектно-ориентированное. Ядро использует два набора объектов:
- Объекты-диспетчеры — — объекты, управляющие диспетчеризацией и синхронизацией (события, мьютексы, семафоры, потоки, таймеры).
- Управляющие объекты — асинхронные вызовы процедур, обработчики прерываний, объекты нотификации об электропитании, объекты состояния электропитания, объекты профилирования.
Поддержка потоков и процессов в ядре.Процесс имеет адресное пространство в виртуальной памяти, информацию (например, базовый приоритет) и тесную связь с одним или несколькими процессами. Потоки – единицы исполнения, планируемые диспетчером ядра. Каждый поток имеет свое собственное состояние, включая приоритет, связь с процессором и статистическую информацию. Поток может быть в следующих состояниях: ready, standby, running, waiting, transition и terminated.
Планирование в ядре.Диспетчер использует 32-уровневую схему приоритетов для определения порядка выполнения потоков. Приоритеты разбиты на два класса:
- Класс real-time содержит потоки с приоритетами от 16 до 31.
- Класс variable содержит потоки с приоритетами от 0 до 15.
Характерными чертами стратегии приоритетов Windows 2000 являются следующие:
- Хорошее время ответа для потоков, использующих мышь и окна.
- Предоставление возможности потокам, связанным с вводом-выводом, обеспечивать занятость устройств ввода-вывода.
Планирование выполняется, когда поток переходит в состояние ready или wait, когда поток завершается, либо когда приложение изменяет приоритет потока или связь с процессором.
Потокам реального времени отдается предпочтение при выделении процессора; но ОС не гарантирует, что поток начнет выполняться в течение какого-либо определенного интервала времени (такой подход известен как soft real-time ).
Материал из РУВИКИ — свободной энциклопедии
Архитектура Windows NT присуща семейству операционных систем (ОС) на ядре Windows NT. Это следующие ОС: Windows NT 3.1, Windows NT 3.5, Windows NT 3.51, Windows NT 4.0, Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows Server 2008, Windows 7, Windows 8, Windows 10 и Windows 11.
Все они являются операционными системами с вытесняющей многозадачностью, разработаны для работы как с однопроцессорными, так и с симметричными мультипроцессорными компьютерами. Для обработки запросов ввода\вывода используется пакетноуправляемый ввод-вывод, который применяет пакеты запросов ввода\вывода (IRP) и асинхронный ввод-вывод.
Архитектура Windows NT имеет модульную структуру и состоит из двух основных уровней — компоненты, работающие в режиме пользователя, и компоненты режима ядра. Программы и подсистемы, работающие в режиме пользователя, имеют ограничения на доступ к системным ресурсам. Режим ядра имеет неограниченный доступ к системной памяти и внешним устройствам. Ядро системы NT называют гибридным ядром или макроядром. Архитектура включает в себя само ядро, уровень аппаратных абстракций (HAL), драйверы и ряд служб (Executives), которые работают в режиме ядра (Kernel-mode drivers) или в пользовательском режиме (User-mode drivers)[1][2].
Пользовательский режим Windows NT состоит из подсистем, передающих запросы ввода-вывода соответствующему драйверу режима ядра посредством менеджера ввода-вывода. Есть две подсистемы на уровне пользователя: подсистема окружения (запускает приложения, написанные для разных операционных систем) и интегрированная подсистема (управляет особыми системными функциями от имени подсистемы окружения). Режим ядра имеет полный доступ к аппаратной части и системным ресурсам компьютера.
Режим пользователя состоит из подсистем, которые передают запросы ввода\вывода соответствующему драйверу режима ядра посредством менеджера ввода-вывода. Уровень пользователя состоит из двух подсистем — подсистема окружения (Environment) и интегральная подсистема (Integral).
Подсистема окружения разработана для запуска приложений, написанных для разных типов операционных систем. Ни одна из подсистем окружения не имеет прямого доступа к аппаратной части компьютера. Доступ к ресурсам памяти происходит посредством Менеджера виртуальной памяти, который работает в режиме ядра. Также приложения запускаются с меньшим приоритетом, чем процессы режима ядра.
Подсистема окружения состоит из следующих подсистем — подсистема Win32, подсистема OS/2 и подсистема POSIX.
Подсистема окружения Win32 запускает 32-разрядные Windows-приложения. Она содержит консоль и поддержку текстового окна, обработку ошибок для всех других подсистем окружения. Поддерживает VDM (Virtual DOS Machine), которая позволяет запускать 16-разрядные DOS и Windows- (Win16) приложения. VDM запускается в своем собственном адресном пространстве и эмулирует систему MS-DOS, запущенную на компьютере с процессором Intel 80486. Программы Win16 запускаются в режиме Win16 VDM. Каждая программа запускается в одном процессе с использованием одного адресного пространства, но для каждой программы используется свой отдельный поток. Однако Windows NT позволяет запускать Win16-программы в отдельных Win16 VDM-процессах, реализуя вытесняющую многозадачность. Процесс подсистемы окружения Win32 — csrss.exe также включает в себя функциональность менеджера окон, то есть обрабатывает входящие события, такие, как нажатие клавиш клавиатуры и мыши, и передает их на обработку соответствующим приложениям. Каждое приложение само производит перерисовку окон в ответ на эти сообщения.
Подсистема окружения OS/2 поддерживает неграфические 16-разрядные приложения операционной системы OS/2 и эмулирует систему OS/2 2.1.x.
Подсистема окружения POSIX поддерживает приложения, написанные в соответствии со стандартом POSIX.1.
Интегрированная подсистема (Integral subsystem) следит за некоторыми функциями операционной системы от имени подсистемы окружения. Состоит из подсистемы безопасности, службы рабочей станции и службы сервера. Служба безопасности обращается с маркерами доступа, разрешает или запрещает доступ к учётной записи пользователя, обрабатывает запросы авторизации и инициирует процесс входа пользователя в систему. Служба Рабочая станция обеспечивает доступ компьютера к сети — является API для сетевого редиректора (ПО, эмулирующее доступ к удаленной файловой системе как к локальной). Служба Сервер позволяет компьютеру предоставлять сетевые сервисы.
Режим ядра Windows NT имеет полный доступ к аппаратной части компьютера и системным ресурсам. Работает в защищенной области памяти. Управляет памятью и взаимодействием с аппаратной частью. Предотвращает доступ к критическим областям памяти со стороны приложений и служб пользовательского режима. Для выполнения подобных операций процесс пользовательского режима должен попросить режим ядра выполнить её от своего имени.
Архитектура x86 поддерживает 4 уровня привилегий — от 0 до 3, но используются только 0-й и 3-й уровень.
Режим пользователя использует уровень 3, а режим ядра — 0. Это было сделано для возможности переноса на платформу RISC, которая использует только два уровня привилегий.
Режим ядра состоит из исполнительных служб, которые представляют собой различные модули, выполняющие определённые задачи, драйвера ядра, само ядро и уровень аппаратных абстракций HAL.
Исполнительная подсистема[править | править код]
Работает с вводом/выводом, менеджером объектов, управлением над процессами и безопасностью. Неофициально делится на несколько подсистем — менеджер кэша, менеджер конфигурации, менеджер ввода/вывода, вызов локальных процедур, менеджер памяти, монитор безопасности.
Системные службы, то есть системные вызовы, реализованы на этом уровне, за исключением нескольких вызовов, которые вызывают непосредственно ядро для большей производительности.
В данном контексте термин «служба» относится к вызываемым подпрограммам, или набору вызываемых подпрограмм. Они отличаются от служб, выполняемых в режиме пользователя, которые в какой-то мере являются аналогом демонов в UNIX-подобных системах.
Менеджер объектов[править | править код]
Это исполнительная подсистема, к которой обращаются все остальные модули исполнительной подсистемы, в частности, системные вызовы, когда им необходимо получить доступ к ресурсам Windows NT. Менеджер объектов служит для уменьшения дублирования объектов, что может привести к ошибкам в работе системы. Для менеджера объектов каждый ресурс системы является объектом — будь то физический ресурс типа периферийного устройства, файловой системы, или логический ресурс — файл и др.
Каждый объект имеет свою структуру, или тип объекта.
Создание объекта делится на две стадии — создание и вставка. Создание — создается пустой объект и резервируются необходимые ресурсы, например, имя в пространстве имен. Если создание пустого объекта произошло успешно, то подсистема, ответственная за создание объекта, заполняет его. Если инициализация успешна, то подсистема заставляет менеджер объектов произвести вставку объекта — то есть сделать его доступным по своему имени или дескриптору.
- ↑ Графические драйверы ATI Catalyst в операционной системе Windows Vista | Видеокарты — 3DNews — Daily Digital Digest. Дата обращения: 9 октября 2023. Архивировано 4 мая 2009 года.
- ↑ w:User-Mode Driver Framework
В архитектура Windows NT, строка операционные системы производится и продается Microsoft, представляет собой многоуровневый дизайн, состоящий из двух основных компонентов: пользовательский режим и режим ядра. Это упреждающий, повторно въезжающий многозадачность операционная система, которая была разработана для работы с однопроцессор и симметричный мультипроцессор (SMP) компьютеры. Обрабатывать ввод, вывод (I / O) запросы, они используют управляемый пакетами I / O, который использует Пакеты запросов ввода / вывода (IRP) и асинхронный ввод / вывод. Начиная с Windows XP, Microsoft начала производить 64-битный доступные версии Windows; до этого было только 32-битный версии этих операционных систем.
Программы и подсистемы в пользовательском режиме ограничены с точки зрения того, к каким системным ресурсам они имеют доступ, в то время как режим ядра имеет неограниченный доступ к системной памяти и внешним устройствам. Режим ядра в Windows NT имеет полный доступ к аппаратным и системным ресурсам компьютера. Windows NT ядро это гибридное ядро; архитектура включает в себя простое ядро, уровень аппаратной абстракции (HAL), драйверы и ряд услуг (вместе именуемых Исполнительный ), которые все существуют в режиме ядра.[1]
Пользовательский режим в Windows NT состоит из подсистем, способных передавать запросы ввода-вывода в соответствующий режим ядра. драйверы устройств с помощью диспетчера ввода-вывода. Уровень пользовательского режима Windows NT состоит из «подсистем среды», которые запускают приложения, написанные для многих различных типов операционных систем, и «интегральной подсистемы», которая выполняет специфические для системы функции от имени подсистем среды. В режиме ядра службы и приложения пользовательского режима не могут получить доступ к критическим областям операционной системы, к которым у них не должно быть доступа.
Исполнительные интерфейсы со всеми подсистемами пользовательского режима имеют дело с вводом-выводом, управлением объектами, безопасностью и управлением процессами. Ядро находится между уровнем аппаратной абстракции и исполнительным устройством, чтобы обеспечить многопроцессорная синхронизация, нить а также планирование и отправку прерываний, а также обработку прерываний и отправку исключений. Ядро также отвечает за инициализацию драйверов устройств при загрузке. Драйверы режима ядра существуют на трех уровнях: драйверы самого высокого уровня, промежуточные драйверы и драйверы низкого уровня. Модель драйвера Windows (WDM) существует на промежуточном уровне и был в основном разработан для двоичной и исходной совместимости между Windows 98 и Windows 2000. Драйверы самого низкого уровня — это либо устаревшие драйверы устройств Windows NT, которые управляют устройством напрямую, либо могут быть подключи и играй (PnP) аппаратная шина.
Пользовательский режим
Пользовательский режим состоит из различных системных процессов и библиотек DLL.
Интерфейс между приложениями пользовательского режима и функциями ядра операционной системы называется «подсистемой среды». В Windows NT может быть несколько из них, каждый из которых реализует свой набор API. Этот механизм был разработан для поддержки приложений, написанных для многих различных типов операционных систем. Ни одна из подсистем среды не может напрямую обращаться к оборудованию; доступ к аппаратным функциям осуществляется путем вызова процедур режима ядра.[нужна цитата ]
Существует три основных подсистемы среды: Win32 подсистема, OS / 2 подсистема и POSIX подсистема.[2]
- Подсистема среды Win32 может запускать 32-разрядные приложения Windows. Он содержит консоль, а также поддержку текстового окна, завершение работы и обработку жестких ошибок для всех других подсистем среды. Он также поддерживает Виртуальные машины DOS (VDM), которые позволяют MS-DOS и 16 бит Окна (Win16 ) приложения для запуска в Windows NT. Существует специальный модуль VDM для MS-DOS, который работает в собственном адресном пространстве и имитирует Intel 80486 под управлением MS-DOS 5.0. Однако программы Win16 запускаются в Win16 VDM. Каждая программа по умолчанию выполняется в одном и том же процессе, таким образом, используя одно и то же адресное пространство, и Win16 VDM дает каждой программе свой собственный поток для запуска. Однако Windows NT позволяет пользователям запускать программу Win16 в отдельном модуле Win16 VDM, что позволяет программе выполнять многозадачность с вытеснением, поскольку Windows NT вытесняет весь процесс VDM, который содержит только одно работающее приложение. Процесс подсистемы среды Win32 (csrss.exe ) также включает функцию управления окнами, иногда называемую «оконный менеджер «. Он обрабатывает события ввода (например, от клавиатуры и мыши), а затем передает сообщения приложениям, которые должны получать этот ввод. Каждое приложение отвечает за рисование или обновление своих собственных окон и меню в ответ на эти сообщения.
- Подсистема среды OS / 2 поддерживает 16-битные символьные приложения OS / 2 и эмулирует OS / 2 1.x, но не 32-битные или графические приложения OS / 2, которые используются с OS / 2 2.x или новее, на Только машины x86.[3] Для запуска графических программ OS / 2 1.x необходимо установить дополнительную подсистему Windows NT для Presentation Manager.[3] Последней версией Windows NT с подсистемой OS / 2 была Windows 2000; он был удален из Windows XP.[4][5]
- Подсистема среды POSIX поддерживает приложения, которые строго написаны либо в стандарте POSIX.1, либо в соответствующем ISO /IEC стандарты. Эта подсистема заменена на Interix, который является частью Службы Windows для UNIX.[4] Это, в свою очередь, было заменено Подсистема Windows для Linux.
Подсистема безопасности имеет дело с маркерами безопасности, предоставляет или запрещает доступ к учетным записям пользователей на основе разрешений ресурсов, обрабатывает запросы входа и инициирует аутентификацию входа в систему, а также определяет, какие системные ресурсы должны проверяться Windows NT.[нужна цитата ] Он также ухаживает за Active Directory.[нужна цитата ] Сервис АРМ реализует сетевой перенаправитель, которая является клиентской стороной общего доступа к файлам и принтерам Windows; он реализует локальные запросы к удаленным файлам и принтерам, «перенаправляя» их на соответствующие серверы в сети.[6] И наоборот, служба сервера позволяет другим компьютерам в сети получать доступ к общим папкам и общим принтерам, предлагаемым локальной системой.[7]
Режим ядра
Windows NT режим ядра имеет полный доступ к аппаратным и системным ресурсам компьютера и запускает код в защищенной области памяти.[8] Он контролирует доступ к планированию, приоритизации потоков, управлению памятью и взаимодействию с оборудованием. В режиме ядра службы и приложения пользовательского режима не могут получить доступ к критическим областям операционной системы, к которым они не должны иметь доступа; Процессы пользовательского режима должны запрашивать режим ядра выполнять такие операции от их имени.
В то время как x86 архитектура поддерживает четыре разных уровня привилегий (пронумерованные от 0 до 3), используются только два крайних уровня привилегий. Программы в пользовательском режиме запускаются с CPL 3, а ядро работает с CPL 0. Эти два уровня часто называют «кольцом 3» и «кольцом 0» соответственно. Такое дизайнерское решение было принято для достижения переносимости кода на RISC платформы, поддерживающие только два уровня привилегий,[9] хотя это нарушает совместимость с OS / 2 приложения, содержащие сегменты привилегий ввода-вывода, которые пытаются получить прямой доступ к оборудованию.[10]
Код, работающий в режиме ядра, включает в себя: исполнительную систему, которая состоит из множества модулей, выполняющих определенные задачи; то ядро, который предоставляет услуги низкого уровня, используемые исполнительной властью; уровень аппаратной абстракции (HAL); и драйверы ядра.[8][11]
Исполнительный
Службы Windows Executive составляют низкоуровневую часть режима ядра и содержатся в файле NTOSKRNL.EXE.[8] Он занимается вводом-выводом, управлением объектами, безопасностью и управлением процессами. Они разделены на несколько подсистемы, среди которых Менеджер кеша, Диспетчер конфигурации, Менеджер ввода / вывода, Вызов местной процедуры (LPC), Менеджер памяти, Диспетчер объектов, Структура процесса и Контрольный монитор безопасности (SRM). Сгруппированные вместе, компоненты можно назвать Исполнительные услуги (внутреннее имя Бывший). Системные услуги (внутреннее имя Nt), т.е. системные вызовы, также реализованы на этом уровне, за исключением очень немногих, которые вызывают непосредственно на уровне ядра для повышения производительности.[нужна цитата ]
Термин «служба» в этом контексте обычно относится к вызываемой программе или набору вызываемых процедур. Это отличается от концепции «процесса обслуживания», который представляет собой компонент пользовательского режима, в некоторой степени аналогичный демон в Unix-подобный операционные системы.
- Диспетчер объектов
- В Диспетчер объектов (внутреннее имя Обь) — это исполнительная подсистема, через которую должны пройти все другие исполнительные подсистемы, особенно системные вызовы, чтобы получить доступ к ресурсам Windows NT, что, по сути, делает ее службой инфраструктуры управления ресурсами.[12] Диспетчер объектов используется для уменьшения дублирования функций управления ресурсами объектов в других исполнительных подсистемах, что потенциально может привести к ошибкам и затруднить разработку Windows NT.[13] Для диспетчера объектов каждый ресурс является объектом, независимо от того, является ли этот ресурс физическим (например, файловой системой или периферийным устройством) или логическим ресурсом (например, файлом). Каждый объект имеет структуру или тип объекта о чем должен знать диспетчер объектов.
- Создание объекта — это процесс в два этапа: творчество и вставка. Творчество вызывает выделение пустого объекта и резервирование любых ресурсов, необходимых диспетчеру объектов, таких как (необязательное) имя в пространстве имен. Если создание прошло успешно, подсистема, отвечающая за создание, заполняет пустой объект.[14] Наконец, если подсистема считает инициализацию успешной, она инструктирует диспетчер объектов: вставлять объект, который делает его доступным через его (необязательно) имя или печенье называется ручка.[15] С этого момента время жизни объекта обрабатывается диспетчером объектов, и подсистема должна поддерживать объект в рабочем состоянии до тех пор, пока диспетчер объектов не получит сигнал от него избавиться.[16]
- Дескрипторы — это идентификаторы, которые представляют ссылку на ресурс ядра через непрозрачное значение.[17] Точно так же открытие объекта через его имя подлежит проверке безопасности, но действие через существующий открытый дескриптор ограничено только уровнем доступа, запрошенным при открытии или создании объекта.[нужна цитата ]
- Типы объектов определяют процедуры объекта и любые данные, относящиеся к объекту. Таким образом, диспетчер объектов позволяет Windows NT быть объектно-ориентированный операционной системы, поскольку типы объектов можно рассматривать как полиморфные классы которые определяют объекты. Однако большинство подсистем, за одним заметным исключением в диспетчере ввода-вывода, полагаются на реализацию по умолчанию для всех процедур объектного типа.[нужна цитата ]
- Каждый экземпляр создаваемого объекта сохраняет свое имя, параметры, которые передаются функции создания объекта, атрибуты безопасности и указатель на его тип объекта. Объект также содержит процедуру закрытия объекта и счетчик ссылок, чтобы сообщить диспетчеру объектов, сколько других объектов в системе ссылается на этот объект, и тем самым определяет, может ли объект быть уничтожен при отправке ему запроса на закрытие.[18] Каждый именованный объект существует в иерархическом объекте пространство имен.
- Контроллер кеша
- Тесно координируется с диспетчером памяти, диспетчером ввода-вывода и драйверами ввода-вывода, чтобы обеспечить общий кеш для обычного файлового ввода-вывода. Windows Cache Manager работает с файловыми блоками (а не с блоками устройств) для согласованной работы между локальными и удаленными файлами и обеспечивает определенную степень согласованности с отображение файлов в памяти, поскольку блоки кеша являются особым случаем отображенных в память представлений, а кэш пропускает особый случай ошибок страниц.
- Диспетчер конфигурации
- Реализует системные вызовы, необходимые для Реестр Windows.
- Менеджер ввода / вывода
- Позволяет устройствам взаимодействовать с подсистемами пользовательского режима. Он переводит команды чтения и записи пользовательского режима в чтение или запись IRP который он передает драйверам устройств. Он принимает файловая система Запросы ввода-вывода и переводят их в вызовы, специфичные для устройства, и могут включать драйверы устройств низкого уровня, которые напрямую управляют оборудованием для чтения ввода или записи вывода. Он также включает в себя диспетчер кеша для повышения производительности диска за счет кэширования запросов чтения и записи на диск в фоновом режиме.
- Вызов местных процедур (LPC)
- Предоставляет порты межпроцессного взаимодействия с семантикой соединения. Порты LPC используются подсистемами пользовательского режима для связи со своими клиентами, исполнительными подсистемами для связи с подсистемами пользовательского режима и в качестве основы для локального транспорта для Microsoft RPC.
- Менеджер памяти
- Управляет виртуальная память, контролируя защиту памяти и пейджинг памяти в физической памяти и из нее во вторичное хранилище, а также реализует универсальный распределитель физической памяти. Он также реализует синтаксический анализатор исполняемых файлов PE, который позволяет отображать или отменять отображение исполняемого файла за один атомарный шаг.
- Начиная с Windows NT Server 4.0, Terminal Server Edition, диспетчер памяти реализует так называемый пространство сеанса, диапазон памяти режима ядра, который подвержен переключению контекста так же, как память пользовательского режима. Это позволяет нескольким экземплярам подсистемы Win32 режима ядра и драйверов GDI работать бок о бок, несмотря на недостатки в их первоначальной конструкции. Каждое пространство сеанса совместно используется несколькими процессами, вместе называемыми «сеансом».
- Чтобы обеспечить определенную степень изоляции между сеансами без введения нового типа объекта, связь между процессами и сеансами обрабатывается контрольным монитором безопасности как атрибут объекта безопасности (токен), и его можно изменить только при наличии особых привилегий. .
- Относительно бесхитростный и произвольный характер сессий объясняется тем фактом, что они не были частью первоначального дизайна и должны были быть разработаны с минимальным нарушением основной линии третьей стороной (Citrix Systems ) в качестве предпосылки для их терминальный сервер продукт для Windows NT, называемый WinFrame. Однако, начиная с Windows Vista, сеансы, наконец, стали полноценным аспектом архитектуры Windows. Это больше не структура диспетчера памяти, которая проникает в пользовательский режим косвенно через Win32, они были расширены до всеобъемлющей абстракции, затрагивающей большинство исполнительных подсистем. Фактически, регулярное использование Windows Vista всегда приводит к многосеансовой среде.[19]
- Структура процесса
- Ручки процесс и создание и завершение потока, и он реализует концепцию Работа, группа процессов, которые могут быть завершены целиком или помещены под общие ограничения (например, общий максимум выделенной памяти или процессорного времени). Объекты вакансий были введены в Windows 2000.
- PnP-менеджер
- Ручки подключи и играй и поддерживает обнаружение устройства и установку во время загрузки. Он также отвечает за остановку и запуск устройств по запросу — это может произойти, когда автобус (например, USB или же IEEE 1394 FireWire ) получает новое устройство, и ему необходимо загрузить драйвер устройства для его поддержки. Его основная часть фактически реализована в пользовательском режиме, в Сервис Plug and Play, который выполняет часто сложные задачи по установке соответствующих драйверов, уведомления служб и приложений о появлении новых устройств и отображения графического интерфейса пользователя для пользователя.
- Менеджер питания
- Обрабатывает события, связанные с питанием (отключение питания, переход в режим ожидания, переход в спящий режим и т. Д.), И уведомляет затронутые драйверы специальными пакетами IRP (Power IRP).
- Контрольный монитор безопасности (SRM)
- Основной орган для обеспечения соблюдения правил безопасности подсистемы интеграции безопасности.[20] Он определяет, можно ли получить доступ к объекту или ресурсу с помощью списки контроля доступа (ACL), которые сами состоят из записей управления доступом (ACE). ACE содержат Идентификатор безопасности (SID) и список операций, которые ACE предоставляет избранной группе опекунов — учетная запись пользователя, учетная запись группы или сеанс входа в систему.[21]— разрешение (разрешить, запретить или проверять) для этого ресурса.[22][23]
- GDI
- В Интерфейс графического устройства отвечает за такие задачи, как рисование линий и кривых, отображение шрифтов и управление палитрами. В Windows NT 3.x в серии релизов компонент GDI был переведен в пользовательский режим. Подсистема времени выполнения клиент / сервер, но в Windows NT 4.0 он был переведен в режим ядра для повышения производительности графики.[24]
Ядро
Ядро находится между HAL и исполнительной системой и обеспечивает многопроцессорную синхронизацию, планирование и диспетчеризацию потоков и прерываний, а также обработку прерываний и диспетчеризацию исключений; он также отвечает за инициализацию драйверов устройств при загрузке, которые необходимы для запуска и работы операционной системы. То есть ядро выполняет практически все задачи традиционного микроядро; Строгое различие между Executive и Kernel является наиболее заметным остатком оригинального дизайна микроядра, а в исторической проектной документации компонент ядра постоянно упоминается как «микроядро».
Ядро часто взаимодействует с диспетчером процессов.[25] Уровень абстракции таков, что ядро никогда не обращается к диспетчеру процессов, только наоборот (за исключением нескольких угловых случаев, но никогда не доходит до функциональной зависимости).
Гибридный дизайн ядра
Дизайн Windows NT включает в себя многие из тех же целей, что и Мах, архетипическая система микроядра, одним из наиболее важных является ее структура в виде набора модулей, которые обмениваются данными через хорошо известные интерфейсы, с небольшим микроядром, ограниченным основными функциями, такими как обработка прерываний первого уровня, планирование потоков и примитивы синхронизации. Это позволяет использовать либо прямые вызовы процедур, либо межпроцессного взаимодействия (IPC) для связи между модулями и, следовательно, для потенциального расположения модулей в разных адресных пространствах (например, в пространстве ядра или серверных процессах). Другие цели проектирования, общие с Mach, включали поддержку различных архитектур, ядро с достаточно общими абстракциями, позволяющими реализовать на нем несколько персоналий операционной системы, и объектно-ориентированную организацию.[26][27]
Основная особенность операционной системы Windows — это Windows API, который присутствует всегда. Подсистема эмуляции, которая реализует индивидуальность Windows, называется Подсистема времени выполнения клиент / сервер (csrss.exe). В версиях NT до 4.0 этот процесс подсистемы также содержал диспетчер окон, интерфейс графического устройства и драйверы графического устройства. Однако по соображениям производительности в версии 4.0 и новее эти модули (которые часто реализуются в пользовательском режиме даже в монолитных системах, особенно разработанных без поддержки внутренней графики) работают как подсистема режима ядра.[26]
Приложения, работающие на NT, написаны для одной из личностей ОС (обычно Windows API), а не для собственного NT API, документация для которого не является общедоступной (за исключением подпрограмм, используемых при разработке драйверов устройств). Индивидуальность ОС реализуется через набор библиотек DLL пользовательского режима (см. Библиотека с динамической компоновкой ), которые при необходимости отображаются в адресные пространства прикладных процессов вместе с серверным процессом подсистемы эмуляции (как описано ранее). Приложения получают доступ к системным службам, вызывая индивидуальные библиотеки DLL, отображаемые в их адресные пространства, которые, в свою очередь, вызывают библиотеку времени выполнения NT (ntdll.dll), также отображаемую в адресное пространство процесса. Библиотека времени выполнения NT обслуживает эти запросы, перехватывая их в режиме ядра для вызова исполнительных процедур режима ядра или выполнения Вызов местных процедур (LPC) в соответствующие серверные процессы подсистемы пользовательского режима, которые, в свою очередь, используют NT API для связи с процессами приложений, подсистемами режима ядра и друг с другом.[28]
Драйверы режима ядра
Windows NT использует режим ядра драйверы устройств чтобы он мог взаимодействовать с аппаратные устройства. Каждый из драйверов имеет четко определенные системные процедуры и внутренние процедуры, которые он экспортирует в остальную часть операционной системы. Все устройства рассматриваются кодом пользовательского режима как файловый объект в диспетчере ввода-вывода, хотя для самого диспетчера ввода-вывода устройства рассматриваются как объекты устройств, которые он определяет как объекты файлов, устройств или драйверов. Драйверы режима ядра существуют на трех уровнях: драйверы самого высокого уровня, промежуточные драйверы и драйверы низкого уровня. Драйверы самого высокого уровня, такие как драйверы файловой системы для ТОЛСТЫЙ и NTFS, полагайтесь на промежуточных драйверов. Промежуточные драйверы состоят из функциональных драйверов или основного драйвера для устройства, которые могут быть размещены между драйверами фильтра нижнего и верхнего уровня. Тогда функциональный драйвер полагается на водителя автобуса или водителя, который обслуживает автобус контроллер, адаптер или мост, который может иметь дополнительный драйвер фильтра шины, который находится между ним и драйвером функции. Драйверы среднего уровня в своей работе полагаются на драйверы самого низкого уровня. В Модель драйвера Windows (WDM) существует на промежуточном уровне. Драйверы самого низкого уровня — это либо устаревшие драйверы устройств Windows NT, которые управляют устройством напрямую, либо могут быть аппаратной шиной PnP. Эти драйверы нижнего уровня напрямую управляют оборудованием и не полагаются на какие-либо другие драйверы.
Уровень аппаратной абстракции
Windows NT уровень аппаратной абстракции, или HAL, представляет собой слой между физическим оборудованием компьютера и остальной частью операционной системы. Он был разработан, чтобы скрыть различия в оборудовании и обеспечить согласованную платформу, на которой работает ядро. HAL включает аппаратно-зависимый код, который управляет интерфейсами ввода-вывода, контроллеры прерываний и несколько процессоров.
Однако, несмотря на свое предназначение и назначенное место в архитектуре, HAL не является уровнем, который находится полностью ниже ядра, как ядро находится ниже исполнительного: все известные реализации HAL в некоторой степени зависят от ядра или даже от ядра. Исполнительный. На практике это означает, что варианты ядра и HAL входят в соответствующие наборы, специально созданные для совместной работы.
В частности, аппаратная абстракция делает нет включают абстрагирование набора инструкций, что обычно подпадает под более широкую концепцию переносимость. При необходимости абстрагирование набора инструкций (например, для обработки нескольких изменений в x86 набор инструкций или имитация отсутствующего математического сопроцессора), выполняется ядром или через аппаратная виртуализация.
Смотрите также
- Файлы библиотеки Microsoft Windows
- МинВин
- Архитектура Unix
- Сравнение ядер операционных систем
- Платформа драйвера пользовательского режима
- Платформа драйвера режима ядра
- Гибридное ядро
дальнейшее чтение
- Martignetti, E .; Что делает его страницей ?: Диспетчер виртуальной памяти Windows 7 (x64) (ISBN 978-1479114290)
- Руссинович, Марк Э .; Соломон, Дэвид А .; Ионеску, А .; Внутреннее устройство Windows, часть 1: Windows Server 2008 R2 и Windows 7 (ISBN 978-0735648739)
- Руссинович, Марк Э .; Соломон, Дэвид А .; Ионеску, А .; Внутреннее устройство Windows, часть 2: Windows Server 2008 R2 и Windows 7 (ISBN 978-0735665873)
Примечания и ссылки
- Примечания
- ^ Финнел 2000, Глава 1: Введение в Microsoft Windows 2000, стр. 7–18.
- ^ «Приложение D — Запуск чужих приложений в Windows 2000 Professional». Пакет ресурсов Microsoft Windows 2000 Professional. Microsoft.
- ^ а б «Пакет ресурсов для Windows NT Workstation, глава 28 — Совместимость с OS / 2». Microsoft.
- ^ а б «POSIX и OS / 2 не поддерживаются в Windows XP или Windows Server 2003». Microsoft.
- ^ Райтер, Брайан (24 августа 2010 г.). «Печальная история подсистемы Microsoft POSIX».
- ^ «Базовая архитектура сетевого перенаправителя». Microsoft. Получено 2016-11-18.
- ^ «Сетевая архитектура Windows NT». Microsoft. Получено 2016-11-18.
- ^ а б c Роман, Стивен (1999). «Архитектура Windows». Программирование Win32 API с помощью Visual Basic. O’Reilly and Associates, Inc. ISBN 1-56592-631-5.
- ^ «Пользователь MS Windows NT в режиме ядра и официальный документ GDI». Документация по Windows NT Workstation. Microsoft TechNet. В архиве из оригинала 15 декабря 2007 г.. Получено 2007-12-09.
- ^ «Глава 28 — Совместимость с OS / 2». Комплект ресурсов для рабочих станций Windows NT. Microsoft. В архиве из оригинала 10 февраля 2009 г.. Получено 2009-01-18.
- ^ Марк Э. Руссинович; Дэвид А. Соломон; Алекс Ионеску. Внутреннее устройство Windows, пятое издание. Microsoft Press. С. 228–255.
- ^ Руссинович и Соломон 2005 С. 124-125.
- ^ Руссинович 1997, Вступление.
- ^ Руссинович 1997, «Типы объектов».
- ^ Руссинович и Соломон 2005 С. 135-140.
- ^ Руссинович и Соломон 2005, стр. 141-143.
- ^ «Ручки и объекты». MSDN — Разработка Win32 и COM. Microsoft. Получено 2009-01-17.
- ^ Руссинович 1997, «Объекты».
- ^ «Влияние изоляции сеанса 0 на службы и драйверы в Windows Vista». Microsoft.
- ^ «Хранилище данных Active Directory». Microsoft.
- ^ «Определение доверительного управляющего». MSDN.
- ^ Сиян 2000.
- ^ «1.2 Глоссарий». [MS-AZOD]: Обзор протоколов авторизации. запись контроля доступа (ACE).
- ^ «Изменение режима ядра Windows NT 4.0». Пользователь MS Windows NT в режиме ядра и официальный документ GDI. Microsoft. В архиве из оригинала 13 января 2009 г.. Получено 2009-01-19.
- ^ Соломон и Руссинович 2000 С. 543–551.
- ^ а б «Пользователь MS Windows NT в режиме ядра и официальный документ GDI». Корпорация Майкрософт. 2007 г.. Получено 2007-03-01.
- ^ Зильбершац, Авраам; Гэлвин, Питер Баер; Ганье, Грег (2005). Понятия операционной системы; 7-е издание (PDF). Хобокен, Нью-Джерси: John Wiley & Sons Inc. ISBN 978-0-471-69466-3.
- ^ Проберт, Дэйв (2005). «Обзор архитектуры Windows». Использование проектов на основе внутренних API NT для обучения принципам работы с ОС. Microsoft Research / Азия — Пекин. Получено 2007-03-01.
- Рекомендации
- Финнел, Линн (2000). Экзамен MCSE 70-215, Microsoft Windows 2000 Server. Microsoft Press. ISBN 1-57231-903-8.CS1 maint: ref = harv (связь)
- Руссинович Марк (Октябрь 1997 г.). «Внутри диспетчера объектов NT». Windows для ИТ-специалистов.CS1 maint: ref = harv (связь)
- «Хранилище данных Active Directory». Microsoft. Получено 2005-05-09.CS1 maint: ref = harv (связь)
- Соломон, Давид; Руссинович, Марк Э. (2000). Внутри Microsoft Windows 2000 (Третье изд.). Microsoft Press. ISBN 0-7356-1021-5. Архивировано из оригинал 23 марта 2005 г.CS1 maint: ref = harv (связь)
- Руссинович Марк; Соломон, Давид (2005). Внутреннее устройство Microsoft Windows (4-е изд.). Microsoft Press. ISBN 0-7356-1917-4.CS1 maint: ref = harv (связь)
- Шрайбер, Свен Б. (2001). Недокументированные секреты Windows 2000. Эддисон-Уэсли Лонгман. ISBN 978-0201721874.CS1 maint: ref = harv (связь)
- Сиян, Канаджит С. (2000). Справочник по Windows 2000 Professional. Новые всадники. ISBN 0-7357-0952-1.CS1 maint: ref = harv (связь)
внешняя ссылка
- «Официальный сайт Microsoft Windows 2000». Архивировано из оригинал 29 февраля 2000 г.
- «Microsoft Windows 2000 Plug and Play». Архивировано из оригинал 8 августа 2004 г.
- Управление памятью в ядре Windows XP
Когда в 1989 году Microsoft приступила к разработке Windows NT, было выдвинуто несколько ключевых требований к новой операционной системе. Это должна была быть полностью 32-разрядная ОС, способная работать на многочисленных аппаратных платформах с разной архитектурой.
NT задумывалась как распределенная, клиент-серверная ОС, поддерживающая симметричные многопроцессорные аппаратные платформы. Сегодня разработчики наносят завершающие штрихи в своем новом творении — Windows NT 5.0 [оригинальная статья была опубликована в IEEE Computer до того, как Microsoft объявила новое название своей ОС — Windows 2000 — Прим. перев.], однако теперь, почти десять лет спустя, когда компания вносит завершающие штрихи в свое творение, можно с уверенностью сказать, что фундаментальные основы архитектуры NT в версии 5.0 не были изменены.
Кроме того, от NT требовалась, совместимость со стандартом POSIX 1003.1, поддержка Unicode для адаптации к требованиям мирового рынка, выполнение большинство существующих 16-разрядных приложений для MS-DOS и Windows 3.х. Разработчики должны были обеспечить переносимость, надежность, совместимость «снизу-вверх», высокую производительность и возможность расширения в соответствии с меняющимися требованиями рынка. Сегодня, почти десять лет спустя, можно с уверенностью сказать, что фундаментальные основы архитектуры NT в версии 5.0 не были изменены. Да, были добавлены новые операционные и сетевые возможности, однако, ядро не было переписано, а лишь расширено. Попытаемся в данной статье дать краткий обзор архитектуры Windows NT 5.0, рассмотрев такие ее черты как plug-and-play, объекты «Задание», поддержка непосредственно адресуемой большой памяти (подробную информацию о NT 5.0 и ее новых чертах можно найти по адресу http://www.microsoft.com/windowsnt5).
Архитектура системы
На рис. 1 приведена общая архитектура 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.
Подсистемы среды и библиотеки DLL
Как видно из рис. 1, Windows NT имеет три подсистемы среды (Win32, Posix и OS/2 2.1), которые работают только на платформе х86. Подсистема Win32 специфична для Windows NT и не может работать вне нее.
Каждая из подсистем обеспечивает пользовательским приложениям доступ к разным поднаборам служб Windows NT. Это означает, что некоторые вещи могут быть сделаны из приложения, построенного на одной подсистеме, и не возможны из приложения, построенного в другой подсистеме. Так, приложение для Win32 не может использовать функцию fork подсистемы Posix.
Каждый исполняемый модуль связывается с одной и только одной подсистемой. Когда начинается выполнение модуля, изучается тип кода его заголовка, что позволяет определить подсистему среды для создания новых процессов.
Пользовательские процессы не вызывают службы NT напрямую, а используют библиотеки динамических связей (DLL) соответствующей подсистемы среды. Роль библиотек, принадлежащих подсистеме среды, в том, чтобы транслировать документированные функции среды в соответствующие вызовы недокументированных служб NT. Эти библиотеки DLL экспортируют документированный интерфейс, который могут вызывать связанные с подсистемой программы. Например, библиотеки DLL подсистемы Win32 используют функции Win32 API. Библиотека DLL подсистемы Posix использует функции Posix 1003.1 API.
Подсистема Win32. Главные компоненты подсистемы Win32 — процесс подсистемы среды и драйвер режима ядра. Процесс подсистемы среды поддерживает:
- консольные (текстовые) окна;
- создание и удаление процессов и потоков;
- работу виртуальной 16-разрядной DOS машины;
- иные функции (GetTempFile, DefineDosDevice, ExitWindowsEx и др.).
Драйвер режима ядра поддерживает:
- менеджер окон, который управляет отображением окон, выводом на экран, вводом с клавиатуры, от мыши и других устройств, а также передачей пользовательских сообщений приложениям;
- интерфейс графических устройств GDI (Graphical Device Interface), библиотека функций для вывода на графические устройства, для рисования текста, линий, фигур и манипуляций графическими объектами;
- зависимые от устройств драйверы графики, принтера и видеопорта;
- несколько библиотек DLL, которые транслируют документированные функции Win32 API в соответствующие недокументированные вызовы NTOSKRNL.EXE и WIN32K.SYS.
Приложения вызывают стандартные функции для создания окон и кнопок на дисплее. Менеджер окон передает эти запросы драйверам графических устройств через интерфейс графических устройств GDI, где они форматируются для вывода средствами конкретных устройств. GDI обеспечивает набор стандартных функций, позволяющих приложениям общаться с графическими устройствами, включая дисплеи и принтеры, без конкретных знаний о них. GDI интерпретирует запросы приложений на графический вывод и посылает их драйверам графических дисплеев. Этот интерфейс позволяет создавать код приложения, независимый от конкретных устройств и их драйверов.
NTDLL.DLL — это специальная система поддержки DLL — библиотек. Она содержит два типа функций.
- Первая группа функций обеспечивает интерфейс к службам NT, которые могут быть вызваны из пользовательского режима. Существует более 200 таких функций, например NtCreateFile, NtSetEvent и т.д. Для каждой из них имеется точка входа в NTDLL.DLL с тем же именем. Внутренний код функции содержит специфичные для архитектуры команды, которые вызывают переход в режим ядра для обращения к реальным службам NT, код которых содержится в NTOSKRNL.EXE.
- Вторая группа функций содержит большое количество функций поддержки: загрузчик исполняемых модулей, коммуникационные функции для процессов подсистемы Win32, библиотека функций реального времени пользовательского режима, диспетчер вызовов асинхронных процедур АРС (Asynchronous Procedure Call) пользовательского режима, диспетчер исключений.
Новые черты ядра NT 5.0
Несмотря на декларируемую расширяемость архитектуры Windows NT, некоторые нововведения в NT 5.0 (plug-and-play, управление электропитанием, объекты «Задание», управление большой памятью для компьютеров Alpha) повлекли, тем не менее, серьезные структурные изменения в архитектуре ядра.
Plug-and-play
Технология Plug-and-play (PnP) поддерживается комбинацией аппаратного и программного обеспечения, позволяющей распознавать и настраивать аппаратные изменения в конфигурации почти без вмешательства пользователя. Можно динамично добавлять и удалять устройства без необходимости реконфигурации системы и знания сложного компьютерного оборудования.
Эволюция PnP. Впервые концепция PnP была реализована в ОС Windows 95, но с того времени эта технология получила существенное развитие в плане управления системой, конфигурирования устройств и управления энергопотреблением, особенно благодаря инициативной проектной группе OnNow. Одним из результатов работы этой группы стала спецификация ACPI (Advanced Configuration and Power Interface) версии 1.0, определившая новый дизайн материнских плат и BIOS, обеспечивающий управление энергопотреблением и новые конфигурационные возможности под полным управлением операционной системы.
Методы распознавания оборудования, определенные спецификацией ACPI, не зависят от операционной системы или типа центрального процессора. ACPI определяет интерфейс функций PnP и управления энергопотреблением на уровне регистров и дает описательный интерфейс для новых возможностей оборудования. Это позволяет проектировщикам создавать широкий диапазон новых устройств с использованием тех же драйверов операционной системы. ACPI обеспечивает также типовой, базирующийся на системных событиях механизм управления PnP и управления энергопотреблением.
Реализация в Windows NT 5.0. При проектировании архитектуры PnP в Windows NT 5.0 ставились две основные цели:
- расширение существующей инфраструктуры ввода/вывода для поддержки PnP и управления энергопотреблением для работы с оборудованием по стандартам PnP;
- создание единых интерфейсов для драйверов устройств, поддерживающих PnP и управление энергопотреблением, для классов устройств, работающих под Windows NT 5.0 и Windows 98.
Поддержка PnP в NT 5.0 включает начальную инсталляцию системы, распознавание изменений оборудования произошедших между отдельными загрузками системы, отклик системы на такие события времени исполнения, как подключение/отключение ноутбука компьютера к док-станции, подсоединение/отсоединение периферийных устройств.
Драйверы PnP не назначают устройствам собственные ресурсы. Вместо этого требуемые ресурсы идентифицируются системой во время распознавания устройств. Основываясь на запросах устройств на ресурсы, диспетчер PnP назначает соответствующие аппаратные ресурсы (например, порты ввода/вывода, каналы DMA и т.д.), распределяет память. Диспетчер PnP реконфигурирует назначенные ресурсы по необходимости, когда устройства добавляются к системе и запрашивают уже распределенные ресурсы. Кроме того, диспетчер PnP определяет, какие драйверы требуются для поддержки конкретных устройств, и загружает эти драйверы.
Одна из ключевых черт PnP и системы управления энергопотреблением — это динамическая обработка событий. Примерами таких событий могут быть добавление или удаление устройств, включение/выключение режима пониженного энергопотребления. PnP и система управления энергопотреблением, используя функции WDM, обрабатывают динамические события сходным образом.
Изменения в драйверах. Поддержка PnP в Windows NT 5.0 потребовала внести ряд изменений в ранее разработанную модель драйверов Windows NT:
Драйверы шины отделены от HAL для координации с изменениями и расширениями существующих компонентов режима ядра (исполняемая часть, драйверы ядра, HAL). Драйверы шины управляют шиной ввода/вывода, включая управление отдельными слотами, независимыми от устройств.
Новые методы и возможности для поддержки установки устройств и конфигурации потребовали изменения таких существующих компонентов режима пользователя, как диспетчер буфера вывода, установщики классов, приложений Control Panel, Setup. Добавлены новые компоненты для поддержки PnP как в режиме ядра, так и в режиме пользователя.
Добавлены интерфейсы PnP API для чтения и записи информации из реестра (registry). Теперь структура регистра поддерживает PnP и позволяет вносить совершенствования в будущих версиях NT, в то же время обеспечивая совместимость снизу вверх.
Windows NT 5.0 будет поддерживать унаследованные драйверы, но их использование уменьшит возможности системы в области поддержки PnP. Производителям, желающим реализовать полные возможности PnP для своего оборудования и использовать одни и те же драйверы под NT и Windows 98, необходимо разработать новые драйверы, интегрирующие последние достижения технологии PnP и управления энергопотреблением.
Объект «Задание»
Windows NT 5.0 включает расширение модели процессов. «Задание» — это поименованный, безопасный, разделяемый объект, управляющий некоторыми атрибутами процессов. Его главная задача — управлять и манипулировать группой процессов как самостоятельной единицей. В ряде случаев этот объект компенсирует отсутствие в NT структурированного дерева процессов. Объект «Задание» также записывает базовую учетную информацию обо всех процессах, ассоциированных с ним, и позволяет накладывать на связанные с ним процессы: ограничения на время использования процессора в режиме пользователя; ограничение на время использования процессора в режиме пользователя каждым из процессов; максимальное число активных процессов; класс приоритета процесса «Задание».
Задания могут быть выстроены в очередь к объекту «Порт» для завершения операций ввода/вывода. Могут быть заданы границы безопасности на процессы в задании. В завершение всего, могут быть определены ограничения на пользовательские интерфейсы для процессов, например, на операции чтения и/или записи в clipboard, открытия принадлежащих потоку обработчиков окон за пределами «Задания», изменения параметров системы через функцию Win32 SystemParametersInfo.
Управление памятью большой емкости
В Windows NT 5.0 добавлено расширение VLM (Very Large Memory), позволяющее непосредственно адресовать 28 Гбайт оперативной памяти компьютеров на платформе Alpha. Сейчас VLM не предназначается для семейства процессоров х86, но в Microsoft готовят единую 64-разрядную версию NT для платформ Alpha AXP и будущей архитектуры Intel IA-64.
В NT 4.0 поддерживалась 64-разрядная адресация в операциях ввода/вывода, но каждый процесс все же ограничивался использованием 2-гигабайтного пространства (3 Гбайт для Windows NT Server Enterprise Edition). В 1997 году Microsoft объявила о своем намерении создать полную 64-разрядную версию NT, имея в виду, что каждый 64-разрядный процесс будет наделен адресным пространством по крайней мере в 512 Гбайт. Причина перехода к 64-разрядной платформе та же, что и для перехода от 16-разрядных систем к 32-разрядным — это постоянно возрастающие требования к хранению и обработке огромных объемов данных в памяти компьютеров.
VLM позволяет использовать в приложениях 64-разрядные указатели, получая, таким образом, прямой доступ к адресному пространству свыше 2 Гбайт. Это необходимо для удовлетворения нужд приложений, работающих с большими объемами информации (например, СУБД), для которых ограничение адресного пространства цифрой 2-3 Гбайт неприемлемо. Для адресации 28 Гбайт памяти и использования 64-разрядных указателей на системах Alpha в версию языка Visual C++ 5.0 добавлены указатели _ptr64 и небольшой набор новых интерфейсов Win32 API для работы с ними. В 64-разрядной версии NT будет использоваться программный интерфейс Win64, обеспечивающий перенос приложений с Win32 и компиляцию исходного кода в двоичный как в 32-разрядном, так и в 64-разрядном режимах. Предполагается, что «младший» режим будет использоваться для выполнения существующих 32-разрядных приложений на платформах Alpha и Merced, а новые 64-разрядные приложения будут выполняться уже в «родном» 64-разрядном режиме. Однако одновременная смесь двух режимов в одном процессе допускаться не будет.
Пока же VLM содержит существенное ограничение на виртуальные адреса при работе с 64-разрядными указателями: такие адреса должны быть поддержаны зарезервированной физической памятью — другими словами, вся подразумеваемая память должна быть обеспечена физической памятью, доступной в момент адресации. Недостающие страницы памяти никогда не берутся по адресам VLM, если эти адреса не используются для отражения реального файла данных. Каждая страница будет отсутствовать только один раз при первом обращении, затем она блокируется в памяти и никогда не удаляется. Несмотря на это ограничение, VLM отвечает потребностям приложений, которые требуют быстрого доступа к большим порциям памяти.
Резюме
Архитектура Windows NT отражает современные представления о дизайне 32-разрядной операционной системы, а версия Windows NT 5.0 удовлетворяет постоянно меняющимся требованиям, предъявляемым к операционной системе для настольных систем и рабочих станций. Эта версия также может работать с высокоуровневыми серверными приложениями.
David A. Solomon, The Windows NT Kernel Architecture. IEEE Computer, October 1998, pp. 40-47. Reprinted with Permission, Copyright IEEE CS, 1998. All rights reserved.
Об авторе
Дэвид Соломон — руководитель David Solomon Expert Seminars, семинаров для преподавателей по структуре Windows NT и системному программированию. Автор книг Inside Windows NT (Microsoft Press) и Windows NT for OpenVMS Professionals (Digital Press/Butterworth Heinemann). Начав свою трудовую карьеру как консультант по программному обеспечению в корпорации Digital Equipment, затем девять лет работал в качестве руководителя проекта в группе разработчиков ОС VMS. Соломон является также техническим руководителем ряда конференций по Windows NT.
Активный каталог
Одной из наиболее важных новых черт Windows NT 5.0 является активный каталог (Active Directory), призванный упростить администрирование больших сетей на NT. Активный каталог играет ключевую роль в улучшении безопасности распределенных систем.
В данном каталоге хранится информация обо всех ресурсах сети и, через простой интерфейс, обеспечивается доступ и использование этой информации для разработчиков, администраторов и пользователей. Модель данных активного каталога имеет много общего с концепцией X.500 — здесь содержатся объекты, представляющие различные ресурсы, описываемые атрибутами. Список объектов и атрибутов для каждого класса объектов определяется схемой. Структура активного каталога имеет следующие ключевые свойства:
- гибкая иерархическая структура;
- расширяемая память для новых классов объектов и их атрибутов;
- частичное делегирование прав доступа;
- поддержка протокола LDAP версии 3;
- встроенный сервер имен DNS;
- масштабируемость до миллионов объектов;
- программируемая память для классов.
Программируемость и расширяемость — важные свойства активного каталога, поскольку-независимо от установленных служб разработчики и администраторы имеют дело с простым набором интерфейсов. Программируемый интерфейс ADSI (Active Directory Service Interface) доступен из любого языка программирования. Для программистов на языке Си активный каталог доступен также через низкоуровневый API-интерфейс LDAP.
Система безопасности распределенных систем
Система безопасности распределенных систем Windows NT 5.0 имеет много новых черт, упрощающих администрирование узлов, повышающих производительность и включает интегрированную технологию Internet c кодированием ключей доступа.
Активный каталог обеспечивает запоминание учетной информации для всех узлов, доступных для удаленного администрирования. Поддерживается многоуровневое иерархическое дерево для хранения имен пользователей, групп и учетной информации по машине. Учетные номера могут быть сгруппированы, в отличие от предыдущих версий, в организационные единицы. Управление разрешенными взаимосвязями между узлами сети упрощается благодаря дереву доменов. Права администраторов по созданию и управлению пользователями и группами могут быть делегированы на уровень организационных единиц. Правами доступа могут быть наделены индивидуальные пользовательские объекты, чтобы, например, разрешить переустановку пароля, но без права изменения другой учетной информации.
Windows NT 5.0 имеет новую систему аутентификации пользователей, основанную на стандартных протоколах безопасности Internet, включая версию Kerberos 5.0 и TLS (Transport Layer Protocol), а также поддержку протоколов NT LAN Manager для целей совместимости. Протоколы безопасности поддерживают работу с удостоверениями личности пользователей в форме сертификатов открытых ключей к существующим учетным номерам Windows NT. Для управления доступом и учетной информацией используется общий инструмент администрирования. Для организаций, выпускающих сертификаты Х.509 версии 3 в Windows NT предлагается Microsoft Certificate Server. В системе вводится управление сертификатами CryptoAPI и модули для обработки сертификатов общественных ключей, включая сертификаты стандартного формата, выпущенные службой коммерческих сертификатов, третьей стороной, либо Microsoft Certificate Server.
1. Операционные системы
Лекция 5
Общая организация Windows
2. Технология Plug & Play
Технология Plug & Play
• Диапазоны памяти
• Запрос на прерывание IRQ
• Диапазон портов в/в
• P&P BIOS
• ACPI (Advanced Configuration and Power Interface)
3. Загрузка и функционирование DOS
• BIOS, драйверы основных устройств) (Int 10h-1Fh)
–
–
–
–
–
–
–
10h – видеосервис
13h – дисковая подсистема
14h – коммуникационные порты
16h – клавиатура
17h – порт принтера
19h – перезагрузка системы
1Ah – работа с часами
• IO.SYS – расширение базовой системы ввода-вывода. Настраивает
устройства ввода-вывода
• MSDOS.SYS (config.sys) – ядро операционной системы (20h-2Fh)
–
–
–
–
21h – основные функции
23h – обработчик Ctrl-C
25h – абсолютное чтение диска
28h – мультизадачное прерывание
• Драйверы устройств (device=)
• COMMAND.COM (autoexec.bat) – командный процессор,
обрабатывает внутренние и загружает внешние команды MS-DOS
4. Загрузка Windows’98
• Загрузка DOS
• WIN.COM – переход в защищенный режим и загрузка
графической подсистемы
• WININIT.EXE – загрузка Windows + основные DLLбиблиотеки Windows
– KRNL386.EXE – распределение памяти, управление
задачами
– USER.EXE – поддержка пользовательского интерфейса
– GDI.EXE – интерфейс графических устройств
• Дополнительные библиотеки: COMMDLG.DLL, QTIME.DLL
– Драйверы: DRV, VxD (386)
• Оболочка: EXPLORER.EXE или PROGMAN.EXE
5. Ядро Windows 98
32
16
User 32 (USER32.DLL)
Переадресация 32 разрядных вызовов
16-разрядному модулю
User 16 (USER16.EXE)
Управление окнами и меню Windows 3.1
+ новые методы (поддержка модели
асинхронного ввода и т. д.)
GDI 32 (GDI32.DLL)
Отображение шрифтов TrueType,
подсистема печати, новая
графическая подсистема
GDI 16 (GDI16.EXE)
Графические методы Windows 3.1 +
новые графические методы
Kernel 32 (KERNEL32.DLL)
Управление потоками, синхронизация
объектов, управление памятью,
файловый ввод/вывод и т.д.
Kernel 16 (KRNL386.EXE)
Инициализация Kernel 32
6. Структура Windows 2000/XP
7. Задачи, выполняемые ядром Windows 2000
Исполняемая часть NT которая включает управление памятью,
процессами, потоками, безопасностью, вводом/выводом,
межпроцессорными обменами;
Ядро Windows NT выполняет низкоуровневые функции операционной
системы: диспетчеризация потоков, прерываний и исключений,
синхронизация процессоров. Ядро также включает набор процедур и
базовых объектов, используемый исполняемой частью для создания
высокоуровневых конструкций;
Слой абстракции от оборудования (HAL — Hardware Abstraction Layer),
изолирует ядро, драйверы устройств и исполняемую часть NT от
аппаратных платформ, на которых должна работать операционная система;
Драйверы устройств включают как файловую систему, так и аппаратные
драйверы, которые транслируют пользовательские вызовы функций
ввода/вывода в запросы физических устройств ввода/вывода;
Функции графического интерфейса пользователя работают с окнами,
элементами управления и рисунками.
8. Исполняемая часть Windows 2000
Менеджер процессов и потоков управляет процессами и
потоками. Фактически потоки и процессы поддерживаются в NT
нижележащим слоем. Исполняемая часть добавляет дополнительную
семантику и функции к этим объектам нижнего уровня.
Менеджер виртуальной памяти использует схему управления, при
которой каждый процесс получает собственное достаточно большое
адресное пространство, защищенное от воздействия других процессов.
Менеджер памяти также обеспечивает низкоуровневую поддержку для
менеджера кэш-памяти.
Монитор безопасности проводит политику обеспечения мер
безопасности на локальном компьютере, охраняя системные ресурсы и
выполняя процедуры аудита и защиты объектов.
Система ввода/вывода использует независимый от устройств
ввод/вывод и отвечает за пересылку данных соответствующим
драйверам для дальнейшей обработки.
Менеджер кэш-памяти улучшает производительность системы
ввода/вывода файлов, размещая читаемые с диска данные в основной
памяти для ускорения доступа к ним, а также откладывая на короткое
время запись измененных данных на диск.
9. Исполняемая часть Windows 2000
Менеджер объектов, который создает, удаляет объекты и абстрактные
типы данных, а также управляет ими. Объекты используются в
Windows NT для представления таких ресурсов операционной
системы, как процессы, потоки и объекты синхронизации.
LPC передает сообщения между клиентским процессом и процессом
сервера на том же самом компьютере. По сути, LPC — это
оптимизированная версия известной процедуры удаленного вызова
RPC (Remote Procedure Call), стандарта для организации
взаимодействия процессов в архитектуре клиент/сервер.
Широкий набор библиотечных функций общего типа: обработка строк,
арифметические операции, преобразование типов данных, обработка
структур.
Процедуры распределения памяти, взаимообмен между процессами
через память, два специальных типа объектов синхронизации ресурсы и объекты fast mutex.
10. Ядро Windows 2000
Ядро NTOSKRNL.EXE выполняет большинство основных операций NT, определяющих порядок
использования процессора: диспетчеризация потоков; диспетчеризация и обработка исключений;
cинхронизация работы процессоров; обеспечение базовых объектов ядра, которые используются
исполняемой частью (и в некоторых случаях экспортируются в режим пользователя).
В отличие от остальной исполняемой части операционной системы, ядро никогда не выгружается из
оперативной памяти, его выполнение никогда не прерывается другими потоками. Код ядра написан в
основном на Си, а части, дающие наибольшую нагрузку на процессор, на языке Ассемблере.
Объекты ядра. Одна из функций ядра – обеспечение низкоуровневой базы для хорошо
определенных примитивов операционной системы, которые обеспечивают работу компонентов высшего
уровня. Ядро изолирует само себя от остальной части ОС, что позволяет вынести принятие
политических решений из ядра, за исключением диспетчеризации потоков. Ядро использует набор
простейших объектов, называемых объектами ядра, позволяющих управлять работой центрального
процессора и порядком создания вычисляемых объектов. Большинство вычисляемых объектов
включает в себя один или более объектов ядра, включая определенные ядром атрибуты. Один из
наборов объектов называется объектами управления и включает объект процесса ядра, объект АРС,
объект процедуры отложенного вызова DPC (Deferred Procedure Call) и несколько объектов,
используемых системой ввода/вывода (например, объект обработки прерывания).
Другой набор объектов ядра — объекты диспетчеризации, включает объекты синхронизации потоков,
поток ядра, mutex, объекты события, семафора, таймера, таймера ожидания и ряд других.
Поддержка оборудования. Другой главнейшей задачей ядра является абстрагирование (или
изоляция) исполняемой части и драйверов устройств от различий микропроцессорных платформ, на
которых способна работать Windows NT: х86 и Alpha AXP. Специфичные для архитектуры функции
(такие, как контекстное переключение потока) реализованы в ядре. Функции, которые могут отличаться
от машины к машине, реализованы в составе HAL.
Ядро поддерживает набор интерфейсов, семантически идентичных для всех архитектур. Некоторые
из интерфейсов реализованы по-разному для разных архитектур, однако, и идентичны внешне
интерфейсы реализованы с помощью специфичного для архитектуры кода. Независимый от
архитектуры интерфейс может быть вызван на любой машине, и его семантика будет той же, несмотря
на то, зависит ли код от архитектуры или нет. Некоторые интерфейсы ядра (например, процедуры
синхронизации SMP) реализованы в HAL, поскольку их реализация может изменяться даже внутри
одного семейства компьютеров. В качестве примера зависящего от архитектуры кода можно назвать
также поддержку кэша центрального процессора.
11. Абстракция от оборудования
Загружаемый модуль ядра HAL обеспечивает низкоуровневый интерфейс с аппаратной
платформой, что позволяет скрыть такие зависимые от аппаратуры детали, как интерфейс
ввода/вывода, контроллеры прерываний, механизм обмена данными между процессорами любые аппаратно-зависимые и специфические для архитектуры функции.
Драйверы устройств – это загружаемые модули, которые работают в режиме ядра,
обеспечивая интерфейс между системой ввода/ вывода и соответствующим оборудованием.
Названия этих модулей обычно имеют расширение .SYS. Все они, как правило, написаны на
Си (иногда С++) с использованием вызовов процедур HAL и могут быть переносимыми на
уровне двоичного кода между платформами, поддерживаемыми NT. Имеется несколько
типов драйверов устройств:
• Драйверы, манипулирующие устройствами (с использованием HAL) для записи
выходных данных или получения входных данных от физических устройств или через сеть.
• Драйверы файловой системы, которые принимают запросы на файловый ввод/вывод и
транслируют их в запросы ввода/вывода, связанные с конкретными устройствами.
• Драйверы фильтров. Примером могут быть драйверы поддержки зеркальных дисков,
шифрования данных, перехвата ввода/вывода для дополнительной обработки данных перед
передачей их на следующий уровень и т.д.
• Сетевые драйверы, которые передают и принимают удаленные запросы на ввод/вывод.
• Поскольку установка драйверов устройств является единственным способом добавить к
системе пользовательский код, работающий в режиме ядра, то некоторые программисты
могут рассматривать написание драйверов устройств как способ доступа к внутренним
функциям и структурам данных операционной системы, недоступным из пользовательского
режима.
12. Пользовательские процессы
Имеется четыре базовых типа пользовательских процессов.
• Специальные процессы поддержки системы, например,
процесс регистрации пользователя и менеджер сессий, которые
не являются службами 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.
13. Подсистемы среды и библиотеки DLL
Windows NT имеет три подсистемы среды (Win32, Posix и OS/2 2.1), которые
работают только на платформе х86. Подсистема Win32 специфична для
Windows NT и не может работать вне нее.
Каждая из подсистем обеспечивает пользовательским приложениям доступ к
разным поднаборам служб Windows NT. Это означает, что некоторые вещи
могут быть сделаны из приложения, построенного на одной подсистеме, и не
возможны из приложения, построенного в другой подсистеме. Так, приложение
для Win32 не может использовать функцию fork подсистемы Posix.
Каждый исполняемый модуль связывается с одной и только одной подсистемой.
Когда начинается выполнение модуля, изучается тип кода его заголовка, что
позволяет определить подсистему среды для создания новых процессов.
Пользовательские процессы не вызывают службы NT напрямую, а используют
библиотеки динамических связей (DLL) соответствующей подсистемы среды.
Роль библиотек, принадлежащих подсистеме среды, в том, чтобы
транслировать документированные функции среды в соответствующие вызовы
недокументированных служб NT. Эти библиотеки DLL экспортируют
документированный интерфейс, который могут вызывать связанные с
подсистемой программы. Например, библиотеки DLL подсистемы Win32
используют функции Win32 API. Библиотека DLL подсистемы Posix использует
функции Posix 1003.1 API.
14. Подсистема Win32
Главные компоненты подсистемы Win32 — процесс подсистемы среды и драйвер режима ядра.
Процесс подсистемы среды поддерживает:
консольные (текстовые) окна;
создание и удаление процессов и потоков;
работу виртуальной 16-разрядной DOS машины;
иные функции (GetTempFile, DefineDosDevice, ExitWindowsEx и др.).
Драйвер режима ядра поддерживает:
менеджер окон, который управляет отображением окон, выводом на экран, вводом с клавиатуры,
от мыши и других устройств, а также передачей пользовательских сообщений приложениям;
интерфейс графических устройств GDI (Graphical Device Interface), библиотека функций для
вывода на графические устройства, для рисования текста, линий, фигур и манипуляций
графическими объектами;
зависимые от устройств драйверы графики, принтера и видеопорта;
несколько библиотек DLL, которые транслируют документированные функции Win32 API в
соответствующие недокументированные вызовы NTOSKRNL.EXE и WIN32K.SYS.
Приложения вызывают стандартные функции для создания окон и кнопок на дисплее. Менеджер
окон передает эти запросы драйверам графических устройств через интерфейс графических
устройств GDI, где они форматируются для вывода средствами конкретных устройств. GDI
обеспечивает набор стандартных функций, позволяющих приложениям общаться с
графическими устройствами, включая дисплеи и принтеры, без конкретных знаний о них. GDI
интерпретирует запросы приложений на графический вывод и посылает их драйверам
графических дисплеев. Этот интерфейс позволяет создавать код приложения, независимый от
конкретных устройств и их драйверов
15. NTDLL.DLL
NTDLL.DLL – это специальная система поддержки DLL — библиотек.
Она содержит два типа функций.
• Первая группа функций обеспечивает интерфейс к службам NT,
которые могут быть вызваны из пользовательского режима.
Существует более 200 таких функций, например NtCreateFile,
NtSetEvent и т.д. Для каждой из них имеется точка входа в
NTDLL.DLL с тем же именем. Внутренний код функции содержит
специфичные для архитектуры команды, которые вызывают переход
в режим ядра для обращения к реальным службам NT, код которых
содержится в NTOSKRNL.EXE.
• Вторая группа функций содержит большое количество функций
поддержки: загрузчик исполняемых модулей, коммуникационные
функции для процессов подсистемы Win32, библиотека функций
реального времени пользовательского режима, диспетчер вызовов
асинхронных процедур АРС (Asynchronous Procedure Call)
пользовательского режима, диспетчер исключений.
16. Загрузка системы
• POST
• NTLDR.EXE
–
–
–
–
–
–
–
–
–
Переключает процессор в линейный режим
Запускает мини-файловую систему
Читает boot.ini и выбирает ОС
Вызывает ntdetect.com для определения оборудования и
помещает в HKEY_LOCAL_MACHINE\HARDWARE
Запускает ядро Ntoskrnl.exe
Управляющие параметры в HKLM\SYSTEM
Запускаются сервисы из
HKLM\SYSTEM\CurrentControlSet\Services
Инициализация ядра из
HKEY_LOCAL_MACHINE\HARDWARE
Драйверы в
HKLM\SYSTEM\CurrentControlSet\Services\DriverName
17. Основные модули
Smss.exe – диспетчер сервисов
Winlogon.exe – регистрация пользователей
в системе
Svchost.exe
–
–
–
–
–
–
–
Диспетчер авто-подключений удаленного
доступа. Создает подключение к удаленной
сети, когда программа обращается к
удаленному DNS- или NetBIOS-имени или
адресу.
Сетевые подключения.
Система событий COM+. Автоматическое
распространение событий подписавшимся
компонентам COM.
Съемные ЗУ
Телефония
Уведомление о системных событиях
Удаленный вызов процедур (RPC)
Spoolsv.exe – Диспетчер очереди печати
Regsvc.exe – Служба удаленного
управления реестром
Mstask.exe – Планировщик заданий
Taskmgr.exe – Переключатель задач
Lsass.exe
–
–
Агент политики IPSEC
Диспетчер учетных записей безопасности
Services.exe
–
–
–
–
–
–
–
–
–
–
Ntvdm.exe – диспетчер виртуальных машин
Devldr32.exe – загрузка драйверов устройств
Winmgmt.exe – инструментарий управления
Windows
cmd.exe
inetinfo.exe
–
–
–
–
DHCP
DNS
P&P
Диспетчер логических дисков
Журнал событий
Клиент отслеживания изменившихся связей
Обозреватель компьютеров
Рабочая станция
Служба RunAs. Позволяет запускать процессы от
имени другого пользователя.
Служба поддержки TCP/IP NetBIOS
Служба IIS Admin
Web-сервер
FTP-сервер
SMTP-сервер
internat.exe – раскладка клавиатуры
18. Реестр
19. Хранение реестра в разных версиях Windows
• Windows 3.1 – reg.dat
• Windows’98 – system.dat, user.dat
• Хранение реестра в Windows 2000/XP
а также в «C:\Documents and Settings\UserName\NTUSER.DAT» и NTUSER.DAT.LOG
20. Безопасность ключей реестра
21. Структура реестра
Разделы реестра
• HKEY_LOCAL_MACHINE – информация о компьютерной системе,
содержит все остальные ветви
• HKEY_CLASSES_ROOT – ассоциации между приложениями и
типами файлов, информация OLE, ассоциированную с объектами
COM
• HKEY_CURRENT_CONFIG – текущий аппаратный профиль
• HKEY_CURRENT_USER – данные текущего пользователя
• HKEY_USERS – все профили пользователей
Типы файлов реестра
–
–
–
–
Без расширения – копия куста
аlt – резервная копия HKEY_LOCAL_MACHINE\System
log – журналы транзакций
sav – копии кустов на момент завершения текстовой фазы установки
22. Резервирование реестра
WINNT\system32\config:
• AppEvent.Evt, default, default.LOG,
dafault.sav, SAM, SAM.LOG,
SecEvent.Evt, SECURITY,
SECURITY.LOG, Software,
Software.LOG, Software.sav,
SysEvent.Evt, System, SYSTEM.ALT,
System.LOG, System.sav, userdiff
23. Настройка служб
24. Просмотр системных журналов
25. Просмотр производительности
26. Командная строка
D:\SASHA>help start
Запуск указанной программы или команды в отдельном окне.
START [«заголовок»] [/Dпуть] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME| /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B]
[команда/программа] [параметры]
«заголовок» Заголовок окна.
путь
Рабочий каталог.
B
Запуск приложения без создания нового окна с отключением
обработки сочетания клавиш ^C. Если приложение не
обрабатывает сочетание клавиш ^C самостоятельно,
единственным способом его прерывания является
использование сочетания клавиш ^Break.
I
Новой средой станет исходная среда, переданная
cmd.exe, а не текущая среда.
MIN
Запуск команды/программы в свернутом окне.
MAX
Запуск команды/программы в развернутом окне.
SEPARATE
Запуск 16-разрядной программы Windows в отдельной
области памяти.
SHARED
Запуск 16-разрядной программы Windows в общей
области памяти.
LOW
Запуск приложения с приоритетом IDLE.
NORMAL
Запуск приложения с приоритетом NORMAL.
HIGH
Запуск приложения с приоритетом HIGH.
REALTIME
Запуск приложения с приоритетом REALTIME.
WAIT
Запуск приложения с ожиданием его завершения.
ABOVENORMAL Запуск приложения с классом приоритета ABOVENORMAL
BELOWNORMAL Запуск приложения с классом приоритета BELOWNORMAL
команда/программа
Если это внутренняя команда cmd.exe или пакетный файл,
обработчик команд (cmd.exe) запускается с ключом /K.
Это означает, что окно не будет закрыто после завершения
27. Командные файлы
IF EXIST имя_файла. (
del имя_файла.
) ELSE (
echo имя_файла. missing.
)
Изменение команды IF при включении расширенной обработки
команд:
IF [/I] строка1 оператор_сравнения строка2 команда
IF CMDEXTVERSION число команда
IF DEFINED переменная команда
где оператор сравнения принимает следующие значения:
EQL — равно NEQ — не равно
LSS — меньше LEQ — меньше или равно
GTR — больше GEQ — больше или равно
28. Программирование в Shell
var WshShell = WScript.CreateObject(«WScript.Shell»);
var WshSysEnv = WshShell.Environment(«SYSTEM»);
WScript.Echo(WshSysEnv(«NUMBER_OF_PROCESSORS»));
var WSHShell = WScript.CreateObject(«WScript.Shell»);
intDoIt = WSHShell.Popup(«Текст в окне», 5, «Текст заголовка», 65);
WScript.Quit(0);
var WSHShell = WScript.CreateObject(«WScript.Shell»);
//Создает ключ HKCU\\MyRegKey со значением ‘Ключ верхнего уровня’
WSHShell.RegWrite(«HKCU\\MyRegKey\\», «Ключ верхнего уровня»);
//Создает ключ HKCU\\MyRegKey\\Entry со значением ‘Ключ второго уровня’