stringtranslate.com

Основная загрузочная запись

Основная загрузочная запись ( MBR ) — это тип загрузочного сектора в первом блоке разделенных компьютерных запоминающих устройств, таких как фиксированные диски или съемные диски, предназначенные для использования с IBM PC-совместимыми системами и за их пределами. Концепция MBR была публично представлена ​​в 1983 году с PC DOS 2.0 .

MBR содержит информацию о том, как секторы диска (т. е. «блоки») делятся на разделы, каждый раздел предположительно содержит файловую систему. MBR также содержит исполняемый код, который выполняет функцию загрузчика для установленной операционной системы — обычно путем передачи управления на второй этап загрузчика или в сочетании с загрузочной записью тома (VBR) каждого раздела. Этот код MBR обычно называют загрузчиком.

Организация таблицы разделов в MBR ограничивает максимально адресуемое пространство хранения на разделе диска до 2  ТиБ (2 32  × 512 байт) . [1] Подходы к небольшому повышению этого предела с использованием 32-битной арифметики или 4096-байтовых секторов официально не поддерживаются, поскольку они фатально нарушают совместимость с существующими загрузчиками, большинством операционных систем, совместимых с MBR, и связанными с ними системными инструментами, а также могут вызвать серьезное повреждение данных при использовании вне узко контролируемых системных сред. Поэтому схема разбиения на основе MBR находится в процессе замены схемой таблицы разделов GUID (GPT) в новых компьютерах. GPT может сосуществовать с MBR, чтобы обеспечить некоторую ограниченную форму обратной совместимости для старых систем.

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

Обзор

Поддержка разделов носителей и, следовательно, главной загрузочной записи (MBR) была введена в IBM PC DOS 2.0 в марте 1983 года для поддержки жесткого диска объемом 10 МБ нового тогда IBM Personal Computer XT , все еще использующего файловую систему FAT12 . Первоначальная версия MBR была написана Дэвидом Литтоном из IBM в июне 1982 года. Таблица разделов поддерживала до четырех основных разделов . Это не изменилось, когда FAT16 была введена в качестве новой файловой системы с DOS 3.0. Поддержка расширенного раздела , специального типа основного раздела, используемого в качестве контейнера для хранения других разделов, была добавлена ​​в DOS 3.2, а вложенные логические диски внутри расширенного раздела появились в DOS 3.30. Поскольку MS-DOS, PC DOS, OS/2 и Windows никогда не могли загружаться с них, формат MBR и загрузочный код оставались практически неизменными по функциональности (за исключением некоторых сторонних реализаций) на протяжении всей эпохи DOS и OS/2 вплоть до 1996 года.

В 1996 году поддержка логической адресации блоков (LBA) была введена в Windows 95B и MS-DOS 7.10 (не путать с IBM PC-DOS 7.1) для поддержки дисков размером более 8 ГБ. Также были введены временные метки дисков . [2] Это также отражало идею о том, что MBR должна быть независимой от операционной системы и файловой системы. Однако это правило проектирования было частично нарушено в более поздних реализациях MBR от Microsoft, которые обеспечивают доступ CHS для типов разделов FAT16B и FAT32 0x06 / 0x0B , тогда как LBA используется для 0x0E / 0x0C .

Несмотря на иногда плохую документацию некоторых внутренних деталей формата MBR (что иногда вызывало проблемы совместимости), он был широко принят как фактический отраслевой стандарт из-за широкой популярности ПК-совместимых компьютеров и его полустатичной природы на протяжении десятилетий. Это было даже в той степени, что поддерживалось компьютерными операционными системами для других платформ. Иногда это было в дополнение к другим уже существующим или кроссплатформенным стандартам для начальной загрузки и разбиения на разделы. [3]

Однако записи разделов MBR и загрузочный код MBR, используемые в коммерческих операционных системах, ограничены 32 битами. [1] Таким образом, максимальный размер диска, поддерживаемый на дисках, использующих 512-байтовые сектора (реальные или эмулированные) схемой разбиения MBR (без 32-битной арифметики), ограничен 2 ТиБ. [1] Следовательно, для дисков большего размера необходимо использовать другую схему разбиения, поскольку они стали широко доступны с 2010 года. Таким образом, схема разбиения MBR находится в процессе замены таблицей разделов GUID (GPT). Официальный подход делает немного больше, чем просто обеспечивает целостность данных путем использования защитной MBR . В частности, он не обеспечивает обратную совместимость с операционными системами, которые также не поддерживают схему GPT. Между тем, несколько форм гибридных MBR были разработаны и реализованы третьими сторонами для того, чтобы поддерживать разделы, расположенные в первых физических 2 ТиБ диска в обеих схемах разбиения "параллельно" и/или позволить старым операционным системам также загружаться с разделов GPT. Текущая нестандартная природа этих решений вызывает различные проблемы совместимости в определенных сценариях.

MBR состоит из 512 или более байт, расположенных в первом секторе диска.

Он может содержать один или несколько из следующих элементов:

Разбиение диска на разделы

IBM PC DOS 2.0 представила FDISKутилиту для настройки и обслуживания разделов MBR. Когда запоминающее устройство разделено по этой схеме, его MBR содержит таблицу разделов, описывающую расположение, размеры и другие атрибуты линейных областей, называемых разделами.

Сами разделы могут также содержать данные для описания более сложных схем разбиения на разделы, таких как расширенные загрузочные записи (EBR), метки дисков BSD или разделы метаданных Logical Disk Manager . [8]

MBR не находится в разделе; он находится в первом секторе устройства (физическое смещение 0), предшествующем первому разделу. (Загрузочный сектор, присутствующий на не разбитом на разделы устройстве или внутри отдельного раздела, вместо этого называется загрузочной записью тома .) В случаях, когда на компьютере запущен оверлей DDO BIOS или менеджер загрузки , таблица разделов может быть перемещена в какое-либо другое физическое место на устройстве; например, Ontrack Disk Manager часто помещал копию исходного содержимого MBR во второй сектор, а затем скрывал себя от любой впоследствии загружаемой ОС или приложения, поэтому копия MBR рассматривалась так, как будто она все еще находилась в первом секторе.

Секторная компоновка

