Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
У. Столлингс ГЛАВА 11 Операции в-в и файлы.doc
Скачиваний:
53
Добавлен:
11.05.2015
Размер:
549.89 Кб
Скачать

11.6. Raid

Как упоминалось ранее, рост производительности вторичных запоминаю­щих устройств значительно отстает от роста производительности процессоров и основной памяти. Такое несоответствие вынуждает обращать особое внимание на дисковую систему при повышении уровня общей производительности.

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

В случае применения множества дисков имеется большое количество вари­антов организации данных и добавления избыточности для повышения надежно­сти (а это может создать трудности при разработке схем баз данных, способных работать на разных платформах под управлением разных операционных систем). К счастью, имеется промышленный стандарт RAID (Redundant Array of Inde­pendent Disks — избыточный массив независимых дисков). RAID-схема состоитиз 7 уровней1 — от нулевого до шестого. Эти уровни не имеют иерархической • структуры, но определяют различные архитектуры со следующими общими ха­рактеристиками.

  1. RAID — это набор физических дисков, рассматриваемых операционной системой как единый логический диск.

  2. Данные распределены по физическим дискам массива.

  3. Избыточная емкость дисков используется для хранения контрольной ин­ формации, гарантирующей восстановление данных в случае отказа одного из дисков.

Вторая и третья характеристики различны для разных уровней RAID. RAID нулевого уровня не поддерживает третью характеристику вовсе.

Термин RAID первоначально был употреблен в научном докладе группы разработчиков Университета Калифорния в Беркли [РАТТ88]2. В докладе в об­щих чертах были рассмотрены различные конфигурации и применение RAID, a также определения уровней RAID. Эта стратегия заменяет диски с большой плотностью записи множеством дисков с малой плотностью и распределяет дан­ные таким образом, что обеспечивает возможность одновременного доступа к данным из разных дисков. Это существенно повышает эффективность ввода-вывода и дает возможность постепенного наращивания емкости массива.

Уникальность предложенной технологии заключается в эффективном ис­пользовании избыточности. Благодаря наличию большого количества дисков по­вышается производительность, но увеличивается вероятность сбоев. В связи с этим RAID предусматривает хранение дополнительной информации, позволяю- • щей восстанавливать данные, утерянные вследствие сбойной ситуации.

В табл. 11.4 представлены все 7 уровней RAID. Отметим, что уровни 2 и 4 не подходят для промышленного применения, но, тем не менее, описание этих уровней помогает определиться с выбором схем проектирования некоторых дру­гих уровней.

Таблица 11.4. Уровни RAID

Категория

Уровень

Описание

Скорость обработки запросов

Скорость передачи данных

Типичное применение

Расщепление

0

Без избыточ-

ности

Большие поло-

сы: отлично

Малые поло-

сы: отлично

Приложения

с некритическими

данными,

требующие

высокой

призводи-

тельности

Отражение3

1

Отражение

Хорошо/удов-

летворительно

Удовлетвори-

тельно/удов-

летворительно

Системные

диски, важ-

ные файлы

Параллельный

доступ

2

Избыточность

с кодами

Хэмминга

Плохо

Отлично

3

Четность

с чередую-

щимися

битами

Плохо

Отлично

Приложения

с большими

запросами

ввода-вывода,

такие, как

графические

редакторы

или САПР

Независимый

доступ

4

Четность с

чередую-

щимися

блоками

Отлично/

удовлетвори-

тельно

Удовлетвори-

тельно/плохо

5

Распределен-

ная четность с

чередующи-

мися блоками

Отлично/

удовлетвори-

тельно

Удовлетвори-

тельно/плохо

Высокая ско-

рость запро-

сов, интен-

сивное чте-

ние, поиск

данных

6

Двойная рас-

пределенная

четность с

чередующи-

мися блоками

Отлично/

плохо

Удовлетвори-

тельно/плохо

Приложения,

требующие

исключи-

тельно

высокой на-

дежности

На рис. 11.9 показано использование семи схем RAID для поддержки того же объема данных, который требует четырех дисков без применения избыточно­сти. Рисунок показывает размещение пользовательских и избыточных данных, а также указывает относительные требования уровней к дисковому пространству.

