SWD Software Ltd. - официальный дистрибьютор QNX на территории России и стран бывшего СССР Операционная система реального времени QNX
Инструменты для создания надёжных встраиваемых систем и
интеллектуальных устройств любой сложности
QNX Software Systems - разработчик встраиваемой операционной системы QNX
  Стандартная версия

Методы быстрой начальной загрузки для архитектуры х86

Бен Бирон (Ben Biron), QNX Software Systems
[email protected]
Источник: http://www.qnx.com/src_may09/fastboot_paper.html

Аннотация

С появлением процессора Intel Atom архитектура х86 стала полноправным конкурентом на рынке встраиваемых платформ с низким энергопотреблением. Проблема заключается в том, что до настоящего времени в архитектуре х86, как правило, использовалась BIOS для выполнения ранней инициализации и запуска операционной системы. При таком подходе начальная загрузка происходит настолько долго, что это становится неприемлемым для встраиваемых устройств. Поэтому разработчикам необходимо найти решение, как обойти необходимость использования BIOS, чтобы обеспечить быструю загрузку встраиваемой системы. В этой статье рассматриваются факторы, которые влияют на время начальной загрузки, и обсуждаются те значительные преимущества по времени загрузки и производительности, которые достигаются путем замены BIOS на специализированную процедуру ранней инициализации периферийных устройств. В статье также обсуждаются способы получения таких результатов.

Введение


Рис. 1 — Семейство плат Kontron nanoETX-express является одной из первых платформ, поддерживающих технологию быстрой начальной загрузки QNX для процессоров Intel Atom.
Обычно при упоминании архитектуры х86 возникают образы домашних компьютеров и корпоративных серверов. И это неудивительно, учитывая, что х86 процессоры обычно расположены на более высоком участке кривой потребления энергии. Однако недавно компания Intel стала осваивать рынки встраиваемых, недорогих систем с низким энергопотреблением, выпустив процессор Intel Atom на базе архитектуры х86. Этот процессор позволит разработчикам применить имеющиеся у них знания архитектуры х86 и инструментальных средств для создания встраиваемых решений для рынков промышленной автоматизации, медицинского оборудования и др.

Если не считать потребляемой мощности, единственным, но самым большим недостатком архитектуры х86, с точки зрения встраиваемости, является длительное время начальной загрузки. Обычно системы, основанные на архитектуре х86, зависят от микропрограммы начальной загрузки, называемой BIOS. Она обеспечивает широкий диапазон совместимости устройств и определяет системную конфигурацию во время начальной загрузки. Однако ни первое, ни второе не является первоочередным необходимым требованием для встраиваемых приложений. Встраиваемые решения — это обычно узкоспециализированные или серийные устройства с одной и той же конфигурацией.

В данной статье объясняется, почему BIOS работает так медленно, а методы быстрой начальной загрузки — так быстро. Кроме того, в статье обсуждаются методы быстрой начальной загрузки, позволяющие отказаться от использования BIOS.

Время начальной загрузки при использовании BIOS

BIOS можно рассматривать как миниатюрную операционную систему, отвечающую за связь с аппаратным обеспечением. Код начальной загрузки — это та часть BIOS, которая оказывает наибольший эффект на время начальной загрузки. Этот код, выполняемый при включении системы, обнаруживает и инициализирует устройства, подключенные к системе.

Устройства, для которых требуется инициализация с помощью BIOS, — это клавиатура, мышь, контроллеры прерываний, видеокарта, процессор, кеш, ОЗУ, PCI-устройства, USB-устройства, датчики и диски. Помимо определения и инициализации каждого из этих устройств, BIOS также должна оценить их количественные характеристики (например, размер ОЗУ) или возможности (например, поддержка процессором 64-битной адресации). Помимо этого, BIOS должна выполнить дополнительный код начальной загрузки для каждого устройства, у которого есть BIOS-ПЗУ. Выполнение всей этой работы требует некоторого (не всегда одинакового) времени и обычно не нужно для встраиваемых устройств, поскольку они чаще всего имеют фиксированную конфигурацию.

Начальная загрузка из BIOS позволяет системе с данной архитектурой поддерживать большой набор аппаратных конфигураций и устройств, однако платой за такую возможность является длительное время загрузки. Поскольку встраиваемые системы обычно имеют фиксированную аппаратную конфигурацию, для них нет необходимости тратить время на ее определение.

Время начальной загрузки при использовании технологии быстрой загрузки

Начальная загрузка с использованием BIOS происходит долго потому, что BIOS предназначена для поддержки целого множества аппаратных конфигураций. В этой ситуации очевидное решение — удалить те части кода начальной загрузки BIOS, которые не требуются для данного конкретного встраиваемого приложения. В большинстве случаев этого достаточного для того, чтобы сократить время загрузки от нескольких секунд до долей секунды.

Для того чтобы еще уменьшить время загрузки, разработчики могут применить аппаратное назначение прерываний, использовать начальную загрузку с устройств хранения с линейной адресацией (EEPROM или флеш-память) или применить задержку выделения ресурсов.

Быстрая начальная загрузка в основном становится быстрой потому, что некоторые задачи просто не выполняются. Этот подход идеально подходит для встраиваемых приложений, которые обычно специально предназначены для выполнения всего одной или нескольких задач.

Специализированная процедура начальной загрузки

Применяя специализированную процедуру начальной загрузки, разработчик может упразднить все лишние шаги, которые выполняет BIOS во время загрузки. Разработчик может также отложить выполнение тех операций, которые не требуются во время начальной загрузки, до того момента, когда они непосредственно потребуются.

