Объект dentry
Объект dentry
Как уже рассказывалось, подсистема VFS представляет каталоги так же, как и файлы. В имени пути /bin/vi, и элемент bin, и элемент vi — это файлы, только bin — это специальный файл, который является каталогом, a vi — это обычный файл. Объекты файловых индексов служат для представления обоих этих компонентов. Несмотря на такую полезную унификацию, подсистеме VFS также необходимо выполнять операции, специфичные для каталогов, такие как поиск компонента пути по его имени, проверка того, что указанный элемент пути существует, и переход на следующий компонент пути.
Для решения этой задачи в подсистеме VFS реализована концепция элемента каталога (directory entry или dentry). Объект dentry — это определенный компонент пути. В предыдущем примере компоненты /, bin и vi — это объекты элементов каталога. Первые два — это каталоги, а последний — обычный файл. Важным моментом является то, что все объекты dentry — это компоненты пути, включая и обычные файлы.
Элементы пути также могут включать в себя точки монтирования. В имени пути /mnt/cdrom/foo, компоненты /, mnt, cdrom и foo — это все объекты типа dentry. Подсистема VFS при выполнении операций с каталогами по необходимости конструирует объекты элементов каталога на лету.
Объекты типа dentry представлены с помощью структуры struct dentry и определены в файле <linux/dcache.h>. Эта структура с комментариями, которые определяют назначение каждого поля, имеет следующий вид.
struct dentry {
atomic_t d_count; /* счетчик использования */
unsigned long d_vfs_flags; /* флаги кэша объектов dentry */
spinlock_t d_lock; /* блокировка данного объекта dentry */
struct inode *d_inode; /* соответствующий файловый индекс */
struct list_head d_lru; /* список неиспользованных объектов */
struct list_head d_child; /* список объектов у родительского
экземпляра */
struct list_head d_subdirs; /* подкаталоги */
struct list_head d_alias; /* список альтернативных (alias)
индексов */
unsigned long d_time; /* время проверки правильности */
struct dentry_operations *d_op; /* таблица операций с элементом
каталога */
struct super_block *d_sb; /* связанный суперблок */
unsigned int d_flags; /* флаги элемента каталога */
int d_mounted; /* является ли объект точкой
монтирования */
void *d_fsdata; /* специфические данные
файловой системы */
struct rcu_head d_rcu; /* блокировки RCU (read-copy update) */
struct dcookie_struct *d_cookie; /* cookie-идентификатор */
struct dentry *d_parent; /* объект dentry
родительского каталога */
struct qstr d_name; /* имя dentry */
struct hlist_node d_hash; /* список хеширования */
struct hlist_head *d_bucket; /* сегмент хеш-таблицы */
unsigned char d_iname[DNAME_INLINE_LEN_MIN]; /* короткое имя файла */
};
В отличие от предыдущих двух объектов, объект dentry не соответствует какой бы то ни было структуре данных на жестком диске. Подсистема VSF создает эти объекты на лету на основании строкового представления имени пути. Поскольку объекты элементов каталога не хранятся физически на дисках, то в структуре struct dentry нет никаких флагов, которые указывают на то, изменен ли объект (т.е. должен ли он быть записан назад на диск).
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Кэш объектов dentry
Кэш объектов dentry После того как подсистема VFS преодолела все трудности, связанные с переводом всех элементов пути в объекты элементов каталогов, и был достигнут конец пути, то было бы достаточно расточительным выбрасывать на ветер всю проделанную работу. Ядро кэширует
Объект Folder
Объект Folder Объект Folder обеспечивает доступ к свойствам каталога. Создать этот объект можно с помощью свойства RootFolder объекта Drive или методов GetFolder, GetParentFolder и GetSpecialFolder объекта FileSystemObject следующим образом:var FSO, Folder;FSO = WScript.CreateObject("Scripting.FileSystemObject");Folder = FSO.GetFolder("С:Мои
Объект File
Объект File Объект File обеспечивает доступ ко всем свойствам файла. Создать этот объект можно с помощью метода GetFile объекта FileSystemObject следующим образом:var FSO, F;//Создаем объект FileSystemObjectFSO=WScript.CreateObject("Scripting.FileSystemObject");//Создаем объект FileF=FSO.GetFile("С:Мои документахletter.txt");Также
Объект TextStream
Объект TextStream Объект TextStream обеспечивает последовательный (строка за строкой) доступ к текстовому файлу. Методы этого объекта позволяют читать информацию из файла и записывать ее в него.Создать объект TextStream можно с помощью следующих методов:? CreateTextFile объектов FileSystemObject и
Объект Array
Объект Array Новый объект встроенного класса Array можно создать с помощью оператора new следующими способами:? new Array() — создание массива нулевой длины;? new Array(N) — создание массива длины N;? new Array(а0, a1, ..., aN) — создание массива длины N+1 c элементами а0, a1, ..., aN.Например:var A1, А2, A3;A1 = new
Объект Date
Объект Date Для создания нового объекта встроенного класса Date используется один из трех конструкторов.Конструктор первого вида позволяет создать объект, в котором хранится информация о текущих дате и времени:var d;d = new Date();Здесь время задается по Гринвичу, т.е. с
Объект Enumerator
Объект Enumerator С помощью объекта Enumerator можно получить доступ к любому элементу коллекции (в VBScript для этого служит цикл For…Each). Коллекцией в языке JScript называется множество элементов, которое отличается от массива тем, что к элементам коллекции нельзя получить прямой доступ
Объект Math
Объект Math Встроенный класс Math применяется для математических вычислений и содержит основные математические константы и функции. Замечание Объект Math создается сервером сценариев автоматически и не может быть создан при помощи оператора new, как другие встроенные
Объект String
Объект String Встроенный объект String предназначен для выполнения различных операций над текстовыми строками. Обычно объекты класса String создаются просто с помощью записи в переменную текстового литерала:var s1, s2;s1 = "Это строка";s2 = "Это тоже строка";Также можно создавать такие
Объект CompositeElementLite
Объект CompositeElementLite Вернемся в начало этой главы и вспомним, как мы получали доступ к нужному нам элементу Web-страницы.Мы можем получить доступ к одному элементу Web-страницы:var elCMain = Ext.get("cmain");Или сразу к нескольким:var clContainers = Ext.select("DIV");Мы помним, что метод select объекта Ext
Объект document
Объект document Прежде всего надо отметить, что объект document существует в единственном экземпляре для всего HTML-документа. Он присутствует всегда, если существует HTML-документ, поэтому специально создавать его не требуется.activeElementИспользуется в сценарии для получения ссылки
Объект location
Объект location Объект location содержит информацию о местонахождении текущего документа, т.е. его интернет-адрес. Его также можно использовать для перехода на другой документ и перезагрузки текущего документа.Свойства объекта locationМетоды объекта locationПользуясь объектом location,
Объект style
Объект style Как и все остальные объекты, style поддерживает ряд свойств и методов. Их можно разделить на две группы:иСвойства первой группы в целом аналогичны соответствующим атрибутам стиля и имеют почти такие же имена за тем исключением, что символы "-" убираются, т.к. не
Объект window
Объект window Объект window представляет текущее окно Web-обозревателя или отдельный фрейм, если окно разделено на фреймы.closedВозвращает true, если текущее окно закрыто. Может быть использовано при работе с несколькими окнами.defaultStatusСообщение по умолчанию, отображаемое в строке
Объект
Объект Все, что находится в трехмерном виртуальном пространстве сцены — это объекты. Термин "объект" обозначает нечто, находящееся в трехмерном мире. Что бы мы ни создали в виртуальном пространстве, это будет объект.Существует множество видов объектов. Принадлежность