RAID 0

Уровень 0 не является настоящим RAID-уровнем, поскольку он не ис­пользует избыточность для повышения эффективности. Тем не менее сущест­вует ряд применений, таких, как некоторые суперкомпьютеры, где домини­руют вопросы производительности и емкости, а снижение стоимости более важно, чем надежность.

В схеме RAID 0 пользовательские и системные данные распределяются по всем дискам массива. Это дает заметное преимущество перед использова­нием одного большого диска: если два различных запроса ввода-вывода об­ращаются к двум различным блокам данных, то имеется немалая вероят­ность того, что эти блоки размещены на различных дисках, и два запроса могут быть обработаны, уменьшая тем самым время ожидания в очереди ввода-вывода.

Заметим, однако, что RAID 0 идет дальше простого распределения дан­ных по массиву дисков: данные расщеплены (stripped) по всем имеющимся дискам (см. рис. 11.10). Все пользовательские и системные данные рассмат­риваются как хранящиеся на одном логическом диске. Диск делится на по­лосы, которые могут быть физическими блоками, секторами или другими единицами хранения. Полосы циклически размещаются на последовательных дисках массива. В n-дисковом массиве первые п логических полос физически располагаются как первые полосы каждого из га дисков; вторые га полос рас­полагаются как вторые полосы каждого из дисков и т.д. Преимущество та­кой компоновки состоит в том, что если один запрос ввода-вывода обращает­ся к множеству логически последовательных полос, то параллельно может быть обработано до га полос, и намного уменьшается тем самым время обра­ботки запроса.

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

RAID О и передача большого объема данных

Эффективность любого из уровней RAID непосредственно зависит от запро­сов компьютера и способа размещения данных. Наиболее очевидна адресация этих запросов в RAID 0, где анализу не препятствует избыточность. Прежде все­го рассмотрим использование RAID 0 для получения высокой скорости передачи данных. Приложения с высокими требованиями к скорости передачи данных должны удовлетворять двум условиям. Первое состоит в том, что на протяжении всего маршрута между главной памятью компьютера и отдельными дисководами должна быть большая пропускная способность передачи данных. Сюда включа­ются внутренние шины контроллера, шины ввода-вывода компьютера, адаптеры ввода-вывода, шины основной памяти.

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

Рис. 11.9. Уровни RAID (продолжение)

RAID 0 и высокая частота запросов ввода-вывода

В среде, ориентированной на транзакции, пользователя обычно больше интере­сует время отклика, чем скорость передачи данных. При индивидуальном запросе ввода-вывода для небольшого объема данных преобладающее время операции затра­чивается на перемещение дисковых головок (время поиска) и на вращение диска.

В транзакционной среде могут происходить сотни запросов ввода-вывода в секунду. Дисковый массив может обеспечить высокую скорость выполнения опе­раций ввода-вывода путем выравнивания загрузки нескольких дисков. Эффек­тивное выравнивание загрузки достигается только при наличии большого мно­жества ожидающих обработки запросов ввода-вывода. Под этим, по сути, подразумевается существование нескольких независимых приложений (или одного, ориентированного на выполнение транзакций, способного выполнять множество асинхронных запросов ввода-вывода). На эффективность будет оказывать влия­ние и размер полосы. Если размер полосы сравнительно большой, такой, что один запрос ввода-вывода требует доступа только к одному диску, то множество находящихся в режиме ожидания запросов может быть обработано параллельно, и тем самым уменьшается время ожидания в очереди каждого запроса.

Рис. 11.10. Размещение данных в массиве RAID О [MASS97]

RAID 1

RAID 1 отличается от RAID 2-RAID 6 способом достижения избыточности. Во всех остальных RAID-схемах используется какой-либо способ вычислений, в то время как в RAID 1 избыточность достигается простым дублированием всех данных. Как показано на рис. 11.9,6, в этой схеме используется то же расщеп­ление данных, что и в RAID О, но каждая логическая полоса размещается на двух разных физических дисках, так что для каждого диска массива имеется зеркальный диск, содержащий точно такие же данные.

