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