По соглашению, в схеме таблицы разделов MBR имеется ровно четыре первичных записи таблицы разделов, хотя некоторые операционные системы и системные инструменты расширяют это число до пяти (Advanced Active Partitions (AAP) с PTS-DOS 6.60 [9] и DR-DOS 7.07), восьми ( AST и NEC MS-DOS 3.x [10] [11], а также Storage Dimensions SpeedStor) или даже шестнадцати записей (с Ontrack Disk Manager ).

Записи таблицы разделов

Артефакт технологии жестких дисков эпохи PC XT , таблица разделов подразделяет носитель информации, используя единицы цилиндров , головок и секторов ( адресация CHS ). Эти значения больше не соответствуют своим тезкам в современных дисководах, а также не имеют значения в других устройствах, таких как твердотельные накопители , которые физически не имеют цилиндров или головок.

В схеме CHS индексы секторов (почти) всегда начинались с сектора 1, а не с сектора 0 по соглашению, и из-за ошибки во всех версиях MS-DOS/PC DOS вплоть до 7.10 количество головок, как правило, ограничено 255 [h] вместо 256. Когда адрес CHS слишком велик для размещения в этих полях, сегодня обычно используется кортеж (1023, 254, 63), хотя в старых системах и со старыми дисковыми инструментами значение цилиндра часто оборачивалось по модулю барьера CHS около 8 ГБ, что приводило к неоднозначности и риску повреждения данных. (Если ситуация подразумевает «защитную» MBR на диске с GPT, спецификация Intel Extensible Firmware Interface требует использования кортежа (1023, 255, 63).) 10-битное значение цилиндра записывается в два байта, чтобы облегчить вызовы исходных/устаревших процедур доступа к диску INT 13h BIOS, где 16 бит были разделены на части сектора и цилиндра, а не на границы байтов. [13]

Из-за ограничений адресации CHS [16] [17] был сделан переход к использованию LBA, или логической адресации блоков . Как длина раздела, так и начальный адрес раздела являются значениями сектора, хранящимися в записях таблицы разделов как 32-битные величины. Размер сектора раньше считался фиксированным и составлял 512 (2 9 ) байт, и широкий спектр важных компонентов, включая чипсеты , загрузочные секторы , операционные системы , движки баз данных , инструменты разбиения на разделы , утилиты резервного копирования и файловой системы и другое программное обеспечение, имели это значение жестко закодированным. С конца 2009 года стали доступны дисковые накопители, использующие секторы размером 4096 байт ( 4Kn или Advanced Format ), хотя размер сектора для некоторых из этих накопителей по-прежнему сообщался хост-системе как 512 байт посредством преобразования в прошивке жесткого диска и назывался дисками эмуляции 512 ( 512e ).

Поскольку адреса и размеры блоков хранятся в таблице разделов MBR с использованием 32 бит, максимальный размер, а также максимальный начальный адрес раздела, использующего диски с секторами по 512 байт (фактические или эмулированные), не могут превышать 2 ТиБ −512 байт (2 199 023 255 040 байт или4 294 967 295 (2 32 −1) секторов × 512 (2 9 ) байт на сектор). [1] Смягчение этого ограничения емкости было одной из главных причин разработки GPT.

Поскольку информация о разделах хранится в таблице разделов MBR с использованием начального адреса блока и длины, теоретически возможно определить разделы таким образом, чтобы выделенное пространство для диска с секторами размером 512 байт давало общий размер, приближающийся к 4 ТиБ, если все разделы, кроме одного, расположены ниже предела в 2 ТиБ, а последний назначен как начинающийся с блока 2 32 −1 или близко к нему, и указать размер до 2 32 −1, тем самым определяя раздел, которому требуется 33, а не 32 бита для доступа к адресу сектора. Однако на практике только некоторые операционные системы с поддержкой LBA-48 , включая Linux, FreeBSD и Windows 7 [18], которые используют 64-битные адреса секторов внутри, фактически поддерживают это. Из-за ограничений пространства кода и характера таблицы разделов MBR, поддерживающей только 32 бита, загрузочные секторы, даже если они включены для поддержки LBA-48, а не LBA-28 , часто используют 32-битные вычисления, если только они специально не разработаны для поддержки полного диапазона адресов LBA-48 или не предназначены для работы только на 64-битных платформах. Любой загрузочный код или операционная система, использующие 32-битные адреса секторов внутри, приведут к тому, что адреса будут переворачиваться при доступе к этому разделу и, таким образом, к серьезному повреждению данных во всех разделах.

Для дисков, которые представляют размер сектора, отличный от 512 байт, таких как внешние USB- накопители , также существуют ограничения. Размер сектора 4096 приводит к восьмикратному увеличению размера раздела, который может быть определен с помощью MBR, позволяя создавать разделы  размером до 16 ТиБ (2 32 × 4096 байт). [19] Версии Windows, более поздние, чем Windows XP, поддерживают большие размеры секторов, а также Mac OS X, и Linux поддерживает большие размеры секторов с 2.6.31 [20] или 2.6.32, [21] но проблемы с загрузчиками, инструментами разбиения на разделы и реализациями BIOS компьютера накладывают определенные ограничения, [22] поскольку они часто жестко запрограммированы на резервирование только 512 байт для буферов секторов, что приводит к перезаписи памяти для больших размеров секторов. Это также может вызвать непредсказуемое поведение, и поэтому его следует избегать, когда проблема совместимости и соответствия стандартам.

Если устройство хранения данных было разделено с использованием схемы GPT, основная загрузочная запись по-прежнему будет содержать таблицу разделов, но ее единственное назначение — указывать на существование GPT и не допускать создания служебными программами, которые понимают только схему таблицы разделов MBR, каких-либо разделов в том месте, которое они в противном случае рассматривали бы как свободное пространство на диске, тем самым случайно стирая GPT.

Самозагрузка системы

На компьютерах, совместимых с IBM PC , загрузочная прошивка (содержащаяся в ROM BIOS ) загружает и выполняет главную загрузочную запись. [23] PC /XT (тип 5160) использовал микропроцессор Intel 8088. Чтобы оставаться совместимыми, все системы архитектуры x86 BIOS запускаются с микропроцессором в рабочем режиме , называемом реальным режимом . BIOS считывает MBR с устройства хранения в физическую память , а затем направляет микропроцессор к началу загрузочного кода. BIOS переключит процессор в реальный режим, затем начнет выполнять программу MBR, и поэтому начало MBR, как ожидается, будет содержать машинный код реального режима . [23]

