Windows NT 3.1

Рабочий стол Windows NT 3.1

**Windows NT 3.1** — первая операционная система линейки Microsoft Windows NT для серверов и корпоративных рабочих станций, выпущенная 27 июля 1993 года. Номер версии был выбран таким образом, чтобы соответствовать последней версии оболочки Windows 3.1, имевшей похожий интерфейс пользователя. Было доступно две редакции NT 3.1: Windows NT 3.1 и Windows NT Advanced Server. Следующей операционной системой в линейке стала Windows NT 3.5, выпущенная в сентябре 1994 года.

NT 3.1 поддерживала процессоры архитектур Intel x86, DEC Alpha и MIPS R4000.

Основные функции ядра операционной системы, представленные в NT 3.1, используются в 32-битных версиях современных операционных систем семейства Windows, а в расширенном виде присутствуют и в 64-битных версиях. Также в NT 3.1 впервые появилась поддержка файловой системы NTFS.

## Разработка

Разработка Windows NT началась в ноябре 1988 года, после того как Microsoft наняла коллектив разработчиков из Digital Equipment Corporation во главе с Дэйвом Катлером. Многие основы дизайна отражали ранние опыты DEC с VMS и RSX-11. Операционная система была предназначена для работы на архитектурах с разными системами команд, а также на различных аппаратных платформах, принадлежащих к каждой из архитектур. Зависящие от оборудования части системы были в основном скрыты от остальной системы модулем режима ядра, получившим название HAL.

Windows NT изначально должна была быть выпущена как OS/2 3.0, третья версия операционной системы, совместно разрабатываемой IBM и Microsoft. После выпуска пользовавшейся большим успехом новой версии пользовательской оболочки для MS-DOS Windows 3.0 в мае 1990 года, Microsoft решила изменить основной API для ещё не выпущенной NT OS/2: вместо расширенного API OS/2 стал использоваться расширенный Windows API. Это решение вызвало напряжённость в отношениях между Microsoft и IBM, в результате которой сотрудничество распалось. IBM продолжила разрабатывать OS/2, а Microsoft продолжила работу над Windows NT.

Первая публичная демонстрация Windows NT, тогда называвшейся *Windows Advanced Server for LAN Manager*, была представлена на конференции разработчиков в августе 1991 года, а формальное объявление продукта состоялось весной 1993 года на выставке COMDEX в Атланте, Джорджия.

Интерфейсы программирования приложений в Windows NT представляют собой подсистемы, работающие поверх недокументированного Native API; именно это позволило перейти к Windows API на достаточно поздней стадии разработки. Windows NT являлась первой операционной системой Microsoft, внутренние структуры данных которой использовали набор символов Unicode UCS-2. В Windows NT впервые был представлен Win32 API, который был 32-битной версией 16-битного Windows API. Большинство 16-битных приложений могли быть портированы на новую систему с минимальными изменениями путём повторной компиляции. В Win32 появилась поддержка многих новых API, в частности, сетевых операций и многопоточности.

Кодовым названием проекта было «NTOS». Данное обозначение сохранилось в имени файла ядра Windows NT, ntoskrnl.exe. Более официальным названием проекта было «NT OS/2». Это наименование сохраняется до настоящего времени в некоторых файлах комплекта для разработки драйверов Windows NT.

## Поддержка архитектур

С самого начала NT проектировалась таким образом, чтобы её можно было легко портировать на другие платформы. Весь исходный код ядра и подсистем был написан на языках C и C++. Любые отличия в архитектуре аппаратного обеспечения, адаптация к которым не могла быть осуществлена простой перекомпиляцией (например, архитектура памяти, поддержка нескольких процессоров), выносились в HAL.

Кроме того, система загрузки NT была во многом заимствована из спецификации ARC, особенно на платформах, отличных от x86.

### **i860**

