В вычислительной технике BIOS ( / ˈ b aɪ ɒ s , -oʊ s / , BY -oss , -ohss ; базовая система ввода-вывода , также известная как системная BIOS , ROM BIOS , BIOS ROM или PC BIOS ) — это встроенное ПО, используемое для предоставления служб времени выполнения операционных систем и программ , а также для выполнения инициализации оборудования во время процесса загрузки (запуск при включении питания). [1] Прошивка предварительно установлена на материнской плате компьютера .
Название происходит от базовой системы ввода-вывода, используемой в операционной системе CP/M в 1975 году. [2] [3] Прошивка BIOS изначально была собственностью IBM PC ; она была подвергнута обратному проектированию некоторыми компаниями (например, Phoenix Technologies ), стремящимися создать совместимые системы. Интерфейс этой оригинальной системы служит фактическим стандартом .
BIOS в старых ПК инициализирует и тестирует компоненты оборудования системы ( самотестирование при включении питания или POST для краткости) и загружает загрузчик с запоминающего устройства, которое затем инициализирует ядро . В эпоху DOS BIOS обеспечивал вызовы прерываний BIOS для клавиатуры, дисплея, хранилища и других устройств ввода-вывода (I/O), которые стандартизировали интерфейс для прикладных программ и операционной системы. Более поздние операционные системы не используют вызовы прерываний BIOS после запуска. [4]
Большинство реализаций BIOS специально разработаны для работы с определенной моделью компьютера или материнской платы , взаимодействуя с различными устройствами, особенно с системным чипсетом . Первоначально прошивка BIOS хранилась в микросхеме ПЗУ на материнской плате ПК. В более поздних компьютерных системах содержимое BIOS хранится во флэш-памяти, поэтому его можно перезаписать, не снимая микросхему с материнской платы. Это позволяет конечному пользователю легко обновлять прошивку BIOS, чтобы можно было добавлять новые функции или исправлять ошибки, но это также создает возможность заражения компьютера руткитами BIOS . Кроме того, неудачное обновление BIOS может привести к поломке материнской платы.
Unified Extensible Firmware Interface (UEFI) является преемником устаревшего ПК BIOS, направленного на устранение его технических ограничений. [5] Прошивка UEFI может включать совместимость с устаревшим BIOS для поддержания совместимости с операционными системами и дополнительными картами, которые не поддерживают собственные операции UEFI. [6] [7] [8] С 2020 года все ПК на платформах Intel больше не поддерживают устаревший BIOS. [9] Последней версией Microsoft Windows , официально поддерживающей работу на ПК, использующих устаревшую прошивку BIOS, является Windows 10 , поскольку для Windows 11 требуется система, совместимая с UEFI (за исключением выпусков IoT Enterprise Windows 11, начиная с версии 24H2 [10] ).
/* CP / MBASICI / OSYSTEM (BIOS) АВТОРСКИЕ ПРАВА (C) ГЭРИ А. КИЛДАЛЛ ИЮНЬ, 1975 */[…]/* ОСНОВНАЯ ДИСКОПЕРАЦИОННАЯ СИСТЕМА (BDOS) АВТОРСКИЕ ПРАВА (C) ГЭРИ А. КИЛДАЛЛ ИЮНЬ, 1975 */— Фрагмент заголовка файла BDOS.PLM в исходном коде PL/M CP/M 1.1 или 1.2 для Lawrence Livermore Laboratories (LLL) [2]
Термин BIOS (базовая система ввода-вывода) был создан Гэри Килдаллом [11] [12] и впервые появился в операционной системе CP/M в 1975 году, [2] [3] [12] [13] [14] [15] описывая специфичную для машины часть CP/M, загружаемую во время загрузки, которая напрямую взаимодействует с оборудованием . [3] (Машина CP/M обычно имеет только простой загрузчик в своем ПЗУ.)
Версии MS-DOS , PC DOS или DR-DOS содержат файл, называемый по-разному " IO.SYS ", " IBMBIO.COM ", "IBMBIO.SYS" или "DRBIOS.SYS"; этот файл известен как "DOS BIOS" (также известный как "DOS I/O System") и содержит низкоуровневую аппаратно-зависимую часть операционной системы. Вместе с базовым аппаратно-зависимым, но независимым от операционной системы "System BIOS", который находится в ПЗУ , он представляет собой аналог " CP/M BIOS ".
BIOS, изначально разработанный для IBM PC, был подвергнут обратному проектированию некоторыми компаниями (например, Phoenix Technologies ), стремящимися создать совместимые системы.
С появлением машин PS/2 IBM разделила системный BIOS на части реального и защищенного режима. Часть реального режима была предназначена для обеспечения обратной совместимости с существующими операционными системами, такими как DOS, и поэтому была названа «CBIOS» (для «Compatibility BIOS»), тогда как «ABIOS» (для «Advanced BIOS») предоставляла новые интерфейсы, специально предназначенные для многозадачных операционных систем, таких как OS/2 . [16]
BIOS оригинального IBM PC и XT не имел интерактивного пользовательского интерфейса. Коды ошибок или сообщения отображались на экране, или генерировались закодированные серии звуков для сигнализации об ошибках, когда самотестирование при включении питания (POST) не достигало точки успешной инициализации видеоадаптера дисплея. Параметры на IBM PC и XT устанавливались переключателями и перемычками на основной плате и на картах расширения . Начиная примерно с середины 1990-х годов для BIOS ROM стало типичным включать «утилиту конфигурации BIOS» (BCU [17] ) или «утилиту настройки BIOS», доступ к которой осуществлялся при включении питания системы с помощью определенной последовательности клавиш. Эта программа позволяла пользователю устанавливать параметры конфигурации системы, которые ранее устанавливались с помощью DIP-переключателей , через интерактивную систему меню, управляемую с клавиатуры. В промежуточный период IBM-совместимые ПК, включая IBM AT , хранили настройки конфигурации в ОЗУ с батарейным питанием и использовали загружаемую программу конфигурации на дискете, а не в ПЗУ, для установки параметров конфигурации, содержащихся в этой памяти. Дискета поставлялась вместе с компьютером, и в случае ее утери системные настройки нельзя было изменить. То же самое в целом относилось к компьютерам с шиной EISA , для которых программа конфигурации называлась EISA Configuration Utility (ECU).
Современный Wintel -совместимый компьютер обеспечивает процедуру настройки, по сути, не изменившуюся по своей сути от ROM-резидентных утилит настройки BIOS конца 1990-х годов; пользователь может настраивать параметры оборудования с помощью клавиатуры и видеодисплея. Современная машина Wintel может хранить настройки конфигурации BIOS во флэш-ПЗУ, возможно, в том же флэш-ПЗУ, в котором хранится сам BIOS.
Периферийные карты, такие как адаптеры шины жесткого диска и видеокарты, имеют собственную прошивку, а код дополнительного ПЗУ расширения BIOS может быть частью прошивки платы расширения; этот код обеспечивает дополнительные возможности в BIOS. Код в дополнительных ПЗУ запускается до того, как BIOS загружает операционную систему с запоминающего устройства . Эти ПЗУ обычно тестируют и инициализируют оборудование, добавляют новые службы BIOS или заменяют существующие службы BIOS своими собственными службами. Например, контроллер SCSI обычно имеет расширенную ПЗУ BIOS, которая добавляет поддержку жестких дисков, подключенных через этот контроллер. Расширенная ПЗУ может в принципе содержать операционную систему или может реализовывать совершенно другой процесс загрузки, такой как сетевая загрузка . Работа IBM-совместимой компьютерной системы может быть полностью изменена путем удаления или вставки платы адаптера (или микросхемы ПЗУ), содержащей расширенную ПЗУ BIOS.
BIOS материнской платы обычно содержит код для инициализации и начальной загрузки встроенного дисплея и встроенного хранилища. Процесс инициализации может включать выполнение кода, связанного с инициализируемым устройством, для определения местоположения устройства, проверки типа устройства, затем установки базовых регистров, установки указателей , установки таблиц векторов прерываний, [18] выбора режимов подкачки, которые являются способами организации доступных регистров в устройствах, установки значений по умолчанию для доступа к программным процедурам, связанным с прерываниями , [19] и установки конфигурации устройства с использованием значений по умолчанию. [20] Кроме того, подключаемые карты адаптеров, такие как SCSI , RAID , сетевые карты и видеокарты , часто включают в себя свой собственный BIOS (например, Video BIOS ), дополняя или заменяя код системного BIOS для данного компонента. Даже устройства, встроенные в материнскую плату, могут вести себя таким образом; их дополнительные ПЗУ могут быть частью BIOS материнской платы.
Для дополнительной карты требуется дополнительное ПЗУ, если карта не поддерживается BIOS материнской платы и карту необходимо инициализировать или сделать доступной через службы BIOS до загрузки операционной системы (обычно это означает, что она требуется в процессе загрузки). Дополнительным преимуществом ПЗУ на некоторых ранних ПК-системах (в частности, включая IBM PCjr) было то, что ПЗУ было быстрее, чем основная системная ОЗУ. (В современных системах ситуация совершенно обратная, и код ПЗУ BIOS обычно копируется («затеняется») в ОЗУ, поэтому он будет работать быстрее.)
Дополнительные ПЗУ обычно располагаются на адаптерных картах. Однако оригинальный ПК, а также, возможно, PC XT, имеют запасной разъем ПЗУ на материнской плате («системная плата» в терминах IBM), в который можно вставить дополнительное ПЗУ, а четыре ПЗУ, содержащие интерпретатор BASIC, также можно извлечь и заменить на пользовательские ПЗУ, которые могут быть дополнительными ПЗУ. IBM PCjr уникален среди ПК тем, что имеет два слота для картриджей ПЗУ на передней панели. Картриджи в этих слотах отображаются в ту же область верхней области памяти, которая используется для дополнительных ПЗУ, и картриджи могут содержать дополнительные модули ПЗУ, которые распознает BIOS. Картриджи также могут содержать другие типы модулей ПЗУ, такие как программы BASIC, которые обрабатываются по-разному. Один картридж PCjr может содержать несколько модулей ПЗУ разных типов, возможно, хранящихся вместе в одной микросхеме ПЗУ.
Процессоры 8086 и 8088 начинаются с физического адреса FFFF0h. [21] Процессор 80286 начинается с физического адреса FFFFF0h. [22] Процессоры 80386 и более поздние процессоры x86 начинаются с физического адреса FFFFFFF0h. [23] [24] [25] При инициализации системы первая инструкция BIOS появляется по этому адресу.
Если система была только что включена или была нажата кнопка сброса (" холодная загрузка "), запускается полное самотестирование при включении питания (POST). Если было нажато Ctrl+Alt+Delete (" теплая загрузка "), специальное значение флага, хранящееся в энергонезависимой памяти BIOS (" CMOS "), проверенной BIOS, позволяет обойти длительное POST и обнаружение памяти.
POST идентифицирует, тестирует и инициализирует системные устройства, такие как ЦП , чипсет , оперативную память , материнскую плату , видеокарту , клавиатуру , мышь , жесткий диск , оптический привод и другое оборудование , включая интегрированные периферийные устройства .
Ранние IBM PC имели процедуру POST, которая загружала программу в оперативную память через порт клавиатуры и запускала ее. [26] [27] Эта функция была предназначена для заводских испытаний или диагностических целей.
После того, как BIOS материнской платы завершает POST, большинство версий BIOS ищут модули дополнительных ПЗУ, также называемые ПЗУ расширения BIOS, и выполняют их. BIOS материнской платы сканирует ПЗУ расширения в части « верхней области памяти » (часть адресного пространства реального режима x86 по адресу 0xA0000 и выше) и запускает каждое найденное ПЗУ по порядку. Чтобы обнаружить отображаемые в память дополнительные ПЗУ, реализация BIOS сканирует адресное пространство реального режима от 0x0C0000
до 0x0F0000
на границах 2 КБ (2048 байт), ища двухбайтовую сигнатуру ПЗУ: 0x55, за которой следует 0xAA. В допустимом расширенном ПЗУ за этой сигнатурой следует один байт, указывающий количество 512-байтовых блоков, которые занимает ПЗУ расширения в реальной памяти, а следующий байт является точкой входа дополнительного ПЗУ (также известной как ее «смещение входа»). Если ПЗУ имеет верную контрольную сумму, BIOS передает управление по адресу входа, который в обычном ПЗУ расширения BIOS должен быть началом процедуры инициализации расширения.
В этот момент код расширения ROM берет на себя управление, обычно тестируя и инициализируя оборудование, которое он контролирует, и регистрируя векторы прерываний для использования приложениями после загрузки. Он может использовать службы BIOS (включая те, которые предоставляются ранее инициализированными дополнительными ROM) для предоставления интерфейса пользовательской конфигурации, для отображения диагностической информации или для выполнения любых других требуемых действий.
Обычно дополнительное ПЗУ должно возвращаться в BIOS после завершения процесса инициализации. После (и если) дополнительное ПЗУ возвращается, BIOS продолжает поиск дополнительных дополнительных ПЗУ, вызывая каждое из них по мере их нахождения, пока не будет просканирована вся область дополнительных ПЗУ в пространстве памяти. Возможно, что дополнительное ПЗУ не вернется в BIOS, полностью предвосхищая последовательность загрузки BIOS.
После завершения POST и, в BIOS, поддерживающем дополнительные ПЗУ, после завершения сканирования дополнительных ПЗУ и вызова всех обнаруженных модулей ПЗУ с допустимыми контрольными суммами , BIOS вызывает прерывание 19h для начала обработки загрузки. После загрузки загруженные программы также могут вызывать прерывание 19h для перезагрузки системы, но они должны быть осторожны, чтобы отключить прерывания и другие асинхронные аппаратные процессы, которые могут помешать процессу перезагрузки BIOS, иначе система может зависнуть или выйти из строя во время перезагрузки.
При вызове прерывания 19h BIOS пытается найти программное обеспечение загрузчика на «загрузочном устройстве», таком как жесткий диск , дискета , CD или DVD . Он загружает и выполняет первое найденное им программное обеспечение загрузки , предоставляя ему контроль над ПК. [28]
BIOS использует загрузочные устройства, установленные в энергонезависимой памяти BIOS ( CMOS ), или, в самых ранних ПК, DIP-переключатели . BIOS проверяет каждое устройство, чтобы узнать, является ли оно загрузочным, пытаясь загрузить первый сектор ( загрузочный сектор ). Если сектор не может быть прочитан, BIOS переходит к следующему устройству. Если сектор прочитан успешно, некоторые BIOS также проверяют сигнатуру загрузочного сектора 0x55 0xAA в последних двух байтах сектора (длина которого составляет 512 байт), прежде чем принять загрузочный сектор и считать устройство загрузочным. [b]
Когда загрузочное устройство найдено, BIOS передает управление загруженному сектору. BIOS не интерпретирует содержимое загрузочного сектора, за исключением возможной проверки сигнатуры загрузочного сектора в последних двух байтах. Интерпретация структур данных, таких как таблицы разделов и блоки параметров BIOS, выполняется загрузочной программой в самом загрузочном секторе или другими программами, загруженными в процессе загрузки.
Недисковое устройство, такое как сетевой адаптер, пытается загрузиться с помощью процедуры, которая определяется его дополнительным ПЗУ или эквивалентом, интегрированным в ПЗУ BIOS материнской платы. Таким образом, дополнительные ПЗУ также могут влиять на процесс загрузки, определенный ПЗУ BIOS материнской платы, или заменять его.
При использовании стандарта загрузки оптических носителей El Torito оптический привод фактически эмулирует 3,5-дюймовый гибкий диск высокой плотности для BIOS в целях загрузки. Чтение «первого сектора» CD-ROM или DVD-ROM — это не просто определенная операция, как на гибком диске или жестком диске. Кроме того, сложность носителя затрудняет написание полезной загрузочной программы в одном секторе. Загрузочная виртуальная дискета может содержать программное обеспечение, которое обеспечивает доступ к оптическому носителю в его собственном формате.
Если ПЗУ расширения желает изменить способ загрузки системы (например, с сетевого устройства или адаптера SCSI) кооперативным способом, оно может использовать API спецификации загрузки BIOS (BBS) для регистрации своей возможности сделать это. После того, как ПЗУ расширения зарегистрированы с помощью API BBS, пользователь может выбирать среди доступных вариантов загрузки из пользовательского интерфейса BIOS. Вот почему большинство реализаций BIOS ПК, совместимых с BBS, не позволят пользователю войти в пользовательский интерфейс BIOS, пока ПЗУ расширения не закончат выполнение и не зарегистрируются с API BBS. [ необходима цитата ]
Кроме того, если ПЗУ расширения хочет изменить способ загрузки системы в одностороннем порядке, оно может просто перехватить прерывание 19h или другие прерывания, обычно вызываемые из прерывания 19h, такие как прерывание 13h, дисковая служба BIOS, чтобы перехватить процесс загрузки BIOS. Затем оно может заменить процесс загрузки BIOS одним из своих собственных, или оно может просто изменить последовательность загрузки, вставив в него свои собственные действия загрузки, не дав BIOS обнаружить определенные устройства как загрузочные, или и то, и другое. До того, как была обнародована спецификация загрузки BIOS, это был единственный способ для ПЗУ расширения реализовать возможность загрузки для устройств, не поддерживаемых для загрузки собственным BIOS материнской платы. [ необходима цитата ]
Пользователь может выбрать приоритет загрузки, реализованный BIOS. Например, большинство компьютеров имеют жесткий диск, который является загрузочным, но иногда есть съемный носитель, который имеет более высокий приоритет загрузки, поэтому пользователь может сделать съемный диск загрузочным.
В большинстве современных BIOS порядок приоритета загрузки может быть настроен пользователем. В старых BIOS можно было выбирать ограниченные параметры приоритета загрузки; в самых ранних BIOS была реализована фиксированная схема приоритета, при которой сначала шли дисководы, затем — фиксированные диски (т. е. жесткие диски), и обычно не поддерживались никакие другие загрузочные устройства, при условии изменения этих правил установленными дополнительными ПЗУ. BIOS в ранних ПК также обычно загружался только с первого дисковода или первого жесткого диска, даже если было установлено два диска.
На оригинальных IBM PC и XT, если загрузочный диск не был найден, BIOS пытался запустить ROM BASIC с вызовом прерывания 18h . Поскольку BASIC в ROM использовался немногими программами, производители клонированных ПК его исключили; тогда компьютер, который не мог загрузиться с диска, отображал сообщение «No ROM BASIC» и останавливался (в ответ на прерывание 18h).
Более поздние компьютеры отображали сообщение типа «Загрузочный диск не найден»; некоторые предлагали вставить диск и нажать клавишу, чтобы повторить процесс загрузки. Современный BIOS может ничего не отображать или автоматически запускать утилиту конфигурации BIOS, когда процесс загрузки не удается.
Среда для программы загрузки очень проста: ЦП находится в реальном режиме, а регистры общего назначения и сегментные регистры не определены, за исключением SS, SP, CS и DL. CS:IP всегда указывает на физический адрес 0x07C00
. Какие значения CS и IP на самом деле имеют, не определено. Некоторые BIOS используют CS:IP , 0x0000:0x7C00
а другие могут использовать 0x07C0:0x0000
. [29] Поскольку программы загрузки всегда загружаются по этому фиксированному адресу, нет необходимости в том, чтобы программа загрузки была перемещаемой. DL может содержать номер диска, как используется с прерыванием 13h , загрузочного устройства. SS:SP указывает на допустимый стек, который предположительно достаточно велик для поддержки аппаратных прерываний, но в остальном SS и SP не определены. (Стек должен быть уже настроен для обслуживания прерываний, а прерывания должны быть включены для того, чтобы системное прерывание таймера-тика, которое BIOS всегда использует, по крайней мере, для поддержания подсчета времени суток и которое он инициализирует во время POST, было активным, и чтобы клавиатура работала. Клавиатура работает, даже если служба клавиатуры BIOS не вызывается; нажатия клавиш принимаются и помещаются в 15-символьный буфер опережающего ввода, поддерживаемый BIOS.) Программа загрузки должна настроить свой собственный стек, поскольку размер стека, настроенного BIOS, неизвестен, а его местоположение также является переменным; хотя программа загрузки может исследовать стек по умолчанию, проверив SS:SP, проще и короче просто безусловно настроить новый стек. [30]
Во время загрузки все службы BIOS доступны, а память ниже адреса 0x00400
содержит таблицу векторов прерываний . BIOS POST инициализирует системные таймеры, контроллер(ы) прерываний, контроллер(ы) DMA и другое оборудование материнской платы/чипсета, необходимое для приведения всех служб BIOS в состояние готовности. Обновление DRAM для всей системной DRAM в обычной памяти и расширенной памяти, но не обязательно расширенной памяти, настроено и работает. Векторы прерываний , соответствующие прерываниям BIOS, установлены так, чтобы указывать на соответствующие точки входа в BIOS, векторы аппаратных прерываний для устройств, инициализируемых BIOS, установлены так, чтобы указывать на предоставляемые BIOS ISR, а некоторые другие прерывания, включая те, которые BIOS генерирует для перехвата программ, установлены на фиктивный ISR по умолчанию, который немедленно возвращается. BIOS поддерживает зарезервированный блок системной RAM по адресам 0x00400–0x004FF
с различными параметрами, инициализированными во время POST. Вся память по адресу и выше 0x00500
может использоваться программой загрузки; она может даже перезаписывать себя. [31] [32]
BIOS ROM настраивается под оборудование конкретного производителя, позволяя предоставлять низкоуровневые службы (такие как чтение нажатия клавиши или запись сектора данных на дискету) стандартизированным образом для программ, включая операционные системы. Например, IBM PC может иметь либо монохромный, либо цветной видеоадаптер (использующий различные адреса памяти дисплея и оборудование), но для отображения символа в указанной позиции на экране в текстовом или графическом режиме может быть вызван один стандартный системный вызов BIOS .
BIOS предоставляет небольшую библиотеку базовых функций ввода/вывода для работы периферийных устройств (таких как клавиатура, элементарные функции отображения текста и графики и т. д.). При использовании MS-DOS доступ к службам BIOS может осуществляться прикладной программой (или MS-DOS) путем выполнения инструкции прерывания 13h для доступа к функциям диска или путем выполнения одного из ряда других документированных вызовов прерывания BIOS для доступа к видеодисплею , клавиатуре , кассете и другим функциям устройства.
Операционные системы и исполнительное программное обеспечение, разработанные для замены этой базовой функциональности прошивки, предоставляют заменяющие программные интерфейсы прикладному программному обеспечению. Приложения также могут предоставлять эти услуги самим себе. Это началось еще в 1980-х годах под управлением MS-DOS , когда программисты заметили, что использование видеослужб BIOS для отображения графики было очень медленным. Чтобы увеличить скорость вывода на экран, многие программы обходили BIOS и программировали аппаратное обеспечение видеодисплея напрямую. Другие программисты графики, особенно, но не исключительно в демосцене , заметили, что существуют технические возможности видеоадаптеров ПК, которые не поддерживаются IBM BIOS и не могут быть использованы без его обхода. Поскольку AT-совместимый BIOS работал в реальном режиме Intel , операционные системы, работавшие в защищенном режиме на процессорах 286 и более поздних, требовали аппаратных драйверов устройств, совместимых с работой в защищенном режиме, для замены служб BIOS.
В современных ПК, работающих под управлением современных операционных систем (таких как Windows и Linux ), вызовы прерываний BIOS используются только во время загрузки и первоначальной загрузки операционных систем. До отображения первого графического экрана операционной системы ввод и вывод обычно обрабатываются через BIOS. Меню загрузки, такое как текстовое меню Windows, которое позволяет пользователям выбирать операционную систему для загрузки, загружаться в безопасном режиме или использовать последнюю удачную конфигурацию, отображается через BIOS и получает ввод с клавиатуры через BIOS. [4]
Многие современные ПК по-прежнему могут загружать и работать с устаревшими операционными системами, такими как MS-DOS или DR-DOS, которые в значительной степени зависят от BIOS для ввода-вывода консоли и диска, при условии, что в системе есть BIOS или прошивка UEFI с поддержкой CSM.
Процессоры Intel имеют перепрограммируемый микрокод с момента появления микроархитектуры P6 . [33] [34] [35] Процессоры AMD имеют перепрограммируемый микрокод с момента появления микроархитектуры K7 . BIOS содержит исправления для микрокода процессора, которые исправляют ошибки в исходном микрокоде процессора; микрокод загружается в SRAM процессора, поэтому перепрограммирование не является постоянным, поэтому загрузка обновлений микрокода выполняется каждый раз при включении системы. Без перепрограммируемого микрокода потребовалась бы дорогостоящая замена процессора; [36] например, ошибка Pentium FDIV стала дорогостоящим фиаско для Intel, поскольку потребовала отзыва продукта , поскольку дефектный микрокод оригинального процессора Pentium не мог быть перепрограммирован. Операционные системы также могут обновлять основной микрокод процессора. [37] [38]
Некоторые BIOS содержат таблицу описания лицензирования программного обеспечения (SLIC), цифровую подпись, размещенную внутри BIOS производителем оригинального оборудования (OEM), например Dell . SLIC вставляется в таблицу данных ACPI и не содержит активного кода. [39] [40]
Производители компьютеров, которые распространяют OEM-версии Microsoft Windows и прикладного программного обеспечения Microsoft, могут использовать SLIC для аутентификации лицензирования на установочном диске OEM Windows и диске восстановления системы , содержащем программное обеспечение Windows. Системы с SLIC можно предварительно активировать с помощью ключа продукта OEM, и они проверяют сертификат OEM в формате XML по SLIC в BIOS в качестве средства самоактивации (см. System Locked Preinstallation , SLP). Если пользователь выполняет новую установку Windows, ему необходимо иметь как ключ OEM (SLP или COA), так и цифровой сертификат для своего SLIC, чтобы обойти активацию. [39] Этого можно достичь, если пользователь выполнит восстановление с помощью предварительно настроенного образа, предоставленного OEM. Опытные пользователи могут скопировать необходимые файлы сертификатов из образа OEM, декодировать ключ продукта SLP, а затем вручную выполнить активацию SLP.
Некоторые реализации BIOS допускают разгон , действие, при котором ЦП настраивается на более высокую тактовую частоту , чем номинальная частота производителя для гарантированной производительности. Однако разгон может серьезно подорвать надежность системы в недостаточно охлажденных компьютерах и в целом сократить срок службы компонентов. Разгон, при неправильном выполнении, может также привести к тому, что компоненты будут перегреваться так быстро, что они механически разрушатся. [41]
Некоторые старые операционные системы , например MS-DOS , используют BIOS для выполнения большинства задач ввода/вывода на ПК. [42]
Вызов служб BIOS реального режима напрямую неэффективен для операционных систем защищенного режима (и длительного режима ). Вызовы прерываний BIOS не используются современными многозадачными операционными системами после их первоначальной загрузки.
В 1990-х годах BIOS предоставил некоторые интерфейсы защищенного режима для Microsoft Windows и Unix-подобных операционных систем, такие как Advanced Power Management (APM), Plug and Play BIOS , Desktop Management Interface (DMI), VESA BIOS Extensions (VBE), e820 и MultiProcessor Specification (MPS). Начиная с 2000 года большинство BIOS предоставляют интерфейсы ACPI , SMBIOS , VBE и e820 для современных операционных систем. [43] [44] [45] [46] [47]
После загрузки операционной системы код режима управления системой все еще выполняется в SMRAM. С 2010 года технология BIOS находится в переходном процессе к UEFI . [5]
Исторически BIOS в IBM PC и XT не имел встроенного пользовательского интерфейса. Версии BIOS в более ранних ПК (класса XT) не были программно настраиваемыми; вместо этого пользователи устанавливали параметры с помощью DIP-переключателей на материнской плате. Более поздние компьютеры, включая все IBM-совместимые с процессорами 80286, имели энергонезависимую память BIOS с батарейным питанием (чип CMOS RAM), в котором хранились настройки BIOS. [48] Эти настройки, такие как тип видеоадаптера, размер памяти и параметры жесткого диска, можно было настроить только путем запуска программы настройки с диска, а не встроенной в ПЗУ. Специальная «эталонная дискета» была вставлена в IBM AT для настройки таких настроек, как размер памяти. [49]
Ранние версии BIOS не имели паролей или опций выбора загрузочного устройства. BIOS был жестко запрограммирован на загрузку с первого дисковода или, если это не удавалось, с первого жесткого диска. Контроль доступа в ранних машинах класса AT осуществлялся с помощью физического переключателя блокировки (который было несложно взломать, если корпус компьютера можно было открыть). Любой, кто мог включить компьютер, мог его загрузить. [ необходима цитата ]
Позднее компьютеры класса 386 начали интегрировать утилиту настройки BIOS в само ПЗУ, вместе с кодом BIOS; такие компьютеры обычно загружаются в утилиту настройки BIOS, если нажата определенная клавиша или комбинация клавиш, в противном случае выполняется процесс BIOS POST и загрузки.
Современная утилита настройки BIOS имеет текстовый пользовательский интерфейс (TUI) или графический пользовательский интерфейс (GUI), доступ к которому осуществляется нажатием определенной клавиши на клавиатуре при запуске ПК. Обычно клавиша объявляется на короткое время во время раннего запуска, например, "Press DEL to enter Setup".
Фактический ключ зависит от конкретного оборудования. Ключ настроек чаще всего Delete ( Acer , ASRock , Asus PC, ECS , Gigabyte , MSI , Zotac ) и F2 (материнская плата Asus, Dell , ноутбук Lenovo , Origin PC , Samsung , Toshiba ), но это также может быть F1 (настольный компьютер Lenovo) и F10 ( HP ). [50]
Функции, представленные в утилите настройки BIOS, обычно включают в себя:
Современный экран настройки BIOS часто содержит вкладку «Состояние здоровья ПК » или « Мониторинг оборудования» , которая напрямую взаимодействует с микросхемой монитора оборудования материнской платы. [51] Это позволяет контролировать температуру процессора и корпуса , напряжение, обеспечиваемое блоком питания , а также контролировать и управлять скоростью вентиляторов, подключенных к материнской плате.
После загрузки системы мониторинг оборудования и управление вентилятором компьютера обычно осуществляется непосредственно чипом Hardware Monitor, который может быть отдельным чипом, подключенным через I²C или SMBus , или входить в состав решения Super I/O , подключенного через Industry Standard Architecture (ISA) или Low Pin Count (LPC). [52] Некоторые операционные системы, такие как NetBSD с envsys и OpenBSD с sysctl hw.sensors , имеют встроенный интерфейс с аппаратными мониторами.
Однако в некоторых случаях BIOS также предоставляет базовую информацию об аппаратном мониторинге через ACPI , и в этом случае операционная система может использовать ACPI для выполнения аппаратного мониторинга. [53] [54]
В современных ПК BIOS хранится в перезаписываемой EEPROM [55] или флэш-памяти NOR [56] , что позволяет заменять и изменять содержимое. Такая перезапись содержимого иногда называется перепрошивкой. Это может быть сделано специальной программой, обычно предоставляемой производителем системы, или во время POST с образом BIOS на жестком диске или USB-флеш-накопителе. Файл, содержащий такое содержимое, иногда называется «образом BIOS». BIOS может быть перепрошит для обновления до более новой версии, чтобы исправить ошибки или обеспечить улучшенную производительность или поддерживать новое оборудование. Некоторые компьютеры также поддерживают обновление BIOS с помощью дискеты обновления или специального раздела на жестком диске. [57]
Оригинальный IBM PC BIOS (и кассетный BASIC) хранился на чипах памяти только для чтения (ПЗУ) с программированием по маске в гнездах на материнской плате. ПЗУ могли быть заменены, [58] но не изменены пользователями. Чтобы обеспечить обновления, многие совместимые компьютеры использовали перепрограммируемые устройства памяти BIOS, такие как EPROM , EEPROM и более поздние устройства флэш-памяти (обычно NOR flash ). По словам Роберта Брейвера, президента производителя BIOS Micro Firmware, чипы Flash BIOS стали распространены около 1995 года, потому что электрически стираемые чипы PROM (EEPROM) дешевле и проще в программировании, чем стандартные чипы PROM с ультрафиолетовым стиранием ( EPROM ). Чипы Flash программируются (и перепрограммируются) внутри схемы, в то время как чипы EPROM необходимо извлекать из материнской платы для перепрограммирования. [59] Версии BIOS обновляются, чтобы использовать преимущества новых версий оборудования и исправить ошибки в предыдущих версиях BIOS. [60]
Начиная с IBM AT, ПК поддерживали аппаратные часы, устанавливаемые через BIOS. В нем был бит столетия, который позволял вручную менять столетие, когда наступал 2000 год. Большинство ревизий BIOS, созданных в 1995 году, и почти все ревизии BIOS в 1997 году поддерживали 2000 год , автоматически устанавливая бит столетия, когда часы переваливали за полночь, 31 декабря 1999 года. [61]
Первые флэш-чипы были подключены к шине ISA . Начиная с 1998 года флэш-память BIOS переместилась на шину LPC , следуя новой стандартной реализации, известной как «концентратор прошивки» (FWH). В 2005 году флэш-память BIOS переместилась на шину SPI . [62]
Размер BIOS и емкость ПЗУ, EEPROM или других носителей, на которых он может храниться, со временем увеличивались по мере добавления новых функций в код; теперь существуют версии BIOS размером до 32 мегабайт. Для сравнения, оригинальный BIOS IBM PC содержался в маске ПЗУ объемом 8 КБ. Некоторые современные материнские платы включают в себя даже более крупные ИС флэш-памяти NAND , которые способны хранить целые компактные операционные системы, такие как некоторые дистрибутивы Linux . Например, некоторые ноутбуки ASUS включали Splashtop OS, встроенную в свои ИС флэш-памяти NAND. [63] Однако идея включения операционной системы вместе с BIOS в ПЗУ ПК не нова; в 1980-х годах Microsoft предложила вариант ПЗУ для MS-DOS, и он был включен в ПЗУ некоторых клонов ПК, таких как Tandy 1000 HX .
Другой тип микросхемы прошивки был обнаружен на IBM PC AT и ранних совместимых компьютерах. В AT интерфейс клавиатуры контролировался микроконтроллером с собственной программируемой памятью. На IBM AT это было 40-контактное устройство с разъемом, в то время как некоторые производители использовали версию этой микросхемы EPROM, которая напоминала EPROM. Этому контроллеру также была назначена функция затвора A20 для управления памятью выше диапазона одного мегабайта; иногда требовалось обновление этого «BIOS клавиатуры», чтобы воспользоваться преимуществами программного обеспечения, которое могло использовать верхнюю память. [ необходима цитата ]
BIOS может содержать такие компоненты, как Memory Reference Code (MRC), который отвечает за инициализацию памяти (например, SPD и инициализацию таймингов памяти ). [64] : 8 [65]
Современный BIOS [66] включает в себя прошивку Intel Management Engine или AMD Platform Security Processor .
IBM опубликовала полные листинги BIOS для своих оригинальных ПК, PC XT, PC AT и других современных моделей ПК в приложении к Техническому справочному руководству IBM PC для каждого типа машины. Эффект публикации листингов BIOS заключается в том, что любой может увидеть, что именно делает окончательный BIOS и как он это делает.
В мае 1984 года Phoenix Software Associates выпустила свой первый ROM-BIOS, который позволил OEM-производителям создавать по сути полностью совместимые клоны без необходимости самостоятельного реверс-инжиниринга IBM PC BIOS, как это сделала Compaq для Portable , что способствовало росту индустрии ПК-совместимых устройств и продажам не-IBM-версий DOS. [69] Первый American Megatrends (AMI) BIOS был выпущен в 1986 году.
Новые стандарты, привитые к BIOS, обычно не имеют полной публичной документации или каких-либо листингов BIOS. В результате не так легко узнать интимные подробности о многочисленных не-IBM дополнениях к BIOS, как об основных службах BIOS.
Многие поставщики материнских плат для ПК лицензировали «ядро» BIOS и набор инструментов у коммерческой третьей стороны, известной как «независимый поставщик BIOS» или IBV. Затем производитель материнской платы настраивал этот BIOS в соответствии со своим собственным оборудованием. По этой причине обновленные BIOS обычно приобретаются непосредственно у производителя материнской платы. Основные IBV включают American Megatrends (AMI), Insyde Software , Phoenix Technologies и Byosoft. Microid Research и Award Software были приобретены Phoenix Technologies в 1998 году; позже Phoenix постепенно отказалась от торговой марки Award (хотя Award Software все еще упоминается в новых версиях AwardBIOS и в прошивках UEFI). [ когда? ] General Software , которая также была приобретена Phoenix в 2007 году, продавала BIOS для встраиваемых систем на базе процессоров Intel.
SeaBIOS — это реализация BIOS с открытым исходным кодом.
Сообщество разработчиков ПО с открытым исходным кодом усилило свои усилия по разработке замены фирменных BIOS и их будущих воплощений с помощью аналогов с открытым исходным кодом. Open Firmware была ранней попыткой создать открытую спецификацию для прошивки загрузки. Первоначально она была одобрена IEEE в стандарте IEEE 1275-1994, но была отозвана в 2005 году. [70] [71] Более поздние примеры включают проекты OpenBIOS , coreboot и libreboot . AMD предоставила спецификации продуктов для некоторых чипсетов с использованием coreboot, а Google спонсирует проект. Производитель материнских плат Tyan предлагает coreboot рядом со стандартным BIOS в своей линейке материнских плат Opteron .
Микросхемы EEPROM и флэш-памяти выгодны тем, что их может легко обновить пользователь; производители оборудования обычно выпускают обновления BIOS для модернизации своих продуктов, улучшения совместимости и устранения ошибок . Однако это преимущество несет в себе риск того, что неправильно выполненное или прерванное обновление BIOS может сделать компьютер или устройство непригодным для использования. Чтобы избежать таких ситуаций, более поздние BIOS используют «загрузочный блок» — часть BIOS, которая запускается первой и должна обновляться отдельно. Этот код проверяет, цела ли остальная часть BIOS (используя контрольные суммы хэша или другие методы), прежде чем передавать ей управление. Если загрузочный блок обнаруживает какие-либо повреждения в основном BIOS, он обычно предупреждает пользователя о том, что необходимо инициировать процесс восстановления, загрузившись со съемного носителя (дискеты, компакт-диска или флэш-накопителя USB), чтобы пользователь мог снова попробовать перепрошить BIOS. Некоторые материнские платы имеют резервную версию BIOS (иногда называемую платами DualBIOS) для восстановления после повреждений BIOS.
Известно не менее пяти вирусов, атакующих BIOS. Два из них были демонстрационными. Первым обнаруженным в дикой природе был Mebromi , нацеленный на китайских пользователей.
Первым вирусом BIOS был BIOS Meningitis, который вместо того, чтобы стирать чипы BIOS, заражал их. BIOS Meningitis был относительно безвреден по сравнению с вирусом типа CIH .
Вторым вирусом BIOS был CIH , также известный как «чернобыльский вирус», который мог стирать содержимое флэш-ПЗУ BIOS на совместимых чипсетах. CIH появился в середине 1998 года и стал активным в апреле 1999 года. Часто зараженные компьютеры больше не могли загружаться, и людям приходилось извлекать микросхему флэш-ПЗУ из материнской платы и перепрограммировать ее. CIH был нацелен на широко распространенный в то время чипсет материнской платы Intel i430TX и использовал тот факт, что операционные системы Windows 9x , также широко распространенные в то время, позволяли прямой аппаратный доступ ко всем программам.
Современные системы не уязвимы для CIH из-за использования множества чипсетов, несовместимых с чипсетом Intel i430TX, а также других типов флэш-ПЗУ IC. Также существует дополнительная защита от случайной перезаписи BIOS в виде загрузочных блоков, которые защищены от случайной перезаписи, или систем с двойным и четверным BIOS, которые могут в случае сбоя использовать резервный BIOS. Кроме того, все современные операционные системы, такие как FreeBSD , Linux , macOS , Windows NT , ОС Windows, такие как Windows 2000 , Windows XP и более новые, не позволяют программам пользовательского режима иметь прямой доступ к оборудованию с использованием уровня абстракции оборудования . [72]
В результате, по состоянию на 2008 год, CIH стал по сути безвредным, в худшем случае вызывая раздражение, заражая исполняемые файлы и запуская антивирусное программное обеспечение. Другие вирусы BIOS остаются возможными, однако; [73] поскольку большинство домашних пользователей Windows без UAC Windows Vista/7 запускают все приложения с административными привилегиями, современный вирус, подобный CIH, в принципе все еще может получить доступ к оборудованию без предварительного использования эксплойта. [ необходима цитата ] Операционная система OpenBSD не позволяет всем пользователям иметь такой доступ, и патч grsecurity для ядра Linux также по умолчанию предотвращает этот прямой доступ к оборудованию, разница в том, что злоумышленнику требуется гораздо более сложный эксплойт на уровне ядра или перезагрузка машины. [ необходима цитата ]
Третий вирус BIOS был техникой, представленной Джоном Хесманом, главным консультантом по безопасности британской компании Next-Generation Security Software. В 2006 году на конференции Black Hat Security Conference он показал, как повысить привилегии и прочитать физическую память, используя вредоносные процедуры, которые заменяли обычные функции ACPI, хранящиеся во флэш-памяти. [74]
Четвертый вирус BIOS был методом под названием «Постоянное заражение BIOS». Он появился в 2009 году на конференции по безопасности CanSecWest в Ванкувере и на конференции по безопасности SyScan в Сингапуре. Исследователи Анибал Сакко [75] и Альфредо Ортега из Core Security Technologies продемонстрировали, как вставить вредоносный код в процедуры распаковки в BIOS, что позволяет получить почти полный контроль над ПК при запуске, даже до загрузки операционной системы. Доказательство концепции не использует изъян в реализации BIOS, а включает только обычные процедуры перепрошивки BIOS. Таким образом, для этого требуется физический доступ к машине или пользователь должен быть root. Несмотря на эти требования, Ортега подчеркнул глубокие последствия своего и Сакко открытия: «Мы можем исправить драйвер, чтобы удалить полностью работающий руткит . У нас даже есть небольшой код, который может удалить или отключить антивирус». [76]
Mebromi — это троян , который атакует компьютеры с AwardBIOS , Microsoft Windows и антивирусным программным обеспечением от двух китайских компаний: Rising Antivirus и Jiangmin KV Antivirus. [77] [78] [79] Mebromi устанавливает руткит, который заражает главную загрузочную запись .
В интервью программе 60 Minutes в декабре 2013 года Дебора Планкетт, директор по обеспечению безопасности информации Агентства национальной безопасности США , заявила, что АНБ раскрыло и предотвратило возможную атаку BIOS со стороны иностранного государства, нацеленную на финансовую систему США. [80] Программа ссылалась на анонимные источники, утверждавшие, что это был китайский заговор. [80] Однако последующие статьи в The Guardian , [81] The Atlantic , [82] Wired [83] и The Register [84] опровергли заявления АНБ.
В более новых платформах Intel включена технология Intel Boot Guard (IBG), эта технология проверяет цифровую подпись BIOS при запуске, а открытый ключ IBG встроен в PCH . Конечные пользователи не могут отключить эту функцию.
Unified Extensible Firmware Interface (UEFI) дополняет BIOS во многих новых машинах. Первоначально написанный для архитектуры Intel Itanium , UEFI теперь доступен для платформ x86 и Arm ; разработка спецификации осуществляется Unified EFI Forum , специальной отраслевой группой интересов . Загрузка EFI поддерживалась только в версиях Microsoft Windows, поддерживающих GPT , [85] ядро Linux 2.6.1 и более поздние версии, а также macOS на компьютерах Mac на базе Intel . [86] По состоянию на 2014 год [обновлять]новое оборудование ПК в основном поставляется с прошивкой UEFI. Архитектура защиты от руткитов также может помешать системе запускать собственные изменения программного обеспечения пользователя, что делает UEFI спорным как устаревшую замену BIOS в сообществе открытого оборудования . Кроме того, Windows 11 требует UEFI для загрузки, [87] за исключением выпусков IoT Enterprise Windows 11. [10] UEFI требуется для устройств, поставляемых с Windows 8 [88] [89] и выше.
Другими альтернативами функциональности «Legacy BIOS» в мире x86 являются coreboot и libreboot .
Некоторые серверы и рабочие станции используют платформенно-независимую открытую прошивку (IEEE-1275), основанную на языке программирования Forth ; она включена в компьютеры SPARC компании Sun, линейку RS/6000 компании IBM и другие системы PowerPC , такие как материнские платы CHRP , а также OLPC XO-1 на базе x86 .
По крайней мере с 2015 года Apple удалила поддержку устаревшего BIOS из монитора UEFI в компьютерах Mac на базе Intel . Таким образом, утилита BIOS больше не поддерживает устаревший вариант и выводит сообщение «Legacy mode not supported on this system».
В 2017 году Intel объявила, что прекратит поддержку устаревшей версии BIOS к 2020 году. С 2019 года новые OEM-компьютеры на платформе Intel больше не поддерживают устаревшую версию BIOS. [90]
+0x1FE
в загрузочных секторах — 0x55 0xAA
, то есть 0x55
по смещению +0x1FE
и 0xAA
по смещению +0x1FF
. Поскольку в контексте совместимости с IBM PC необходимо предполагать представление little-endian , в программах для процессоров x86 это можно записать как 16-битное слово (обратите внимание на переставленный порядок), тогда как в программах для других архитектур ЦП это должно быть записано как представление big-endian . Поскольку это много раз путалось в книгах и даже в оригинальных справочных документах Microsoft, в этой статье используется представление на основе смещения побайтово на диске, чтобы избежать любой возможной неверной интерпретации.0xAA55
0x55AA
286 начинает выполнение в реальном режиме с инструкции в физическом месте FFFFF0H.
Выполнение начинается с инструкции, адресуемой начальным содержимым регистров CS и IP. Чтобы разрешить размещение программного обеспечения инициализации в ПЗУ в верхней части адресного пространства, устанавливаются старшие 12 бит адресов, выданных для сегмента кода, до первой инструкции, которая загружает регистр CS, такой как дальний переход или вызов. В результате выборка инструкций начинается с адреса 0FFFFFFF0H.
Первая инструкция, которая извлекается и выполняется после аппаратного сброса, находится по физическому адресу FFFFFFF0h. Этот адрес на 16 байт ниже самого верхнего физического адреса процессора. EPROM, содержащий код инициализации программного обеспечения, должен находиться по этому адресу.
{{cite web}}
: CS1 maint: архивная копия как заголовок ( ссылка )