RAID 1 обладает следующими положительными характеристиками.

  1. Запрос на чтение может быть обслужен любым из двух дисков, содержащих необходимые данные; для обслуживания выбирается тот диск, у которого минимальное время поиска.

  2. Для запроса на запись необходимо обновление обеих полос, что может быть выполнено в параллельном режиме. Поэтому скорость записи определяется более медленной из них (т.е. той, для которой время поиска оказывается большим). Однако никаких дополнительных расходов на запись при приме­нении RAID 1 не требуется. На уровнях со второго по шестой операция за­писи требует вычисления контрольных битов.

3. Простота восстановления данных в случае сбоя — при сбое одного диска данные могут быть доступны из второго.

Принципиальной отрицательной характеристикой RAID 1 является стои­мость, связанная с необходимостью двойного дискового пространства для логи­ческого диска. По этой причине использование RAID 1 ограничено дисками с системным программным обеспечением и данными, а также другими очень важ­ными файлами. В этих случаях RAID 1 обеспечивает создание резервных копий всех файлов в режиме реального времени, так что в случае аварийной ситуации на диске все критические данные могут быть немедленно извлечены.

В среде, ориентированной на транзакции, RAID 1 может достичь высокой частоты запросов ввода-вывода, если основная масса запросов — на чтение дис­ка. В этой ситуации производительность RAID 1 может приблизиться к двойной производительности RAID 0. Тем не менее если большая часть запросов — на за­пись, существенного повышения производительности по сравнению с RAID 0 достичь не удастся. RAID 1 может также обеспечить повышенную производи­тельность для приложений с интенсивным считыванием с диска.

RAID 2

Уровни 2 и 3 используют технологию параллельного доступа. В таком мас­сиве все диски, являющиеся элементами массива, участвуют в выполнении каж­дого запроса ввода-вывода. Обычно шпиндели индивидуальных дисководов син­хронизируются таким образом, что все головки дисков располагаются в одной и той же позиции в любой момент времени.

Как и в других схемах, здесь также используется разделение данных на поло­сы. В схемах RAID 2 и RAID 3 полосы оказываются очень малыми; нередко они со­ответствуют одному байту или слову. В схеме RAID 2 код с коррекцией ошибок рас­считывается по соответствующим битам каждого диска и хранится в соответствую­щих местах дискового массива. Обычно в этом случае используется код Хэмминга (Hamming), который способен исправлять одинарные и выявлять двойные ошибки.

Несмотря на то что для RAID 2 необходимо меньшее количество дисков, чем для RAID 1, эта схема все еще весьма дорога. Количество резервных дисков пропорционально количеству дисков данных. При одиночном считывании осу­ществляется одновременный доступ ко всем дискам. Данные запроса и код кор­рекции ошибок передаются контроллеру массива. При наличии однобитовой ошибки контроллер способен быстро ее откорректировать, так что доступ для чтения в этой схеме не замедляется. При одиночной записи происходит одновре­менное обращение ко всем дискам массива.

Схема RAID 2 могла бы использоваться в среде с многочисленными ошибками дисков. Однако в силу высокой надежности дисков RAID 2 не была реализована.

RAID3

Схема RAID 3 организована аналогично схеме RAID 2. Отличие состоит в том, что для RAID 3 требуется только один резервный диск, независимо от размера дискового массива. В RAID 3 применяется параллельный доступ с распре­деленными по небольшим полосам данными. Вместо кода с исправлением оши­бок для всех битов в одной и той же позиции на всех дисках, размещается рас­считанный простой бит четности.

Избыточность

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

Восстановить данные довольно просто. Рассмотрим массив из пяти дисков, в которых Х0-ХЗ — данные на дисках 0-3, а Х4 — данные диска четности. Четность для i-ro бита вычисляется следующим образом4:

Предположим, что произошел сбой диска XI. Если мы добавим

к обеим частям предыдущего уравнения, то получим

Таким образом, содержимое каждой полосы данных XI может быть восста­новлено по содержимому соответствующих полос остальных дисков массива. Этот принцип работает во всех RAID-уровнях с третьего по шестой.