Изначально NT разрабатывалась для процессора Intel i860 (кодовое название N10 — «N-Ten»). Однако, поскольку выпуск i860 задерживался, команде разработчиков NT приходилось использовать эмулятор, прежде чем стали доступны прототипы систем на основе i860. Затем была добавлена поддержка других систем, а версия NT для i860 так и не была выпущена для публики. Причиной, по которой изначально разработчики ориентировались на i860, было стремление облегчить портирование на другие архитектуры и избежать создания системы, ориентированной на процессоры с архитектурой x86.

### **x86**

NT 3.1 поддерживала 32-битные процессоры Intel x86 (80386 и более поздние). В сравнении с 16-битной Windows 3.x, количество драйверов устройств для NT было довольно ограниченным. Хотя в Windows 9x могли использоваться драйвера от Windows 3.x, в NT нельзя было использовать ни драйвера для 9x, ни для 3.x. Windows NT 3.1 является единственной версией Windows NT, поддерживающей многопроцессорные компьютеры на основе процессора 80386.

### **MIPS**

Windows NT 3.1 поддерживала процессор MIPS R4000, а также иные системы MIPS, соответствовавшие спецификации Advanced RISC Computing (ARC).

### **Alpha**

Поддержка для процессора DEC Alpha была добавлена на стадии разработки бета-версий NT. Однако поскольку выпуск Alpha был отложен, разработчики Microsoft не имели доступа к компьютерам на основе Alpha почти до самого выпуска NT. В результате этого, поддержка Alpha не вошла в комплект поставки: в первые коробки с NT вкладывался купон, который можно было отправить по почте, чтобы получить бесплатный CD с NT 3.1 для процессоров Alpha.

## Совместимость с приложениями

### **16-битные версии Windows**

NT включала так называемую NTVDM/WOW (NT Virtual Dos Machine/Windows on Windows), которая представляла собой окружение для запуска 16-битных приложений. Была возможна эмуляция подсистемы операционной оболочки Windows 3.x, работающей в стандартном (286) режиме. Приложения, которые полагались на низкоуровневый доступ к аппаратному обеспечению, не поддерживались. 16-битные приложения также не могли использовать файл подкачки. Microsoft указывала, что NT была совместимой со всеми 16-битными приложениями, которые соответствовали официальным руководствам по созданию программного обеспечения (большинство коммерческих приложений).

В NT 3.1 все 16-битные приложения запускались в рамках одного процесса WOW. Это означало, что одно засбоившее 16-битное приложение могло закрыть всю сессию WOW вместе с остальными 16-битными приложениями. Однако сама операционная система была изолирована от подобных проблем, так что процесс WOW можно было прервать и перезапустить, что являлось значительным шагом вперёд в области обеспечения стабильности Windows.

Командная оболочка DOS в NT была заменена системой командной строки, известной как CMD.EXE. DOS-подсистема допускала запуск любых приложений, не требовавших низкоуровневого доступа к оборудованию (который в тот период использовался часто). Для запуска DOS-приложений, как и в Windows 3.x и 9x использовался режим виртуального 8086.

Окружение NTVDM/WOW осталось практически неизменным во всех 32-битных версиях Windows NT. В 64-битных версиях оно отсутствует, потому что процессоры архитектуры x64 не поддерживают 16-битные операции или переход в режим виртуального 8086 в «длинном» режиме.

### **32-битные версии Windows**

В NT впервые появился API Win32, который представлял собой 32-битную реализацию Windows API, которая позволяла перекомпиляцию старых 16-битных приложений для новой системы с минимальными изменениями. Win32 позволяла растущему сообществу программистов для 16-битных Windows использовать свои навыки при программировании для новой системы. Windows 95 поддерживала API Win32 (несколько видоизменённый), что ещё больше усилило его роль в процессе перевода пользователей систем Microsoft с 16-битных платформ.

Win32 — это полноценный API, предоставляющий доступ к самым различным возможностям ОС, начиная с управлению памятью и заканчивая интерфейсом пользователя. NT не разрешало доступ к оборудованию для приложений уровня пользователя. Это увеличивало надёжность системы за счёт уменьшения производительности. Однако это также означало, что практически все приложения Win32 должны были опираться на API Win32, написанный на C/C++. Положительной стороной этого являлось то, что портирование приложения на другую архитектуру, поддерживаемую NT (например, с x86 на MIPS) обычно не требовало никаких действий, кроме перекомпиляции (некоторые приложения требовали изменений, если они предполагали использование определённого порядка байтов).

