Файл: А. В. Гордеев А. Ю. Молчанов системное программное обеспечение электронный вариант книги издательства Питер СанктПетербург Челябинск юургу каф. Автоматика и управление 2002 2 Предисловие Настоящий учебник.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.01.2024
Просмотров: 1034
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
176
ны запросившей их задаче. Аналогичный процесс происходит и при записи дан- ных. Буферирование используется во всех операционных системах, но помимо бу- ферирования применяется и кэширование. Кэширование исключительно полезно в том случае, когда программа неоднократно читает с диска одни и те же данные.
После того как они один раз будут помещены в кэш, обращений к диску больше не потребуется и скорость работы программы значительно возрастет.
Если не вдаваться в подробности, то под кэшем можно понимать некий пул буферов, которыми мы управляем с помощью соответствующего системного про- цесса. Если мы считываем какое-то множество секторов, содержащих записи того или иного файла, то эти данные, пройдя через кэш, там остаются (до тех пор, пока другие секторы не заменят эти буферы). Если впоследствии потребуется повторное чтение, то данные могут быть извлечены непосредственно из оперативной памяти без фактического обращения к диску. Ускорить можно и операции записи: данные помещаются в кэш, и для запросившей эту операцию задачи можно считать, что они уже фактически и записаны. Задача может продолжить своё выполнение, а системные внешние процессы через некоторое время запишут данные на диск. Это называется операцией отложенной записи (lazy write, «ленивая запись»). Если от- ложенная запись отключена, только одна задача может записывать на диск свои данные. Остальные приложения должны ждать своей очереди. Это ожидание под- вергает информацию риску не меньшему (если не большему), чем отложенная за- пись, которая к тому же и более эффективна по скорости работы с диском.
Интервал времени, после которого данные будут фактически записываться, с одной стороны, желательно выбрать больше, поскольку если потребуется ещё раз прочитать эти данные, то они уже и так фактически находятся в кэше. И после мо- дификации эти данные опять же помещаются в быстродействующий кэш. С другой стороны, для большей надёжности данные желательно поскорее отправить во внешнюю память, поскольку она энергонезависима и в случае какой-нибудь аварии
(например, нарушения питания) данные в оперативной памяти пропадут, в то вре- мя как на магнитном диске они с большой вероятностью останутся в безопасности.
Количество буферов, составляющих кэш, ограничено, поэтому возникает ситуация,
177
когда вновь прочитанные или записываемые новые секторы данных должны будут заменить данные в этих буферах. Возможно использование различных дисциплин,
в соответствии с которыми будет назначен какой-либо буфер под вновь затребо- ванную операцию кэширования.
Кэширование дисковых операций может быть существенно улучшено за счёт введения техники упреждающего чтения (read ahead). Она основана на чтении с диска гораздо большего количества данных, чем на самом деле запросила операци- онная система или приложение. Когда некоторой программе требуется считать с диска только один сектор, программа кэширования читает ещё и несколько допол- нительных блоков данных, А операции последовательного чтения нескольких сек- торов фактически несущественно замедляют операцию чтения затребованного сек- тора с данными. Поэтому, если программа вновь обратится к диску, вероятность того, что нужные ей данные уже находятся в кэше, достаточно высока. Поскольку передача данных из одной области памяти в другую происходит во много раз бы- стрее, чем чтение их с диска, кэширование существенно сокращает время выпол- нения операций с файлами.
Итак, путь информации от диска к прикладной программе пролегает как через буфер, так и через файловый кэш. Когда приложение запрашивает с диска данные,
программа кэширования перехватывает этот запрос и читает вместе с необ- ходимыми секторами ещё и несколько дополнительных. Затем она помещает в бу- фер требующуюся задаче информацию и ставит об этом в известность опера- ционную систему. Операционная система сообщает задаче, что её запрос выполнен и данные с диска находятся в буфере. При следующем обращении приложения к диску программа кэширования прежде всего проверяет, не находятся ли уже в па- мяти затребованные данные. Если это так, то она копирует их в буфер; если же их в кэше нет, то запрос на чтение диска передаётся операционной системе. Когда зада- ча изменяет данные в буфере, они копируются в кэш.
В ряде ОС имеется возможность указать в явном виде параметры кэширова- ния, в то время как в других за эти параметры отвечает сама ОС. Так, например, в системе Windows NT нет возможности в явном виде управлять ни объёмом файло-
178
вого кэша, ни параметрами кэширования. В системах Windows 95/98 такая воз- можность уже имеется, но она представляет не слишком богатый выбор. Фактиче- ски мы можем указать только объём памяти, отводимый для кэширования, и объём порции данных (буфер или chunk
1
), из которых набирается кэш. В файле System.ini есть возможность в секции [VCACHE] прописать, например, следующие значения:
[vcache]
MinFileCache=4096
MaxFileCache=32768
ChunkSize=512
Здесь указано, что минимально под кэширование данных зарезервировано 4
Мбайт оперативной памяти, максимальный объём кэша может достигать 32 Мбайт,
а размер данных, которыми манипулирует менеджер кэша, равен одному сектору.
В других ОС можно указывать больше параметров, определяющих работу подсистемы кэширования. Пример, демонстрирующий эти возможности, можно посмотреть в разделе «Файловая система HPFS».
Помимо описанных действий ОС может выполнять и работу по оптимизации перемещения головок чтения/записи данных, связанного с выполнением запросов от параллельно выполняющихся задач. Время, необходимое на получение данных с магнитного диска, складывается из времени перемещения магнитной головки на требуемый цилиндр и времени ожидания заданного сектора; временем считывания найденного сектора и затратами на передачу этих данных в оперативную память мы можем пренебречь. Таким образом, основные затраты времени уходят на поиск данных. В мультипрограммных ОС при выполнении многих задач запросы на чте- ние и запись данных могут идти таким потоком, что при их обслуживании образу- ется очередь. Если выполнять эти запросы в порядке поступления их в очередь, то вследствие случайного характера обращений к тому или иному сектору магнитного диска мы можем иметь значительные потери времени на поиск данных. Напраши- вается очевидное решение: поскольку выполнение переупорядочивания запросов с целью минимизации затрат времени на поиск данных можно выполнить очень бы-
1
Chunk – кусочек.
179
стро (практически этим временем можно пренебречь, учитывая разницу в быстро- действии центральной части и устройств ввода/вывода), то необходимо найти ме- тод, позволяющий перестраивать очередь запросов оптимальным образом. Изуче- ние этой проблемы позволило найти наиболее эффективные дисциплины планиро- вания.
Перечислим известные дисциплины, в соответствии с которыми можно пере- страивать очередь запросов на операции чтения/записи данных [28]:
| SSTF (shortest seek time – first) – с наименьшим временем поиска – первым.
В соответствии с этой дисциплиной при позиционировании магнитных головок следующий выбирается запрос, для которого необходимо минимальное перемеще- ние с цилиндра на цилиндр, даже если этот запрос не был первым в очереди на ввод/вывод. Однако для этой дисциплины характерна резкая дискриминация опре- деленных запросов, а ведь они могут идти от высокоприоритетных задач. Обраще- ния к диску проявляют тенденцию концентрироваться, в результате чего запросы на обращение к самым внешним и самым внутренним дорожкам могут обслужи- ваться существенно дольше и нет никакой гарантии обслуживания. Достоинством такой дисциплины является максимально возможная пропускная способность дис- ковой подсистемы.
| Scan (сканирование). По этой дисциплине головки перемещаются то в од- ном, то в другом «привилегированном» направлении, обслуживая «по пути» под- ходящие запросы. Если при перемещении головок чтения/записи более нет попут- ных запросов, то движение начинается в обратном направлении.
| Next-Step Scan – отличается от предыдущей дисциплины тем, что на каждом проходе обслуживаются только запросы, которые уже существовали на момент на- чала прохода. Новые запросы, появляющиеся в процессе перемещения головок чтения/записи, формируют новую очередь запросов, причем таким образом, чтобы их можно было оптимально обслужить на обратном ходу.
| C-Scan (циклическое сканирование). По этой дисциплине головки переме- щаются циклически с самой наружной дорожки к внутренним, по пути обслуживая
180
имеющиеся запросы, после чего вновь переносятся к наружным цилиндрам. Эту дисциплину иногда реализуют таким образом, чтобы запросы, поступающие во время текущего прямого хода головок, обслуживались не попутно, а при следую- щем ходе, что позволяет исключить дискриминацию запросов к самым крайним цилиндрам; она характеризуется очень малой дисперсией времени ожидания об- служивания [28]. Эту дисциплину обслуживания часто называют «элеваторной».
Функции файловой системы ОС и иерархия
данных
Напомним, что под файлом обычно понимают набор данных, организованных в виде совокупности записей одинаковой структуры. Для управления этими дан- ными создаются соответствующие системы управления файлами. Возможность иметь дело с логическим уровнем структуры данных и операций, выполняемых над ними в процессе их обработки, предоставляет файловая система. Таким образом,
файловая система – это набор спецификаций и соответствующее им программное обеспечение, которые отвечают за создание, уничтожение, организацию, чтение,
запись, модификацию и перемещение файловой информации, а также за управле- ние доступом к файлам и за управление ресурсами, которые используются файла- ми. Именно файловая система определяет способ организации данных на диске или на каком-нибудь ином носителе данных. В качестве примера можно привести фай- ловую систему FAT, реализация для которой имеется в абсолютном большинстве
ОС, работающих в современных ПК
1
Как правило, все современные ОС имеют соответствующие системы управле-
ния файлами. В дальнейшем постараемся различать файловую систему и систему управления файлами.
Система управления файлами является основной подсистемой в абсолютном большинстве современных операционных систем, хотя в принципе можно обхо- диться и без неё. Во-первых, через систему управления файлами связываются по данным все системные обрабатывающие программы. Во-вторых, с помощью этой
1
В MS-DOS, OS/2, Windows 95, Windows NT, Linux имеется поддержка работы с файлами, организованными по принципам FAT. Однако программные модули соответствующих файловых систем не взаимозаменяемы. Кроме это- го, все эти файловые системы имеют свои индивидуальные особенности и ограничения. Таким образом, иногда только из контекста ясно, о чём идет речь – о принципах работы файловой системы или о её конкретной реализации.
181
системы решаются проблемы централизованного распределения дискового про- странства и управления данными. В-третьих, благодаря использованию той или иной системы управления файлами пользователям предоставляются следующие возможности:
♦ создание, удаление, переименование (и другие операции) именованных на- боров данных (именованных файлов) из своих программ или посредством специ- альных управляющих программ, реализующих функции интерфейса пользователя с его данными и активно использующих систему управления файлами;
♦ работа с не дисковыми периферийными устройствами как с файлами;
♦ обмен данными между файлами, между устройствами, между файлом и уст- ройством (и наоборот);
♦ работа с файлами с помощью обращений к программным модулям системы управления файлами (часть API ориентирована именно на работу с файлами);
♦ защита файлов от несанкционированного доступа.
В некоторых ОС может быть несколько систем управления файлами, что обеспечивает им возможность работать с несколькими файловыми системами.
Очевидно, что системы управления файлами, будучи компонентом ОС, не являют- ся независимыми от этой ОС, поскольку они активно используют соответствующие вызовы API (application program interface, прикладной программный интерфейс). С
другой стороны, системы управления файлами сами дополняют API новыми вызо- вами. Можно сказать, что основное назначение файловой системы и соответст- вующей ей системы управления файлами – организация удобного доступа к дан- ным, организованным как файлы, то есть вместо низкоуровневого доступа к дан- ным с указанием конкретных физических адресов нужной нам записи используется логический доступ с указанием имени файла и записи в нём.
Другими словами, термин «файловая система» определяет, прежде всего,
принципы доступа к данным, организованным в файлы. Этот же термин часто ис- пользуют и по отношению к конкретным файлам, расположенным на том или ином носителе данных. А термин «система управления файлами» следует употреблять по отношению к конкретной реализации файловой системы, то есть это – комплекс
182
программных модулей, обеспечивающих работу с файлами в конкретной операци- онной системе.
Следует ещё раз заметить, что любая система управления файлами не сущест- вует сама по себе – она разработана для работы в конкретной ОС. В качестве при- мера можно сказать, что всем известная файловая система FAT (file allocation table)
имеет множество реализации как система управления файлами. Так, система, полу- чившая это название и разработанная для первых персональных компьютеров, на- зывалась просто FAT (сейчас её называют FAT-12). Её разрабатывали для работы с дискетами, и некоторое время она использовалась при работе с жесткими дисками.
Потом её усовершенствовали для работы с жесткими дисками большего объёма, и эта новая реализация получила название FAT-16. Это название файловой системы мы используем и по отношению к системе управления файлами самой MS-DOS.
Реализацию же системы управления файлами для OS/2, которая использует основ- ные принципы системы FAT, называют super-FAT; основное отличие – возмож- ность поддерживать для каждого файла расширенные атрибуты. Есть версия сис- темы управления файлами с принципами FAT и для Windows 95/98, для Windows
NT и т. д. Другими словами, для работы с файлами, организованными в соответст- вии с некоторой файловой системой, для каждой ОС должна быть разработана со- ответствующая система управления файлами. Эта система управления файлами будет работать только в той ОС, для которой она и создана; но при этом она позво- лит работать с файлами, созданными с помощью системы управления файлами другой ОС, работающей по тем же основным принципам файловой системы.
Структура магнитного диска (разбиение
дисков на разделы)
Для того чтобы можно было загрузить с магнитного диска собственно саму
ОС, а уже с её помощью и организовать работу той или иной системы управления файлами, были приняты специальные системные соглашения о структуре диска.
Расположение структуры данных, несущее информацию о логической организации диска и простейшую программу, с помощью которой можно находить и загружать
183
программы загрузки той или иной ОС, очевидно – это самый первый сектор маг- нитного диска.
Как известно, информация на магнитных дисках размещается и передаётся блоками. Каждый такой блок называется сектором (sector), сектора расположены на концентрических дорожках поверхности диска. Каждая дорожка (track) обра- зуется при вращении магнитного диска под зафиксированной в некотором пред- определенном положении головкой чтения/записи. Накопитель на жестких магнит- ных дисках (НЖМД)
1
содержит один или более дисков (в современных распро- страненных НЖМД часто – два или три). Однако обычно под термином «жесткий диск» понимают весь пакет магнитных дисков [24].
Группы дорожек (треков) одного радиуса, расположенных на поверхностях магнитных дисков, образуют так называемые цилиндры (cylinder). Современные жесткие диски могут иметь по несколько десятков тысяч цилиндров, в то время как на поверхности дискеты число дорожек (число цилиндров) ныне, как правило, со- ставляет всего восемьдесят
2
Каждый сектор состоит из поля данных и поля служебной информации, огра- ничивающей и идентифицирующей его. Размер сектора (точнее – ёмкость поля данных) устанавливается контроллером или драйвером. Пользовательский ин- терфейс DOS поддерживает единственный размер сектора – 512 байт. BIOS же не- посредственно предоставляет возможности работы с секторами размером 128, 256,
512 или 1024 байт. Если управлять контроллером непосредственно, а не через про- граммный интерфейс более высокого уровня (например, уровень DOS), то можно обрабатывать секторы и с другими размерами. Однако в большинстве современных
ОС размер сектора выбирается равным 512 байт.
Физический адрес сектора на диске определяется с помощью трех «коорди- нат», то есть представляется триадой [c-h-s], где с – номер цилиндра (дорожки на
1
НЖМД обычно называется «винчестером» – так в свое время стали называть одну из первых моделей НЖМД, ко- торая имела обозначение «30/30» и этим напоминала маркировку известного оружия. Возможно, также, что название происходит от места первоначальной разработки – филиала фирмы IBM в г. Винчестере (Великобритания), где впервые в 1973 г. была применена технология создания винчестеров.
2
Это справедливо, конечно, не для всех дискет. Однако для современных 3.5" дискет мы действительно имеем 80
цилиндров, две рабочие поверхности и по 18 секторов на каждой дорожке, что в итоге дает нам
2х80х18х512=1474560 байтов (или 1,44 Мбайт).
184
поверхности диска, cylinder), h – номер рабочей поверхности диска (магнитной го- ловки, head), a s – номер сектора на дорожке. Номер цилиндра с лежит в диапазоне
0...С-1, где С – количество цилиндров. Номер рабочей поверхности диска h при- надлежит диапазону 0...Н-1, где Н – число магнитных головок в накопителе. Номер сектора на дорожке s указывается в диапазоне 1...S, где S – количество секторов на дорожке. Например, триада [1-0-2] адресует сектор 2 на дорожке 0 (обычно верх- няя рабочая поверхность) цилиндра 1. В дальнейшем мы тоже будем пользоваться именно этими обозначениями.
Напомним, что обмен информацией между ОЗУ и дисками физически осуще- ствляется только секторами. Вся совокупность физических секторов на винчестере представляет его неформатированную ёмкость.
Жесткий диск может быть разбит на несколько разделов (partition) которые в принципе затем могут использоваться либо одной ОС, либо различными ОС. При- чем самым главным является то, что на каждом разделе может быть организована своя файловая система. Однако для организации даже одной-единственной файло- вой системы необходимо определить, по крайней мере, один раздел.
Разделы диска могут быть двух типов – primary (обычно этот термин перево- дят как первичный) и extended (расширенный). Максимальное число primary-разде- лов равно четырем. При этом на диске обязательно должен быть, по крайней мере,
один primary-раздел. Если primary-разделов несколько, то только один из них мо- жет быть активным. Именно загрузчику, расположенному в активном разделе, пе- редаётся управление при включении компьютера и загрузке операционной сис- темы. Остальные primary-разделы в этом случае считаются
1
«невидимыми, скры- тыми» (hidden).
Согласно спецификациям на одном жестком диске может быть только один
extended-раздел, который, в свою очередь, может быть разделен на большое коли- чество подразделов – логических дисков (logical). В этом смысле термин «первич- ный» следует признать не совсем удачным переводом слова primary; можно это
1
Невидимыми они являются только для тех систем, которые используют спецификации DOS.
185
слово перевести и как «простейший, примитивный». В этом случае становится по- нятным и логичным термин extended.
Один из primary-разделов должен быть активным, именно с него должна за- гружаться программа загрузки операционной системы, или так называемый менед-
жер загрузки, назначение которого – загрузить программу загрузки ОС из какого- нибудь другого раздела, и уже с её помощью загружать операционную систему.
Поскольку до загрузки ОС система управления файлами работать не может, то сле- дует использовать для указания упомянутых загрузчиков исключительно абсолют- ные адреса в формате [с-h-s].
По физическому адресу [0-0-1] на винчестере располагается главная загрузоч-
ная запись (master boot record, MBR), содержащая внесистемный загрузчик (non–
system bootstrap – NSB), а также таблицу разделов (partition table, PT). Эта запись за- нимает ровно один сектор, она размещается в памяти, начиная с адреса 0:7C00h,
после чего управление передаётся коду, содержащемуся в этом самом первом сек- торе магнитного диска. Таким образом, в самом первом (стартовом) секторе физи- ческого жесткого диска находится не обычная запись boot record, как на дискете, a master boot record.
MBR является основным средством загрузки с жесткого диска, поддерживае- мым BIOS. В MBR находятся три важных элемента:
♦ программа начальной загрузки (non-system bootstrap). Именно она запуска- ется BIOS после успешной загрузки в память первого сектора с MBR. Она, очевид- но, не превышает 512 байт и её хватает только на то, чтобы загрузить следующую,
чуть более сложную программу, обычно – стартовый сектор операционной систе- мы – и передать ему управление;
♦ таблица описания разделов диска (partition table). Располагается в MBR по смещению 0x1BE и занимает 64 байта;
♦ сигнатура MBR. Последние два байта MBR должны содержать число
AA55h. По наличию этой сигнатуры BIOS проверяет, что первый блок был загру- жен успешно. Сигнатура эта выбрана не случайно. Её успешная проверка позволя-