28) Структура МBR. Устройство загрузчика MBR.

advertisement
28) Структура МBR. Устройство загрузчика MBR.
Адрес Содержимое 0x0000 Код загрузчика 0x01B8 4-х байтная сигнатура диска (только в Windows
2000, XP [1], но не в Windows 95/98 [2]) 0x01BE Четыре 16-байтных записи таблицы основных
разделов (только схема таблицы основных разделов MBR) 0x01FE 2-х байтная сигнатура MBR
(55AA16)
Адрес
0x0000
0x01B8
Содержимое
Код загрузчика
4-х байтная сигнатура диска (только в Windows
2000, XP [1], но не в Windows 95/98 [2])
0x01BE
Четыре 16-байтных записи таблицы основных
разделов (только схема таблицы основных
разделов MBR)
0x01FE
2-х байтная сигнатура MBR (55AA16)
Главная загрузочная запись (англ. master boot record, MBR) — это код и данные, необходимые для
загрузки операционной системы (ОС), и расположенные в первых физических секторах (чаще
всего в самом первом) на жёстком диске или другом устройстве хранения информации. MBR
содержит небольшой фрагмент исполняемого кода, таблицу разделов (partition table) и
специальную сигнатуру.
Цель MBR — ещё не загрузка ОС, а всего лишь выбор, «с какого раздела жёсткого диска следует
загружать ОС». На стадии MBR происходит выбор раздела диска и ничего более. Загрузка самой
ОС происходит на более поздних этапах.
В процессе запуска компьютера после окончания начального теста (Power On Self Test, POST) MBR
загружается базовой системой ввода-вывода (BIOS) в оперативную память (в компьютерах
архитектуры IBM PC обычно с адреса 0000:7c00) и передаётся управление находящемуся в MBR
загрузочному коду (обычно командой long jump).
Роль и место MBR в загрузке компьютера (для архитектуры x86)
В процессе загрузки компьютера x86 вначале всегда отрабатывается BIOS. На этой стадии кроме
тестирования и активации «железа», происходит также и выбор устройства, с которого будет
происходить дальнейшая загрузка. Это может быть дискета, жёсткий диск, сетевой ресурс,
встроенное ПЗУ или любое иное устройство. (Алгоритм выбора загрузочного устройства может
быть различным и зависит от реализации BIOS.) После выбора загрузочного устройства,
управление всей дальнейшей загрузкой BIOS полностью передаёт этому устройству.
В случае, если устройство имеет только один раздел (как, например, дискета или сетевая
загрузка), то выбор однозначен, и загрузка продолжается сразу с этого устройства. Однако, если
устройство содержит несколько разделов, каждый из которых потенциально может быть
загрузочным (как, например, в случае жестких дисков), то возникает неопределённость: с какого
именно раздела производить загрузку?
Для разрешения неоднозначности по выбору раздела было предложено вынести этот вопрос из
ведения BIOS и передать этот выбор самому устройству. Возникла идея использовать для этого
небольшую программу, записанную на самом носителе, которая и осуществляла бы данный
выбор. Так появилась концепция MBR.
Таким образом, потенциальное наличие нескольких загрузочных разделов, среди которых
необходимо осуществить выбор — это ключевой момент в необходимости появления и отработки
MBR. Для устройств с единственным (или однозначно заданным) загрузочным разделом
концепция MBR лишена смысла и не используется.
Развитие MBR
Иногда в MBR кроме основной функции (выбора раздела) включаются также и другие функции,
например, авторизация. Но это уже расширение и дополнение к основной функции и задаче MBR.
Такие системы не получили широкого распространения.
Другие (не x86) системы
В связи с тем, что на других системах применяются иные архитектурные решения (начиная от
активации железа и заканчивая загрузкой ОС), то концепция MBR может быть к ним не
применима. Для подробностей — см. описание соответствующих систем.
Стандартизация MBR
Утвержденного стандарта на структуру MBR не существует, однако, есть «сложившиеся
традиции», по сути, «стандарт де-факто», которого придерживаются большинство MBR от разных
производителей.
Иные форматы MBR
Загрузчики, отличные от стандартных Windows-загрузчиков, могут использовать всё пространство
между MBR и первым разделом (~32 кб) для собственных целей. В таких случаях под MBR
понимают весь загрузочный код, а для выделения именно первых 512 байт говорят, что они
расположены в MBS — Master Boot Sector — главном загрузочном секторе. Для операционных
систем Microsoft понятия MBR и MBS совпадают, так как вся MBR содержится в MBS, хотя это не
совсем правильно, так как под MBR подразумевают данные, а под MBS — физический сектор.
MBR от Microsoft (MS DOS и MS Windows)
Структура MBR
Структура MBR от Microsoft занимает один сектор (512 байт):

область кода и служебных данных (446 байт)

область partition table (4 записи по 16 байт)

Сигнатура 55AAh (2 байта)
Содержание «Области кода и служебных данных» зависит от версии DOS / Windows, но функции
остаются те же — поиск, загрузка и запуск нужного загрузочного сектора[1][2][3].
Алгоритм работы кода MBR от Microsoft
BIOS (до MBR)

BIOS проводит начальную инициализацию оборудования («железа»)

BIOS определяет, с какого устройства производить дальнейшую загрузку: дискета, флешнакопитель, жёсткий диск и т. д... (выбор устройства зависит от версии и от настроек BIOS)
…. [в данном описании рассматривается только случай загрузки с жесткого диска..]

BIOS считывает один сектор (512 байт), который находится по адресу: «цилиндр 0, головка
0, сектор 1», и помещает его в область памяти по адресу 0000:7c00

BIOS проверяет, что этот сектор оканчивается сигнатурой 55ААh
…. [если это не так, то управление возвращается обратно в BIOS]

BIOS передаёт управление по адресу 0000:7c00 (то есть сектору MBR)
MBR
Выбор загрузочного раздела и проверка целостности MBR:

MBR копирует себя с адреса 0000:7c00 на адрес 0000:0600 (освобождая место для
будущей загрузки уже собственно загрузчика ОС)

MBR просматривает по очереди все записи о разделах и ищет первую запись об
«активном» (== «загрузочном») разделе (то есть ищет раздел, отмеченный как 80h)

