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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

Объект суперблок представляется с помощью структуры struct super_block, которая определена в файле . Она выглядит следующим образом (комментарии описывают назначение каждого поля).

struct super_block {

struct list_head s_list; /* список всех суперблоков */

dev_t s_dev; /* идентификатор */

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

unsigned long s_old_blocksize; /* старый размер блока

в байтах */

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

unsigned char s_dirt; /* флаг того,

что суперблок изменен */

unsigned long long s_maxbytes; /* максимальный размер файла */

struct file_system_type *s_type; /* тип файловой системы */

struct super_operations *s_op; /* операции суперблока */

struct dquot_operations *dq_op; /* операции с квотами */

struct quotactl_ops *s_qcop; /* операции управления квотами */

struct export_operations *s_export_op; /* операции экспортирования */

unsigned long s_flags; /* флаги монтирования */

unsigned long s_magic; /* магический номер файловой системы */

struct dentry *s_root; /* каталог, точка монтирования */

struct rw_semaphore s_umount; /* семафор размонтирования */

struct semaphore s_lock; /* семафор суперблока */

int s_count; /* счетчик ссылок на суперблок */

int s_syncing; /* флаг синхронизации

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

int s_need_sync_fs; /* флаг того, что файловая

система еще не синхронизирована */

atomic_t s_active; /* счетчик активных ссылок */

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

struct list_head s_dirty; /* список измененных индексов */

struct list_head s_io; /* список обратной записи */

struct hlist_head s_anon; /* анонимные элементы каталога

для экспортирования */

struct list_head s_files; /* список связанных файлов */

struct block_device *s_bdev; /* соответствующий драйвер

блочного устройства */

struct list_head s_instances; /* список файловых систем

данного типа */

struct quota_info s_dquot; /* параметры квот */

char s_id[32]; /* текстовое имя */

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

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

struct semaphore s_vfs_rename_sem; /* семафор переименования */

};

Код для создания, управления и ликвидации объектов суперблок находится в файле fs/super.c. Объект суперблок создается и инициализируется в функции alloc_super(). Эта функция вызывается при монтировании файловой системы, которая считывает суперблок файловой системы с диска и заполняет поля объекта суперблок .

Операции суперблока

Наиболее важный элемент суперблока — это поле s_op, которое является указателем на таблицу операций суперблока. Таблица операций суперблока представлена с помощью структуры struct super_operations, которая определена в файле . Она выглядит следующим образом.

struct super_operations {

struct inode *(*alloc_inode)(struct super_block *sb);

void (*destroy_inode)(struct inode*);

void (*read_inode)(struct inode*);

void (*dirty_inode)(struct inode*);

void (*write_inode)(struct inode*, int);

void (*put inode)(struct inode*);

void (*drop_inode)(struct inode*);

void (*delete_inode)(struct inode*);

void (*put_super)(struct super_block*);

void (*write_super)(struct super block*);

int (*sync_fs)(struct super_block*, int);

void (*write_super_lockfs)(struct super_block*);

void (*unlockfs)(struct super_block*);

int (*statfs)(struct super_block*, struct statfs*);

int (*remount_fs)(struct super_block*, int*, char*);

void (*clear_inode)(struct inode*);

void (*umount_begin)(struct super block*);

int (*show_options)(struct seq_file*, struct vfsmount*);

};

Каждое поле этой структуры представляет собой указатель на функцию, которая работает с объектом суперблок . Операции суперблока выполняют низкоуровневые действия с файловой системой и ее файловыми индексами.

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

sb->s_op->write_super(sb);

где параметр sb — это указатель на суперблок файловой системы. Следуя по указателю s_op, получаем таблицу операций суперблока и, наконец, необходимую функцию write_super(), которая вызывается непосредственно. Следует обратить внимание на то, что вызову функции write_super()необходимо передать указатель на суперблок в качестве параметра, несмотря на то что метод связан с суперблоком. Это происходит от того, что язык программирования С не объектно-ориентирован. В C++ аналогичный вызов может быть выполнен следующим образом.

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

Интервал:

Закладка:

Сделать

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

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


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

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

x