Windows NT

Материал из свободной русской энциклопедии «Традиция»
Перейти к: навигация, поиск

Windows NT — линия операционных систем производства корпорации Microsoft.

Изначально развивалась отдельно от семейства операционных систем Windows 9x и позиционировалась на рынке как надёжное решение для рабочих станций (Windows NT Workstation) и серверов (Windows NT Server). Windows NT дала начало семейству операционных систем, в которое входят Windows 2000, Windows XP и Windows Server 2003.

История разработки[править]

Разработка Windows NT, начатая в ноябре 1988 г. под рабочим названием NT OS/2, велась параллельно с разработкой фирмой IBM собственной ОС, OS/2 2.0, которая окончательно вышла только в апреле 1992 г. Одновременно с этим фирма Майкрософт продолжала разрабатывать свои ОС семейства DOS и Windows, отличающиеся меньшими требованиями к ресурсам компьютера, чем IBM OS/2. После того, как была выпущена Windows 3.0 в мае 1990, Microsoft решила добавить в NT OS/2 программный интерфейс (API), совместимый с Windows API. Это решение вызвало серьёзные трения между фирмами Майкрософт и IBM, которые закончилась разрывом совместной работы. IBM стала продолжать разработку OS/2 в одиночку, а Майкрософт стала работать над системой, которая была в итоге выпущена под названием Windows NT. Хотя эта система не принесла немедленной популярности подобно DOS или Windows, Windows NT оказалась существенно более успешной, чем OS/2.

Интересно заметить, что в качестве программных интерфейсов ОС NT изначально планировались API OS/2, и затем POSIX — поддержка Windows API была добавлена в последнюю очередь. Кроме того, в качестве аппаратной платформы для NT изначально планировались Intel i860, и затем MIPS — точно так же, поддержка Intel x86 была добавлена позднее. Затем, в процессе эволюции этой ОС, исчезла поддержка обоих изначально запланированных программных интерфейсов (POSIX-подсистема была, впрочем, недавно заменена пакетом SFU (англ.)) и обеих изначально запланированных аппаратных платформ (для i860 даже не было ни одной релизной версии этой ОС, хотя именно от кодового названия этого процессора, N10, происходит название самой ОС NT).

Переносимость NT была одной из её первоочередных задач: именно поэтому разработка этой ОС изначально велась для процессора i860 — хотя двоичная совместимость с OS/2, бывшая одним из условий проекта NT OS/2, в любом случае потребовала бы создания версии NT для x86 либо включения в неё эмуляции этой платформы. Количество платформ, для которых существовали релизные версии ОС семейства Windows NT, впечатляет: кроме названных MIPS и Intel x86, сюда входят PowerPC, DEC Alpha, Itanium и AMD x64. Независимыми производителями компьютерных систем были также разработаны версии Windows NT для архитектур Clipper (англ.) и SPARC; однако эти версии не были выпущены как самостоятельные программные продукты. В качестве ОС высокой переносимости при разработке NT были взяты за пример ОС Unix и Mach.

Для разработки ОС NT фирма Майкрософт пригласила группу специалистов из компании DEC во главе с Дэвидом Катлером (англ.), обладающую опытом создания многозадачных операционных систем, таких как VAX/VMS и RSX-11 (англ.). Некоторое сходство, отмеченное между внутренними архитектурами Windows NT и ОС семейства VMS, дало основания обвинить вновь принятых сотрудников Microsoft в краже интеллектуальной собственности DEC. Образовавшийся конфликт был разрешён мирным путём: DEC признала собственность Microsoft на технологии, лежащие в основе Windows NT, а Microsoft создавала и поддерживала версию Windows NT для архитектуры DEC Alpha.

Несмотря на общие корни, совместимость Windows NT и OS/2 уменьшалась с каждым новым выпуском этой ОС. Поддержка API OS/2 2.0, хотя планировалась в NT, так и не была завершена; в Windows NT 4.0 была удалена поддержка файловой системы HPFS, а в Windows XP была удалена подсистема поддержки программ для OS/2 1.x.

Выпущенные версии[править]