В случае сбоя диска все данные остаются доступными в так называемом со­кращенном режиме. В этом режиме для операций чтения отсутствующие данные восстанавливаются "на лету", с применением описанного способа. При сокра­щенной записи данных должна поддерживаться согласованность по четности для позднейшего восстановления информации. Возврат к штатному функционирова­нию требует замены сбойного диска и полного восстановления его содержимого.

Производительность

Поскольку данные разбиваются на очень малые полосы, RAID 3 может обеспечить высокую скорость передачи данных. Любой запрос ввода-вывода включает параллельную передачу данных из всех дисков массива.

Особенно заметна повышенная производительность при передаче боль­шого объема данных. Однако за один раз может быть выполнен только один запрос ввода-вывода, поэтому в ориентированной на транзакции среде произ­водительность падает.

RAID 4

RAID-уровни с 4-го по 6-й используют технологию независимого доступа. В массиве с независимым доступом каждый диск функционирует независимо от дру­гих, так что отдельные запросы ввода-вывода могут выполняться параллельно. Соот­ветственно, массивы с независимым доступом могут использоваться в тех приложениях, которым необходима высокая частота запросов ввода-вывода, и менее пригод­ны для приложений, требующих большой скорости передачи данных.

Как и в других RAID-схемах, здесь применяется расщепление данных на полосы. В схемах RAID 4-6 полосы сравнительно большие. В RAID 4 по соот­ветствующим полосам на каждом диске данных вычисляется полоса четности, хранящаяся на дополнительном избыточном диске.

После обновления (измененные биты отмечены штрихом) получаем:

В схеме RAID 4 имеются дополнительные расходы при выполнении опера­ции записи небольшого блока данных. При каждой записи программное обеспе­чение управления массивом должно обновить не только пользовательские дан­ные, но и соответствующие биты четности. Рассмотрим массив, состоящий из пяти дисков, в котором устройства Х0-ХЗ содержат данные, а Х4 представляет собой диск четности. Предположим, что выполняется запись, которая включает только полосу на диске XI. Изначально для каждого i-го бита выполняется сле­дующее соотношение:

Итак, для вычисления новой четности программное обеспечение управления массивом должно прочитать старую пользовательскую полосу и старую полосу четности. После этого программное обеспечение может обновить эти две полосы новыми данными и вновь рассчитанной четностью. Таким образом, запись каж­дой полосы включает два чтения и две записи.

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

RAID 5

RAID 5 организован подобно RAID 4, но с тем отличием, что RAID 5 рас­пределяет полосы четности по всем дискам. Распространенное размещение полос четности — в соответствии с циклической схемой, как показано на рис. 11.9,е.

Распределение полос четности по всем накопителям позволяет избежать снижения производительности, связанного с операциями ввода-вывода с одним диском четности (с чем мы столкнулись при рассмотрении RAID 4).

RAID 6

Схема RAID 6 была представлена в работе [KATZ89] разработчиками из Беркли. В этой схеме выполняются два различных расчета четности, резуль­таты которых хранятся в разных блоках на разных дисках. Поэтому массивыRAID 6 с объемом пользовательских данных, требующих N дисков, состоят из N+2 дисков.

На рис. 11.9,ж показана схема RAID 6. На этом рисунке Р и Q представля­ют результаты применения двух различных алгоритмов проверки данных. Один из них — применение операции "исключающего или", используемой в RAID 4 и RAID 5, другой представляет собой более сложную схему вычислений. Это дает возможность восстановления данных даже в случае сбоя двух дисков массива.

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

11.7. ДИСКОВЫЙ КЭШ

В разделе 1.6 и приложении А к главе 1, "Обзор компьютерных систем", мы рассмотрели принципы работы кэш-памяти. Термин кэш-память обычно применяется к памяти, которая меньше и быстрее основной памяти и которая располагается между основной памятью и процессором. Кэш-память уменьшает среднее время доступа к памяти благодаря принципу локализации.

Этот же принцип может быть применен и к дисковой памяти. Кэш диска представляет собой буфер в основной памяти для содержимого некоторых секто­ров диска. Если запрос ввода-вывода обращается к отдельному сектору, то сна­чала производится проверка на наличие этого сектора в кэше. Если сектор име­ется в кэше, то запрос удовлетворяется из кэша. В противном случае запрошенный сектор считывается в кэш с диска. Если блок данных потребовался для выполнения одиночного запроса ввода-вывода, то, исходя из принципа локали­зации, весьма вероятно, что он вновь потребуется в ближайшем будущем.

