Новости

30.08.2017

Российская компания Positive Technologies анонсировала ...

  • Все новости (36)
  • Разделы новостей

    Публикации

    Майнеру на заметку

    Утилиты

    Реклама

    Обзоры компьютерных гаджетов, которые должны быть всегда под рукой

        Яндекс.Метрика
    Главная » Статьи » Прощай DOS, здравствуй UEFI

    Прощай DOS, здравствуй UEFI

    Чем ближе находится уровень абстракции приложения к реальному аппаратному обеспечению, тем больше возможностей как по управлению «железом», так и по доступу к недо­ку­мен­тированным функциям — обзор истории создания и архитектуры UEFI, которая по функ­ци­о­наль­ности вполне сопоставима с простейшей дисковой операционной системой типа MS-DOS.

    Классический DOS — это архитектурные ограничения в 16 бит

    Сейчас уже можно с определенной долей уверенности сказать, что эпоха DOS (Disk Operating System), в той классической реализации Microsoft/IBM, по которой многие её собственно и знают, ушла безвозвратно. Да, для своего времени — а это буквально всего лишь половина жизни одного поколения программистов— система была просто изумительна. Несмотря на кажущуюся с первого взгляда простоту, она была вполне эффективна для решения многих задач. А именно: управление файлами, работа с оперативной памятью (первоначально только в пределах первого мегабайта), прямой доступ к портам ввода/вывода и т.п.

    В чем же заключалась изюминка такой простоты? А в том, что за счет отсутствия необходимости создавать различные уровни абстракции, у пользователя был прямой доступ к оборудованию. За счет этого можно было создавать приложения «раскручивающие» «железо» на все 100%. Конечно, никто не отменял наличия деструктивных факторов — вирусной активности, неправильно спроектированного ПО и прочих неприятных моментов. Однако в большинстве случаев работа выполнялась корректно и быстро.

    Давайте вспомним, как вообще происходила загрузка рабочей станции в эпоху MS-DOS/PC-DOS/Dr-DOS. Первым делом отрабатывала POST (Power On Self Test) программа из ПЗУ и которую все и привыкли называть как BIOS (Basic Input/Output System). Инициализировались низкоуровневые подсистемы, в том числе, видео- и дисковые контроллеры. И затем управление передавалось непосредственно на загрузочное устройство, на котором в свою очередь находился MBR (Master Boot Record) — небольшая подпрограмма, решающая, а что и откуда будет загружено далее. Под «что» подразумевается, конечно, операционная система, а под «откуда» – необходимый раздел на жестком диске. Далее происходила посекторная загрузка драйвера, умеющего работать с форматом файловой системы, на которой и находились дальнейшие данные — в случае с реализацией DOS от компании IBM это был файл IBMBIO.COM (IO.SYS для Microsoft). И затем следовала подгрузка в ОЗУ ядра самой Disk Operating System — IBMDOS.COM (MSDOS.SYS). Понятно, что в качестве формата файловой системы выступала FAT16.

    На фоне современных журналируемых систем NTFS/EXT4/ZFS формат FAT16 кажется настолько примитивным и со столькими ограничениями в архитектуре, что сейчас возникает закономерный вопрос — почему тогда не придумали что-либо лучшее?

    Ответ прост: не было объективной потребности. Более того, такая легкость внутренней архитектуры файловой системы позволяла быстро набросать и запрограммировать свой собственный файловый драйвер, благо вся его сложность заключалась в высчитывании секторных смещений по диска — хватит карандаша и простейшего наладонного калькулятора.

    За запуском ядра следовал старт командного процессора (COMMAND.COM), который, собственно, и предоставлял всю инфраструктуру перемещения по диску и управления файлами: команды copy, rename, cd, dir, type и т.д. В идеале, его наличие и не требовалось, если в конечном итоге предусматривалась работа только в одном единственном приложении. Но такое случалось достаточно редко, т.к. пользователям все-таки нужен был интерактивный режим.

    Читатель готов уже спросить — хорошо, DOS был давным давно, у него были свои особенности, но, а причем теперь тут UEFI? Предлагаю выделить красной линией, те элементы, из-за которых актуальность того классического понятия DOS поднимается и востребовано и по сегодняшний день:

    1. наличие современной платформы (среды), которая обеспечивает почти прямой доступ к ресурсам ЭВМ, т.е. с минимальными уровнями абстракциями;
    2. позволяет сразу же работать в защищенном режиме (желательно 64-битном x86_64);
    3. располагает развитым API для управления ресурсами;
    4. запускается перед (!) операционной системой.

    UEFI — открытая модульная структура взамен BIOS

    Вроде бы ничего не приходит на ум, но! Давайте отмотаем немного назад и вспомним ту инициативу Intel, которую, начиная с середины 2000-х, компания начала активно продвигать. А именно – использование на своих фирменных платах в качестве BIOS разработку Tiano, уходящей корнями чуть ли не во времена проектирования Itanium (это еще лет десять ранее), и ставившей перед собой цель обойти ограничения в виде 16-битного кода и быть платформо-независимым решением. Тогда, с середины 90-х до середина 2000-х она называлась просто как EFI (Extensible Firmware Interface). Затем большая часть документации и спецификаций были открыты и реализация теперь известна под названием UEFI (Unified EFI). На настоящий момент порядка 170 производителей оборудования так или иначе используют UEFI, в том числе и конкурирующие разработчики BIOS. Так у Phoenix Technologies UEFI-совместимый продукт называется как SecureCore, у American Megatrends – Aptio, а Insyde Software позиционирует свое решение как InsydeH2O.

    Архитектура UEFI интерфейса
    Рис 1. Архитектура UEFI интерфейса

    До момента открытия проекта Tiano на серверных платах Intel использовался де-факто корпоративный стандарт BIOS, разработанный компанией American Megatrends. В нем, несомненно, были и есть свои плюсы, но наличие лицензионных отчислений, я думаю, и послужило на каком-то этапе камнем окончательного преткновения. В итоге Intel решает идти своим путем, активнее инвестирует в собственное решение, и, заодно, косвенно финансирует компанию Insyde Software – разработчика BIOS с перспективными наработками, но для мобильной сферы (ноутбучное firmware). И компания не ошиблась. На сегодня UEFI BIOS – это самая правильная, самая перспективная и самая интересная реализация BIOS. Почему?

    Схема загрузки (вызова) операционной системы из UEFI
    Рис 2. Схема загрузки (вызова) операционной системы из UEFI

    В качестве еще одного применения, EFI-систему можно рассматривать в качестве современного полигона для создания полноценных 64-битных приложений, работающих в защищенном режиме. Если ранее, в DOS программисты были изначально ограничены 16-битовой адресацией, что накладывало трудности при выделении большого блока ОЗУ — требовалось открывать шину A20, или использовать защищенный режим памяти (для систем на базе архитектуры i386), то сейчас открываются широчайшие возможности. Прямая линейная адресация памяти, использование 64-битных ассемблерных команд. Добавьте сюдя широкий API-стек EFI-приложений и … далее зависит уже от полета вашей фантазии.

    В роли командного интерпретатора – EFI Shell

    Когда чуть ранее мы упоминали, что командный интерпретатор DOS под названием COMMAND.COM в принципе не нужен, т.к. его роль — это организация интерактивного режима, то данный факт практически никогда не реализовывался на практике и интерпретатор всегда был в системе. Для UEFI же присущ диаметрально другой подход — нужно обеспечить, прежде всего, выполнение загрузчика операционной системы, поэтому наличие промежуточного интерактивного приложения скорее вредит, чем помогает. Поэтому оболочка EFI Shell формально существует в природе, но фактически внутри firmware ее нет. Что, однако, не означает невозможность его запуска — отнюдь. Поместив на USB-носитель в раздел /boot/EFI/ файл EFI Shell под стандартным названием bootx64.efi (bootia32.efi в случае 32-х битных систем), мы получаем реинакарнацию DOS-системы, но на современный лад.



    24.09.2017