В случае успеха (раздел, помеченный как 80h — найден) MBR запоминает номер этого
раздела
…. [если просмотрены все 4 записи и не найден раздел, помеченный как 80h, то вызывается INT
18h. Это возвращает управление обратно в BIOS, что может приводить либо к загрузке BASIC, либо
к повторной попытке загрузить систему с диска, либо к перезагрузке компьютера — в зависимости
от версии и реализации BIOS]

MBR просматривает все оставшиеся записи и проверяет, что это единственный активный
раздел (что больше разделов, помеченных 80h, на данном физическом диске не
существует)
…. [если находятся другие разделы, помеченные 80h, то MBR выводит сообщение об ошибке
(обычно это что-то типа «Invalid partition table»), после чего система подвисает в бесконечном
цикле, из которого можно выйти только перезагрузкой компьютера]

MBR проверяет, что в данном поле для всех 4-х разделов нет иных значений кроме «00h»
и «80h»
…. [если находятся разделы, помеченные иным значением, чем 00h или 80h, то MBR выводит
сообщение об ошибке («Invalid partition table»), система подвисает, требуется перезагрузка
компьютера]
На этом заканчивается проверка MBR и начинается подготовка к загрузке ОС:

MBR считывает первый сектор логического диска, помеченного как «загрузочный» и
помещает этот сектор по адресу 0000:7c00

MBR проверяет, что данный сектор заканчивается сигнатурой 55ААh
…. [если этой сигнатуры в этом месте нет, то выводится сообщение «Missing operating system» и
компьютер подвисает, требуется перезагрузка]

MBR передает управление по адресу 0000:7c00 (то есть загрузочному сектору выбранного
логического диска)
Загрузочный сектор логического диска (после MBR)

Загрузочный сектор зависит от типа файловой системы на логическом диске и содержит
код, выполняющий нахождение и загрузку собственно операционной системы на данном
типе файловой системы.
Структура MBR
Структура Главной загрузочной записи (MBR)
Код загрузчика
Смещение
Длина
Описание
000h
446
Код загрузчика
1BEh
64
Таблица разделов
16
Раздел 1
1CEh
16
Раздел 2
1DEh
16
Раздел 3
После завершения процедуры POST в ОЗУ по
адресу 0x0000:0x7c00 записывается код
загрузчика после чего ему передается
управление. Задача загрузчика
проанализировать таблицу разделов жёсткого
диска, а затем либо передать управление
загрузочному коду активного раздела, либо
загрузить в память ядро операционной
системы и передать ему управление.
1EEh
16
Раздел 4
1FEh
2
Сигнатура (55h AAh)
Таблица разделов
В таблице разделов хранится информация о
типе раздела и его расположении на жёстком
диске.
Сигнатура
Последние два байта MBR называются сигнатурой. Значение этих байтов должно быть 55h AAh. В
случае, если это не так, запись считается некорректной.
Структура описания раздела
Структура описания раздела
Смещение Длина Описание
00h
1
Признак активности
раздела
01h
1
Начало раздела —
головка
02h
1
Начало раздела — сектор
(биты 0-5), дорожка (биты
6,7)
Признак активности разделов
Признак активности раздела — признак
обозначающий возможность загрузки
операционной системы с данного раздела. Для
стандартных загрузчиков может принимать
следующие значения:
03h
1
Начало раздела —
дорожка (старшие биты
8,9 хранятся в байте
номера сектора)
04h
1
Код типа раздела
05h
1
Конец раздела — головка
06h
1
Конец раздела — сектор
(биты 0-5), дорожка (биты
6,7)
07h
1
Конец раздела —
дорожка (старшие биты
8,9 хранятся в байте
номера сектора)
08h
4
Смещение первого
сектора
0Ch
4
Количество секторов
раздела

80h — раздел является активным

00h — раздел является неактивным