В системах, основанных на BIOS, она служит для назначения и конфигурирования прерываний, тогда как в конфигурациях с быстрой начальной загрузкой разработчик самостоятельно определяет порядок обработки прерываний. С точки зрения сокращения времени начальной загрузки, наиболее экономичным способом сделать это является аппаратное назначение прерываний таким образом, чтобы они были известны во время компиляции. Такой подход обеспечивает простой, но эффективный способ улучшить время загрузки и упростить код загрузки. Кроме того, это позволяет повысить производительность системы. Например, разработчик может назначить отдельные каналы для интенсивных прерываний и использовать общие линии для менее интенсивных прерываний. Применение общей линии прерывания для множества устройств приводит к ненужным накладным расходам на обработку прерываний для всех устройств, связанных с поступившим прерыванием, независимо от того, какое именно устройство активировало его.

Выделение ресурсов для шины PCI не требуется во время начальной загрузки и, следовательно, может быть отложено до того времени, когда драйверу понадобится доступ к устройству на шине PCI. Память и средства ввода-вывода также могут быть выделены после завершения начальной загрузки системы. Требования ресурсов определяются посредством опроса PCI-устройства . Прерывания PCI, как и прерывания ISA, конфигурируются разработчиком, чтобы значения прерываний были известны при компиляции.

Использование устройств с линейной адресацией (например, флеш-память или EEPROM) помогает улучшить время начальной загрузки и упростить код начальной загрузки благодаря возможности отказаться применения более медленных вызовов BIOS для чтения образа с диска. Последний шаг в начальном загрузчике состоит в загрузке образа операционной системы в ОЗУ и запуске ОС.

Как показано на рис. 2, процесс загрузки состоит из 2-х этапов:

  1. Начальный загрузчик (IPL) — Осуществляет первичную инициализацию, находит образ ОС, копирует код начальной загрузки из образа ОС и переходит к нему.
  2. Запуск — Заканчивает инициализацию оборудования, копирует оставшуюся часть образа ОС в ОЗУ и заполняет структуры данных ОС.

Теперь разработчик должен реализовать те шаги, которые раньше выполнялись BIOS. Конечно, важно, что разработчик может на свое усмотрение решить, что именно должно выполняться, однако недостаток данного подхода состоит в том, что разработчику приходится потратить на это определенное время.

right
Рис. 2 — Процесс начальной загрузки.

Общие задачи технологии быстрой начальной загрузки и BIOS

Несмотря на использование специализированного начального загрузчика, разработчик должен реализовывать некоторые шаги так же, как их выполняет BIOS. Например, разработчик должен применить процедуры инициализации контроллера памяти, процессора и кеша, обеспечить доступ к верхним разделам памяти и работу в защищенном режиме. Конечно, метод быстрой начальной загрузки не может выполнить все эти шаги быстрее, чем BIOS.

BIOS быстрой загрузки

В данной статье мы рассмотрели два подхода к начальной загрузке: полностью на основе BIOS и полностью конфигурируемая быстрая начальная загрузка. Технология быстрой начальной загрузки неизбежно требует участия разработчика, если только эта задача не была уже реализована поставщиком платы или операционной системы. Исследователи компании Intel изучают возможности уменьшения времени начальной загрузки на основе BIOS. Они опубликовали статью под названием "BIOS быстрой начальной загрузки" ("Fastboot BIOS")1, в которой приводится несколько возможных путей оптимизации времени загрузки. Некоторые из приведенных рекомендаций заключаются в специальной модификации BIOS, для того чтобы приспособить ее к конкретной встраиваемой системе (аналогично описанию, приведенному в разделе "Специализированная процедура начальной загрузки" выше), в то время как другие рекомендации направлены на оптимизацию (например, с помощью технологии Intel SpeedStep, которая позволяет сократить время начальной загрузки как в конфигурации с BIOS, так и без нее).

Те методы оптимизации, которые предложены в статье компании Intel "BIOS быстрой начальной загрузки" (“Fastboot BIOS”) и не требуют участия разработчика, могут быть достаточными для некоторых встраиваемых приложений и могут рассматриваться, как приемлемый компромисс между уменьшением времени начальной загрузки и усилиями разработчика.

Заключение

Система на основе технологии быстрой начальной загрузки будет загружаться значительно быстрее, чем система на основе BIOS, потому что разработчик может самостоятельно выбирать или отбрасывать те или иные шаги начальной загрузки в зависимости от аппаратной конфигурации, применяемой для данного встраиваемого приложения.

Вся функциональная широта BIOS не требуется для встраиваемых приложений, предназначенных для работы на базе платформ Intel Atom, поэтому выполнение определенных операций во время начальной загрузки можно считать бесполезной тратой времени. Однако отказаться от BIOS не так-то просто. Вернее, это требует непосредственного участия разработчика в реализации тех шагов начальной загрузки, которые обычно выполняются BIOS. Для наглядной демонстрации того, насколько технология быстрой начальной загрузки может улучшить время загрузки, посмотрите видеоролик “QNX fast boot on Intel Atom / Kontron nanoETXexpress-SP” по следующей ссылке: http://www.youtube.com/watch?v=yTUweJKAUfk.

Ссылки

1 Mike Kartoz, Pete Dice, and Gabe Hattaway, Intel Corporation. Fastboot BIOS: An Investigation of BIOS Speed Enhancement Featuring the Intel Atom Processor (September 2008).

http://download.intel.com/design/intarch/papers/320497.pdf