Поскольку процедура загрузки BIOS загружает и запускает ровно один сектор с физического диска, наличие таблицы разделов в MBR с загрузочным кодом упрощает проектирование программы MBR. Она содержит небольшую программу, которая загружает Volume Boot Record (VBR) целевого раздела. Затем управление передается этому коду, который отвечает за загрузку фактической операционной системы. Этот процесс известен как цепная загрузка .

Популярные программы кода MBR были созданы для загрузки PC DOS и MS-DOS , и похожий загрузочный код по-прежнему широко используется. Эти загрузочные секторы ожидают, что FDISKсхема таблицы разделов используется, и сканируют список разделов во встроенной таблице разделов MBR, чтобы найти единственный, который отмечен активным флагом . [24] Затем он загружает и запускает загрузочную запись тома (VBR) активного раздела.

Существуют альтернативные реализации загрузочного кода, некоторые из которых устанавливаются менеджерами загрузки , которые работают различными способами. Некоторый код MBR загружает дополнительный код для менеджера загрузки с первой дорожки диска, которую он считает «свободным» пространством, не выделенным ни для одного раздела диска, и выполняет его. Программа MBR может взаимодействовать с пользователем, чтобы определить, какой раздел на каком диске должен загружаться, и может передавать управление MBR другого диска. Другой код MBR содержит список расположений на диске (часто соответствующих содержимому файлов в файловой системе ) оставшейся части кода менеджера загрузки для загрузки и выполнения. (Первый основан на поведении, которое не является универсальным для всех утилит разбиения диска, особенно тех, которые считывают и записывают GPT. Последний требует, чтобы встроенный список расположений на диске обновлялся при внесении изменений, которые переместят оставшуюся часть кода.)

На машинах, не использующих процессоры x86 , или на машинах x86 с прошивкой, отличной от BIOS, такой как прошивка Open Firmware или Extensible Firmware Interface (EFI), эта конструкция не подходит, и MBR не используется как часть загрузки системы. [25] Вместо этого прошивка EFI способна напрямую понимать схему разделов GPT и формат файловой системы FAT , а также загружает и запускает программы, хранящиеся в виде файлов в системном разделе EFI . [26] MBR будет задействована только в той мере, в какой она может содержать таблицу разделов для целей совместимости, если использовалась схема таблицы разделов GPT.

Существует некоторый код замены MBR, который эмулирует начальную загрузку прошивки EFI, что позволяет машинам без EFI загружаться с дисков с использованием схемы разбиения GPT. Он обнаруживает GPT, переводит процессор в правильный режим работы и загружает совместимый с EFI код с диска для выполнения этой задачи.

Идентификация диска

Информация, содержащаяся в таблице разделов внешнего жесткого диска, как она отображается в служебной программе QtParted , работающей под управлением Linux (с KDE)

В дополнение к коду начальной загрузки и таблице разделов главные загрузочные записи могут содержать подпись диска. Это 32-битное значение, которое предназначено для уникальной идентификации дискового носителя (в отличие от дискового устройства — эти два не обязательно одинаковы для съемных жестких дисков).

Подпись диска была введена в Windows NT версии 3.5, но теперь она используется несколькими операционными системами, включая ядро ​​Linux версии 2.6 и более поздних. Инструменты Linux могут использовать подпись диска NT, чтобы определить, с какого диска загрузилась машина. [27]

Windows NT (и более поздние операционные системы Microsoft) используют подпись диска в качестве индекса для всех разделов на любом диске, когда-либо подключенном к компьютеру под этой ОС; эти подписи хранятся в ключах реестра Windows , в первую очередь для хранения постоянных сопоставлений между разделами диска и буквами дисков. Он также может использоваться в файлах Windows NT BOOT.INI (хотя большинство этого не делает) для описания расположения загрузочных разделов Windows NT (или более поздних версий). [28] Один ключ (из многих), где подписи дисков NT появляются в реестре Windows 2000/XP, это:

HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\

Если сигнатура диска, сохраненная в MBR, имеет вид A8 E1 B9 D2 (именно в таком порядке), а его первый раздел соответствует логическому диску C: в Windows, то данные под значением ключа будут следующими:REG_BINARY\DosDevices\C:

A8 E1 B9 D2 00 7E 00 00 00 00 00 00

Первые четыре байта называются сигнатурой диска. (В других ключах эти байты могут появляться в обратном порядке от того, что находится в секторе MBR.) За ними следуют еще восемь байтов, образуя 64-битное целое число в нотации little-endian , которые используются для определения смещения байта этого раздела. В этом случае 00 7E соответствует шестнадцатеричному значению 0x7E00 (32 256 ). Если предположить, что рассматриваемый диск сообщает размер сектора 512 байт, то деление этого смещения байтов на 512 дает 63, что является физическим номером сектора (или LBA), содержащего первый сектор раздела (в отличие от количества секторов, используемого в значении секторов кортежей CHS, которое отсчитывается с единицы , абсолютное или LBA значение сектора начинается с нуля ).

Если бы на этом диске был другой раздел со значениями 00 F8 93 71 02, следующим за сигнатурой диска (например, под значением ключа ), он бы начинался со смещения байта 0x00027193F800 (\DosDevices\D:10,495,457,280 ), который также является первым байтом физического сектора20,498,940 .

Начиная с Windows Vista , подпись диска также хранится в хранилище данных конфигурации загрузки (BCD), и процесс загрузки зависит от нее. [29] Если подпись диска изменяется, не может быть найдена или имеет конфликт, Windows не сможет загрузиться. [30] Если Windows не вынуждена использовать перекрывающуюся часть адреса LBA записи расширенного активного раздела в качестве псевдоподписи диска, использование Windows конфликтует с функцией расширенного активного раздела PTS-DOS 7 и DR-DOS 7.07, в частности, если их загрузочный код расположен за пределами первых 8 ГБ диска, поэтому необходимо использовать адресацию LBA.

Соображения по программированию

MBR возникла в PC XT . [31] IBM PC-совместимые компьютеры имеют порядок байтов little-endian , что означает, что процессор хранит числовые значения, охватывающие два или более байта в памяти, начиная с наименее значимого байта . Формат MBR на носителе отражает это соглашение. Таким образом, сигнатура MBR будет отображаться в дисковом редакторе как последовательность 55 AA. [a]