Вопросы разработки

Некоторые вопросы разработки представляют особый интерес. Первый из них связан с тем, что если запрос ввода-вывода удовлетворяется кэшем, то дан­ные из кэша должны быть переданы запросившему процессу. Это может быть выполнено как путем пересылки блока данных в основной памяти из кэша в об­ласть пользовательского процесса, так и посредством совместного использования памяти кэша (в этом случае запросившему процессу можно передать указатель на соответствующий слот кэша). Последний подход экономит время, использо­вавшееся для пересылки данных из памяти в память, и разрешает совместный доступ к кэшу другим процессам (в соответствии с рассмотренной в главе 5, "Параллельные вычисления: взаимоисключения и многозадачность", моделью читателей/писателей).

Второй вопрос связан со стратегией замещения. Когда в кэш поступает но­вый сектор, он должен заменить один из содержащихся в кэше секторов. Эта проблема аналогична рассмотренной в главе 8, "Виртуальная память", проблеме замещения страниц. При изучении этого вопроса был опробован ряд алгоритмов, и в результате наиболее подходящим (и, соответственно, распространенным) ока­зался алгоритм замены блока, к которому дольше всего не было обращений(least recently used — LRU). Логически кэш состоит из стека блоков, причем на вершине стека располагается блок, к которому было последнее обращение. При обращении к блоку в кэше он перемещается из текущей позиции на вершину стека. Если блок поступает с диска, то самый нижний блок стека удаляется, а вновь поступивший блок размещается на вершине стека. Естественно, необходи­мости в реальном перемещении блоков по основной памяти нет — с кэшем мо­жет быть связан стек указателей на блоки.

Другой возможностью является алгоритм замены тех блоков, обращение к которым происходит наименее часто (least frequently used — LFU). Этот алго­ритм может быть реализован посредством назначения счетчика каждому блоку кэша. При поступлении блока его счетчику присваивается значение 1; с каждым новым обращением значение счетчика увеличивается на 1. При необходимости замены выбирается блок с наименьшим значением счетчика. Может показаться, что LFU является более подходящей по сравнению с LRU стратегией, поскольку LFU использует более существенную информацию о блоках. Однако у простого LFU-алгоритма имеется следующая проблема. Может возникнуть ситуация, ко­гда обращение к некоторым блокам выполняется относительно редко, но зато при обращении интервалы между повторными обращениями оказываются ко­роткими вследствие локализации. Тем самым значение счетчика резко увеличи­вается и не отражает реальной вероятности использования данного блока в бли­жайшее время. Так эффект локализации может стать причиной того, что алго­ритм LFU произведет неверный выбор замещаемого блока.

Для преодоления этого недостатка алгоритма LFU предлагается технология, известная как замещение, основанное на частоте обращений [ROBI90]. Для ясно­сти рассмотрим упрощенную версию, представленную на рис. 11.11,а. Блоки ло­гически организованы в виде стека, как в алгоритме LRU. Ряд блоков в верхней части стека отделяется как новый раздел. При успешном обращении к кэшу соответствующий блок перемещается на вершину стека. Если блок к этому време­ни уже находился в новом разделе, то его счетчик обращений не увеличивается; i в противном случае его значение увеличивается на 1. Из-за того что размер но­вого раздела достаточно большой, счетчики блоков, к которым происходит мно­гократное обращение за короткий период времени, останутся неизменными. Ес­ли же выполняется обращение к блоку, отсутствующему в кэше, для замещения выбирается блок с наименьшим значением счетчика, расположенный вне нового раздела; в случае наличия нескольких таких блоков выбирается тот, к которому дольше всего не было обращений.

