Добавлен: 29.10.2018
Просмотров: 48152
Скачиваний: 190
5.4. Диски
421
передачи данных, количество отдельных запросов ввода-вывода в секунду, которые они
способны обработать, ничуть не выше, чем у одиночного дискового привода.
RAID-системы уровней 4 и 5 опять возвращаются к работе с блоками, а не с отдельны-
ми словами с битами четности и не требуют синхронизации приводов. RAID-система
уровня 4 (рис. 5.16, д) похожа на RAID-систему уровня 0 с блоком четности для каждой
группы блоков, который записывается на отдельном диске. К примеру, если каждый
блок имеет длину k байт, все блоки проходят обработку операцией исключающего
ИЛИ, в результате чего получается блок четности длиной k байт. При отказе привода
диска утраченные байты могут быть заново вычислены с диска четности путем чтения
всего набора дисков.
Эта конструкция защищает диск от выхода из строя, но при незначительных обнов-
лениях данных она показывает низкую производительность. Если изменяется один
сектор, то для пересчета четности, которая должна быть переписана, нужно считывать
информацию со всех дисков. В качестве альтернативы система может прочитать ста-
рые пользовательские данные и старые данные четности и пересчитать новые данные
четности на их основе. Но даже при такой оптимизации незначительные изменения
требуют двух операций чтения и двух операций записи.
Вследствие большой нагрузки на диск четности он может стать узким местом, которое
в RAID-системе уровня 5 устраняется за счет распределения битов четности равно-
мерно по кругу на все дисковые приводы (рис. 5.16, е). Но в случае повреждения диска
реконструировать его содержимое будет непросто.
RAID-система уровня 6 похожа на систему уровня 5, за исключением использования
дополнительного блока четности. Иными словами, данные распределяются по дискам
с двумя блоками четности вместо одного. В результате из-за вычислений четности записи
оказываются немного более затратными, но считывания потерь производительности не
испытывают. Система получается более надежной (представьте себе, что произойдет,
если RAID-система уровня 5 обнаружит сбойный блок при перестройке своего массива).
5.4.2. Форматирование диска
Жесткий диск состоит из набора пластин, обычно диаметром 3,5 дюйма (или 2,5 дюйма
для использования в ноутбуках), изготовленных из алюминия, металлического сплава
или стекла. На каждую пластину наносится тонкий магнитный слой из оксида металла.
Только что изготовленный диск не содержит никакой информации.
Перед использованием диска каждая пластина должна пройти низкоуровневое форма-
тирование
, осуществляемое с помощью определенной программы. Диск состоит из серии
концентрических дорожек, каждая из дорожек содержит определенное количество сек-
торов и небольшие промежутки между секторами. Формат сектора показан на рис. 5.17.
Рис. 5.17. Сектор диска
Заголовок начинается с определенной комбинации битов, позволяющей оборудова-
нию распознать начало сектора. В нем также содержатся номера цилиндра и сектора
и некоторая другая информация. Размер области данных определяется программой
422
Глава 5. Ввод и вывод информации
низкоуровневого форматирования. Многие диски используют секторы размером
512 байт. Поле кода корректировки ошибок — ECC (Error Correction Code) содержит
избыточную информацию, которая может быть использована для исправления ошибок
чтения
1
. Размер и содержимое этого поля варьируются от производителя к произво-
дителю и зависят от того, какую часть дискового пространства разработчик захотел
отдать для достижения высокой надежности, и от степени сложности кода ECC, с ко-
торым может работать контроллер. Довольно часто используется 16-разрядное поле
ECC. К тому же у всех жестких дисков есть некоторое количество запасных секторов,
предназначенных для замены секторов, имеющих производственные дефекты.
При низкоуровневом форматировании задается положение нулевого сектора на каждой
дорожке, смещенное относительно положения нулевого сектора предыдущей дорожки.
Это смещение, называемое отклонением цилиндров (cylinder skew)
2
, создается для
повышения производительности. Замысел состоит в том, чтобы дать возможность счи-
тывать с диска нескольких дорожек за одну непрерывную операцию без потери данных.
Суть проблемы станет понятной после изучения изображения на рис. 5.15, а. Предпо-
ложим, что поступил запрос на 18 секторов, начиная с сектора 0 внутренней дорожки.
За один оборот диска происходит чтение 16 первых секторов, но для считывания 17-го
сектора необходимо перемещение блока головок на одну дорожку ближе к краю диска.
За время перемещения на одну дорожку сектор 0 уже уйдет из-под головки, поэтому
для его подхода под нее нужен полный оборот диска. Эта проблема устраняется за счет
сдвига секторов, показанного на рис. 5.18.
Величина отклонения цилиндров зависит от геометрии привода. Например, один обо-
рот диска, вращающегося со скоростью 10 000 об/мин, занимает 6 мс. Если дорожка
состоит из 300 секторов, то новый сектор проходит под головкой каждые 20 мкс. Если
переход с дорожки на дорожку занимает 800 мкс, то за этот переход произойдет сме-
щение на 40 секторов, поэтому отклонение цилиндра должно составлять как минимум
на 40 секторов, а не на три сектора, как показано на рис. 5.18. Следует заметить, что
переключение между головками также занимает некоторое время, поэтому кроме от-
клонения цилиндров есть еще и отклонение головок (head skew), но оно невелико по
размеру — обычно значительно меньше времени прохода одного сектора.
В результате низкоуровневого форматирования емкость диска уменьшается в зависи-
мости от размеров заголовков, промежутков между секторами и полей ECC, а также
количества запасных секторов. Зачастую объем отформатированного пространства
на 20 % меньше, чем неотформатированного. Запасные секторы при подсчете отфор-
матированного пространства не учитываются, поэтому все диски заданного типа при
поставке имеют одну и ту же емкость независимо от того, сколько дефектных секторов
у них имеется на самом деле (если количество дефектных секторов превышает коли-
чество запасных, привод будет забракован и не поступит в продажу).
Из-за того что некоторые производители, стараясь представить свои диски более объ-
емными, чем на самом деле, рекламируют их с указанием емкости до форматирования,
возникает неразбериха. Рассмотрим, к примеру, привод, имеющий емкость в неотфор-
матированном виде 200 · 10
9
байт. Он может быть продан как 200-гигабайтный диск.
1
В первую очередь для обнаружения ошибки. Для исправления ошибки данной информации
может и не хватить. — Примеч. ред.
2
Также встречается название «перекос цилиндров». — Примеч. ред.
5.4. Диски
423
Рис. 5.18. Иллюстрация отклонения цилиндров
Но после форматирования для данных, скорее всего, останется только 170 · 10
9
байт.
Усугубляя неразбериху, операционная система, вероятнее всего, покажет, что его ем-
кость составляет не 170, а 158 Гбайт, поскольку программное обеспечение рассматри-
вает объем памяти 1 Гбайт как 2
30
(1 073 741 824) байт, а не как 10
9
(1 000 000 000) байт.
Было бы лучше, если бы она показывала эту емкость как 158 Гбайт.
Еще больше дезориентирует тот факт, что при обмене данными 1 Гбайт/с означает
1 000 000 000 бит/с, поскольку приставка «гига» на самом деле означает 10
9
(ведь ки-
лометр — это 1000 м, а не 1024 м). И только если речь идет об объеме памяти или диска,
приставки «кило», «мега», «гига» и «тера» означают 2
10
, 2
20
, 2
30
и 2
40
соответственно.
Во избежание путаницы некоторые авторы используют для значений 10
3
, 10
6
, 10
9
и 10
12
префиксы «кило», «мега», «гига» и «тера» соответственно, а для значений 2
10
, 2
20
, 2
30
и 2
40
— соответственно префиксы «киби», «меби», «гиби» и «теби». Но префиксы
с буквой «б» используются довольно редко. Если же вам нравятся большие числа, то
за префиксом «теби» следуют префиксы «пеби», «эксби», «зеби» и «йоби», при этом
«йоби» обозначает громадное количество байт (а точнее, 2
80
).
Форматирование также влияет на производительность. Если у диска со скоростью
вращения 10 000 об/мин на одну дорожку приходится 300 секторов по 512 байт, то
на чтение 153 600 байт, имеющихся на дорожке, уходит 6 мс при скорости передачи
данных 25 600 000 байт/с, или 24,4 Мбайт/с. Превысить эту скорость не представля-
ется возможным независимо от типа используемого интерфейса, даже если это SCSI-
интерфейс, способный работать со скоростью 80 или 160 Мбайт/с.
424
Глава 5. Ввод и вывод информации
Фактически для непрерывного считывания данных с такой скоростью необходим до-
вольно объемный буфер контроллера. Рассмотрим, к примеру, контроллер, имеющий
объем буфера в один сектор, который получил команду на считывание двух последо-
вательных секторов. После того как с диска будет считан первый сектор и подсчитана
его контрольная сумма, данные должны быть перенесены в оперативную память. Пока
будет происходить перенос, под головкой окажется следующий сектор. Когда копирова-
ние в память будет завершено, контроллеру придется ждать, пока не завершится почти
полный оборот диска, чтобы под головку опять попал второй сектор.
Эта проблема может быть устранена за счет чередующейся нумерации секторов при
форматировании диска. На рис. 5.19, а показана обычная схема нумерации секторов
(здесь отклонение цилиндров игнорируется). А на рис. 5.19, б изображено одинарное
чередование
(single interleaving), дающее контроллеру небольшую передышку между
последовательными секторами, чтобы он успел скопировать буфер в оперативную
память.
Рис. 5.19. Чередование: а — отсутствует; б — одинарное; в — двойное
Если процесс копирования проходит слишком медленно, может потребоваться двойное
чередование
(double interleaving) (рис. 5.19, в). Если емкость буфера контроллера со-
ставляет всего один сектор, то не важно, с помощью каких средств содержимое буфера
копируется в оперативную память — самого контроллера, центрального процессора
или микросхемы DMA, все равно это копирование займет одно и то же время. Чтобы
исключить потребность в чередовании, контроллер должен хранить в буфере всю до-
рожку. Многие современные контроллеры могут хранить в буфере множество целых
дорожек.
По завершении низкоуровневого форматирования диск разбивается на разделы. Ло-
гически каждый раздел можно уподобить отдельному диску. Разбиение на разделы
необходимо для совместного существования нескольких операционных систем. Также
в некоторых случаях разбиение на разделы может быть использовано для свопинга. На
x86-совместимых компьютерах, как и на большинстве других, в секторе 0 содержится
главная загрузочная запись
(master boot record (MBR)), состоящая из кода программы
начальной загрузки и таблицы разделов, расположенной в самом конце сектора. MBR и,
соответственно, поддержка таблицы разделов, впервые появились на компьютерах IBM
PC в 1983 году для поддержки довольно емких на то время жестких дисков в 10 Мбайт
в PC XT. С тех пор емкость дисков существенно возросла. Поскольку записи MBR
в большинстве систем ограничены 32 битами, максимальная емкость диска, имеющего
512-байтные секторы, который мог быть поддержан, составляет 2 Тбайт. Поэтому в на-
стоящее время большинством операционных систем поддерживаются новые таблицы
5.4. Диски
425
разделов GPT (GUID Partition Table — таблица разделов, использующая глобально
уникальный идентификатор), с помощью которых поддерживаются диски емкостью до
9,4 Збайт (9 444 732 965 739 290 426 880 байт), что на момент выхода книги из печати
считалось довольно существенной величиной.
В таблице разделов (partition table) указываются начальный сектор и размер каждого
раздела. На x86-совместимых компьютерах в этой таблице выделяется место для четырех
разделов. Если все они предназначаются для работы под Windows, то им присваиваются
имена
C:
,
D:
,
E
: и
F
: и они рассматриваются как отдельные диски. Если три из них предна-
значаются для Windows, а один для UNIX, то Windows назовет свои разделы
C:
,
D
: и
E:
.
А первому USB-накопителю будет присвоено имя
F:
1
. Чтобы можно было загружаться
с жесткого диска, один из разделов таблицы должен быть помечен как активный.
На завершающем этапе подготовки диска к использованию выполняется высоко-
уровневое форматирование
каждого раздела (по отдельности). При проведении этой
операции в разделе размещаются загрузочный блок, незаполненное средство орга-
низации пространства хранилища (пустой список или двоичная матрица), корневой
каталог и пустая файловая система. Также в запись таблицы разделов помещается код,
сообщающий о типе используемой в разделе файловой системы, поскольку многие
операционные системы поддерживают несколько несовместимых файловых систем
(из соображений преемственности). После этого возможна загрузка системы.
При включении питания первой запускается программа базовой системы ввода-выво-
да (BIOS), которая считывает главную загрузочную запись и передает ей управление.
Затем программа загрузки определяет, какой из разделов является активным. После
этого она считывает загрузочный сектор из этого раздела и передает ему управление.
Загрузочный сектор содержит небольшую программу, которая обычно загружает более
объемную программу загрузки операционной системы, обращающуюся к файловой си-
стеме, чтобы найти ядро операционной системы. Эта программа загружается в память
и запускается на выполнение.
5.4.3. Алгоритмы планирования перемещения
блока головок
В этом разделе будет рассмотрен ряд вопросов, связанных в основном с драйверами
дисков. Сначала рассмотрим, сколько времени занимает чтение или запись дискового
блока. Требуемое для этого время определяется тремя факторами:
временем позиционирования головок (временем перемещения блока головок
к нужному цилиндру);
задержкой подхода сектора (временем ожидания подхода нужного сектора под
головку);
фактическим временем передачи данных.
1
Порядок именования разделов может быть и иным в зависимости от используемой системы,
а также последовательности форматирования разделов по отношению к моменту установки
операционной системы. Для операционной системы Windows XP с использованием фай-
ловой системы NTFS часто встречается следующая ситуация: первый раздел — C:, первый
привод компакт-дисков — D:, остальные разделы имеют произвольные имена из диапазо-
на E: — Z:. — Примеч. ред.