Последовательность начальной загрузки в BIOS загрузит первую допустимую MBR, которую она найдет, в физическую память компьютера по адресу от 0x7C00 до 0x7FFF . [31] Последняя инструкция, выполненная в коде BIOS, будет «прыжком» на этот адрес, чтобы направить выполнение в начало копии MBR. Основной проверкой для большинства BIOS является подпись по смещению 0x01FE , хотя разработчик BIOS может включить другие проверки, такие как проверка того, что MBR содержит допустимую таблицу разделов без записей, ссылающихся на сектора за пределами указанной емкости диска.

Для BIOS съемные (например, дискеты) и фиксированные диски по сути одинаковы. В любом случае BIOS считывает первый физический сектор носителя в ОЗУ по абсолютному адресу 0x7C00 , проверяет сигнатуру в последних двух байтах загруженного сектора, а затем, если найдена правильная сигнатура, передает управление первому байту сектора с помощью инструкции перехода (JMP). Единственное реальное различие, которое делает BIOS, заключается в том, что (по умолчанию или если порядок загрузки не настраивается) он пытается загрузиться с первого съемного диска, прежде чем пытаться загрузиться с первого фиксированного диска. С точки зрения BIOS действие MBR, загружающего загрузочную запись тома в ОЗУ, точно такое же, как действие загрузочной записи тома дискеты, загружающей объектный код загрузчика операционной системы в ОЗУ. В любом случае программа, которую загрузил BIOS, выполняет работу по цепочке загрузки операционной системы.

В то время как код загрузочного сектора MBR ожидает загрузки по физическому адресу 0x0000 : 0x7C00 , [i] вся память от физического адреса 0x0000 : 0x0501 (адрес 0x0000 : 0x0500 — последний, используемый Phoenix BIOS) [13] до 0x0000 : 0x7FFF , [31] позже ослабленная до 0x0000 : 0xFFFF [32] (а иногда [j] до 0x9000 : 0xFFFF ) — конец первых 640 КБ — доступна в реальном режиме. [k] Вызов прерывания BIOS может помочь определить, какой объем памяти может быть безопасно выделен (по умолчанию он просто считывает базовый размер памяти в КБ из сегмента : смещение по адресу 0x0040 : 0x0013 , но его может перехватить другое резидентное предзагрузочное программное обеспечение, такое как оверлеи BIOS, код RPL или вирусы, чтобы уменьшить сообщаемый объем доступной памяти, чтобы не допустить их перезаписи другим программным обеспечением этапа загрузки, таким как загрузочные секторы).INT 12h

Последние 66 байт из 512-байтовой MBR зарезервированы для таблицы разделов и другой информации, поэтому программа загрузочного сектора MBR должна быть достаточно маленькой, чтобы поместиться в 446 байт памяти или меньше.

Код MBR проверяет таблицу разделов, выбирает подходящий раздел и загружает программу, которая выполнит следующий этап процесса загрузки, обычно с помощью вызовов BIOS INT 13h . Код начальной загрузки MBR загружает и запускает (зависящий от загрузчика или операционной системы) код загрузочной записи тома , который расположен в начале «активного» раздела. Загрузочная запись тома уместится в секторе размером 512 байт, но код MBR может безопасно загружать дополнительные секторы для размещения загрузчиков длиной более одного сектора, при условии, что они не делают никаких предположений о размере сектора. Фактически, по адресу 0x7C00 в каждой машине IBM XT и AT-класса доступно не менее 1 КБ ОЗУ, поэтому сектор размером 1 КБ можно использовать без проблем. Как и MBR, загрузочная запись тома обычно ожидает загрузки по адресу 0x0000 : 0x7C00 . Это вытекает из того факта, что конструкция загрузочной записи тома возникла на неразмеченных носителях, где загрузочная запись тома будет напрямую загружена процедурой загрузки BIOS; как упоминалось выше, BIOS обрабатывает MBR и загрузочные записи тома (VBR) [l] совершенно одинаково. Поскольку это то же самое место, куда загружается MBR, одной из первых задач MBR является перемещение себя в другое место памяти. Адрес перемещения определяется MBR, но чаще всего это 0x0000 : 0x0600 (для кода MS-DOS/PC DOS, OS/2 и Windows MBR) или 0x0060 : 0x0000 (большинство MBR DR-DOS). (Хотя оба этих сегментированных адреса разрешаются в один и тот же адрес физической памяти в реальном режиме, для загрузки Apple Darwin MBR необходимо переместить в 0x0000 : 0x0600 вместо 0x0060 : 0x0000 , поскольку код зависит от указателя DS:SI на запись раздела, предоставленную MBR, но он ошибочно ссылается на нее только через 0x0000 :SI. [33] ) Важно не переходить на другие адреса в памяти, поскольку многие VBR будут предполагать определенную стандартную структуру памяти при загрузке своего загрузочного файла.

Поле Status в записи таблицы разделов используется для указания активного раздела. Стандартные MBR допускают только один раздел, помеченный как активный, и используют это как часть проверки работоспособности для определения наличия допустимой таблицы разделов. Они отображают сообщение об ошибке, если более одного раздела помечены как активные. Некоторые нестандартные MBR не будут считать это состоянием ошибки и просто использовать первый помеченный раздел в строке.

Традиционно значения, отличные от 0x00 (неактивный) и 0x80 (активный), были недействительными, и программа загрузки отображала сообщение об ошибке при их обнаружении. Однако спецификации Plug and Play BIOS и BIOS Boot Specification (BBS) позволили другим устройствам стать загрузочными с 1994 года. [32] [34] Следовательно, с появлением MS-DOS 7.10 (Windows 95B) и выше, MBR начал обрабатывать установленный бит 7 как активный флаг и показывал сообщение об ошибке только для значений 0x01 .. 0x7F . Он продолжал обрабатывать запись как физическое устройство диска, которое будет использоваться при загрузке VBR соответствующего раздела позже, тем самым теперь также принимая другие загрузочные диски, отличные от 0x80 , как допустимые, однако MS-DOS сам по себе не использовал это расширение. Сохранение фактического номера физического диска в таблице разделов обычно не вызывает проблем с обратной совместимостью, поскольку значение будет отличаться от 0x80 только на дисках, отличных от первого (которые в любом случае не были загрузочными ранее). Однако даже в системах, в которых включена загрузка с других дисков, расширение может по-прежнему работать не универсально, например, после того, как назначение физических дисков в BIOS изменилось при удалении, добавлении или замене дисков. Поэтому, согласно спецификации загрузки BIOS (BBS), [32] для современной MBR, принимающей бит 7 в качестве активного флага, лучше всего передавать значение DL, изначально предоставленное BIOS, вместо использования записи в таблице разделов.