Авторы сообщают, что такая стратегия приводит лишь к незначительному улучшению стратегии LRU. Проблема заключается в следующем.

  1. При отсутствии блока в кэше блок загружается в новый раздел со значением счетчика, равным 1.

  2. Значение счетчика остается равным 1 все время пребывания блока в новом разделе.

  3. В конечном счете блоки покидают новый раздел, значение счетчика при этом остается равным 1.

  4. Если к такому блоку не происходит обращения за достаточно короткий промежуток времени, то вполне вероятно, что он будет заменен, поскольку значение его счетчика — наименьшее среди всех блоков вне нового раздела.

Внесение еще одного улучшения в алгоритм позволяет решить эту пробле­му. Разобьем стек на три раздела — новый, средний и старый (рис. 11.11,6). Как и прежде, счетчик обращений у блоков нового раздела не увеличивается. Для замещения, как и ранее, выбираются только блоки из старого раздела. Если средний раздел имеет достаточно большой размер, то это позволяет блокам с от­носительно частыми обращениями успеть увеличить значение счетчика до того, как они могут оказаться замещены. При имитационном моделировании авторы обнаружили, что такая усовершенствованная стратегия работает значительно лучше, чем простой алгоритм LRU или LFU.

Рис. 11.11. Замещение, основанное на частоте обращений

Независимо от конкретной стратегии замещение может выполняться по требованию или предварительно. В первом случае сектор замещается только то­гда, когда требуется свободный слот; при втором подходе одновременно освобо­ждается несколько слотов. Обоснование такого подхода заключается в необходи­мости записи секторов из кэша на диск. Если сектор, загруженный в кэш, ис­пользовался только для чтения, то нет необходимости в его записи на диск; однако если содержимое сектора было изменено, то перед замещением сектор необходимо записать на диск. В этом случае имеет смысл кластеризация для достижения минимального времени поиска.

Анализ проектирования

В данном случае применимы все рассуждения из приложения А к главе 1, "Обзор компьютерных систем". Проблема производительности кэша сводится к вопросу о том, можно ли достичь заданной результативности поиска. Ответ на этот вопрос зависит от локализации дисковых обращений, алгоритма замещения и других факторов проектирования. В первую очередь результативность поиска, конечно, зависит от размера дискового кэша. На рис. 11.12 приведены итоги ря­да исследований с использованием LRU (одно для операционной системы UNIX, работающей на платформе VAX [OUST85], а два других — для операционных систем мэйнфреймов IBM [SMIT85]). На рис. 11.13 показаны результаты имита­ционного моделирования алгоритма замещения на основе частоты обращений. Сравнение этих двух графиков указывает на одну из опасностей такой оценки эффективности. Из графиков следует, что LRU выигрывает у алгоритма замеще­ния на основе частоты обращений. Однако при сравнении идентичных последо­вательностей обращений с использованием одной и той же структуры кэша вы­ясняется, что алгоритм замещения с учетом частоты обращений оказывается лучшим. Следовательно, влияние на достигаемую производительность, кроме прочего, оказывает конкретная последовательность обращений.

Рис.11.12.Производительность дискового кэша при использовании LRU

Рис. 11.13. Производительность дискового кэша при использовании алгоритма замещения с учетом частоты обращений [ROBI90]

11.8. ВВОД-ВЫВОД В UNIX SVR4

В UNIX каждое устройство ввода-вывода рассматривается как специальный файл. Эти файлы управляются файловой системой, и чтение и запись осуществляют­ся так же, как и чтение и запись обычных пользовательских файлов данных. Тем самым обеспечивается ясный и однородный интерфейс для пользователей и процес­сов. Для осуществления чтения из устройства или записи в него соответствующие запросы направляются к специальному файлу, связанному с устройством.

На рис. 11.14 показана логическая схема средств обслуживания ввода-вывода. Файловая подсистема управляет файлами на устройствах вторичной па­мяти, а кроме того, она служит интерфейсом процесса к устройствам, поскольку они рассматриваются как файлы.

В UNIX существуют два вида ввода-вывода: с буферизацией и без нее. Буферизированный ввод-вывод выполняется через системные буфера, в то время как небуферизированный ввод-вывод обычно включает средства DMA, которые обеспечивают передачу данных между устройством ввода-вывода и областью вво­да-вывода процесса. При буферизированном вводе-выводе используются два вида буферов: системные буфера и очереди символов.

Рис. 11.14. Структура ввода-вывода в UNIX