Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 73
Текст из файла (страница 73)
Такойязык помимо поддержки высокоуровневых операторов, типов данных и модульных конструкций должен позволять непосредственно использовать аппаратныевозможности и особенности процессора. Кроме этого, такой язык должен бытьшироко распространенным и реализованным в виде систем программирования,Не все операционные системы компании Microsoft, в названии которых слово Windows является основным, поддерживают VDM-машины. В частности, такой возможности нет в системе Windows ME.284Глава 9. Архитектура операционных СИСТРИ»которые либо уже имеются на целевой платформе, либо позволяют получать программные коды для целевого компьютера. Другими словами, этот язык системного программирования должен быть достаточно распространенным и технологичным.
Одним из таких языков является язык С. В последние годы язык C++ такжестал использоваться для этих целей, поскольку идеи объектно-ориентированногопрограммирования оказались плодотворными не только для прикладного, но и длясистемного программирования. Большинство современных операционных систембыли созданы именно как объектно-ориентированные.Обеспечить переносимость операционной системы достаточно сложно. Дело в томчто архитектуры разных процессоров могут очень сильно различаться.
У них может быть разное количество рабочих регистров, причем часть регистров можетоказаться контекстно-зависимыми, как это имеет место в процессорах с архитектурой ia32. Различия могут быть и в реализации адресации. Более того, дляоперационной системы важной является не только архитектура центральногопроцессора, но и архитектура компьютера в целом, ибо важнейшую роль играетподсистема ввода-вывода, а она строится на дополнительных (по отношению к центральному процессору) аппаратных средствах. В таких условиях сделать эффективным код операционной системы при условии создания его на языке типа C/C++невозможно. Поэтому часть программных модулей, которые более всего зависятот аппаратных особенностей процессора, от типов поддерживаемых данных, способов адресации, системы команд и других важнейших моментов, разрабатывается на языке ассемблера.
Очевидно, что модули, написанные на языке ассемблера,при переносе операционной системы на процессор с иной архитектурой должныбыть написаны заново. Зато остальная (большая) часть кода операционной системы может быть просто перекомпилирована под целевой процессор. Именно по этому принципу в свое время была создана операционная система UNIX. Относительная легкость переноса этой системы на другие компьютеры позволила сделатьее одной из самых распространенных.
Для обеспечения мобильности был дажесоздан стандарт на интерфейс прикладного программирования, названный POSIX(Portable Operating System Interface for Computer Environments — интерфейс прикладного программирования для переносимых операционных систем).К сожалению, на самом деле далеко не все операционные системы семейства UNIXдопускают относительно простую переносимость созданного для них программного обеспечения, хотя сами они и поддерживают такую переносимость.
Основная причина тому — отход от единого стандарта API — POSIX. Очевидно, что платой за универсальность, прежде всего, является потеря производительности привыполнении операций ввода-вывода и вычислений, связанных с этими операциями. Поэтому ряд разработчиков шли и до сих пор идут на отказ от принципа мобильности, поскольку не всегда следование этому принципу экономически опра)дано.Если при разработке операционной системы сразу не следовать принципу мобильности, то в последующем очень трудно обеспечить перенос на другую платформ Укак самой операционной системы, так и программного обеспечения, созданнодля нее. Например, компания IBM потратила долгие годы на перенос своей опера^ционной системы OS/2, созданной для персональных компьютеров с процессорп^-яовные принципы построения операционных систем285архитектуры ia32, на платформу PowerPC.
Но даже если изначально в спецификации на операционную систему заложить требование легкой переносимости,то не значит, что его в последующем будет просто реализовать. Подтверждениемт о м у является тот же проект OS/2-WindowsNT. Как известно, проект WindowsNT обеспечивал работу этой операционной системы на процессорах с архитектурой ia32, MIPS, Alpha (DEC), PowerPC.
Однако в последующем трудности с реализацией этого принципа привели к тому, что нынешние версии операционныхсистем класса Windows NT (Windows 2000/XP) уже создаются только для процессоров с архитектурой ia32 и не поддерживают MIPS, Alpha и PowerPC.Принцип совместимостиОдним из аспектов совместимости является способность операционной системывыполнять программы, написанные для других систем или для более ранних версий данной операционной системы, а также для другой аппаратной платформы.Необходимо разделять вопросы двоичной совместимости и совместимости на уровне исходных текстов приложений.
Двоичная совместимость достигается в том случае, когда можно взять исполняемую программу и запустить ее на выполнение надругой операционной системе. Для этого необходимы: совместимость на уровнекоманд процессора, совместимость на уровне системных вызовов и даже на уровнебиблиотечных вызовов, если они являются динамически связываемыми.Совместимость на уровне исходных текстов требует наличия соответствующеготранслятора в составе системного программного обеспечения, а также совместимости на уровне библиотек и системных вызовов.
При этом необходима перекомпиляция имеющихся исходных текстов в новый выполняемый модуль.Гораздо сложнее достичь двоичной совместимости между процессорами, основанными на разных архитектурах. Для того чтобы один компьютер выполнял программы другого (например, программу для персонального компьютера типа IBMPC хочется выполнять на компьютере типа Мае от фирмы Apple), этот компьютердолжен работать с машинными командами, которые ему изначально непонятны.Например, процессор типа PowerPC на Мае должен исполнять двоичный код, предназначенный для процессора i80x86. Процессор 80x86 имеет свои собственные дешифратор команд, регистры и внутреннюю архитектуру. Процессор PowerPC имеетДругую архитектуру, он не понимает непосредственно двоичный код 80x86, поэтому должен выбрать каждую команду, декодировать ее, чтобы определить, для чегоона предназначена, а затем выполнить эквивалентную подпрограмму, написаннуюДля PowerPC.
К тому же у PowerPC нет в точности таких же регистров, флагов ивнутреннего арифметико-логического устройства, как в 80x86, поэтому он долженэмулировать все эти элементы с использованием своих регистров или памяти. И онДолжен тщательно воспроизводить результаты каждой команды, что требует специально написанных подпрограмм для PowerPC, гарантирующих, что состояниеэмулируемых регистров и флагов после выполнения каждой команды будет в точности таким же, как и на реальном процессоре 80x86.
Выходом в таких случаяхШляется использование так называемых прикладных сред, или эмуляторов. Учиь№ая, что основную часть программы, как правило, составляют вызовы библио-286Глава 9. Архитектура операционных системтечных функций, прикладная среда имитирует библиотечные функции целикомиспользуя заранее написанную библиотеку функций аналогичного назначения аостальные команды эмулирует каждую по отдельности.Одним из средств обеспечения совместимости программных и пользовательскихинтерфейсов является соответствие стандартам POSIX. Эти стандарты позволяют создавать программы в стиле UNIX, которые впоследствии могут легко переноситься из одной системы в другую.Принцип генерируемое™Согласно принципу генерируемости исходное представление центральной системной управляющей части операционной системы (ее ядра и основных компонентов, которые должны постоянно находиться в оперативной памяти) должно обеспечивать возможность настройки, исходя из конкретной конфигурации конкретноговычислительного комплекса и круга решаемых задач.