3.5 ПРЕИМУЩЕСТВА И НЕУДОБСТВА БУФЕРНОГО КЕША
Использование буферного кеша
имеет, с одной стороны, несколько
преимуществ и, с другой стороны,
некоторые неудобства.
- Использование буферов
позволяет внести единообразие
в процедуру обращения к диску,
поскольку ядру нет
необходимости знать причину
ввода-вывода. Вместо этого,
ядро копирует данные в буфер и
из буфера, невзирая на то,
являются ли данные частью
файла, индекса или суперблока.
Буферизация ввода-вывода с
диска повышает модульность
разработки программ, поскольку
те составные части ядра,
которые занимаются
вводом-выводом на диск, имеют
один интерфейс на все случаи.
Короче говоря, упрощается
проектирование системы.
- Система не накладывает никаких
ограничений на выравнивание
информации пользовательскими
процессами, выполняющими
ввод-вывод, поскольку ядро
производит внутреннее
выравнивание информации. В
различных аппаратных
реализациях часто требуется
выравнивать информацию для
ввода-вывода с диска
определенным образом, т.е.
производить к примеру
двухбайтное или
четырехбайтное выравнивание
данных в памяти. Без механизма
буферизации программистам
пришлось бы заботиться самим о
правильном выравнивании
данных. По этой причине на
машинах с ограниченными
возможностями в выравнивании
адресов возникает большое
количество ошибок
программирования и, кроме того,
становится проблемой перенос
программ в операционную среду
UNIX. Копируя информацию из
пользовательских буферов в
системные буферы (и обратно),
ядро системы устраняет
необходимость в специальном
выравнивании пользовательских
буферов, делая
пользовательские программы
более простыми и мобильными.
- Благодаря использованию
буферного кеша, сокращается
объем дискового трафика и
время реакции и повышается
общая производительность
системы. Процессы, считывающие
данные из файловой системы,
могут обнаружить
информационные блоки в кеше и
им не придется прибегать ко
вводу-выводу с диска. Ядро
часто применяет "отложенную
запись", чтобы избежать
лишних обращений к диску,
оставляя блок в буферном кеше и
надеясь на попадание блока в
кеш. Очевидно, что шансы на
такое попадание выше в
системах с большим количеством
буферов. Тем не менее, число
буферов, которые можно
заложить в системе,
ограничивается объемом памяти,
доступной выполняющимся
процессам: если под буферы
задействовать слишком много
памяти, то система будет
работать медленнее в связи с
тем, что ей придется заниматься
подкачкой и замещением
выполняющихся процессов.
- Алгоритмы буферизации
помогают поддерживать
целостность файловой системы,
так как они сохраняют общий,
первоначальный и единственный
образ дисковых блоков,
содержащихся в кеше. Если два
процесса одновременно
попытаются обратиться к одному
и тому же дисковому блоку,
алгоритмы буферизации
(например, getblk) параллельный
доступ преобразуют в
последовательный,
предотвращая разрушение
данных.
- Сокращение дискового трафика
является важным преимуществом
с точки зрения обеспечения
хорошей производительности
или быстрой реакции системы,
однако стратегия кеширования
также имеет некоторые
неудобства. Так как ядро в
случае отложенной записи не
переписывает данные на диск
немедленно, такая система
уязвима для сбоев, которые
оставляют дисковые данные в
некорректном виде. Хотя в
последних версиях системы и
сокращен ущерб, наносимый
катастрофическими сбоями,
основная проблема остается:
пользователь, запрашивающий
выполнение операции записи,
никогда не знает, в какой
момент данные завершат свой
путь на диск (****).
- Использование буферного кеша
требует дополнительного
копирования информации при ее
считывании и записи
пользовательскими процессами.
Процесс, записывающий данные,
передает их ядру и ядро
копирует данные на диск;
процесс, считывающий данные,
получает их от ядра, которое
читает данные с диска. При
передаче большого количества
данных дополнительное
копирование отрицательным
образом отражается на
производительности системы,
однако при передаче небольших
объемов данных
производительность
повышается, поскольку ядро
буферизует данные (используя
алгоритм getblk и отложенную
запись) до тех пор, пока это
представляется эффективным с
точки зрения экономии времени
работы с диском.
(****) Стандартный
набор операций ввода-вывода в
программах на языке Си включает
операцию fflush. Эта функция
занимается подкачиванием данных из
буферов в пользовательском
адресном пространстве в рабочую
область ядра. Тем не менее
пользователю не известно, когда
ядро запишет данные на диск.
Предыдущая
глава || Оглавление
|| Следующая глава
|