- •Общие сведения, ос 90-х годов.
- •Рабочие станции
- •Цели проекта Windows nt: расширяемость и переносимость.
- •Расширяемость
- •Переносимость
- •Цели проекта Windows nt: надежность, совместимость и производительность.
- •Совместимость
- •Производительность
- •Модели Windows nt: клиент-сервер.
- •Объектная модель. Симметричная мультипроцессорная обработка.
- •Защищенные подсистемы. Исполнительная система.
- •Исполнительная система
- •Основные понятия: сессия регистрации, подсистемы среды.
- •Сессия регистрации
- •Подсистемы среды
- •Базовые сервисы: объекты, объекты в памяти.
- •Объекты
- •Объекты размещаются в памяти ос.
- •Ввод-вывод и файловые системы
- •Интернационализация, регионы, Unicode.
- •Интернационализация
- •Регионы
- •Структурная обработка исключений.
- •Удержание объектов
- •Учет использования ресурсов
- •Методы объектов.
- •Защита объектов. Маркеры доступа.
- •Маркеры доступа
- •Списки контроля доступа. Общий принцип работы.
- •Как все это работает вместе
Переносимость
Вторая цель проекта — обеспечить переносимость — тесно связана с расширяемостью. Расширяемость позволяет легко добавлять в систему новые возможности, тогда как переносимость обеспечивает использование всей ОС целиком на машине с другим процессором или конфигурацией при минимальных изменениях исходного текста. Хотя ОС часто делят на "переносимые" и "непереносимые", вообще говоря, переносимость в той или иной степени свойственна всем им. Вопрос не в том, можно ли перенести программу (как правило, в конечном счёте можно), а в том, насколько сложно это сделать.
Написание системы, которую легко будет переносить, сходно с написанием любой переносимой программы — нужно следовать определенным правилам. Во-первых, максимально возможный объем кода должен быть написан на языке, доступном на всех машинах, на которые планируется переносить систему. Обычно это значит, что код следует писать на языке высокого уровня, предпочтительно на одном из стандартизованных. Язык ассемблера по своей природе не переносим, если только Вы не собираетесь переносить программу исключительно на машины, обратно совместимые с исходной по набору команд (например, с Intel 80386 на Intel 80486).
Во-вторых, следует учесть, в какие физические среды планируется переносить программное обеспечение. Любая аппаратура накладывает свои ограничения на ОС. Например, ОС, разработанную для 32-разрядной адресации, не удастся перенести на машину с 16-разрядными адресами — разве что ценой огромных усилий.
В-третьих, важно минимизировать и, где только возможно, вообще удалить код, работающий непосредственно с аппаратурой. Аппаратурная зависимость может принимать различные формы. Примеры очевидных зависимостей — прямое манипулирование регистрами и другими аппаратурными структурами либо ориентация на некоторую аппаратурную конфигурацию или емкость.
В-четвертых, везде, где аппаратурно-зависимого кода нельзя избежать, его следует изолировать в небольшом количестве легко определяемых модулей. Такой код следует разбросать по всей системе.
Два последних правила тесно связаны друг с другом. Например, можно скрыть аппаратурно-зависимую структуру в абстрактном типе данных, определенном в программе. Другие модули системы будут работать с этим типом данных посредством абстрактных процедур, а не напрямую с аппаратурой. При переносе ОС необходимо изменить только абстрактный тип данных и связанные с ним процедуры.
Windows NT была спроектирована так , чтобы упростить ее переносимость. Для этого использовали следующие подходы:
• Переносимый язык С. Система написана в основном на языке С (стандарт ANSI X3.159-1989) с расширениями для поддержки архитектуры обработки исключений Windows NT. Разработчики выбрали язык С, поскольку он стандартизован, и для него широко доступны компиляторы и средства разработки. Помимо С, небольшие части системы написаны на C++, в том числе графические компоненты среды Windows и фрагменты сетевого пользовательского интерфейса. Язык ассемблера использовался только для тех частей ОС, которые должны работать непосредственно с оборудованием (например, обработчик ловушек), и для компонентов, требующих максимальной скорости выполнения (таких, как целочисленная арифметика повышенной разрядности). Однако непереносимый код был тщательно изолирован внутри использующих его компонентов.
• Изоляция от процессора. Некоторые низкоуровневые фрагменты ОС должны работать с зависимыми от процессора структурами данных и регистрами. Однако такой код содержится в небольших модулях, которые можно заменить аналогичными модулями для других процессоров.
• Изоляция от платформы. Платформенно-зависимый код в Windows NT инкапсулирован внутри динамически подключаемой библиотеки, известной как слой абстрагирования от оборудования, (hardware abstraction layer, HAL). Платформенно-зависимыми называются свойства, которые могут различаться на двух рабочих станциях, построенных на одном типе процессора разными производителями. HAL обеспечивает абстрагирование оборудования, например кэша и контроллеров прерываний, при помощи слоя низкоуровневого программного обеспечения, так что при переносе на другую платформу не требуется изменять код более высокого уровня.
Windows NT написана так, чтобы облегчить ее перенос на машины, использующие 32-разрядную линейную адресацию и обеспечивающие поддержку виртуальной памяти. Ее можно перенести и на другие машины, но это потребует больших усилий.