Другие значения являются
ошибочными и игнорируются.
Начало раздела / Конец раздела
Координаты начала и конца раздела в CHS
(Цилиндр, головка, сектор) формате. Следует
учитывать, что CHS не позволяет выполнять
адресацию более чем к 7,8 Гб данных. Для
адресации к разделам находящимся за
пределами 7,8 Гб используется LBA адресация.
Код типа раздела
Код файловой системы используемой на
данном разделе. В случае расширенного раздела принимает значение 05h. В случае если
используется расширенный раздел, то координаты начала раздела указывают на EBR.
Структура EBR
Формат указателей аналогичен MBR.
Смещение Длина Описание
Смещение первого сектора
1BEh
16
Указатель на раздел
1CEh
16
Указатель на следующий
EBR
Координаты начала раздела в LBA
координатах. Позволяет выполнять адресацию
до 2 Тб данных.
1FEh
2
Сигнатура (55h AAh)
Восстановление MBR
Если каким-либо образом была потеряна MBR,
то её можно восстановить специальными утилитами которая просмотрит весь носитель
информации и создаст таблицу разделов.
29) Виды программных интерфейсов (API) для доступа к ВЗУ.
Интерфейс АТА/АТАРI (IDE).
Интерфейс ATA (AT Attachment for Disk Drives) разрабатывался в 1986-1990 гг. для подключения
накопителей на жестких магнитных дисках к компьютерам IBM PC AT с шиной ISA. Интерфейс
появился в результате переноса стандартного (для PC/AT) контроллера жесткого диска ближе к
накопителю, то есть создания устройств со встроенным контроллером — IDE (Integrated Drive
Electronics). Разработкой спецификаций ATA/ATAPI занимается один из технических комитетов
американского Национального Комитета по стандартизации в области информационных
технологий (NCITS). Разработанные им спецификации оформляются в виде стандартов ANSI. Для
устройств IDE существует несколько разновидностей интерфейса.
АТА, он же AT-BUS, — 16-битный интерфейс подключения к шине компьютера. Базовый 40проводный сигнальный и 4-проводный питающий интерфейс для подключения дисковых
накопителей к РС.
PC Card АТА — 16-битный интерфейс с 68-контактным разъемом PC Card (PCMCIA) для
подключения к блокнотным PC.
АТА-2 — расширенная спецификация АТА. Включает 2 канала, 4 устройства, PIO Mode 3,
Multiword DMA Mode 1, Block mode, объем диска до 8 Гбайт.
Fast АТА-2 — разрешает использовать Multiword DMA Mode 2 (13,3 Мбайт/с), PIO Mode 4.
ATA-3 — расширение АТА-2. Включает средства парольной защиты, улучшенного управления
питанием, самотестирования с предупреждением приближения отказа — SMART (Self
Monitoring Analysis and Report Technology).
ATA/ATAPI-4 — расширение ATA-3, включающее режим Ultra DMA со скоростью обмена до 33
Мбайт/с и пакетный интерфейс ATAPI. Появляется поддержка очередей и возможность
перекрытия команд.
ATA/ATAPI-5 — ревизия ATA/ATAPI-4: удаляются устаревшие команды и биты, добавляются
новые возможности защиты и управления энергопотреблением. Включает режим Ultra DMA со
скоростью обмена до 66 Мбайт/с.
ATA/ATAPI-6 — дополнения к ATA/ATAPI-5: потоковое расширение для чтения/записи аудио- и
видеоданных, режим Ultra DMA со скоростью обмена до 133 Мбайт/с.
Serial ATA — последовательный интерфейс.
Все существующие версии интерфейса АТА электрически совместимы. Степень логической
совместимости достаточно высока (все базовые возможности ATA доступны). Однако для полного
использования всех расширений необходимо соответствие спецификаций устройств, хостадаптера и его ПО.
Спецификация ATA/ATAPI-6 официально объявлена последней версией параллельного
интерфейса ATA, за которой следует последовательный интерфейс Serial ATA.
В спецификации интерфейса определены следующие объекты:
Хост-адаптер — средства сопряжения интерфейса АТА с шиной компьютера. Хостом также
называют компьютер с хост-адаптером интерфейса ATA.
Ведущее устройство (Master) — ПУ, в спецификации АТА официально называемое Device-0
(устройство 0).
Ведомое устройство (Slave) — ПУ, в спецификации называемое Device-1 (устройство
1).
Хост-адаптер и устройства объединяются кабелем-шлейфом, соединяющим параллельно
одноименные контакты интерфейсных разъемов. Достаточно универсальный набор сигналов
позволяет подключать любое устройство со встроенным контроллером. Принятая система команд
и регистров, являющаяся частью спецификации АТА, ориентирована на блочный обмен данными с
внешними запоминающими устройствами прямого доступа. Для иных устройств существует
спецификация АТАРI, основанная на тех же аппаратных средствах, но позволяющая обмениваться
пакетами управляющей информации (Package Interface, PI). Структура и наполнение пакетов
позаимствованы из универсального интерфейса SCSI. Пакетный интерфейс позволяет расширить
границы применения шины АТА.
Если к шине АТА подключены два устройства, одно должно быть ведущим, другое — ведомым,
это определяется помощью предварительно установленных конфигурационных джамперов
(перемычек). Оба устройства воспринимают команды от хост-адаптера одновременно. Однако
исполнять команду будет лишь выбранное устройство. Выводить выходные сигналы на шину АТА
имеет право только выбранное устройство. Такая система подразумевает, что, начав операцию
обмена с одним из устройств, хост-адаптер не может переключиться на обслуживание другого до
завершения начатой операции. Таким образом, параллельно могут работать только устройства
IDE, подключаемые к разным шинам (каналам) АТА. Параллельный интерфейс ATA представляет
собой 16-тиразрядную шину, в которой все сигналы соответствуют стандартной логике ТТЛ. Все
информационные сигналы интерфейса передаются через 40-контактный разъем, у которого
ключом является отсутствующий на вилке и закрытый на розетке контакт 20. Для соединения
устройств применяется плоский многожильный кабель-шлейф, длина кабеля не должна
превышать 0,46 м (18"). Терминаторы стандартом не предусматриваются (они имеются в каждом
устройстве и хост-адаптере), но если кабель с тремя разъемами (розетками) используют для
подключения одного устройства, то устройство и хост-адаптер рекомендуется подключать к
противоположным концам кабеля. Для устойчивой работы в режиме Ultra DMA рекомендуется
применение 80-проводных кабелей, обеспечивающих чередование сигнальных цепей и проводов
схемной земли (GND). На 80-проводном кабеле в разъеме для подключения контроллера контакт
34 соединен с шиной GND и не соединен с проводом шлейфа; этим обеспечивается
идентификация типа кабеля. Спецификация АТА узаконивает так же 4-контактный разъем питания
(рис. 1).
Рис. 1. Разъемы интерфейса АТА (вилки на устройствах): а — интерфейсный, б — питания
Процессор общается с устройствами АТА через регистры, используя инструкции ввода-вывода IN
и OUT. Для передачи данных с максимальной скоростью применяют программный доступ PIO к
регистру данных инструкциями INS/OUTS или по каналу DMA. Программный доступ РIO
обязателен для всех устройств, команды режима DMA устройствами могут не поддерживаться.
Параметры различных режимов обмена справочно (!) приведены в табл. 1.
Таблица 1. Параметры режимов передачи
Режим передачи
Минимальное Скорость передачи,
время цикла, нс Мбайт/с
Интерфейс
РIO mode 0
600
3,3
АТА
PIO mode 1
383
5,2
АТА
PIO mode 2
240
8,3
АТА
PIO mode 3
180
11,1
E-IDE, АТА-2
PIO mode 4
120
16,6
E-IDE, Fast АТА-2
Singleword DMA
Mode 0
960
2,08
АТА
Singleword DMA
Mode 1
480
4,16
АТА
Singleword DMA
Mode 2
240
8,33
АТА
Multiword DMA
Mode 0
480
4,12
АТА
Multiword DMA
Mode 1
150
13,3
АТА-2
Multiword DMA
Mode 2
120
16,6
FastАТА-2
Ultra DMA Mode 0
120
16,6
ATA/ATAPI-4
Ultra DMA Mode 1
80
25
ATA/ATAPI-4
Ultra DMA Mode 2
60
33
ATA/ATAPI-4
Ultra DMA Mode 3
45
44,4
ATA/ATAPI-5
Ultra DMA Mode 4
30
66,6
ATA/ATAPI-5
Ultra DMA Mode5
15
133
ATA/ATAPI-6
Программный доступ PIO (Programmed Input/Output) выполняется в виде следующих друг за
другом операций чтения или записи в пространстве ввода-вывода по адресу регистра данных.
Готовность устройства проверяется перед началом передачи блока, после чего хост производит
серию операций в определенном темпе, который определяется выбранным режимом PIO Mode 04. Для каждого режима определены допустимые параметры временной диаграммы цикла
обмена. Обмен РIO программно реализуется с помощью процессорных инструкций ввода-вывода
строк REP INS или REP OUTS с занесенным в один из регистров контроллера количеством слов в
передаваемом блоке. Эти инструкции обеспечивают максимально возможную скорость обмена
для данного процессора и системной шины. Программный обмен на все время передачи блока
занимает и процессор, и системную шину.
Обмен по каналу DMA занимает исключительно шины ввода-вывода и памяти. Процессору
требуется выполнить только процедуру инициализации канала, после чего он свободен до
прерывания от устройства в конце передачи блока (этим могут воспользоваться многозадачные
системы). Режимы обмена по каналу DMA бывают одиночными и множественными. При
одиночном режиме — Singleword DMA — устройство для передачи каждого слова вырабатывает
сигнал запроса DMARQ и сбрасывает его по сигналу DMACK#, подтверждающему цикл обмена.
При множественном режиме — Multiword DMA — на сигнал DMARQ хост отвечает потоком
циклов, сопровождаемых сигналами DMACK#. Множественный режим позволяет развить более
высокую скорость передачи.
В пакете данных режима Ultra DMA за каждый такт передаются два слова данных, один по фронту
синхронизирующего сигнала, другой по спаду. Период следования синхросигналов равен
удвоенному времени цикла. При этом обеспечивается и контроль достоверности передачи
данных по шине. Каждое переданное слово участвует в подсчете CRC-кода, который передается
хост-контроллером в конце пакета. Подсчет ведется и источником данных, и приемником. При
несовпадении принятого устройством кода с ожидаемым кодом фиксируется ошибка передачи, о
которой устройство сообщает в конце исполнения команды. Получив сообщение об ошибке, хост
должен повторить команду. Если ошибки появляются постоянно, хост должен понизить скорость
обмена (вплоть до выхода из режима Ultra DMA).
Тип режима обмена определяется возможностями хост-адаптера (и его драйвера), устройств и
кабеля, и для каждого устройства он будет ограничен минимумом из максимальных
возможностей всех этих компонентов. Как правило, режимы устанавливаются системой
автоматически, но пользователь имеет возможность при необходимости жестко установить
требуемые режимы настройками BIOS Setup. Правильный выбор режима обмена обеспечивает
надежность и производительность. Все устройства поддерживают режим PIO Mode 0, в котором
считывается блок параметров идентификации. В блоке имеются поля, описывающие режимы
обмена по умолчанию и более эффективные режимы обмена, поддерживаемые устройством.
Протокол обмена PIO приемлем только для однозадачных ОС. Для многозадачных ОС больший
интерес представляет обмен по протоколам DMA/ Ultra DMA.
Простейший адаптер АТА содержит только буферы сигналов шины и дешифратор зоны адресов.
Все регистры контроллера и схемы кодирования размещены в самом устройстве IDE. Шина АТА
требует выделения системных ресурсов — двух областей портов ввода-вывода и линии
прерывания; дополнительно может потребоваться канал DMA. Современные системные платы
оснащаются высокопроизводительными двухканальными контроллерами шины АТА,
обеспечивающими прямое управление шиной PCI (bus mastering) при обмене с устройствами в
режимах DMA и Ultra DMA. Прямое управление шиной повышает суммарную производительность
компьютера в многозадачных и многопоточных операционных системах. Более сложные
контроллеры могут иметь собственную кэш-память и управляющий процессор. Они могут
аппаратно организовывать и поддерживать RAID-массивы АТА-дисков. В последнее время
получили распространение переходные адаптеры, позволяющие подключать устройства
ATA/ATAPI к шине USB 2.0, при этом простота подключения внешнего устройства сочетается с
высокой скоростью передачи данных.
Последовательный интерфейс SERIAL ATA
Параллельный интерфейс ATA исчерпал свои ресурсы пропускной способности, достигшей 133
Мбайт/с в режиме UltraDMA Mode 5. Для дальнейшего повышения пропускной способности
интерфейса (но, естественно, не самих устройств хранения, которые имеют гораздо меньшие
внутренние скорости обмена с носителем) было принято решение о переходе на
последовательный интерфейс. Цель перехода — улучшение и удешевление кабелей и
коннекторов, улучшение условий охлаждения устройств внутри системного блока (избавление от
широкого шлейфа), обеспечение возможности разработки компактных устройств, облегчение
конфигурирования устройств пользователем, расширение диапазона адресация блоков (объем
накопителя в параллельном АТА ограничен 137 Гбайтами).
Интерфейс Serial ATA является радиальным (хост-центрическим), в нем определяется только
взаимодействие хоста с каждым из подключенных устройств. Взаимодействие между ведущим и
ведомым устройствами, свойственное традиционному интерфейсу ATA, исключается. Программно
хост видит множество устройств, подключенных к контроллеру, как набор каналов ATA, у каждого
из которых имеется единственное ведущее устройство. Имеется возможность эмуляции пар
устройств (ведущее — ведомое) на одном канале, если такая необходимость возникнет. Программное взаимодействие с устройствами Serial ATA практически совпадает с прежним, набор
команд соответствует ATA/ATAPI-5. В то же время аппаратная реализация хост-адаптера Serial ATA
существенно отличается от традиционного интерфейса ATA. В параллельном интерфейсе ATA
хост-адаптер был простым средством, обеспечивающим программное обращение к регистрам,
расположенным в самих подключенных устройствах. В Serial ATA хост-адаптер имеет блоки так
называемых «теневых» регистров (Shadow Registers), совпадающих по назначению с обычными
регистрами устройств ATA. Каждому подключенному устройству соответствует свой набор
регистров. Обращения к этим теневым регистрам вызывают процессы взаимодействия хостадаптера с подключенными устройствами и исполнение команд.
В стандарте рассматривается многоуровневая модель взаимодействия хоста и устройства, где
прикладным уровнем является обмен командами, информацией о состоянии и хранимыми
данными. На физическом уровне для передачи информации между контроллером и устройством
используются две пары проводов. Данные передаются кадрами, транспортный уровень
формирует и проверяет корректность информационных структур кадров (Frame Information
Structure, FIS). Для облегчения высокоскоростной передачи на канальном уровне данные
кодируются по схеме 8В/10В (8 бит данных кодируются 10-битным символом) и скремблируются,
после чего по физической линии передаются по простейшему методу NRZ (уровень сигнала
соответствует передаваемому биту). Между канальным и прикладным уровнем имеется
транспортный уровень, отвечающий за доставку кадров. На каждом уровне имеются свои
средства контроля достоверности и целостности.
В первом поколении Serial ATA данные по кабелю передаются со скоростью 1500 Мбит/с, что с
учетом кодирования 8В/10В обеспечивает скорость 150 Мбайт/с (без учета накладных расходов
протоколов верхних уровней). В дальнейшем планируется повышать скорость передачи, и в
интерфейсе заложена возможность согласования скоростей обмена по каждому каналу в
соответствии с возможностями хоста и устройства, а также качеством связи. Хост-адаптер имеет
средства управления соединениями, программно эти средства доступны через специальные
регистры Serial ATA.
В стандарте предусматривается управление энергорежимом интерфейсов. Каждый интерфейс
кроме активного состояния может находиться в состояниях PARTIAL и SLUMBER с пониженным
энергопотреблением, для выхода из которых требуется заметное время (10 мс). Команды,
требующие передачи данных, могут исполняться в различных режимах обмена. Обращение в
режиме РIO и традиционный способ обмена по DMA (legacy DMA) выполняется аналогично
параллельному интерфейсу ATA. Однако внутренний протокол обмена между хост-адаптером и
устройствами позволяет передавать между ними разноплановую информацию.
Последовательный интерфейс ATA, как и параллельный АТА, предназначен для подключений
устройств внутри компьютера. Длина кабелей не превышает 1 м, при этом все соединения
радиальные, каждое устройство подключается к хост-адаптеру своим кабелем. В стандарте
предусмотрена возможность «горячей» замены. Стандарт определяет новый однорядный
двухсегментный разъем с механическими ключами, препятствующими ошибочному
подключению. Сигнальный сегмент имеет 7 контактов (S1-S7), питающий — 15 (Р1-Р15); все
контакты расположены в один ряд с шагом 1,27 мм. Назначение контактов приведено в табл. 1
(справочно). Малые размеры разъема (полная длина — около 36 мм) и малое количество цепей
облегчают компоновку системных плат и карт расширения. Питающий сегмент может
отсутствовать (устройство может получать питание и от обычного 4-контактного разъема ATA). Вид
разъемов приведен на рис. 1. Для обеспечения «горячего» подключения контакты разъемов
имеют разную длину, в первую очередь соединяются контакты «земли», затем контакты
предзаряда конденсаторов в цепях питания (для уменьшения броска потребляемого тока), после
чего соединяются основные питающие контакты и сигнальные цепи.
Таблица 1. Разъем Serial ATA
Контакт
Цепь
Назначение
S1
GND
Экран
S2
А+
Дифференциальная пара
сигналов А
S3
А-
Дифференциальная пара
сигналов А
S4
GND
Экран
S5
В-
Дифференциальная пара
сигналов В
S6
В+
Дифференциальная пара
сигналов В
S7
GND
Экран
Р1
V33
Питание 3,3 В
Р2
V33
Питание 3,3 В
РЗ
V33
Питание 3,3 В, предзаряд
Р4
GND
Общий
Р5
GND
Общий
Р6
GND
Общий
Р7
V5
Питание 5 В, предзаряд
Р8
V5
Питание 5 В
Р9
V5
Питание 5 В
Р10
GND
Общий
Р11
Резерв
Р12
GND
Общий
Р13
V12
Питание 12В, предзаряд
Р14
V12
Питание 12 В
Р15
V12
Питание 12В
Рис. 1. Разъемы Serial ATA: a — полный разъем на устройстве, б — сигнальный сегмент кабельного
разъема, в — питающий сегмент кабельного разъема, г — сигнальный сегмент разъема хостадаптера, д — разъем хоста для непосредственного подключения устройства.
Каждое устройство, подключенное к адаптеру Serial ATA, представляется тремя блоками
регистров, два из которых соответствуют традиционным регистрам ATA и называются
«теневыми», третий блок — новый. Привязка адресов блоков к адресному пространству хоста
стандартом не регламентируется; для PCI-контроллера блоки задаются регистрами
конфигурационного пространства и «теневые» регистры могут располагаться по стандартным
адресам ATA с целью совместимости. Разрядность некоторых регистров увеличена до 16.
Новый блок регистров SCR (Serial ATA Status and Control registers) состоит из 16 смежных 32разрядных регистров SCR0-SCR15, из которых пока определены лишь 3 (остальные
зарезервированы).
Файловая система вообще:
Таким образом, файловая система - это часть операционной системы, назначение которой состоит
в том, чтобы организовать эффективную работу с данными, хранящимися во внешней памяти, и
обеспечить пользователю удобный интерфейс при работе с такими данными. Организовать
хранение информации на магнитном диске непросто. Это требует, например, хорошего знания
устройства контроллера диска, особенностей работы с его регистрами. Непосредственное
взаимодействие с диском - прерогатива компонента системы ввода-вывода ОС, называемого
драйвером диска. Для того чтобы избавить пользователя компьютера от сложностей
взаимодействия с аппаратурой, была придумана ясная абстрактная модель файловой системы.
Операции записи или чтения файла концептуально проще, чем низкоуровневые операции работы
с устройствами.
Основная идея использования внешней памяти состоит в следующем. ОС делит память на блоки
фиксированного размера, например, 4096 байт. Файл, обычно представляющий собой
неструктурированную последовательность однобайтовых записей, хранится в виде
последовательности блоков (не обязательно смежных); каждый блок хранит целое число записей.
В некоторых ОС (MS-DOS) адреса блоков, содержащих данные файла, могут быть организованы в
связный список и вынесены в отдельную таблицу в памяти. В других ОС (Unix) адреса блоков
данных файла хранятся в отдельном блоке внешней памяти (так называемом индексе или
индексном узле). Этот прием, называемый индексацией, является наиболее распространенным
для приложений, требующих произвольного доступа к записям файлов. Индекс файла состоит из
списка элементов, каждый из которых содержит номер блока в файле и сведения о
местоположении данного блока. Считывание очередного байта осуществляется с так называемой
текущей позиции, которая характеризуется смещением от начала файла. Зная размер блока, легко
вычислить номер блока, содержащего текущую позицию. Адрес же нужного блока диска можно
затем извлечь из индекса файла. Базовой операцией, выполняемой по отношению к файлу,
является чтение блока с диска и перенос его в буфер, находящийся в основной памяти.
Файловая система позволяет при помощи системы справочников (каталогов, директорий)
связать уникальное имя файла с блоками вторичной памяти, содержащими данные файла.
Иерархическая структура каталогов, используемая для управления файлами, может служить
другим примером индексной структуры. В этом случае каталоги или папки играют роль индексов,
каждый из которых содержит ссылки на свои подкаталоги. С этой точки зрения вся файловая
система компьютера представляет собой большой индексированный файл. Помимо собственно
файлов и структур данных, используемых для управления файлами (каталоги, дескрипторы
файлов, различные таблицы распределения внешней памяти), понятие "файловая система"
включает программные средства, реализующие различные операции над файлами.
Перечислим основные функции файловой системы.
1. Идентификация файлов. Связывание имени файла с выделенным ему пространством
внешней памяти.
2. Распределение внешней памяти между файлами. Для работы с конкретным файлом
пользователю не требуется иметь информацию о местоположении этого файла на внешнем
носителе информации. Например, для того чтобы загрузить документ в редактор с жесткого
диска, нам не нужно знать, на какой стороне какого магнитного диска, на каком цилиндре и в
каком секторе находится данный документ.
3. Обеспечение надежности и отказоустойчивости. Стоимость информации может во много раз
превышать стоимость компьютера.
4.
Обеспечение защиты от несанкционированного доступа.
5. Обеспечение совместного доступа к файлам, так чтобы пользователю не приходилось
прилагать специальных усилий по обеспечению синхронизации доступа.
6.
Обеспечение высокой производительности.
Назначение файловых систем определяет состав их программных частей, которые должны иметь
следующие компоненты:
1. Средства взаимодействия с процессами пользователей, которые должны обеспечить прием и
интерпретацию запросов от пользователей на обработку файлов и сообщить им в удобной форме
о результатах этой обработки;
2. Средства, реализующие методы доступа к внутренним составным элементам файла и файлу в
целом; эти средства осуществляют связь между физическим и логическим уровнями управления
данными;
3. Средства, обеспечивающие распределение внешней памяти для хранения файлов и ее
освобождение при уничтожении файлов;
4. Средства учета расположения файлов в целом и их составных частей.
30) Внешняя сортировка больших объемов данных.
Алгоритмы сортировки:
тупом;
накладывает некоторые дополнительные ограничения на алгоритм:
o
o
доступ к носителю осуществляется последовательным образом: в каждый момент
времени можно считать или записать только элемент, следующий за текущим
объем данных не позволяет им разместиться в ОЗУ
Внутренняя сортировка оперирует с массивами, целиком помещающимися в оперативной памяти
с произвольным доступом к любой ячейке. Данные обычно сортируются на том же месте, без
дополнительных затрат.
Внешняя сортировка — сортировка данных, расположенных на периферийных устройствах и не
вмещающихся в оперативную память, то есть когда применить одну из внутренних сортировок
невозможно. Стоит отметить, что внутренняя сортировка значительно эффективней внешней, так
как на обращение к оперативной памяти затрачивается намного меньше времени, чем к
магнитным дискам, лентам и т. п.
Наиболее часто внешняя сортировка используется в СУБД. Основным понятием при
использовании внешней сортировки является понятие отрезка. Отрезком длины K является
последовательность записей Ai, Ai + 1,…,Ai + k, что в ней все записи упорядочены по некоторому
ключу. Максимальное количество отрезков в файле N (все элементы не упорядочены).
Минимальное количество отрезков 1 (все элементы являются упорядоченными).
Например, в некотором файле А есть одномерный массив:
12 35 65 0 24 26 3 5 84 90 6 2 30
Поделим массив на отрезки:
12 35 65 | 0 24 36 | 3 5 84 90 | 6 | 2 30
Можно сказать, что массив в файле А состоит из 5 отрезков.
Например, в некотором файле B есть одномерный массив:
1 2 3 4 5 6 7 8 9 10
Поделим массив на отрезки:
| 1 2 3 4 5 6 7 8 9 10 |
Можно сказать, что массив в файле B состоит из 1 отрезка.
Например, в некотором файле А есть одномерный массив:
20 17 16 14 13 10 9 8 6 4 3 2 0
Поделим массив на отрезки:
| 20 | 17 | 16 | 14 | 13 | 10 | 9 | 8 | 6 | 4 | 3 | 2 | 0 |
Можно сказать, что массив в файле А состоит из 13 отрезков.
Идея большинства методов заключается в расчленении данных на ряд последовательностей
помещающихся в оперативную память. Далее применяется один из методов внутренней
сортировки, после чего последовательности сливаются. Чем больше объём оперативной памяти,
тем длиннее будут последовательности и, следовательно, тем меньшим окажется их количество,
что увеличит скорость сортировки.
Если же объём оперативной памяти мал, то можно разделить исходные данные на несколько
последовательностей, после чего непосредственно использовать процедуру слияния.
Основные методы сортировок:
1. Естественная сортировка (метод естественного слияния)
2. Сортировка методом двухпутевого сбалансированного слияния
1. Сортировка методом n-путевого слияния.
3. Многофазная сортировка (Фибоначчиевая)
31)Ассоциативные структуры данных на основе хеш-таблиц для
работы с ВЗУ.
В предыдущем параграфе были рассмотрены древовидные структуры данных, позволяющие
строить эффективные реализации ассоциативных массивов. Алгоритмическая сложность
большинства связанных с ними операций как в среднем, так и в худшем случае составляла
O(log2 n). Ниже будет представлен альтернативный подход к решению той же задачи, основанный
на хешировании (см. также [1], [6]). Его преимущество состоит в том, что при удачном
подборе некоторых основных параметров операция поиска в среднем будет тратить O(1)
действий. Однако в худшем случае понадобится O(n), что является недостатком данного
метода по сравнению со сбалансированными деревьями, которые гарантированно тратят не
больше чем логарифмическое время на основные операции.
Возможность эффективной реализации ассоциативных массивов с помощью сбалансированных
деревьев осуществлялась благодаря наложению на множество ключей требования
принадлежности
полностью упорядоченному множеству. Для рассматриваемой структуры данных это условие
будет заменено. А именно, каждому ключу должно соответствовать некоторое целое число,
не ограниченной длины. Например, строки можно считать записями в некоторой n-ичной
позиционной системе счисления.
Пусть задана некоторая функция F(x), отображающая целое число произвольной величины
в интервал 1, . . . ,m, где m мало. Хеш-таблицей называется массив размера n, содержащий
связные списки с данными. В каждом i-ом из них ключи имеют одинаковые значения
F(x) = i, где x — это целое число, соответствующее ключу. Функция F(x) называется
хеш-функцией. Будем считать, что вычисление ее значения производится за константное
время.
Рассмотрение реализации основных операций для такой структуры начнем со вставки.
Очевидно, она сводится к вычислению значения хеш-функции от ключа новых данных и
добавлению их в соответствующий список. Время работы такой процедуры как в среднем,
так и в худшем случае составит O(1).
Для того, чтобы найти данные по заданному ключу нужно сначала вычислить значение
его хеш-функции. Затем, если в соответствующем списке окажется несколько элементов,
их следует просмотреть в поисках интересующего содержимого. Как видно, хеширование
заменяет линейный поиск по всему массиву на поиск по множеству только тех элементов,
чьи ключи отображаются хеш-функцией в те же индексы. Поэтому, крайне желательно,
чтобы эти значения были распределены по увиверсуму ключей как можно более равномерно.
В этом случае минимизируется количество коллизий — ситуаций, когда пара элементов
получает один и тот же индекс.
Очевидно, наличие коллизий резко ухудшает производительность поиска. В самом крайнем
случае, когда все добавленные элементы отобразятся в один и тот же индекс, процедуре
придется произвести O(n) действий, чтобы найти нужные данные. Заметим, что если не
накладывать на ключи никаких дополнительных ограничений такая ситуация теоретически
возможна при любом выборе хеш-функции. Поэтому основным критерием ее качества становится
обеспечиваемая ей сложность операции поиска в среднем. Нужно, чтобы она составляла
O(1).
Операция удаления элементарно осуществляется применением поиска и последующим
уничтожением соответствующего элемента списка. Отсюда следует, что для нее актуальны
те же требования. А именно, время работы в среднем не должно превосходить O(1).
Тривиальная реализация итерации по содержимому всей хеш-таблицы потребует O(n+m)
действий, где n — количество присутствующих элементов, m — размер массива, хранящего
списки. Как видно, это эквивалентно O(n), если можно утверждать, что m имеет максимум
тот же порядок, что и n. Если же таблица заполнена очень мало (n = o(m)), время работы
не будет пропорционально количеству элементов.
Заметим также, что в отличие от деревьев поиска, хеширование не позволяет эффективно
осуществлять итерацию в порядке монотонного возрастания ключей. В самом деле, функция
F(x) вовсе не обязана обладать никакими свойствами монотонности — они скорее для нее
вредны, чем полезны.
3.2 Хеш-функции
Существует несколько распространенных способов подбора хеш-функций. Главным требованием
является обеспечение равномерности распределения универсума ключей по множеству
индексов.
Иными словами, при случайном и независимом добавлении нескольких элементов у них
должны быть равные вероятности попадения во все списки.
Первая техника, которую мы рассмотрим, называется методом деления. Суть его состоит
в том, что хеш-функция задается простой формулой: F(x) = x mod m. Очевидно, что
теоретически, мы получим желаемый результат, если значения x распределены равномерно.
Однако, на практике приходится иметь дело с ключами, не вполне удовлетворяющими
данному требованию. Например, если рассматривать строки, и ставить им в соответствие
числа, образованные конкатенацией двоичных ASCII-кодов их букв, использование в качестве
m k-й степени двойки приведет к тому, что значения хеш-функци будут зависеть только от
последних dk
8 e символов ключа. Если строки содержат слова какого-либо языка (естественного
или искуственного), получим, что у некоторых списков скорее всего высоки шансы получить
большое количество элементов, а у других — вовсе остаться пустыми. Тем не менее, применение
данного метода может оказаться весьма успешным, если в качестве m использовать простое
число, достаточно далекое от степени двойки.
Метод умножения подразумевает задание хеш-функции в виде F(x) = bm × {k × x}c,
где k — действительное число из интервала (0, 1). По сути дела, это обобщение предыдущей
формулы, в которой всегда было k = 1/m. Здесь можно усмотреть аналогию с умножением
на число в конечном поле, дающим, как известно, перестановку элементов.
Преимуществом хеш-функций указанного вида является независимость качества результата
от величины m. Следовательно его можно приравнять степени двух. Неудачный подбор k
также не приводит к катастрофе, но хорошее значение может заметно улучшенить
распределение.
Неплохой результат дает k = 1
2(
p
5−1), хотя в конечном итоге, оптимальный выбор коэффициента
зависит от специфики задачи.
3.3 Универсальное хеширование
Описанные методы построения хеш-функций обеспечивают эффективную реализацию операций
поиска, вставки и удаления при условии, что последовательность ключей выбирается случайно
и независимо с равномерным распределением. В такой постановке гарантируется, что среднее
время их работы не превзойдет O(1). Однако, если некоторым специальным, зависящим от
F(x) образом, выбрать подходящий набор ключей размера n, можно добиться того, чтобы
каждая операция вставки потребовала O(n) действий. Заметим, что эта ситуация будет
воспроизводима, поскольку все параметры здесь детерминированы.
Идея универсального хеширования состоит в том, чтобы при каждом выполнении алгоритма,
случайно выбирать хеш-функцию из некоторого предопределенного семейства. Тогда время
выполнения последовательностей основных операций на одних и тех же исходных данных
окажется случайной величиной и можно будет говорить о его средней асимптотике. Возникает
задача, построить такой класс функций, чтобы при любой выбранной цепочке вставок,
поисков и удалений, их средняя амортизированная сложность составила O(1).
Если это удастся сделать, окажется невозможным подбор некоторой неудачной
последовательности
операций, систематически приводящей к ухудшению производительности. Строго говоря,
шансы появления ситуации, в которой средняя сложность поиска увеличивается до O(n) в
любом случае есть. Но их можно сделать небольшими и тогда повторное усреднение (по
запускам алгоритма) сведет на нет угрозу от ее возникновения.
Хорошим семейством хеш-функций, удовлетворяющим предъявленным требованиям, является
следующее: Fab(x) = ((ax+b) mod p) mod m), где p и m заданы и не меняются. Кроме того
p — простое число, такое, что p > x для любого ключа. В свою очередь a и b выбираются
случайным образом из диапазонов 1, . . . , p − 1 и 0, . . . , p − 1 соответственно, на каждом
запуске программы.
3.4 Открытая адресация
Существует альтернативный приведенному выше способ организации ассоциативного массива,
использующий идеологию хеширования. Будем непосредственно хранить в массиве пары
ключ-значение, не прибегая к использованию списков. Кроме того, некоторые ячейки могут
быть пустыми. Делая вставку, будем помещать элемент x в позицию с индексом, равным
значению хеш-функции F(x). При возникновении коллизии, с помощью какого-либо метода
выбирается другая ячейка. Если и она оказывается занятой, процесс продолжается. В любом
случае, пока в массиве еще есть место, оно должно быть обнаружено и вставка должна
окончиться успешно, сколько бы действий на это не потребовалось.
Аналогичный процесс осуществляется и для поиска. А именно, если в ячейке, с индексом
F(x) не оказывается интересующего нас ключа x, просмотр должен быть продолжен в том
же самом порядке, в котором выбирались позиции для вставки. Встретив пустой элемент,
можно останавливать процесс поиска. Такая ситуация говорит о том, что нужных данных в
массиве нет.
Удаление в значительной степени усложняется тем, что уничтожаемый элемент в прошлом
мог стать причиной некоторых коллизий. Поэтому если просто, обнаружив его процедурой
поиска, записать поверх пустое значение, последующие попытки найти некоторые элементы
могут ошибочно закончиться раньше времени с неудачным результатом. Выходом из ситуации
может быть использование специальной пометки для позиций, освобожденных после удаления.
Операция добавления при этом считает такие ячейки пустыми, а поиск, встретив их продолжается
дальше. Возникает, однако, другая серьезная проблема. Заметим, что после длинной цепочки
вставок и последующих удалений, в массиве окажется очень мало актуальных данных
и много элементов, помеченных, как освобожденные. Тогда поиск может продолжаться
значительно дольше, чем скажем в хеш-таблице со списками, где таких трудностей не
возникает. Математически это выражается в том, что при применеии описанной техники
удаления невозможно доказать хороших оценок на алгоритмическую сложность операци
поиска.
Рассмотренная структура данных называется хешем с открытой адресацией. Учитывая
последние замечания, становятся очевидны ее недостатки по сравнению со списочной моделью,
а именно проблемы, порождаемые удалением. Несмотря на это, у нее есть и преимущества,
состоящие главным образом в отсутствии накладных расходов по времени и по памяти,
возникающих из-за использования связных списков. Есть приложения в которых данные не
нужно удалять из таблиц во время выполнения. Например, компилятор в процессе работы
может хранить идентификаторы именно в такой структуре данных, пользуясь всеми ее
плюсами.
3.5 Последовательности просмотра
Механизм хеширования с открытой адресацией требует задания некоторого способа разрешения
коллизий, который реализуется как указание для каждого элемента некоторой
последовательности
просмотра ячеек для его поиска или выбора позиции вставки, причем первый ее элемент
по определению совпадает со значением хеш-функции. Для того, чтобы все пространство
массива могло быть использовано все такие последовательности должны быть перестановками
чисел 0, . . . ,m − 1, где m — как обычно, размер массива.
В наиболее простом варианте такая последовательность для каждого элемента имеет вид
F(x), (F(x)+1) mod m, . . . , (F(x)+m−1) mod m, где x — добавляемый или искомый ключ.
Иными словами, при попытке вставки в уже занятую позицию, проверяется следующая по
номеру и так далее, пока не будет достигнут конец массива. Тогда просмотр продолжается
дальше с нулевого индекса. Основной недостаток такого метода состоит в том, что в этом
случае занятые ячейки имеют тенденцию к образованию скоплений. Чем они становятся
больше, тем больше шансов у вновь добавляемого ключа попасть сразу в одно из них. При
этом не только потребуется длительная операция просмотра всего скопления (пока не будет
обнаружен его правый край), но и само оно после этого вырастет еще на один элемент.
Второй распространенный способ выбора последовательности просмотра задается следующей
формулой: si(x) = (F(x)+k1i+k2i2) mod m, где i = 0, 1, . . . — номер элемента в последовательности,
k1 и k2 — некоторые целочисленные константы. Очевидно, данный подход обобщает
предыдущий,
которому соответствовало k1 = 1, k2 = 0. При правильном выборе констант рассматриваемый
метод в значительной степени решает проблему образования скоплений, но только в том
случае когда элементы, вызывающие коллизию имеют разные начальные позиции. Иначе
скопления в несколько другой форме все-таки могут образовываться, однако последствия
этого оказываются не так уж тяжелы.
Для окончательного решения проблемы скоплений подходит один из лучших способов
построения последовательностей просмотра, называемый двойным хешированием. Его суть,
состоит в том, что позиции выбираются, основываясь на значениях двух разных хешфункций по следующей формуле: si(x) = (F(x) + i × G(x)) mod m, где G(x) некоторая
отличная от F(x) функция. Интуитивно понятно, что в данном случае, у двух элементов
очень немного шансов получить одинаковые последовательности, потому что тогда для
них должны совпасть значения обеих хеш-функций. Математически это выражается в том,
что двойное хеширование производит O(m2) последовательность в отличие от предыдущих
методов, которые дают только O(m).
Более подробный анализ эффективности хеш-массивов, основанных на тех или иных
последовательностях просмотра приведен в [1].
Download