Интерфейс BIOS-MBR

MBR загружается в ячейку памяти 0x0000 : 0x7C00 и со следующими регистрами ЦП , настроенными, когда предыдущий загрузчик (обычно IPL в BIOS) передает ему выполнение, переходя к ячейке 0x0000 : 0x7C00 в реальном режиме ЦП .

Некоторые BIOS Compaq ошибочно используют вместо этого 0x07C0 : 0x0000 . Хотя это разрешается в то же место в памяти реального режима, это нестандартно и его следует избегать, поскольку код MBR, предполагающий определенные значения регистров или не записанный как перемещаемый, может не работать в противном случае.
DL поддерживается BIOS от IBM, а также большинством других BIOS. Известно, что BIOS Toshiba T1000 не поддерживает его должным образом, а некоторые старые BIOS Wyse 286 используют значения DL, большие или равные 2, для фиксированных дисков (тем самым отражая логические номера дисков в DOS, а не физические номера дисков в BIOS). USB-накопители, настроенные как съемные диски, обычно получают назначение DL = 0x80 , 0x81 и т. д. Однако некоторые редкие BIOS ошибочно представляли их как DL = 0x01 , как если бы они были настроены как супердискеты.
Стандартный совместимый BIOS назначает числа, большие или равные 0x80, исключительно фиксированным дискам / съемным накопителям, и традиционно только значения 0x80 и 0x00 передавались в качестве физических дисковых единиц во время загрузки. По соглашению, только фиксированные диски / съемные накопители разбиваются на разделы, поэтому единственное значение DL, которое MBR мог видеть традиционно, было 0x80 . Многие MBR были закодированы так, чтобы игнорировать значение DL и работать с жестко заданным значением (обычно 0x80 ), в любом случае.
Спецификация Plug and Play BIOS и спецификация загрузки BIOS (BBS) позволяют другим устройствам становиться загрузочными с 1994 года. [32] [34] Последняя рекомендует, чтобы код MBR и VBR использовал DL, а не внутренне запрограммированные значения по умолчанию. [32] Это также обеспечит совместимость с различными нестандартными назначениями (см. примеры выше), что касается кода MBR.
Загрузочные CD-ROM, соответствующие спецификации El Torito , могут содержать образы дисков, смонтированные BIOS для работы в качестве дискет или супердискет на этом интерфейсе. Значения DL 0x00 и 0x01 также могут использоваться службами расширения интерфейса времени выполнения защищенной области (PARTIES) и расширениями BIOS Trusted Computing Group (TCG) в доверенном режиме для доступа к невидимым разделам PARTIES, файлам образов дисков, размещенным через Boot Engineering Extension Record (BEER) в последнем физическом секторе Host Protected Area (HPA) жесткого диска . Хотя код MBR предназначен для эмуляции дискет или супердискет, он принимает эти нестандартные значения DL, что позволяет использовать образы разделенных носителей по крайней мере на этапе загрузки операционных систем.

Системы с поддержкой Plug-and-Play BIOS или BBS будут предоставлять указатель на данные PnP в дополнение к DL: [32] [34]

Эта информация позволяет загрузчику в MBR (или VBR, если он передан) активно взаимодействовать с BIOS или резидентным оверлеем PnP / BBS BIOS в памяти для настройки порядка загрузки и т. д., однако эта информация игнорируется большинством стандартных MBR и VBR. В идеале ES:DI передается в VBR для последующего использования загруженной операционной системой, но операционные системы с поддержкой PnP обычно также имеют резервные методы для получения точки входа PnP BIOS позже, так что большинство операционных систем не полагаются на это.

Интерфейс MBR-VBR

По соглашению, стандартный совместимый MBR передает выполнение успешно загруженному VBR, загруженному в ячейку памяти 0x0000 : 0x7C00 , путем перехода к 0x0000 : 0x7C00 в реальном режиме ЦП со следующими поддерживаемыми или специально настроенными регистрами:

MS-DOS 2.0–7.0 / PC DOS 2.0–6.3 MBR не передают значение DL, полученное при входе, а вместо этого используют запись статуса загрузки в записи таблицы разделов выбранного основного раздела в качестве физического загрузочного диска. Поскольку в большинстве таблиц разделов MBR это, по соглашению, 0x80 , это ничего не изменит, если BIOS не попытается загрузиться с физического устройства, отличного от первого фиксированного диска / съемного диска в строке. Это также является причиной того, что эти операционные системы не могут загрузиться со второго жесткого диска и т. д. Некоторые инструменты FDISK также позволяют помечать разделы на вторичных дисках как «активные». В этой ситуации, зная, что эти операционные системы в любом случае не могут загрузиться с других дисков, некоторые из них продолжают использовать традиционное фиксированное значение 0x80 в качестве активного маркера, тогда как другие используют значения, соответствующие текущему назначенному физическому диску ( 0x81 , 0x82 ), тем самым позволяя загрузку с других дисков, по крайней мере, теоретически. Фактически, это будет работать со многими кодами MBR, которые принимают установленный бит 7 записи состояния загрузки как активный флаг, а не настаивают на 0x80 , однако, MS-DOS/PC DOS MBR жестко запрограммированы на принятие только фиксированного значения 0x80 . Сохранение фактического номера физического диска в таблице разделов также вызовет проблемы, когда назначение физических дисков в BIOS изменяется, например, когда диски удаляются, добавляются или меняются местами. Поэтому для обычного MBR, принимающего бит 7 как активный флаг и в противном случае просто использующего и передающего в VBR значение DL, изначально предоставленное BIOS, обеспечивает максимальную гибкость. MS-DOS 7.1–8.0 MBR изменились, чтобы рассматривать бит 7 как активный флаг, а любые значения 0x01 .. 0x7F как недействительные, но они по-прежнему берут физический диск из таблицы разделов, а не используют значение DL, предоставленное BIOS. Расширенные MBR DR-DOS 7.07 рассматривают бит 7 как активный флаг и используют и передают значение BIOS DL по умолчанию (включая нестандартные значения 0x00 .. 0x01 , используемые некоторыми BIOS также для разделенных носителей), но они также предоставляют специальный блок конфигурации NEWLDR для поддержки альтернативных методов загрузки в сочетании с LOADER и REAL/32, а также для изменения подробного поведения MBR, так что он также может работать со значениями дисков, извлеченными из таблицы разделов (важно в сочетании с LOADER и AAP, см. смещение NEWLDR ), преобразовывать нестандартные единицы дисков Wyse 0x02 .. 0x7F в 0x80 .. 0xFD и, при необходимости, исправлять значение диска (хранящееся по смещению в расширенном блоке параметров BIOS (EBPB) или по смещению сектора0x000C0x0190x01FD) в загруженных VBR перед передачей им выполнения (см. смещение NEWLDR 0x0014) — это также позволяет другим загрузчикам использовать NEWLDR в качестве цепочечного загрузчика, настраивать его образ в памяти «на лету» и «туннелировать» загрузку VBR, EBR или AAP через NEWLDR.

