Операционная система Windows NT
Операционная система Windows NT
Первая часть нашего курса была посвящена теоретической составляющей операционных систем, перейдем к практической реализации, на примере наиболее популярной операционной системы Windows.
Эволюция ОС начинается с 1961года и до настоящего времени. ОС разрабатывались и появлялись из параллельных ветвей развития компьютерной техники и определялось технологическим окружением того или иного времени. Прослеживается некая преемственность ОС.
Итак, вспомним историю ОС.
1973г.
Проектируется ОС Unix. Во время ее разработки были использованы следующие технические возможности (окружение):
- 16битное адресное пространство;
- Доступная память измерялась Кб;
- Сложная система отображения памяти и свопинга (замена программ);
- Проблема со сменными носителями(не легко поддерживались);
- Поддержка только одного процессора.
Архитектором ядра (Kernel Architect) ОС Windows NT является Dave Probert (компания MS).
Windows NT начала проектироваться в 1989г. Сравним условия ее появления. Окружение Windows NT:
- 32битное адресное пространство;
- Мегабайты физической памяти;
- Виртуальная память (стала нормой);
- Мегабайты дискового пространства, поддержка сменных носителей;
- Многопроцессорность;
- Ориентированность на удобство в работе (стало №1).
Unix и Windows четыре первых различия двух систем
Ниже приведена таблица, дающая понимание фундаментальных различий двух систем.
Параметр |
Windows |
Unix |
1. Ориентация на…,как единицы планирования | Потоки | Процессы |
2. Создание нового процесса | CreatProcess() | Fork() |
3. Ввод/вывод | Асинхронный вв/выв | Синхронный вв/выв |
4. Политика безопасности (права доступа) | Access Control List -Список контроля доступа | Uid/gidЧерез идентификаторы пользователя и группы |
Зачем сравнивать Unix и Windows?
- Разные концепции приводят к новым идеям, т.е. для разработки новых идей необходимо изучать, как это было сделано ранее. Нужно знать, как все реализовывалось в существующих ОС, для того, чтобы делать выводы и изобретать новое.
- Понимание того, что нет единственно «правильного» решения.
- Обучение критически осмысливать.
Какая среда (окружение) сейчас?
- 64битное адресное пространство;
- Гигабайты физической памяти;
- Виртуальная памяти и виртуальные процессоры – норма жизни;
- Многопроцессорность (от 64 до 128 процессорных систем) ;
- Высокоскоростной интернет ;
- В основном один пользователь работает на одном ПК (или на одного человека приходится несколько вычислительных устройств).
В каких источниках можно найти информацию о структуре и принципах работы ОС Windows?
Доступно множество информации о Windows:
- Windows Internals (Russinovich Solomon) – настольная книга, классика ОС WindowsNT
- Tanenbaum – рассматривает что и как реализовано в Windows NT
- Silberschatz
- Stallings
- Исходный код React OS в открытом доступе, для исследований, что и как сделано в Windows NT, как работают функции — основа для изучения.
История операционной системы Windows NT
1988г.
Билл Гейтс нанимает архитектора системы VMS Дэйва Катлера (Dave Cutler) и дает задание на проектирование современной коммерческой ОС для дестопов и серверов.
- Это должна быть некая универсальная система, в которой не должно быть различия между рабочими станциями и серверами, она должна масштабироваться;
- Должна быть совместима с OS/2 (популярной в то время ОС от компании IBM);
- С поддержкой многопроцессорности;
- Безопасная и надежная, переносимая;
- ОС ориентирована на ЦП Inteli860(N10) Nten(NT).
Отдел маркетинга предложил название NT- New Technology.
Еще одна версия VMS – WNT, следующие буквы по алфавиту v-w m-n s-t.
История разработки Windows NT (таймлайм)
1989г — начало проектирования
1993г — Windows NT3.1(в ней уже были заложены многие интересные решения, коммерчески не успешная)
1994г — Windows NT3.5
1995г — Windows NT3.51 (граф.оболочка соответствовала Win 3.11, был достаточно простой программ-менеджер
1996г — Windows NT4.0 – положила начало грандиозного успеха с которого началась история массового применения Windows .
Впервые применена графическая оболочка, которая имеет название Explorer(Проводник) – пользовательский интерфейс.
Ядро данной ОС очень удачное и наблюдается преемственность, эволюционно улучшается в следующих моделях ОС, часть ядра переписывается, но фундаментальных, глобальных революционных изменений нет.
1999г – Windows 2000 (NT5.0)
2001г — Windows XP 2000 (NT 5.1)
2003г — Windows 2003/XP SP2 (NT5.2)
2006г — Windows Vista (NT6.0)
2008г — Windows 2008 (NT6.0)
2009г — Windows 7/2008 R2 (NT6.1)
2012г — Windows 8 (NT6.2) – считается для десктопов провалом, но для мобильных устройств является удобным и новым. Новый интерфейс с основой Task Screen/ Управление ПК с помощью голоса.
Windows NT — Режим пользователя
Переходим к внутренним тонкостям реализации Windows.
У ОС два режима работы, она состоит из двух уровней – компоненты, работающие в режиме ядра и в режиме пользователя.
В режиме пользователя:
- Кроме самих программ , которые запускает сам пользователь есть;
- Оболочка (explorer, winlogon);
- Системная библиотека (ntdll.dll) – через нее осуществляются системные вызовы (вызовы внутри ядра);
- Системные службы (smss, lsass, services).
По другой классификации можно выделить четыре типа пользовательских процесса:
1) Фиксированные процессы поддержки системы (logon, smss)
2) Процессы сервисов – запускаются диспетчером управления сервисами. Термин сервис правильнее бы назвать службой, но в книге по WinNT называется именно сервис.
3) Пользовательские программы
4) Подсистемы окружения – Windows, POSIX, OS/2 – являются равнозначными подсистемами по работе, концерн из подсистем был достаточно гениальным.
Windows NT — Режим ядра
Само ядро NTOS состоит из двух частей:
- Kernel – абстрагирует ЦП
- Executive – исполняет функции ядра ОС – исполнительный модуль, исполнительная подсистема, исполнительная часть ядра, планировщик.
Драйвера (модель расширяемого ядра)
- Интерфейс к устройствам
- Реализация файловой системы, устройств хранения, сетевого взаимодействия
- Расширение функциональности самого ядра
Слой абстракции оборудования (HAL)
- Скрывает детали работы с чипсетом/BIOS
- Драйвера используют HAL — не нужно изменять драйвера, меняется HAL.
Особенности модели ядра Windows NT
Особенности модели ядра ОС Windows NT были заложены в далеком 1989году при ее проектировании. Это:
- Многопоточная система, процесс – контейнер для потоков, т.е. не может быть процесс без потоков, не могут быть потоки отдельно от процесса. Есть процесс внутри него один или много потоков.
- Планирование осуществляется по потокам.
- Полностью асинхронный ввод/вывод.
- Унифицированное управление структурами данных ядра, хэндлами, пространствами имен, объектами синхронизации. Каждая структура данных, какая-либо абстракция, представляется в ядре Windows NT некоторым объектом. Есть менеджер объектов, есть таблица хэндлов, как способ обращения к этим объектам. Этот механизм очень мощный и представляет большие возможности по использованию.
- Безопасность на основе списков контроля доступа — Access Control List .
- Хранилище конфигураций хранится отдельно от файловой системы в БД и носит название реестр.
- Расширяемая (через фильтры) модель вв/выв с послойными драйверами, стандартной моделью устройств, уведомлениями.
- Технология Plug-and-Play – сегодня воспринимается как должное, а раньше нужно было каждое новое устройство добавлять вручную самостоятельно и это было не всегда просто.
- Управление питанием – некоторые устройства отключаются, некоторые переводятся в режим пониженного потребления питания. Для этого нужна поддержка на уровне ядра ОС, драйверов.
Сегодня, используя мобильные устройства необходимо экономить электроэнергию. Устройства, которые потребляют много энергии должны отключаться в момент, когда они не нужны.
На рисунке представлена структура Windows NT.
Архитектура ОС Windows NT состоит из трех частей:
- Режим пользователя – User mode
- Режим ядра — Kernel mode
- Hardware – аппаратное обеспечение
Больше функционала находится в ядре: менеджеры вв/выв, безопасности, виртуальной памяти, процессов, поддержки Plug-and-Play, управления питанием, интерфейс с графическими устройствами, оконный менеджер, менеджер межпроцессорного взаимодействия. В основе всего лежит менеджер объектов, на нем строиться все ядро.
Сверху располагаются исполнительные сервисы (exect). Ниже идут драйвера.
Вся связь с аппаратурой осуществляется через драйвера и слой абстракции (Hardware Abstraction Layer) аппаратного обеспечения (HAL).
На рисунке обозначено микроядро – MicroKernel, хотя ядро Windows NT не является микроядром в классическом понимании, а скорее всего является неким гибридным ядром, т.к. в нем есть службы, которые выполняются чаще всего в режиме ядра, присутствует гибридность.
Режим пользователя также очень интересен за счет того, что все пользовательские приложения взаимодействуют с ядром и другими библиотеками режима пользователя исключительно через подсистемы.
Именно эти подсистемы задают возможность поддержки других программ. Это означает, что через поддержку Posix можно осуществлять запуск программ, которые были разработаны для ОС других классов, например, Unix, OS/2.
При разработке была поставлена задача поддержки популярной ведущей системы, в процессе эволюции OS/2 была полностью вытеснена ОС Win32, затем из Win убрали поддержку OS/2, а затеи и Posix.
Сейчас фактически осталась Win32, хотя механизм был заложен очень хороший. Но монополизация рынка привела к тому,что MS решила отказать от этого.
Основные функции ядра Windows
1. Управление:
- Объектами и правами доступа (ОВ, SE)
- Адресными пространствами (PS, MM)
- Физической памятью (MM, CACHE)
- Процессорами (KE)
- Вв/выводом и сетью (IO, драйвера)
- Конфигурацией (config)
2. Абстракция нижнего уровня аппаратуры
3. Вспомогательные функции (EX-модуль исполнителя, RTL – библиотека вспомогательных функций).
Основные объекты ядра Windows
OB | Менеджер объектов |
SE | Менеджер безопасности |
PS | Менеджер потоков/процессов |
MM | Менеджер памяти |
CACHE | МенеджерКЭШа |
KE | Планировщик |
IO | Менеджер вв/выв, PnP, управление питанием |
Драйвера | Управление устройствами, файл. системой, сетью |
LPC | Межпроцессорное взаимодействие |
HAL | Абстракция аппаратного обеспечения |
EX | Исполнительная система |
RTL | Библиотека вспомогательных функций |
config | Реестр (менеджер конфигураций) |
Модули КЕ и ЕХ
Рассмотрим детально модули, их основу и практическую реализацию.
Модуль КЕ:
- абстрагирует ЦП
- потоки
- ассинхронные вызовы процедур (АРС)
- обработка прерываний (ISR)
- отложенные вызовы процедур (DPC)
- предоставляет низкоуровневую синхронизацию
Модуль ЕХ:
Предоставляет другие сервисы ядра ОС, которые работают в многопоточном режиме.
Самый высший уровень абстракции в ядре виртуальную память – выделение памяти, хэндлы.
Абстракции
Для того, чтобы понять, зачем нужно такое большое количество модулей в ядре, необходимо понять, что есть абстракции. Необходимо абстрагироваться от процессов и потоков, файлов, все должно быть представлено в некотором общем виде и с этим удобнее работать.
- Процессы, потоки, файлы
— Ядро реализует эти абстракции (оно для этого и нужно)
— Абстракция – это код + данные. Это может быть что угодно – процесс, код программы, данные
— Нужно на них ссылаться - Используются хэндлы – объектные ссылки – способ сослаться на объект, некая «ручка» от объекта, нажимая на которую можно им управлять.
— Унифицированные для экземпляров
— Объекты также могут иметь имя (независимо от файловой системы) - Ядро Windows NT оперирует различными объектами, эти объекты унифицированы. Процесс, поток, примитив синхронизации – объекты.
- Объекты могут быть разного типа, но на него можно ссылаться, можно с ним производить набор некоторых стандартных действий. За счет этого получается очень «продвинутый» механизм.
Менеджер объектов операционной системы Windows NT
Унифицированный механизм управления:
- Структурами данных в ядре
- Хэндлами
- Пространствами имен
- Объектами синхронизации
- Ресурсами
- Межпроцессорным взаимодействием
- Конфигурацией (реестр)
Хэндлы
Хэндлы реализуются определенными таблицами. Для каждого процесса – своя таблица.
- Хэндлы позволяют пользовательскому коду обращаться к структурам данных ядра;
- Можно использовать их для синхронизации (можно, например, ожидать на хэндле наступления события). Если хэндл потока или процесса – будем ждать завершения потока\процесса, если примитива синхронизации – сигнал к примитиву…
- Реализация масштабируема;
- У каждого процесса своя таблица хэндлов.
Хэндл – это 32/64 битная структура режима пользователя, которая позволяет ссылаться на любой объект внутри ядра, без того, чтобы «тянуть» указатель на какой-то участок памяти в ядре, потому что хэндл может быть каким-то фиксированным числом.
Посмотрим, как работает хэндл на примере использования примитива синхронизации.
Пользователю нужно поработать с объектом внутри ядра, например, защелкой. Примитив синхронизации расположен по адресу 0*84001234 в виртуальной памяти. См. рисунок ниже.
Когда пользовательская программа(ПП) хочет выполнить какие-то действия с этим объектом ядра, если она будет ссылаться напрямую на тот участок памяти, где располагается этот объект в ядре, то это будет очень плохо из за двух причин:
1)Ядро при определенных обстоятельствах может и перенести этот объект и при перемещении адрес объекта будет меняться и ПП не сможет найти объект и его использовать.
2)Открывать адрес для пользовательских программ нельзя, ибо это внутренний адрес ОС.
Поэтому используется следующий механизм: есть таблица хэндлов, сам хэндл – это смещение в этой таблице. Например хэндл=2, в нем записано число 0*84001234 и оно ссылается на объект в КЕ. Когда ядро перемещает этот объект, то в таблицу НТ записывается новый адрес.
При этом ПП про перемещение адресов и объектов ядра ничего не знает. Она знает, что хендл №2 в рамках текущего процесса Pn ссылается на данный объект синхронизации.
Дерево объектов операционной системы Windows NT
В NT во главе всего стоит дерево объектов.
Объект это универсальная сущность. У объекта может быть:
- тип, наименование;
- иерархические отношения;
- набор операций (достаточно большой для каждого объекта);
- reference caungign;
- таблица хэндлов для доступа.
Из дерева вырастают файлы, устройства, реестр, объекты ядра. Все объекты типизированы, имеют четкие права доступа, наименование, тип, весь набор стандартных операций.
Менеджер процессов
Среда выполнения программы
- пространство имен
- виртуальное адресное пространство
- порты
- потоки
- аутентификация пользователя (токен)
- структуры данных виртуальной памяти
Важно!!! Менеджер процессов абстрагирует MMU(memory manager unit), а не весь ЦП.
Абстракция ЦП это КЕ, где реализовано само планирование.
Потоки
- Единица параллелизма
— Абстрагирует ЦП - Потоки создаются внутри процесса
- Системные потоки в режиме ядра создаются внутри системного процесса. Примеры системных потоков:
— Специальные потоки – Lary writer, modified page writer, balance set manager
— Неспециализированные потоки
— Используются для перемещения работы из контекста пользователя в контекст режима ядра
— Нужно освобождать при выгрузке драйвера
— Рабочие потоки драйвера
— Особый случай расширения обычных рабочих потоков
Планирование потоков
— NT планирует потоки, а не процессы. Это еденица планирования.
— Вытесняющее планирование. Основано на приоритетах:
- 1- idle thread 15-higt 31 –critical)
- 16 обычных приоритетов и над ними 16 приоритетов реального времени
- Round Robin — для наивысшего приоритета
- Потоки могут определять те процессы, на которые они смогут выполняться.
— У каждого потока базовый и текущий приоритеты
- Базовый – как основа процесса
- Потока не реального времени могут иметь boost (повышение приоритета)
- boostдля интерактивности
Есть balance manager (баланс менеджер), который периодически даетповышение приоритета тем процессам, которые готовы, но еще не выполняются для решения проблемы старвации.
Ввод/вывод
- Расширенная, основанная на фильтрах модель вв/вывода с иерархией драйверов.
- Существуют стандартные модели для общих классов устройств.
- Поддержка уведомлений.
- Хранилище конфигураций (реестр) обеспечивает сохранность информации о решениях PnP.
- Полностью асинхронный вв/выв.
- Кэширование файлов – виртуальное, на основе отображения памяти
- Разные сценарии завершения(завершение сигнализируется каким-либо событием:
— Ожидание на хендле файла, события;
— Вызов через user mode APC;
— Порт завершения вв/выв;
— Опрос переменной.
Драйвера
- Драйвера устроены иерархически в виде стека, есть возможность присоединиться к стеку устройств. Есть объект драйвер и объект устройство – один драйвер может обслуживать множество устройств.
- Стэки устройств
- Объекты устройств присоединяются к друг другу через loAttach Device
— Менеджер вв/выв посылает запрос на вершину стэка
— Он проходит через все драйвера - Объект устройства указывает на объект драйвера
— Драйвер представляет состояние, таблицу диспетчера
— У драйверов есть объекты устройств - Объекты файлов указывают на открытые файлы.
Файловая система – драйвера, управляющие файловыми объектами на томах.
Управление памятью
- Виртуальные адр. дескрипторы (VAD) – представляют вирт.адр.пространство в виде дерева.
- Рабочее множества (РМ) – список валидных страниц для каждого процесса, включая ядро.
- Страницы выгружаются из РМ согласно спискам:
- — Страницы с диска;
- — Модифицированные (надо записать на диск);
- — Свободные (не связанные с диском вообще);
- — Нулевые (резерв обнуляемых по требованию страниц).
Продолжение статьи следует…….. читать здесь
Скачать презентацию к лекции «Операционная система Windows NT»
Cкачать тест по теме «Операционная система Windows NT»
На мой взгляд, это интересный вопрос, буду принимать участие в обсуждении.
Добавил в свои закладки. Теперь буду вас намного почаще читать!
Спасибо за интересный материал, почитал несколько Ваших записей, очень понравилось, продолжайте дальше!