Роберт Лав - Разработка ядра Linux

Здесь есть возможность читать онлайн «Роберт Лав - Разработка ядра Linux» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 2006, ISBN: 2006, Издательство: Издательский дом Вильямс, Жанр: ОС и Сети, Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Разработка ядра Linux: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Разработка ядра Linux»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

В книге детально рассмотрены основные подсистемы и функции ядер Linux серии 2.6, включая особенности построения, реализации и соответствующие программны интерфейсы. Рассмотренные вопросы включают: планирование выполнения процессов, управление временем и таймеры ядра, интерфейс системных вызовов, особенности адресации и управления памятью, страничный кэш, подсистему VFS, механизмы синхронизации, проблемы переносимости и особенности отладки. Автор книги является разработчиком основных подсистем ядра Linux. Ядро рассматривается как с теоретической, так и с прикладной точек зрения, что может привлечь читателей различными интересами и потребностями.
Книга может быть рекомендована как начинающим, так и опытным разработчикам программного обеспечения, а также в качестве дополнительных учебных материалов.

Разработка ядра Linux — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Разработка ядра Linux», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

struct inode {

struct hlist_node i_hash; /* хешированный список */

struct list_head i_list; /* связанный список индексов */

struct list_head i_dentry; /* связанный список объектов dentry */

unsigned long i_ino; /* номер индекса */

atomic_t i_count; /* счетчик ссылок */

umode_t i_mode; /* права доступа */

unsigned int i_nlink; /* количество жестких ссылок */

uid_t i_uid; /* идентификатор пользователя-владельца */

gid_t i_gid; /* идентификатор группы-владельца */

kdev_t i_rdev; /* связанное устройство */

loff_t i_size; /* размер файла в байтах */

struct timespec i_atime; /* время последнего доступа к файлу */

struct timespec i_mtime; /* время последнего изменения файла */

struct timespec i_ctime; /* время изменения индекса */

unsigned int i_blkbits; /* размер блока в битах */

unsigned long i_blksize; /* размер блока в байтах */

unsigned long i_version; /* номер версии */

unsigned long i_blocks; /* размер файла в блоках */

unsigned short i_bytes; /* количество использованных байтов */

spinlock_t i_lock; /* блокировка для защиты полей */

struct rw_semaphore i_alloc_sem /* вложенные блокировки при

захваченной i_sem */

struct semaphore i_sem; /* семафор индекса */

struct inode_operations *i_op; /* таблица операций с индексом */

struct file_operations *i_fop; /* файловые операции */

struct super_block *i_sb; /* связанный суперблок */

struct file_lock *i_flock; /* список блокировок файлов */

struct address_space *i_mapping; /* соответствующее адресное

пространство */

struct address_space i_data; /* адресное пространство устройства */

struct dquot *i_dquot[MAXQUOTAS]; /* дисковые квоты

для индекса */

struct list_head i_devices; /* список блочных устройств */

struct pipe_inode_info *i_pipe; /* информация конвейера */

struct block_device *i_bdev; /* драйвер блочного устройства */

unsigned long i_dnotify_mask; /* события каталога */

struct dnotify_struct *i_dnotify; /* информация о событиях каталога */

unsigned long i_state; /* флаги состояния */

unsigned long dirtied_when /* время первого изменения */

unsigned int i_flags; /* флаги файловой системы */

unsigned char i_sock; /* сокет или нет? */

atomic_t i_writecount; /* счетчик использования

для записи */

void *i_security; /* модуль безопасности */

__u32 i_generation; /* номер версии индекса */

union {

void *generic_ip; /* специфическая информация

файловой системы */

} u;

};

Для каждого файла в системе существует представляющий его индекс (хотя объект файлового индекса создается в памяти только тогда, когда к файлу осуществляется доступ). Это справедливо и для специальных файлов, таких как файлы устройств или конвейеры. Следовательно, некоторые из полей структуры struct inodeотносятся к этим специальным файлам. Например, поле i_pipeуказывает на структуру данных именованного конвейера. Если индекс не относится к именованному конвейеру, то это поле просто содержит значение NULLДругие поля, связанные со специальными файлами, — это i_devices, i_bdev, i_cdev.

Может оказаться, что та или иная файловая система не поддерживает тех свойств, которые присутствуют в объекте inode. Например, некоторые файловые системы не поддерживают такого атрибута, как время создания файла. В этом случае файловая система может реализовать это свойство как угодно. Например, поле i_ctimeможно сделать нулевым или равным значению поля i_mtime.

Операции с файловыми индексами

Так же как и в случае операций суперблока, важным является поле inode_operations, в котором описаны функции файловой системы, которые могут быть вызваны подсистемой VFS для объекта файлового индекса. Как и для суперблока, операции с файловыми индексами могут быть вызваны следующим образом.

i->i_op->truncate(i);

где переменная iсодержит указатель на определенный объект файлового индекса. В данном случае для индекса iвыполняется операция truncate(), которая определена для файловой системы, в которой находится указанный файловый индекс i. Структура inode_operationsопределена в файле , как показано ниже.

struct inode_operations {

int (*create)(struct inode*, struct dentry*, int);

struct dentry* (*lookup)(struct inode*, struct dentry*);

int (*link)(struct dentry*, struct inode*, struct dentry*);

int (*unlink)(struct inode*, struct dentry*);

int (*symlink)(struct inode*, struct dentry*, const char*);

int (*mkdir)(struct inode*, struct dentry*, int);

int (*rmdir)(struct inode*, struct dentry*);

int (*mknod)(struct inode*, struct dentry*, int, dev_t);

int (*rename)(struct inode*, struct dentry*,

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Разработка ядра Linux»

Представляем Вашему вниманию похожие книги на «Разработка ядра Linux» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Разработка ядра Linux»

Обсуждение, отзывы о книге «Разработка ядра Linux» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x