### **OS/2**

Хотя система, которая изначально должна была называться «NT OS/2» была в итоге выпущена как «Windows NT», она осталась во многом совместимой с OS/2. Так, поддерживалась файловая система HPFS, а также работавшие в текстовом режиме 16-битные приложения OS/2 (в версии для x86). Многие API OS/2 (в частности сетевые API NetBIOS/LANMan) существовали в 16-битных версиях OS/2 и DOS/Windows практически в идентичной форме, так что они были включены в Win32 API. Большинство 16-битных программ OS/2 могли быть с минимальными изменениями исходного кода перекомпилированы как консольные приложения Win32.

Общей для Windows и OS/2 является концепция динамических библиотек (DLL). Хотя детали реализации DLL в Windows и OS/2 отличаются, сходство их является достаточно сильным, чтобы даже сложные приложения OS/2 могли быть перенесены на NT без значительных архитектурных изменений.

Кроме того, Microsoft отдельно подставляла дополнительную подисистему Windows NT для Presentation Manager (*Windows NT Add-On Subsystem for Presentation Manager*), которая делала возможным запуск графических приложений для OS/2.

### **POSIX**

Windows NT 3.1 включала подсистему, которая предоставляла минимальную совместимость с POSIX. Она была добавлена в основном для того, чтобы способствовать заключению контрактов с правительством США, поскольку многие правительственные агентства включали POSIX-совместимость в качестве обязательного условия контракта.

Совместимость с POSIX поддерживалась лишь на уровне API, так что требовалась перекомпиляция исходного кода. Подсистема POSIX в NT 3.1 в основном включала поддержку разрешений доступа к файлам в стиле UNIX, а также длинных имён файлов.

### **Internet Explorer**

Поддержка NT 3.1 впервые появилась в Internet Explorer 2. IE 1.5 поддерживал NT, но эта версия стала доступной лишь после выпуска IE 2.

## Редакции

* Windows NT
* Windows NT Advanced Server (добавлена поддержка доменов, RAID-массивов, сетевых клиентов Apple Macintosh; поддерживаются до 4 процессоров вместо 2 в обычной версии).

## Поддержка сети

NT 3.1 включала поддержку для 3 сетевых протоколов: NetBIOS Frames (с использованием API NetBEUI), TCP/IP и DLC.

### **NetBIOS Frames**

На момент выпуска NT, протокол NetBIOS Frames (NBF) чаще всего использовался в сетях на основе Microsoft LAN Manager/IBM LAN Server. В NT 3.1 этот протокол был единственным, который можно было использовать с уже существующими сетями на основе LAN Manager networks, а также при взаимодействии с системами на основе NT. При использовании NBF, NT могла участвовать в общем доступе к файлам и принтерам, а NT Advanced Server могла выступать в роли контроллера домена (в том числе совместно с серверами OS/2 LAN Manager). NT Advanced Server также могла входить в уже существующий домен, но не могла использоваться как самостоятельный сервер для рабочих групп.

### **TCP/IP**

Windows NT 3.1 была первой операционной системой семейства Windows, включавшей поддержку TCP/IP в обычном комплекте поставки. В качестве стека TCP/IP использовался SpiderTCP, разрабатывавшийся Spider Systems. В NT 3.5 он был заменён на стек собственной разработки.

Стек TCP/IP включал поддержку WinSock и STREAMS, но не мог использовался для построения сетей, включавших системы Microsoft LAN Manager или NT. Кроме того, не было поддержки DHCP, так что IP-адреса должны были настраиваться вручную. Поддержка NBT, DHCP и WINS была добавлена лишь в NT 3.5.

### **Data Link Control**

Data Link Control (DLC) — протокол обмена данных с сетевыми принтерами, например, использующими интерфейс HP JetDirect. Он также мог использовать Microsoft SNA Server для взаимодействия с мейнфреймами IBM.