Во многих реализациях код MBR передает дополнительную информацию в VBR:

В DR-DOS 7.07 расширенный интерфейс может быть опционально предоставлен расширенной MBR и в сочетании с LOADER:

В сочетании с GPT предложение Enhanced Disk Drive Specification (EDD) 4 Hybrid MBR рекомендует еще одно расширение интерфейса: [37]

Поскольку старые операционные системы (включая их VBR) не поддерживают это расширение и не могут обращаться к секторам за пределами барьера 2 ТиБ, гибридный загрузчик с поддержкой GPT все равно должен эмулировать 16-байтовую фиктивную запись таблицы разделов MBR, если загрузочный раздел расположен в пределах первых 2 ТиБ. [n]

Редактирование и замена содержимого

Хотя можно манипулировать байтами в секторе MBR напрямую с помощью различных дисковых редакторов , существуют инструменты для записи фиксированных наборов функционирующего кода в MBR. Начиная с MS-DOS 5.0, программа FDISKвключает переключатель /MBR, который перезаписывает код MBR. [38] В Windows 2000 и Windows XP консоль восстановления может использоваться для записи нового кода MBR на устройство хранения с помощью ее fixmbrкоманды. В Windows Vista и Windows 7 среда восстановления может использоваться для записи нового кода MBR с помощью BOOTREC /FIXMBRкоманды. Некоторые сторонние утилиты также могут использоваться для прямого редактирования содержимого таблиц разделов (без необходимости знания шестнадцатеричных или редакторов дисков/секторов), например MBRWizard . [o]

dd— это команда POSIX, обычно используемая для чтения или записи в любое место на устройстве хранения данных, включая MBR. В Linux ms-sys может использоваться для установки Windows MBR. Проекты GRUB и LILO имеют инструменты для записи кода в сектор MBR, а именно grub-installи lilo -mbr. Интерактивная консоль GRUB Legacy может записывать в MBR, используя команды setupи embed, но GRUB2 в настоящее время требует grub-installзапуска из операционной системы.

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

Linux sfdisk(на SystemRescueCD ) может сохранять резервную копию первичной и расширенной таблицы разделов. Он создает файл, который можно прочитать в текстовом редакторе, или этот файл может использоваться sfdisk для восстановления первичной/расширенной таблицы разделов. Пример команды для резервного копирования таблицы разделов — , sfdisk -d /dev/hda > hda.outа для восстановления — sfdisk /dev/hda < hda.out. Таким образом можно скопировать таблицу разделов с одного диска на другой, что полезно для настройки зеркалирования, но sfdisk выполняет команду без подсказок/предупреждений с помощью sfdisk -d /dev/sda | sfdisk /dev/sdb. [39]

Смотрите также

Примечания

  1. ^ abcdefg Сигнатура по смещению 0x01FE в загрузочных секторах равна , то есть 0x55 по смещению 0x01FE и по смещению 0x01FF . Поскольку в контексте совместимых с IBM PC машин необходимо предполагать представление little-endian , в программах для процессоров x86 это можно записать как 16-битное слово (обратите внимание на поменянный порядок), тогда как в программах для других архитектур ЦП это должно быть записано как big-endian представление. Поскольку это много раз путалось в книгах и даже в оригинальных справочных документах Microsoft, в этой статье используется представление на основе смещения побайтово на диске, чтобы избежать любой возможной неверной интерпретации.55hex AAhexAAhexAA55hex55AAhex
  2. ^ Для обеспечения целостности кода загрузчика MBR важно, чтобы байты с 0x00DA по 0x00DF никогда не изменялись, если только все шесть байтов не представляют значение 0 или весь код загрузчика MBR (за исключением (расширенной) таблицы разделов) не заменяется одновременно. Это включает сброс этих значений до тех пор, пока не будет известен код, хранящийся в MBR. Windows придерживается этого правила.00 00 00 00 00 00hex
  3. ^ Первоначально значения статуса, отличные от 0x00 и 0x80, были недействительными, но современные MBR рассматривают бит 7 как активный флаг и используют эту запись для хранения физического загрузочного модуля.
  4. ^ ab Начальные поля секторов ограничены 1023+1 цилиндрами, 255+1 головками и 63 секторами; конечные поля секторов имеют те же ограничения.
  5. ^ abcde Диапазон для сектора — от 1 до 63; диапазон для цилиндра — от 0 до 1023; диапазон для головки — от 0 до 255 включительно. [13]
  6. ^ Эта запись используется операционными системами в определенных обстоятельствах; в таких случаях адреса CHS игнорируются. [15]
  7. ^ Ноль зарезервирован и не должен использоваться в обычных записях раздела. Эта запись используется операционными системами в определенных обстоятельствах; в таких случаях адреса CHS игнорируются. [15]
  8. ^ "Цитата: [Большинство] версий MS-DOS (включая MS-DOS 7 [Windows 95]) имеют ошибку, которая не позволяет загружаться с жестких дисков с 256 головками (FFh), поэтому многие современные BIOS предоставляют сопоставления максимум с 255 головками (FEh)". RBIL [40] [41]
  9. ^ Адрес : — первый байт 32-го КБ ОЗУ. Загрузка программы загрузки по этому адресу исторически была причиной того, что, хотя минимальный размер ОЗУ оригинального IBM PC (тип 5150) составлял 16 КБ, для опции диска в IBM XT требовалось 32 КБ.0000hex7C00hex
  10. ^ Если есть EBDA, доступная память заканчивается под ним.
  11. ^ Очень старые машины могут иметь менее 640 КБ ( или 655 360 байт) памяти. Теоретически гарантированно существует только 32 КБ (до : ) или 64 КБ (до : ); это будет иметь место на машине класса IBM XT, оснащенной только необходимым минимальным объемом памяти для дисковой системы.A0000hex0000hex7FFFhex0000hexFFFFhex
  12. ^ Это применимо, когда BIOS обрабатывает VBR, то есть когда он находится в первом физическом секторе неразмеченного носителя. В противном случае BIOS не имеет никакого отношения к VBR. Конструкция VBR такова, что VBR возникли исключительно на неразмеченных дискетах — изначально у IBM PC 5150 не было опции жесткого диска — и система разбиения на разделы с использованием MBR была позже разработана как адаптация для размещения более одного тома, каждый из которых начинался со своего собственного VBR, как уже определено, на одном фиксированном диске. Благодаря этой конструкции MBR по сути эмулирует процедуру загрузки BIOS, выполняя те же действия, которые BIOS выполнял бы для обработки этого VBR и настройки для него начальной операционной среды, как если бы BIOS нашел этот VBR на неразмеченном носителе.
  13. ^ IP устанавливается в результате перехода. CS может быть установлен в 0 либо путем выполнения дальнего перехода, либо путем явной загрузки значения регистра перед выполнением ближнего перехода. (Для кода, перешедшего на x86, невозможно определить, использовался ли для его достижения ближний или дальний переход [если только код, выполнивший переход, отдельно не передаст эту информацию каким-либо образом].)
  14. ^ Это не является частью вышеупомянутого предложения, а является естественным следствием ранее существовавших условий.
  15. ^ Например, редактор таблиц разделов PowerQuest (PTEDIT32.EXE), работающий под управлением операционных систем Windows, по-прежнему доступен здесь: FTP-сайт Symantec.

