Кэш объектов dentry
Кэш объектов dentry
После того как подсистема VFS преодолела все трудности, связанные с переводом всех элементов пути в объекты элементов каталогов, и был достигнут конец пути, то было бы достаточно расточительным выбрасывать на ветер всю проделанную работу. Ядро кэширует объекты в кэше элементов каталога, который называют dcache.
Кэш объектов dentry состоит из трех частей.
• Список "используемых" объектов dentry, которые связаны с определенным файловым индексом (поле i_dentry объекта inode). Поскольку указанный файловый индекс может иметь несколько ссылок, то ему может соответствовать несколько объектов dentry, а следовательно используется связанный список.
• Двухсвязный список неиспользуемых и негативных объектов dentry "с наиболее поздним использованием" (last recently used, LRU). Вставки элементов в этот список отсортированы по времени, поэтому элементы, которые находятся в начале списка, — самые новые. Когда ядро должно удалить элементы каталогов для освобождения памяти, то эти элементы берутся из конца списка, потому что там находятся элементы, которые использовались наиболее давно и для которых меньше шансов, что они понадобятся в ближайшем будущем.
• Хеш-таблица и хеш-функция, которые позволяют быстро преобразовать заданный путь в объект dentry.
Указанная хеш-таблица представлена с помощью массива dentry_hashtable. Каждый элемент массива — это указатель на список тех объектов dentry, которые соответствуют одному ключу. Размер этого массива зависит от объема физической памяти в системе.
Значение ключа определяется функцией d_hash(), что позволяет для каждой файловой системы реализовать свою хеш-функцию.
Поиск в хеш-таблице выполняется с помощью функции d_lookup(). Если в кэше dcache найден соответствующий объект, то это значение возвращается. В случае ошибки возвращается значение NULL.
В качестве примера рассмотрим редактирование файла исходного кода в вашем домашнем каталоге, /home/dracula/src/fоо.с. Каждый раз, когда производится доступ к этому файлу (например, при первом открытии, при последующей записи, при компиляции и так далее), подсистема VFS должна пройти через псе элементы каталогов в соответствии с путем к файлу: /, home, dracula, src и, наконец, foo.c. Для того чтобы каждый раз при доступе к этому (и любому другому) имени пути избежать выполнения данной операции, которая требует довольно больших затрат времени, подсистема VFS вначале может попытаться найти это имя пути в dentry-кэше. Если поиск проходит успешно, то необходимый конечный элемент каталога нужного пути получается без особых усилий. Если же данного элемента каталога нет в dentry-кэше, то подсистема VFS должна самостоятельно отследить путь. После завершения поиска найденные объекты dentry помещаются в кэш dcache, чтобы ускорить поиск в будущем.
Кэш dcache также является интерфейсом к кэшу файловых индексов icache. Объекты inode связаны с объектами dentry, поскольку объект dentry поддерживает положительное значение счетчика использования для связанного с ним индекса. Это в свою очередь позволяет объектам dentry удерживать связанные с ними объекты mode в памяти. Иными словами, если закэширован элемент каталога, то соответственно оказывается закэшированным и соответствующий ему файловый индекс. Следовательно, если поиск в кэше для некоторого имени пути прошел успешно, то соответствующие файловые индексы уже закэшированы в памяти.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Защита объектов ядра и приватных объектов
Защита объектов ядра и приватных объектов Многие объекты, такие как процессы, потоки или мьютексы, являются объектами ядра (kernel objects). Для получения и установки дескрипторов безопасности ядра используются функции GetKernelObjectsSecurity и SetKernelObjectsSecurity, аналогичные функциям защиты
Объект dentry
Объект dentry Как уже рассказывалось, подсистема VFS представляет каталоги так же, как и файлы. В имени пути /bin/vi, и элемент bin, и элемент vi — это файлы, только bin — это специальный файл, который является каталогом, a vi — это обычный файл. Объекты файловых индексов служат для
Масштабирование объектов
Масштабирование объектов Для изменения размеров объектов в AutoCAD используется команда SCALE (см. также видеоролик «Урок 6.1. Поворот и масштабирование объектов»).Чтобы запустить команду SCALE, следует нажать кнопку Scale (Масштаб) на вкладке Home (Основная) в группе Modify
5.4. Диаграммы объектов
5.4. Диаграммы объектов Существенное: объекты и их отношения Диаграмма объектов показывает существующие объекты и их связи в логическом проекте системы. Иначе говоря, диаграмма объектов представляет собой мгновенный снимок потока событий в некоторой конфигурации
Построение объектов
Построение объектов Моделирование с использованием стандартных объектов – основной метод создания моделей. Простые формы являются основой для создания сложных сетчатых оболочек, например сферу можно представить как заготовку для создания яблока, а немного изменив
Выделение объектов
Выделение объектов Только что созданный объект является выделенным. Понять, что объект является выделенным, очень просто: в окнах Тор (Вид сверху), Front (Вид спереди), Left (Вид слева) он всегда имеет контур белого цвета, в окне проекции Perspective (Перспективный вид) выделенный
Копирование объектов
Копирование объектов Представьте, что мы строим кровать, которая стоит на четырех ножках-опорах. Мы построили одну ножку, расположили ее в нужном месте, теперь необходимо построить еще одну. Каждый раз строить новую нерационально, особенно если это не просто ножка, а
Скрытие объектов
Скрытие объектов Чтобы облегчить управление сложными сценами, используют скрытие объектов. Это ускоряет отрисовку объектов в окнах проекций, в результате чего возрастает скорость работы. Скрытые объекты невидимы, и их нельзя выделить.Скрыть объекты можно несколькими
Выравнивание объектов
Выравнивание объектов В процессе работы часто приходится перемещать объекты, выравнивая их положение относительно друг друга. Например, при создании сложной модели, детали которой моделируются отдельно (допустим, люстры с подвесками в классическом стиле), на
Генерации объектов
Генерации объектов Когда среда CLR пытается найти недоступные объекты, это не значит, что будет рассмотрен буквально каждый объект, размещенный в управляемой динамической памяти. Очевидно, что это требовало бы слишком много времени, особенно в реальных (т.е. больших)
Пересечение объектов
Пересечение объектов Команда INTERSECT позволяет при пересечении нескольких существующих объектов создать новые составные тела и области (рис. 18.34). Созданное сложное тело занимает объем, общий для двух или более пересекающихся тел, при этом непересекающиеся части объемов
Выбор объектов
Выбор объектов Большинство команд редактирования AutoCAD требует предварительного указания объектов для работы с ними. Выбранные объекты – один или несколько – называются набором. Такой набор можно создать как до, так и после вызова команды редактирования.После того как
Копирование объектов
Копирование объектов Команда COPY осуществляет копирование объектов. Она вызывается из падающего меню Modify ? Сору или щелчком на пиктограмме Сору на панели инструментов Modify.Запросы команды COPY:Select objects: – выбрать объектыSelect objects: – нажать клавишу Enter для завершения выбора
Перемещение объектов
Перемещение объектов Команда MOVE осуществляет перемещение объектов. Она вызывается из падающего меню Modify ? Move или щелчком на пиктограмме Move на панели инструментов Modify.Запросы команды MOVE:Select objects: – выбрать объектыSelect objects: – нажать клавишу Enter для завершения выбора
Поворот объектов
Поворот объектов Команда ROTATE осуществляет поворот объектов. Она вызывается из падающего меню Modify ? Rotate или щелчком на пиктограмме Rotate на панели инструментов Modify.Запросы команды ROTATE:Current positive angle in UCS: ANGDIR=counterclockwise ANGBASE=0 – текущие установки отсчета углов в ПСКSelect objects: –
Удлинение объектов
Удлинение объектов Команда EXTEND, которая осуществляет удлинение объектов до граничной кромки, вызывается из падающего меню Modify ? Extend или щелчком на пиктограмме Extend на панели инструментов Modify.Запросы команды EXTEND:Current settings: Projection=UCS Edge=None – текущие установкиSelect boundary edges