81.3.2.3. ВИРТУАЛЬНОЕ КЭШИРОВАНИЕ
Организация виртуального кэширования требует тесного взаимодействия с операционной
системой.
Типовые проблемы и задачи возникающие при виртуальном кэшировании.
1) Нерезидентные файлы
Некоторые файловые системы не выделяют для небольших файлов (данные которых могут
поместиться в свободную часть inode) кластеров.
В этом случае драйвер говорит что для файла виртуальное кэширование невозможно.
В процессе роста этого файла мы можем дойти до состояния когда его данные не будут
уже умещаться в inode, и для него выделят место в кластерах. Тогда драйвер файловой
системы должен будет сам перекидать данные из inode в кластера.
Возможно и обратная ситуация - файл усеньшили и он может вместиться в резидентную часть.
Для той части которая отбрасывается вызвается инвалидация (Virtual_Cache_Invalidate),
для части которая попадает вызывается сброс в кластера и затем инвалидация
(Virtual_cache_flush_then_Invalidate).
2) Перемещение данных файлов
Примерно таже ситуайция возникает в системах типа BSD FFS, где если конец файла не
укладывается в полный блок файловой системы, то его пишут в метафайлы каждый из которых
хранит остатки в 1,2,3,... итд секторов.
То есть такой перенос тоже вызывает инвалидацию.
3) Зануление частей файлов
В дисковых секторах лежит как правило мусор, а в тех зонах файлов которые никогда
не писали сидят нули по соглашению.
Соответственно если у нас ситуация увеличения файла и запись в его конец,
мы можем не аллокировать середину файла (по sparse типу), но мы обязаны обнулить
зону от начала реально выделенного кластера до
TODO: картинко
4) Compressed files
Прямой ввод-вывод тоже невозможен
Как правило кроме виртуального кэширования система предоставляет API для простого
кэширования - которые помогают держать в памяти метаданные.
Index Prev Next