Ссылки

  1. ^ abcd "Поддержка Windows жестких дисков объемом более 2 ТБ". 1. Microsoft . 2013-06-26. 2581408. Архивировано из оригинала 2017-04-27 . Получено 2013-08-28 .
  2. ^ abc Sedory, Daniel B. (2004). "The Mystery Bytes (or the Drive/Timestamp Bytes) of the MS-Windows 95B, 98, 98SE and Me Master Boot Record (MBR)". Главные загрузочные записи . thestarman.pcministry.com. Архивировано из оригинала 24-08-2017 . Получено 25-08-2012 .
  3. ^ Лукас, Майкл (2003). Абсолютная OpenBSD: Unix для практичных параноиков. стр. 73. ISBN 9781886411999. Получено 2011-04-09 . Каждая операционная система включает в себя инструменты для управления разделами MBR. К сожалению, каждая операционная система обрабатывает разделы MBR немного по-разному.
  4. ^ Нортон, Питер ; Кларк, Скотт (2002). Питер Нортон «Новое внутри ПК». Sams Publishing . С. 360–361. ISBN 0-672-32289-7.
  5. ^ Грейвс, Майкл В. (2004). Руководство A+ по обслуживанию и ремонту оборудования ПК . Томсон Делмар. стр. 276. ISBN 1-4018-5230-0.
  6. ^ Эндрюс, Джин (2003). Модернизация и ремонт с Джин Эндрюс. Курс Thomson Technology. стр. 646. ISBN 1-59200-112-2.
  7. ^ Босвелл, Уильям (2003). Внутри Windows Server 2003. Addison -Wesley Professional . стр. 13. ISBN 0-7357-1158-5.
  8. ^ Смит, Родерик В. (2000). Справочник по конфигурации мультизагрузки. Que Publishing . С. 260–261. ISBN 0-7897-2283-6.
  9. ^ Брауэр, Андрис Эверт (2004-04-22) [2000]. "Свойства таблиц разделов". Типы разделов . Архивировано из оригинала 2017-08-24 . Получено 2017-08-24 . Маттиас [Р.] Пол пишет: "[…] PTS-DOS [использует] специальную пятую запись раздела перед другими четырьмя записями в MBR и соответствующий код начальной загрузки MBR с поддержкой AAP. […]"
  10. ^ Брауэр, Андрис Эверт (2004-04-22) [2000]. "Свойства таблиц разделов". Типы разделов . Архивировано из оригинала 2017-08-24 . Получено 2017-08-24 . Некоторые OEM-системы, такие как AST DOS (тип ) и NEC DOS (тип ), имели 8 вместо 4 записей разделов в своих секторах MBR. (Маттиас Р. Пол).14hex24hex(Примечание. Таблицы разделов NEC MS-DOS 3.30 и AST MS-DOS с восемью записями предваряются сигнатурой по смещению 0x017C .)A55Ahex
  11. ^ Sedory, Daniel B. (2007-05-18) [2003]. "Notes on the Differences in one OEM version of the DOS 3.30 MBR". Основные загрузочные записи . Архивировано из оригинала 2017-08-24 . Получено 2017-08-24 . Когда мы добавляли разделы в эту таблицу NEC, первый был помещен по смещениям от 0x01EE до 0x01FD , а следующая запись была добавлена ​​прямо над ним. Таким образом, записи вставляются и перечисляются в обратном порядке от обычной таблицы. Таким образом, если посмотреть на такую ​​таблицу с помощью редактора дисков или утилиты листинга разделов, она покажет первую запись в таблице NEC из восьми записей как последнюю (четвертую запись) в обычной таблице разделов.(Примечание. Показывает таблицу разделов из 8 записей и то, чем ее загрузочный код отличается от MS-DOS 3.30.)
  12. ^ "Таблица разделов". osdev.org. 2017-03-18 [2007-03-06]. Архивировано из оригинала 2017-08-24 . Получено 2017-08-24 .
  13. ^ abc System BIOS для компьютеров IBM PC/XT/AT и совместимых с ними . Технический справочник Phoenix . Addison-Wesley . 1989. ISBN 0-201-51806-6.
  14. ^ Брауэр, Андрис Эверт (2013) [1995]. "Список идентификаторов разделов для ПК". Типы разделов . Архивировано из оригинала 2017-08-24 . Получено 2017-08-24 .
  15. ^ ab Wood, Sybil (2002). Руководство по эксплуатации Microsoft Windows 2000 Server. Microsoft Press . стр. 18. ISBN 978-0-73561796-4.
  16. ^ "Введение в геометрию жесткого диска". Tech Juice . 2012-12-06 [2011-08-08]. Архивировано из оригинала 2013-02-04.
  17. ^ Kozierok, Charles M. (2001-04-17). "BIOS и жесткий диск". The PC Guide . Архивировано из оригинала 2017-06-17 . Получено 2013-04-19 .
  18. ^ Смит, Роберт (2011-06-26). "Обход ограничений MBR". Учебник по GPT fdisk . Архивировано из оригинала 2017-08-24 . Получено 2013-04-20 .
  19. ^ "Более 2 ТиБ на диске MBR". superuser.com. 2013-03-07. Архивировано из оригинала 2017-08-24 . Получено 2013-10-22 .
  20. ^ "Переход на жесткие диски с секторами 4K Advanced Format". Tech Insight . Seagate Technology . 2012. Архивировано из оригинала 24-08-2017 . Получено 19-04-2013 .
  21. ^ Calvert, Kelvin (2011-03-16). "Жесткие диски большой емкости WD AV‐GP" (PDF) . Western Digital . Получено 20 апреля 2013 г. .
  22. ^ Смит, Родерик В. (2010-04-27). "Linux на дисках с секторами 4 КБ: практические советы". DeveloperWorks . IBM . Архивировано из оригинала 2017-08-24 . Получено 2013-04-19 .
  23. ^ ab "MBR (x86)". OSDev Wiki . OSDev.org. 2012-03-05. Архивировано из оригинала 2017-08-24 . Получено 2013-04-20 .
  24. ^ Sedory, Daniel B. (2003-07-30). "IBM DOS 2.00 Master Boot Record". The Starman's Realm. Архивировано из оригинала 2017-08-24 . Получено 2011-07-22 .
  25. ^ Сингх, Амит (2009-12-25) [Декабрь 2003]. "Загрузка Mac OS X". Mac OS X Internals: The Book . Получено 2011-07-22 .
  26. ^ de Boyne Pollard, Jonathan (2011-07-10). "Процесс загрузки EFI". Часто задаваемые ответы . Архивировано из оригинала 2017-08-24 . Получено 2011-07-22 .
  27. ^ Домш, Мэтт (2005-03-22) [2003-12-19]. "Re: RFC 2.6.0 EDD enhancements". Linux Kernel Mailing List . Архивировано из оригинала 2017-08-24 . Получено 2017-08-24 .
  28. ^ "Windows может использовать синтаксис Signature() в файле BOOT.INI". KnowledgeBase . Microsoft .
  29. ^ McTavish (февраль 2014). "Vista's MBR Disk Signature". Мультизагрузчики: двойная и мультизагрузка с Vista . Архивировано из оригинала 2017-08-24 . Получено 2017-08-24 .
  30. ^ Руссинович, Марк (2011-11-08). "Исправление конфликтов подписей дисков". Блог Марка Руссиновича . Microsoft . Архивировано из оригинала 2017-08-24 . Получено 2013-04-19 .
  31. ^ abc Сакамото, Масахико (2010-05-13). "Почему BIOS загружает MBR в 0x7C00 в x86?". Glamenv-Septzen.net. Архивировано из оригинала 2017-08-24 . Получено 2011-05-04 .
  32. ^ abcdef Compaq Computer Corporation ; Phoenix Technologies Ltd. ; Intel Corporation (11.01.1996). "BIOS Boot Specification 1.01" (PDF) . 1.01. ACPICA. Архивировано (PDF) из оригинала 2017-08-24 . Получено 2013-04-20 .[1]
  33. ^ ab Elliott, David F. (2009-10-12). "Почему "стандартный" MBR устанавливает SI?". tgwbd.org . Архивировано из оригинала 2017-08-24 . Получено 2013-04-20 .
  34. ^ abc Compaq Computer Corporation ; Phoenix Technologies Ltd. ; Intel Corporation (1994-05-05). "Спецификация Plug and Play BIOS 1.0A" (PDF) . 1.0A. Intel . Архивировано из оригинала (PDF) 2017-08-24 . Получено 2013-04-20 .
  35. ^ Пол, Маттиас Р. (1997-10-02) [1997-09-29]. "Caldera OpenDOS 7.01/7.02 Update Alpha 3 IBMBIO.COM - README.TXT и BOOT.TXT - Краткое описание того, как загружается OpenDOS". Архивировано из оригинала 2003-10-04 . Получено 2009-03-29 .[2]
  36. ^ Пол, Маттиас Р. (14.08.2017) [07.08.2017]. "Продолжение саги о Windows 3.1 в расширенном режиме на OmniBook 300". MoHPC - Музей калькуляторов HP . Архивировано из оригинала 01.05.2018 . Получено 01.05.2018 . […] SYS […] /O[:nnn] Переопределить IPL, указанный в загрузочном устройстве (n=0..126, 128..254). […] Подготовка целевого диска... Выбор загрузочного сектора FAT12 CHS (требуется, чтобы IPL указала загрузочное устройство). Обработка цели как дискеты или супердискеты (загрузочное устройство 0). Запись нового загрузочного сектора... […](Примечание. SYS записывает записи загрузки тома , а не главные записи загрузки, но их входящий интерфейс регистра похож (с расширениями), поскольку они оба могут быть изначально загружены базовой системой.)
  37. ^ Эллиотт, Роберт (2010-01-04). "EDD-4 Hybrid MBR boot code Annex" (PDF) . Hewlett Packard , Технический комитет T13. e09127r3. Архивировано (PDF) из оригинала 2017-08-24 . Получено 2013-04-20 .
  38. ^ "FDISK /MBR перезаписывает главную загрузочную запись". Поддержка . 1. Microsoft . 2011-09-23. 69013. Архивировано из оригинала 2017-02-08 . Получено 2013-04-19 .
  39. ^ "sfdisk(8) – Linux man page". die.net . 2013 [2007]. Архивировано из оригинала 2017-08-24 . Получено 2013-04-20 .
  40. ^ Браун, Ральф Д. (2000-07-16). "Список прерываний Ральфа Брауна (v61 html)". Delorie Software . Получено 2016-11-03 .
  41. ^ Браун, Ральф Д. (2000-07-16). "B-1302: INT 13 - ДИСК - ЧТЕНИЕ СЕКТОРА(ОВ) В ПАМЯТЬ". Список прерываний Ральфа Брауна (RBIL) (61-е изд.) . Получено 2016-11-03 .(Примечание. См. файл INTERRUP.B внутри архива "INTER61A.ZIP.)

Дальнейшее чтение

Внешние ссылки