русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Кэширование операций ввода-вывода при работе с накопителями на магнитных дисках


Дата добавления: 2014-11-28; просмотров: 3359; Нарушение авторских прав


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


Кэширование операций ввода-вывода____________________________________ 157

блюдателя, который не видит конвейеризации при выполнении машинных команд, позволяющей увеличить производительность в несколько раз) может составлять менее 0,5 нc (!). В то же время переход магнитной головки с дорожки на дорожку занимает несколько миллисекунд; подобная же задержка требуется и на поиск нуж­ного сектора данных. Как известно, в современных приводах средняя длительность на чтение случайным образом выбранного сектора данных составляет около 20 мс, что существенно медленнее, чем выборка команды или операнда из оперативной памяти и уж тем более из кэш-памяти. Правда, после этого данные читаются боль­шим пакетом (сектор, как мы уже говорили, имеет размер 512 байт, а при операци­ях с диском часто читаются или записываются сразу несколько секторов). Таким образом, средняя скорость работы процессора с оперативной памятью на 2-3 по­рядка выше, чем средняя скорость передачи данных из внешней памяти на маг­нитных дисках в оперативную память.

Для того чтобы сгладить такое сильное несоответствие в производительности основных подсистем, используется буферизация и/или кэширование данных в дис­ковом кэше (disk cache). Простейшим вариантом ускорения дисковых операций чтения данных можно считать использование двойной буферизации. Ее суть за­ключается в том, что пока в один буфер заносятся данные с магнитного диска, из второго буфера ранее считанные данные могут быть прочитаны и переданы в за­просившую их задачу. Аналогично и при записи данных. Буферизация использу­ется во всех операционных системах, но помимо буферизации применяется и кэ­ширование. Кэширование исключительно полезно в том случае, когда программа неоднократно читает с диска одни и те же данные. После того как они один раз будут помещены в кэш, обращений к диску больше не потребуется, и скорость ра­боты программы значительно возрастет.



Упрощая, можно сказать, что под дисковым кэшем можно понимать некий пул буферов, которыми мы управляем с помощью соответствующего системного про­цесса. Если считывается какое-то множество секторов, содержащих записи того или иного файла, то эти данные, пройдя через кэш, там остаются (до тех пор, пока другие секторы не заменят эти буферы). Если впоследствии потребуется повтор­ное чтение, то данные могут быть извлечены непосредственно из оперативной па­мяти без фактического обращения к диску. Ускорить можно и операции записи: данные помещаются в кэш, и для запросившей эту операцию задачи получается, что фактически они уже записаны. Задача может продолжить свое выполнение, а системные внешние процессы через некоторое время запишут данные на диск. Это называется отложенной записью (lazy write1). Если режим отложенной записи от­ключен, только одна задача может записывать на диск свои данные. Остальные приложения должны ждать своей очереди. Это ожидание подвергает информацию риску не меньшему (если не большему), чем сама отложенная запись, которая к то­му же и более эффективна по скорости работы с диском.

Интервал времени, после которого данные будут фактически записываться, с од­ной стороны, желательно выбрать большим, поскольку это позволило бы не чи­тать (если потребуется) эти данные заново, так как они уже и так фактически на-

1 Дословно — «ленивая» запись.


158_____________ Глава 5. Управление вводом-выводом в операционных системах

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

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

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

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

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


Кэширование операций ввода-вывода____________________________________ 159

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

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

Так, в системах семейства Windows 9x мы можем указать и объем памяти, отводи­мый для кэширования, и объем порции (chunk) данных, из которых набирается кэш, и предельное количество имен файлов, и параметры кэширования каталогов. В файле SYSTEM.INI, расположенном в основном каталоге такой операционной сис­темы (обычно это каталог Windows), в секции [vcache] есть возможность прописать, например, следующие значения:

[vcache]

MinFileCache=4096

MaxFileCache=32768

ChunkSize=512

Здесь указано, что минимально под кэширование данных зарезервировано 4 Мбайт оперативной памяти, максимальный объем кэша может достигать 32 Мбайт, а раз­мер данных, которыми манипулирует менеджер кэша, равен одному сектору. Следу­ет заметить, что поскольку в современных компьютерах нередко устанавливается большой объем оперативной памяти, порой существенно превосходящий 256 Мбайт, то для обеспечения корректной работы подсистемы кэширования обязательно нуж­но указывать в явном виде значение MaxFileCache. Оно ни в коем случае не должно превышать величину 262 144 Кбайт. Это ограничение следует из-за особенностей программной реализации подсистемы кэширования2 — при превышении этого зна­чения происходят нарушения в работе подсистемы памяти и вычислительные про­цессы могут быть разрушены.

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

