Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы к экзамену СМО(ответы. Еличева).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
8.96 Mб
Скачать

Переносимость

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

Написание системы, которую легко будет переносить, сходно с написани­ем любой переносимой программы — нужно следовать определенным прави­лам. Во-первых, максимально возможный объем кода должен быть написан на языке, доступном на всех машинах, на которые планируется переносить систе­му. Обычно это значит, что код следует писать на языке высокого уровня, пред­почтительно на одном из стандартизованных. Язык ассемблера по своей приро­де не переносим, если только Вы не собираетесь переносить программу исклю­чительно на машины, обратно совместимые с исходной по набору команд (на­пример, с 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-разрядную линейную адресацию и обеспечивающие поддержку виртуальной памяти. Ее можно перенести и на другие машины, но это потребует больших усилий.