Pages Menu
Rss
Categories Menu

Posted | 0 comments

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

Windows разрабатывалась для работы на разных аппаратных архитектурах. Исходный выпуск Windows NT поддерживал архитектуры x86 и MIPS. Вскоре после этого была добавлена поддержка процессора Alpha AXP компании Digital Equipment Corporation (она была куплена компанией Compaq, слившейся в последствии с компанией Hewlett-Packard). (Хотя процессор Alpha AXP был 64-разрядным, Windows NT запускалась в 32-разрядном режиме. В процессе разработки Windows 2000 на Alpha AXP была запущена собственная 64-разрядная версия, но она так и не была выпущена.)

Поддержка четвертой процессорной архитектуры, Motorola PowerPC, была добавлена в Windows NT 3.51. Но из-за изменений рыночных потребностей к началу разработки Windows 2000 поддержка архитектур MIPS и PowerPC была прекращена. Чуть позже компания Compaq отозвала поддержку архитектуры Alpha AXP, и Windows 2000 стала поддерживать только архитектуру x86.

В Windows XP и Windows Server 2003 была добавлена поддержка трех 64-разрядных процессорных семейств: Intel Itanium IA-64, AMD64 и 64-разрядных версий IntelExtensionTechnology (EM64T) для x86. (Они были совместимы с архитектурой AMD64, хотя и обладали некоторыми отличиями в поддерживаемых командах.) Последние два процессорных семейства получили название «64-разрядных расширенных систем», дальше они будут рассматриваться как x64. Как Windows запускает 32-разрядные приложения на 64-разрядных версиях, будет показано позже.

Переносимость Windows между аппаратными архитектурами и платформами достигается двумя основными способами:

  • Windows имеет многоуровневую конструкцию, в которой нижний уровень системы предназначается для архитектуры конкретного процессора или конкретной платформы, и он выделен в отдельные модули, чтобы верхние уровни могли быть защищены от различий между архитектурами и между аппаратными платформами. Ключевыми компонентами, обеспечивающими переносимость операционной системы, являются ядро (которое содержится в файле Ntoskrnl.exe) и уровень аппаратных абстракций (или HAL, который содержится в библиотеке Hal.dll). Более подробно оба этих компонента еще будут рассмотрены. Функции, зависящие от конкретной архитектуры (такие, как переключение контекста потока и диспетчеризация системных прерываний), реализованы в ядре. Функции, которые могут отличаться между системами в рамках одной архитектуры (например, при использовании разных материнских плат), реализованы в HAL. Единственным компонентом, имеющим существенный объем кода, предназначенного для конкретной архитектуры, является диспетчер памяти, но по сравнению со всей системой в целом этот объем незначителен.
  • В подавляющем большинстве Windows написана на языке C, но встречаются и фрагменты, написанные на C++. Ассемблер используется только для тех частей операционной системы, которые должны напрямую взаимодействовать с системным оборудованием (например, обработчик системных прерываний) или для тех частей, работа которых сильно влияет на производительность системы (например, для переключения контекста). Код на языке ассемблера присутствует не только в ядре и на HAL-уровне, но также и в некоторых других основных местах операционной системы (например, в подпрограммах, реализующих инструкции взаимной блокировки, а также в модуле из вызова локальных процедур), в части подсистемы Windows, которая выполняется в режиме ядра, и даже в некоторых библиотеках пользовательского режима, например, в коде запуска процесса в Ntdll.dll (в системной библиотеке, рассматриваемой далее).

Post a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.


↓