Название (кодовое название), варианты номер версии первый выпуск последний выпуск / SP
Windows NT 3.1 3.1.528 27 июля 1993 SP3 (10 ноября 1994)
Workstation, Advanced Server
Windows NT 3.5 (Daytona) 3.5.807 21 сентября 1994 SP3 (21 июня 1995)
Workstation, Server
Windows NT 3.51 3.51.1057 30 мая 1995 SP5 (19 сентября 1996)
Workstation, Server
Windows NT 4.0 4.0.1381 29 июля 1996 SP6a (30 ноября 1999)
Workstation, Server, Server Enterprise, Terminal Server (Hydra), Embedded (Impala)
Windows 2000 5.0.2195 17 февраля 2000 SP4 (26 июня 2003)
Professional, Server, Advanced Server, Datacenter Server
Windows XP (Whistler) 5.1.2600 25 октября 2001 SP2 (Springboard, 6 августа 2004)
Home, Professional, 64-bit, Media Center (eHome), Tablet PC, Starter, Embedded (Mantis), N; Windows Fundamentals for Legacy PCs (Eiger)
Windows Server 2003 (Whistler Server, Windows .NET Server) 5.2.3790 24 апреля 2003 R2 (6 декабря 2005)
Standard, Enterprise, Datacenter, Web, Small Business Server (Bobcat), Compute Cluster Server, Storage Server; Windows XP Professional x64
Windows Vista (Longhorn) 6.0.6000 30 января 2007
Starter, Home Basic, Home Premium, Business, Enterprise, Ultimate, N Home Basic, N Business; x64-варианты всех, кроме Starter

В настоящее время ведётся разработка ОС с кодовыми названиями Windows Longhorn Server (ожидается выход в 2007 г.) и Windows Vienna (ранее известная как Windows Blackcomb; выход в 20102011 г.г.)

Внутренняя архитектура[править]

Компоненты ядра[править]

Компоненты пользовательского режима[править]

Подсистема пользовательского интерфейса в Windows NT реализует оконный интерфейс, подобный интерфейсу предыдущих версий Windows. Двумя типами объектов этой подсистемы, отсутствовашими в 16-битных версиях Windows и в Windows 9x, являются оконные станции и рабочие столы. Оконная станция соответствует одному сеансу пользователя Windows NT — например, при подключении через службу удалённого рабочего стола создаётся новая оконная станция. Каждый запущенный процесс принадлежит к одной из оконных станций; службы, кроме помеченных как способные взаимодействовать с рабочим столом, запускаются в отдельных, невидимых оконных станциях.

Каждая оконная станция имеет собственный буфер обмена, набор глобальных атомов (используемых для операций DDE), и набор рабочих столов. Рабочий стол является контекстом всех глобальных операций подсистемы пользовательского интерфейса, таких как установка хуков и широковещательная рассылка сообщений. Каждый запущенный поток принадлежит к одному из рабочих столов — тому, где расположены обслуживаемые им окна; в частности, один поток не может создать несколько окон, принадлежащих к различным рабочим столам. Один из рабочих столов может быть активным (видимым пользователю и способным реагировать на его действия), остальные рабочие столы спрятаны. Возможность создать для одного сеанса работы несколько рабочих столов и переключаться между ними до настоящего времени не предоставлялась стандартными средствами пользовательского интерфейса Windows, хотя существуют сторонние программы, дающие доступ к этой функциональности.

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

Программные интерфейсы[править]

Native API[править]

Для прикладных программ системой Windows NT предоставляется несколько наборов API. Самый основной из них — так называемый «родной» API (NT Native API), реализованный в динамически подключаемой библиотеке ntdll и состоящий из двух частей: системные вызовы ядра NT (функции с префиксами Nt и Zw, передающие выполнение функциям ядра ntoskrnl с теми же названиями) и функции, реализованные в пользовательском режиме (с префиксом Rtl). Часть функций второй группы используют внутри себя системные вызовы; остальные целиком состоят из непривилегированного кода, и могут вызываться не только из кода пользовательского режима, но и из драйверов. Кроме функций Native API, в ntdll также включены функции стандартной библиотеки языка Си.

Официальная документация на Native API весьма скудна, но сообществам энтузиастов удалось методом проб и ошибок собрать достаточно обширные сведения об этом интерфейсе. В частности, в феврале 2000 г. опубликована книга Гэри Неббета «Справочник по базовым функциям API Windows NT/2000» (ISBN 1578701996); в 2002 г. она была переведена на русский язык (ISBN 584590238X). Источником информации о Native API может служить Windows DDK, где описаны некоторые функции ядра, доступные посредством Native API, а также изучение кода Windows (обратный инжиниринг) — посредством дизассемблирования, либо используя исходные тексты Windows 2000, ставшие доступными в результате утечки, либо используя исходные тексты Windows 2003, доступные в рамках программы Windows Research Kernel.

Программы, выполняющиеся до загрузки подсистем, обеспечивающих работу остальных API ОС Windows NT, ограничены использованием Native API. Например, программа autochk, проверяющая диски при загрузке ОС после некорректного завершения работы, использует только Native API.

Win32 API[править]

