Файл: А. В. Гордеев А. Ю. Молчанов системное программное обеспечение электронный вариант книги издательства Питер СанктПетербург Челябинск юургу каф. Автоматика и управление 2002 2 Предисловие Настоящий учебник.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.01.2024
Просмотров: 1041
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
212
файла, а второе – длину экстента, то есть число следующих друг за другом блоков,
принадлежащих файлу
1
. Если файл фрагментирован, то размещение его экстентов описывается в файловом узле дополнительными парами 32-битных чисел. Фраг- ментация происходит, когда на диске нет непрерывного свободного участка, доста- точно большого, чтобы разместить файл целиком. В этом случае файл приходится разбивать на несколько экстентов и располагать их на диске раздельно. Файловая система HPFS старается разместить экстенты фрагментированного файла как мож- но ближе друг к другу, чтобы сократить время позиционирования головок чте- ния/записи жесткого диска. Для этого HPFS использует статистику, а также стара- ется условно резервировать хотя бы 4 килобайта места в конце файлов, которые растут. Ещё один способ уменьшения фрагментирования файлов – это расположе- ние файлов, растущих навстречу друг другу, или файлов, открытых разными тре- дами или процессами, в разных полосах диска.
В файловом узле можно разместить информацию максимум о восьми экстен- тах файла. Если файл имеет больше экстентов, то в его файловый узел записывает- ся указатель на блок размещения (allocation block), который может содержать до 40
указателей на экстенты или, по аналогии с блоком дерева каталогов, на другие бло- ки размещения. Таким образом, двухуровневая структура блоков размещения мо- жет хранить информацию о 480 секторах, что позволяет работать с файлами разме- ром до 7,68 Гбайт. На практике размер файла не может превышать 2 Гбайт, но это обусловлено текущей реализацией интерфейса прикладного программирования
[96].
«Полоса», находящаяся в центре диска, используется для хранения каталогов.
Эта полоса называется directory band. Как и все остальные «полосы», она имеет размер 8 Мбайт. Однако, если она будет полностью заполнена, HPFS начинает рас- полагать каталоги файлов в других полосах. Расположение этой информационной структуры в середине диска значительно сокращает среднее время пози- ционирования головок чтения/записи. Действительно, для перемещения головок чтения/записи из произвольного места диска в его центр требуется в два раза
1
Из этого следует, что максимальный объём диска может составлять (2 32
–l)x512=2 Тбайта.
213
меньше времени, чем для перемещения к краю диска, где находится корневой ка- талог в случае файловой системы FAT. Уже только одно это обеспечивает более высокую производительность файловой системы HPFS по сравнению с FAT. Ана- логичное замечание справедливо и для NTFS, которая тоже располагает свой mas- ter file table в начале дискового пространства, а не в его середине.
Однако существенно больший (по сравнению с размещением Directory Band в середине логического диска) вклад в производительность HPFS дает использование метода сбалансированных двоичных деревьев для хранения и поиска информации о местонахождении файлов. Как известно, в файловой системе FAT каталог имеет линейную структуру, специальным образом не упорядоченную, поэтому при поис- ке файла требуется последовательно просматривать его с самого начала. В HPFS
структура каталога представляет собой сбалансированное дерево с записями, рас- положенными в алфавитном порядке (рис. 4.11). Каждая запись, входящая в состав
В-Тгее дерева, содержит атрибуты файла, указатель на соответствующий файло- вый узел, информацию о времени и дате создания файла, времени и дате последне- го обновления и обращения, длине данных, содержащих расширенные атрибуты,
счётчик обращений к файлу, длине имени файла и само имя, и другую информа- цию.
Рис.4.11. Сбалансированное двоичное дерево
Файловая система HPFS при поиске файла в каталоге просматривает только необходимые ветви двоичного дерева (B-Тrее). Такой метод во много раз эффек- тивнее, чем последовательное чтение всех записей в каталоге, что имеет место в
214
системе FAT. Для того чтобы найти искомый файл в каталоге (точнее, указатель на его информационную структуру F-node), организованном на принципах сбаланси- рованных двоичных деревьев, большинство записей вообще читать не нужно. В ре- зультате для поиска информации о файле необходимо выполнить существенно меньшее количество операций чтения диска.
Действительно, если, например, каталог содержит 4096 файлов, то файловая система FAT потребует чтения в среднем 64 секторов для поиска нужного файла внутри такого каталога, в то время как HPFS осуществит чтение всего только 2-4
секторов (в среднем) и найдёт искомый файл. Несложные расчёты позволяют уви- деть явные преимущества HPFS над FAT. Так, например, при использовании 40
входов на блок блоки каталога дерева с двумя уровнями могут содержать 1640
входов, а каталога дерева с тремя уровнями – уже 65 640 входов. Другими словами,
некоторый файл может быть найден в типичном каталоге из 65 640 файлов макси- мум за три обращения. Это намного лучше файловой системы FAT, где для нахож- дения файла нужно прочитать в худшем случае более 4000 секторов.
Размер каждого из блоков, в терминах которых выделяются каталоги в теку- щей реализации HPFS, равен 2 Кбайт. Размер записи, описывающей файл, зависит от размера имени файла. Если имя занимает 13 байтов (для формата 8.3), то блок из
2 Кбайт вмещает до 40 описателей файлов. Блоки связаны друг с другом посредст- вом списковой структуры (как и описатели экстентов) для облегчения последова- тельного обхода.
При переименовании файлов может возникнуть так называемая перебаланси- ровка дерева. Создание файла, переименование или стирание может приводить к каскадированию блоков каталогов. Фактически, переименование может потерпеть неудачу из-за недостатка дискового пространства, даже если файл непосредственно в размерах не увеличился. Во избежание этого «бедствия» HPFS поддерживает не- большой пул свободных блоков, которые могут использоваться при «аварии». Эта операция может потребовать выделения дополнительных блоков на заполненном диске. Указатель на этот пул свободных блоков сохраняется в SpareBlock.
215
Важное значение для повышения скорости работы с файлами имеет уменьше- ние их фрагментации. В HPFS считается, что файл является фрагментированным,
если он содержит больше одного экстента. Снижение фрагментации файлов со- кращает время позиционирования и время ожидания за счёт уменьшения количест- ва перемещений головок, необходимого для доступа к данным файла. Алгоритмы работы файловой системы HPFS работают таким образом, чтобы по возможности размещать файлы в последовательных смежных секторах диска, что обеспечивает максимально быстрый доступ к данным впоследствии. В системе FAT, наоборот,
запись следующей порции данных в первый же свободный кластер неизбежно при- водит к фрагментации файлов. HPFS тоже, если это предоставляется возможным,
записывает данные в смежные секторы диска (но не в первый попавшийся). Это позволяет несколько снизить число перемещений головок чтения/записи от дорож- ки к дорожке. При этом, когда данные дописываются в существующий файл, HPFS
сразу же резервирует как минимум 4 Кбайт непрерывного пространства на диске.
Если же часть этого пространства не потребовалась, то после закрытия файла она высвобождается для дальнейшего использования. Файловая система HPFS равно- мерно размещает непрерывные файлы по всему диску для того, чтобы впоследст- вии без фрагментации обеспечить их возможное увеличение. Если же файл не мо- жет быть увеличен без нарушения его непрерывности, HPFS опять-таки резервиру- ет 4Кбайт смежных блоков как можно ближе к основной части файла с целью со- кратить время позиционирования головок чтения/записи и время ожидания соот- ветствующего сектора.
Очевидно, что степень фрагментации файлов на диске зависит как от числа файлов, расположенных на нём, их размеров и размеров самого диска, так и от ха- рактера и интенсивности самих дисковых операций. Незначительная фрагментация файлов практически не сказывается на быстродействии операций с файлами. Фай- лы, состоящие из двух-трех экстентов, практически не снижают производитель- ность HPFS, так как эта файловая система следит за тем, чтобы области данных,
принадлежащие одному и тому же файлу, располагались как можно ближе друг к другу. Файл из трех экстентов имеет только два нарушения непрерывности, и, сле-
216
довательно, для его чтения потребуется всего лишь два небольших перемещения головки диска. Программы (утилиты) дефрагментации, имеющиеся для этой фай- ловой системы, по умолчанию считают наличие двух-трех экстентов у файла нор- мой. Например, программа HPFSOPT из набора утилит Gamma-Tech по умолчанию не дефрагментирует файлы, состоящие из трех и менее экстентов, а файлы, кото- рые имеют большее количестве экстентов, приводятся к 2 или 3 экстентам, если это возможно (файлы объёмом в несколько десятков мегабайт всегда будут фраг- ментированы, ибо максимально возможный размер экстента, как вы помните, равен
8 Мбайт). Надо сказать, что практика показывает, что в среднем на диске имеется не более 2 процентов файлов, имеющих три и более экстентов [96]. Даже общее количество фрагментированных файлов, как правило, не превышает 3 процентов.
Такая ничтожная фрагментация оказывает пренебрежимо малое влияние на общую производительность системы.
Теперь кратко рассмотрим вопрос надёжности хранения данных в HPFS. Лю- бая файловая система должна обладать средствами исправления ошибок, возни- кающих при записи информации на диск. Система HPFS для этого использует ме-
ханизм аварийного замещения (hotfix).
Если файловая система HPFS сталкивается с проблемой в процессе записи данных на диск, она выводит на экран соответствующее сообщение об ошибке. За- тем HPFS сохраняет информацию, которая должна была быть записана в дефект- ный сектор, в одном из запасных секторов, заранее зарезервированных на этот слу- чай. Список свободных запасных блоков хранится в резервном блоке HPFS. При обнаружении ошибки во время записи данных в нормальный блок HPFS выбирает один из свободных запасных блоков и сохраняет эти данные в нём. Затем файловая система обновляет карту аварийного замещения в резервном блоке. Эта карта представляет собой просто пары двойных слов, каждое из которых является 32–
битным номером сектора. Первый номер указывает на дефектный сектор, а второй
– на тот сектор среди имеющихся запасных секторов, который был выбран для его замены. После замены дефектного сектора запасным карта аварийного замещения записывается на диск, и на экране появляется всплывающее окно, информирующее
217
пользователя о произошедшей ошибке записи на диск. Каждый раз, когда система выполняет запись или чтение сектора диска, она просматривает карту аварийного замещения и подменяет все номера дефектных секторов номерами запасных секто- ров с соответствующими данными. Следует заметить, что это преобразование но- меров существенно не влияет на производительность системы, так как оно выпол- няется только при физическом обращении к диску, но не при чтении данных из дискового кэша. Очистка карты аварийного замещения автоматически выполняется программой CHKDSK при проверке диска HPFS. Для каждого замещённого блока
(сектора) программа CHKDSK выделяет новый сектор в наиболее подходящем для файла (которому принадлежат данные) месте жёсткого диска. Затем программа пе- ремещает данные из запасного блока в этот сектор и обновляет информацию о по- ложении файла, что может потребовать новой балансировки дерева блоков разме- щения. После этого CHKDSK вносит повреждённый сектор в список дефектных блоков, который хранится в дополнительном блоке HPFS, и возвращает освобож- денный сектор в список свободных запасных секторов резервного блока. Затем удаляет запись из карты аварийного замещения и записывает отредактированную карту на диск.
Все основные файловые объекты в HPFS, в том числе файловые узлы, блоки размещения и блоки каталогов, имеют уникальные 32-битные идентификаторы и указатели на свои родительские и дочерние блоки. Файловые узлы, кроме того, со- держат сокращённое имя своего файла или каталога. Избыточность и взаимосвязь файловых структур HPFS позволяют программе CHKDSK полностью восстанавли- вать файловую структуру диска, последовательно анализируя все файловые узлы,
блоки размещения и блоки каталогов. Руководствуясь собранной информацией,
CHKDSK реконструирует файлы и каталоги, а затем заново создает битовые карты свободных секторов диска. Запуск программы CHKDSK следует осуществлять с соответствующими ключами. Так, например, один из вариантов работы этой про- граммы позволяет найти и восстановить удаленные файлы.
HPFS относится к так называемым монтируемым файловым системам. Это оз- начает, что она не встроена в операционную систему, а добавляется к ней при не-
218
обходимости. Файловая система HPFS устанавливается оператором IFS
1
в файле
CONFIG.SYS. Этот оператор всегда помещается в первой строке данного конфи- гурационного файла. В приводимом далее примере оператор IFS устанавливает файловую систему HPFS с кэшем в 2 Мбайт, длиной записи кэша в 8 Кбайт и ав- томатической процедурой проверки дисков С и D:
IFS=E:\OS2\HPFS.IFS /CACHE:2048 /CRECL:4 /AUTOCHECK:CD
Для запуска программы управления процессом кэширования следует пропи- сать в файле CONFIG.SYS ещё одну строку:
RUN=E:\OS2\CACHE.EXE /Lazy:On /BufferIdle:2000 /DiskIdle:4000
/MaxAge:8000 /D1rtyMax:256 /ReadAhead:On
В этой строке включается режим отложенной («ленивой») записи, устанавли- ваются параметры работы этого режима, а также включается режим упреждающего чтения данных, что в целом позволяет существенно сократить количество обраще- ний к диску и ощутимо повысить быстродействие файловой системы. Так, ключ
Lazy с параметром On включает «ленивую запись», а с параметром Off – выклю- чает. Ключ BufferIdle определяет время в миллисекундах, в течение которого бу- фер кэша должен оставаться в неактивном состоянии, чтобы стало возможным осуществить запись данных из кэша на диск. По умолчанию (то есть если не про- писывать данный ключ явным образом) это время равно 500 мс. Ключ DiskIdle за- дает время (в миллисекундах), в течение которого диск должен оставаться в неак- тивном состоянии, чтобы стало возможным осуществить запись данных из кэша на диск. По умолчанию это время равно 1 с. Этот параметр позволяет избежать записи из кэша на диск во время выполнения других операций с диском.
Ключ MaxAge задаёт время (тоже в миллисекундах), по истечении которого часто сохраняемые в кэше данные наконец помечаются как «устаревшие» и при переполнении кэша могут быть замещены новыми. По умолчанию это время равно
5 с.
1
IFS (installable file system) – устанавливаемая, монтируемая система управления файлами.
219
Остальные подробности установки параметров и возможные значения ключей имеются в HELP-файлах, устанавливаемых вместе с операционной системой OS/2
Warp.
Наконец, следует сказать и ещё об одной системе управления файлами – речь идет о реализации HPFS для работы на серверах, функционирующих под управле- нием OS/2. Это система управления файлами, получившая название HPFS386.IPS.
Ёё принципиальное отличие от системы HPFS.IFS заключается в том, что
HPFS386.IFS позволяет (посредством более полного использования технологии расширенных атрибутов) организовать ограничения на доступ к файлам и катало- гами с помощью соответствующих списков доступа – ACL (access control list). Эта технология, как известно, используется в файловой системе NTFS. Кроме этого, в системе HPPS386.IFS в отличие от HPFS.IFS нет ограничений на объём памяти,
выделяемой для кэширования файловых записей. Иными словами, при наличии достаточного объёма оперативной памяти объём файлового кэша может быть в не- сколько десятков мегабайт, в то время как для обычной HPFS.IFS этот объём не может превышать 2 Мбайт, что по сегодняшним меркам безусловно мало. Наконец,
при установке режимов работы файлового кэша HPFS386.IFS есть возможность явным образом указать алгоритм кэширования. Наиболее эффективным алгорит- мом можно считать так называемый «элеваторный», когда при записи данных из кэша на диск они предварительно упорядочиваются таким образом, чтобы миними- зировать время, отводимое на позиционирование головок чтения/ записи. Головки чтения/записи при этом перемещаются от внешних цилиндров к внутренним и по ходу своего движения осуществляют запись и чтение данных в соответствии со специальным образом упорядочиваемым списком запросов на дисковые операции.
Приведем пример записи строк в конфигурационном файле CONFIG.SYS, ко- торые устанавливают систему HPFS386.IFS и определяют параметры работы её
подсистемы кэширования:
IFS=E:\IBM386FS\HPFS386.IFS /AUTOCHECK:EGH
RUN=E:\IBM386FS\CACHE386.EXE /Lazy:On /BufferIdle:4000 /MaxAge:20000
220
Эти записи следует понимать следующим образом. При запуске операционной системы в случае обнаружения флага, означающего, что не все файлы были закры- ты в процессе предыдущей работы, система управления файлами HPFS386.IFS
сначала запустит программу проверки целостности файловой системы для томов
Е:, G: и Н:. Для кэширования файлов при работе этой системы управления файлами устанавливается режим отложенной записи со временем жизни буферов до 20 с.
Остальные параметры, в частности алгоритм обслуживания запросов, устанавли- ваются в файле HPFS386.INI, который в данном случае располагается в директории
E:\IBM386FS.
Опишем кратко некоторые наиболее интересные параметры, управляющие ра- ботой кэша в этой системе управления файлами. Прежде всего, отметим, что файл
HPFS386.INI разбит на несколько секций. В настоящий момент рассмотрим секцию
[ULTIMEDIA]:
[ULTIMEDIA]
QUEUESORT={FIFO|ELEVATOR|DEFAULT|CURRENT}
QUEUEMETHOD={PRIORITY|NOPRIORITY|DEFAULT|CURRENT}
QUEUEDEPTH={1...255|DEFAULT|CURRENT}
Параметр QUEUESORT задаёт способ ведения очереди запросов к диску. Он может принимать значения FIFO, ELEVATOR, DEFAULT и CURRENT. Если зада- но значение FIFO, то каждый новый запрос просто добавляется в конец очереди, то есть запросы выполняются в том порядке, в котором они поступают в систему. Од- нако можно упорядочить некоторое количество запросов по возрастанию номеров дорожек. Если задано значение ELEVATOR, то включается режим поддержки упо- рядоченной очереди запросов. При этом запросы начинают обрабатываться по ал- горитму ELEVATOR (он же C-SCAN или «режим плавающей головки» [24, 28]).
Напомним, этот алгоритм подразумевает, что головка чтения/записи сканирует диск в выбранном направлении (например, в направлений возрастания номеров до- рожек), останавливаясь для выполнения запросов, находящихся на пути следова- ния. Когда она доходит до последнего запроса, головка чтения/записи переносится на начальную дорожку и процесс обслуживания запросов продолжается.
221
Если для параметра QUEUESORT задано значение DEFAULT, то выбирается алгоритм по умолчанию. Сейчас это ELEVATOR. Если задано значение CUR-
RENT, то остается в силе тот алгоритм, который был выбран DASD Manager при инициализации.
Параметр QUEUEMETHOD определяет, должны ли учитываться приоритеты запросов при построении очереди. Он может принимать значения PRIORITY, NO-
PRIORITY, DEFAULT и CURRENT. Если задано значение NOPRIORITY, то все запросы включаются в общую очередь, аих приоритеты игнорируются. Если зада- но значение PRIORITY, то модуль DASD Manager будет поддерживать несколько очередей запросов, по одной на каждый приоритет. Когда DASD Manager передаёт запросы на исполнение драйверу диска, он сначала выбирает запросы из самой приоритетной очереди, потом из менее приоритетной и т. д. Приоритеты назначает
HPFS386, а распределены они следующим образом.
High:
1 Shutdown или экстренная запись из-за сбоя питания.
2 Страничный обмен.
3 Обычные запросы от foreground
1
сессий.
4 Обычные запросы от background
2
сессии. (Приоритеты 3 и 4 равны, если в файле CONFIG.SYS задан параметр RIORITY_DISK_IO=NO.)
5 Read-ahead и низкоприоритетные запросы страничного обмена (страничная предвыборка).
6 Lazy-Write и прочие запросы, не требующие немедленной реакции.
Low:
7 Предвыборка.
Если для параметра QUEUEMETHOD задано значение DEFAULT, то выбира- ется метод по умолчанию. Сейчас это PRIORITY. Если задано значение CURRENT,
1
Foreground session – сессия «переднего плана», то есть та задача, с которой сейчас работает пользователь, окно этой задачи является активным.
2
Background session – «фоновая сессия», то есть задача, запущенная пользователем, но в настоящий момент не нахо- дящаяся непосредственно в работе. Говорят, что эта задача выполняется на фоне текущих активных вычислений.