Сетевые операционные системы

       

Кэширование файлов


В NetWare для достижения высокой производительности файловой системы реализован обширный динамический кэш файлов в оперативной памяти. Этот кэш построен на блочной основе. Когда приложение читает или пишет в файл, NetWare копирует нужные блоки данных файла в кэш (если они не находятся уже там). Когда файловая кэш-память полностью заполняется, NetWare выполняет процедуру выгрузки в соответствии с алгоритмом "наименее используемый в последнее время" (Least Recently Used, LRU).

NetWare конфигурирует файловую кэш-память во время инсталляции ОС. После распределения памяти для структур данных операционной системы и инициализации динамических таблиц для стартовой конфигурации, NetWare превращает всю оставшуюся память в файловый кэш. Если NLM'ы динамически запрашивают память, то она берется из памяти файлового кэша. В версиях NetWare 4.x NLM может вернуть эту память файловому кэшу, когда она ему больше не нужна (в предыдущих версиях такой возможности нет).

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

В NetWare в буферах кэш-системы хранятся не только блоки данных файлов, но и такие элементы файловой системы, как FAT, Turbo FAT, кэш-таблица и входы каталогов. Turbo FAT представляет собой таблицу, в которой непосредственно перечислены все блоки файла, если их количество превышает 64. Это обеспечивает быстрый доступ к большим файлам.

При разработке серверных приложений при использовании стандартных функций API работы с файлами программисту нет необходимости задумываться об особенностях реализации системы кэширования файлов. Однако NetWare предоставляет разработчику специальные функции чтения данных непосредственно из буферов кэша (API асинхронного чтения AsyncRead API). Этот API позволяет увеличить производительность NLM-приложений.



Содержание раздела