Чаще всего прикладными программами для Windows NT используется Win32 API — интерфейс, созданный на основе API ОС Windows 3.1, и позволяющий перекомпилировать существующие программы для 16-битных версий Windows с минимальными изменениями исходного кода. Совместимость Win32 API и 16-битного Windows API настолько велика, что 32-битные и 16-битные приложения могут свободно обмениваться сообщениями, работать с окнами друг друга и т. д. Кроме поддержки функций существовавшего Windows API, в Win32 API был также добавлен ряд новых возможностей, в т.ч. поддержка консольных программ, многопоточности, и объектов синхронизации, таких как мутексы и семафоры. Документация на Win32 API входит в состав Microsoft Platform SDK (англ.) и доступна на веб-сайте http://msdn2.microsoft.com/en-us/library/

Библиотеки поддержки Win32 API в основном названы так же, как системные библиотеки Windows 3.x, с добавлением суффикса 32: это библиотеки kernel32, advapi32, gdi32, user32, comctl32, comdlg32, shell32 и ряд других. Функции Win32 API могут либо самостоятельно реализовывать требуемую функциональность в пользовательском режиме, либо вызывать описанные выше функции Native API, либо обращаться к подсистеме csrss посредством механизма LPC (англ.), либо осуществлять системный вызов в библиотеку win32k, реализующую необходимую для Win32 API поддержку в режиме ядра. Четыре перечисленных варианта могут также комбинироваться в любом сочетании: например, функция Win32 API WriteFile обращается к функции Native API NtWriteFile для записи в дисковый файл, и вызывает соответствующую функцию csrss для вывода в консоль.

Поддержка Win32 API включена в семейство ОС Windows 9x; кроме того, она может быть добавлена в Windows 3.1x установкой пакета Win32s. Для облегчения переноса существующих Windows-приложений, использующих для представления строк MBCS-кодировки, все функции Win32 API, принимающие параметрами строки, были созданы в двух версиях: функции с суффиксом A (ANSI) принимают MBCS-строки, а функции с суффиксом W (wide) принимают строки в кодировке Unicode. В Win32s и Windows 9x поддерживаются только A-функции, тогда как в Windows NT, где все строки внутри ОС хранятся исключительно в Юникоде, каждая A-фунция просто преобразует свои строковые параметры в Юникод и вызывает W-версию той же функции. Когда имя функции в исходном тексте программы указано без суффикса, использование A- либо W-версии этой функции определяется опциями компиляции. При этом важно отметить, что большинство новых функций, появившихся в Windows 2000 или более поздних ОС семейства Windows NT, существуют только в Unicode-версии, потому что задача обеспечения совместимости со старыми программами и с ОС Windows 9x уже не стоит так остро, как раньше.

POSIX и OS/2[править]

В отличие от большинства «свободных» Unix-подобных ОС, Windows NT сертифицирована институтом NIST на совместимость со стандартом POSIX.1, и даже с более строгим стандартом FIPS 151-2. Библиотекой psxdll экспортируются стандартные функции POSIX, а также некоторые функции Native API, не имеющие аналогов в POSIX — например, для работы с кучей, со структурными исключениями, с кодировкой Unicode. Внутри этих функций используются как Native API, так и LPC-вызовы в подсистему psxss, являющуюся обычным Win32-процессом. Для загрузки этой подсистемы и выполнения POSIX-программы используется консольная программа-оболочка posix. Поддержка POSIX, включённая в Windows NT, не содержит расширений для работы с графикой или многопоточными приложениями.

Для выполнения 16-битных программ, написанных для OS/2 1.x, в состав Windows NT включены две системных библиотеки OS/2 (doscalls и netapi) и консольная программа-эмулятор os2, которая загружает и использует посредством LPC-вызовов подсистемы os2srv и os2ss. Остальные системные библиотеки OS/2, кроме двух названных (kbdcalls, mailslot, moncalls, nampipes, quecalls, viocalls и ещё десяток), не хранятся как отдельные файлы, а эмулируются. Программы, написанные для OS/2 2.0 и выше, а также оконные программы и программы, напрямую работающие с устройствами компьютера, в том числе драйвера, системой Windows NT не поддерживаются.

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

DOS и Win16[править]

Чтобы обеспечить двоичную совместимость с существующими программами для предыдущих семейств ОС от Microsoft, в Windows NT была добавлена программа-эмулятор ntvdm, реализующая VDM (виртуальную DOS-машину), внутри которой может выполняться программа для DOS. Для каждой выполняемой DOS-программы создаётся собственная VDM, тогда как несколько 16-битных Windows-программ могут выполняться в отдельных потоках внутри одной VDM, которая в этом случае играет роль подсистемы. Для того, чтобы внутри VDM можно было выполнять программы для Windows, в неё сначала должна быть загружена программа wowexec, устанавливающая связь VDM с платформой WOW («Windows on Win32»), позволяющей использовать 16-битные приложения для Windows наравне с 32-битными. Сама программа-эмулятор ntvdm выполняется внутри подсистемы Win32, что позволяет Win32-программам обращаться к окнам DOS-программ как к обычным консольным окнам, а к окнам Win16-программ — как к обычным графическим окнам.