В операционных системах Windows NT 4.0, Windows 2000 и Windows XP также имеется возможность управлять некоторыми параметрами кэширования. Правда, сделать это можно только путем редактирования реестра.

Например, если в разделе [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Ses-sion Manager\Memory Management] реестра найти параметр IOPageLockLimit и присво­ить ему значение 163777216, то это будет означать, что 16 384 Кбайт будут отведе-

' Дословно — «кусочек».

2 Драйвер VCACHE разрабатывался в то время, когда объем памяти в 256 Мбайт казался недостижи­мым.


160_____________ Глава 5. Управление вводом-выводом в операционных системах

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

В других операционных системах можно указывать больше параметров, определя­ющих работу подсистемы кэширования (см., например, раздел «Файловая систе­ма HPFS» в главе 6).

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

Перечислим известные дисциплины, в соответствии с которыми можно перестра­ивать очередь запросов на операции чтения/записи данных [11].

- SSTF (Shortest Seek Time First — запрос с наименьшим временем позициони­рования выполняется первым). В соответствии с этой дисциплиной при пози­ционировании магнитных головок следующим выбирается запрос, для которо­го необходимо минимальное перемещение с цилиндра на цилиндр, даже если этот запрос не был первым в очереди на ввод-вывод. Однако для этой дисцип­лины характерна сильная дискриминация некоторых запросов, а ведь они мо­гут идти от высокоприоритетных задач. Обращения к диску проявляют тен-


Контрольные вопросы и задачи_________________________________________ 161

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

- Scan (сканирование). При сканировании головки поочередно перемещаются то
в одном, то в другом «привилегированном» направлении, обслуживая «по пути»
подходящие запросы. Если при перемещении головок чтения/записи более нет
попутных запросов, то движение начинается в обратном направлении.

- Next-Step Scan (отложенное сканирование). Отличается от предыдущей дис­
циплины тем, что на каждом проходе обслуживаются только те запросы, кото­
рые уже существовали на момент начала прохода. Новые запросы, появляющи­
еся в процессе перемещения головок чтения/записи, формируют новую очередь
запросов, причем таким образом, чтобы их можно было оптимально обслужить
на обратном ходу.

- C-Scan (циклическое сканирование). По этой дисциплине головки перемеща­ются циклически с самой наружной дорожки к внутренним, по пути обслужи­вая имеющиеся запросы, после чего вновь переносятся к наружным цилиндрам. Эту дисциплину иногда реализуют таким образом, чтобы запросы, поступаю­щие во время текущего прямого хода головок, обслуживались не попутно, а при следующем проходе, что позволяет исключить дискриминацию запросов к са­мым крайним цилиндрам. Эта дисциплина характеризуется очень малой дис­персией времени ожидания обслуживания [11]. Ее часто называют «элеватор­ной».

Контрольные вопросы и задачи Вопросы для проверки

1. Почему создание подсистемы ввода-вывода считается одной из самых слож­
ных областей проектирования операционных систем?

2. Почему операции ввода-вывода в операционных системах объявляются при­
вилегированными?

3. Перечислите основные задачи, возлагаемые на супервизор ввода-вывода?

4. В каких случаях устройство ввода-вывода называется инициативным?

5. Какие режимы управления вводом-выводом вы знаете? Опишите каждый из них.

6. Что означает термин «spooling» и что означает термин «swapping»?

7. Чем обеспечивается независимость пользовательских программ от устройств
ввода-вывода, подключенных к компьютеру?

8. Что такое синхронный и асинхронный ввод-вывод?

9. Опишите структуру магнитного диска (разбиение дисков на разделы). Сколь­
ко (и каких) разделов может быть на магнитном диске?


162_____________ Глава 5. Управление вводом-выводом в операционных системах

10. Как в общем случае осуществляется загрузка операционной системы после
включения компьютера? Что такое начальный, системный и внесистемный за­
грузчики? Где они располагаются?

11. Расскажите о кэшировании операций ввода-вывода при работе с накопителя­
ми на магнитных дисках.



<== предыдущая лекция | следующая лекция ==>
Системный загрузчик Windows NT/2000/XP | Задания


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.172 сек.