Ещё одна технология обеспечения двоичной совместимости, реализованная в Windows NT — это thunks, которые позволяют 32-битным программам пользоваться 16-битными DLL-библиотеками (для Windows или OS/2), и наоборот. Thunks для Win16 реализованы в библиотеках wow32 (32-битные точки входа) и krnl386 (16-битные точки входа); thunks для OS/2 — в библиотеке doscalls (16-битные точки входа). К 16-битным системным библиотекам, включённым в состав Windows NT для использования технологией WOW, относятся krnl386, gdi, user, commctrl, commdlg, shell и др. Поддержка DOS-программ виртуальной DOS-машиной системы Windows NT не ограничена эмуляцией реального режима (англ.) процессора x86: поддерживается интерфейс DPMI (англ.), позволяющий DOS-программам обращаться к расширенной памяти. Однако поддержка программ для DOS и Win16 в Windows NT ограничена требованиями безопасности: программы, напрямую работающие с устройствами компьютера, в том числе драйвера, не поддерживаются.

В связи с аппаратными ограничениями 64-битных платформ, поддержка VDM и WOW была исключена из 64-битных версий Windows, и запуск 16-битных программ на них невозможен. Основным API этих версий Windows NT является 64-битная версия Win32 API; для запуска 32-битных программ используется технология WOW64 (англ.), аналогичная традиционной WOW.

Аппаратные платформы[править]

Как уже было отмечено, создание версии NT для x86 требовалось для обеспечения совместимости с OS/2, — однако для того, чтобы убедиться в переносимости создаваемого кода, разработка NT началась с версий для RISC-архитектур, и только потом была добавлена поддержка x86. Изначально разработка x86-версии Windows NT была ориентирована на процессор i486, но к моменту выпуска Windows NT 3.1 была также добавлена поддержка i386. Последней версией, поддерживающей i386, была Windows NT 3.51, а начиная с Windows 2000, прекращена также поддержка i486.

Процессор i860, для которого велась начальная разработка ОС NT, не получил ко времени завершения работ над Windows NT той поддержки производителями компьютеров, на которую рассчитывали Intel и Microsoft. В результате тремя платформами, поддержка которых была включена в Windows NT 3.1, стали x86, Alpha и MIPS. В выпусках Windows NT 3.x поддержка этих платформ сохранялась, пополнившись в Windows NT 3.51 также архитектурой PReP (англ.) на основе процессора PowerPC. Однако Windows NT 3.51 не была совместима с компьютерами Macintosh с тем же процессором; фактически, поддерживались только клоны IBM PC с процессором PowerPC вместо x86. Такие компьютеры выпускались в основном фирмами-создателями PowerPC — IBM и Motorola.

Первый выпуск Windows NT 4 поддерживал четыре платформы (x86, Alpha, MIPS и PowerPC), но поддержка менее распространённых платформ сокращалась по мере выхода пакетов обновления: из SP1 была удалена поддержка MIPS, из SP3 — поддержка PowerPC. Последними выпусками Windows NT 4 поддерживались только x86 и Alpha; хотя поддержка Alpha планировалась к включению в Windows 2000, она была исключена из версии RC2. В результате единственной платформой, поддерживаемой на Windows 2000, стала x86.

Поддержка 64-битных процессоров была впервые реализована в Windows XP для IA-64 — архитектуры процессоров Intel Itanium. На основе 64-битной версии Windows XP были созданы также 64-битные серверные версии Windows 2000; позже поддержка процессора Itanium была добавлена и в часть версий Windows Server 2003. Второй 64-битной архитектурой, поддерживаемой в ОС семейства Windows NT, стала созданная AMD архитектура x64, позже реализованная в процессорах Intel под названием EM64T. Одновременно были выпущены Windows Server 2003 SP1 x64 и Windows XP Professional x64, представляющие собой серверный и настольный варианты одной и той же версии Windows — в частности, к этим выпускам применимы одни и те же обновления. С 2005 г. поддержка IA64 была удалена из настольных версий Windows; в последней из вышедших ОС семейства NT, Windows Vista, поддерживаются только процессоры x86 и x64. Планируется, что поддержка процессоров Itanium сохранится в некоторых серверных версиях Windows.

Источники[править]

  • NT OS/2 Design Workbook (1989—1990, Microsoft) — доступна в рамках программы Windows Research Kernel, а также в Американском музее национальной истории [1]
  • MS Windows NT Workstation 4.0 Resource Guide (1995, Microsoft, ISBN 1572313439) — доступна на сайте Microsoft TechNet[2]

hu:Windows NTku:Windows NT

lt:Windows NTuz:Windows NT