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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

Файловый объект представляется с помощью структуры struct file, которая определена в файле . Рассмотрим поля этой структуры с комментариями, которые описывают назначение каждого поля.

struct file {

struct list_head f_list; /* список объектов file */

struct dentry *f_dentry; /* связанный объект dentry */

struct vfsmount *f_vfsmnt; /* связанная смонтированная

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

struct file_operations *f_op; /* таблица файловых операций */

atomic_t f_count; /* счетчик ссылок на этот объект */

unsigned int f_flags; /* флаги, указанные

при вызове функции open */

mode_t f_mode; /* режим доступа к файлу */

loff_t f_pos; /* смещение в файле

(file pointer, offset) */

struct fown_struct f_owner; /* информация о владельце для обработки

сигналов */

unsigned int f_uid; /* идентификатор пользователя владельца, UID */

unsigned int f_gid; /* идентификатор группы владельца, GID */

int f_error; /* код ошибки */

struct file_ra_state f_ra; /* состояние предварительного считывания */

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

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

void *private_data; /* привязка для

драйвера терминала */

struct list_head f_ep_links; /* список ссылок eventpoll

(опрос событий) */

spinlock_t f_ep_lock; /* блокировка eventpoll */

struct address_space *f_mapping; /* отображение в страничном кэше */

};

По аналогии с объектом элемента каталога объект файла на самом деле не соответствует никакой структуре, которая хранится на жестком диске. Поэтому в этой структуре нет никакого флага, который бы указывал, что объект изменен (dirty) и требует обратной записи на диск. Объект file указывает на связанный с ним объект dentry с помощью указателя f_dentry. Объект dentry в свою очередь содержит указатель на связанный с ним индекс файла, который содержит информацию о том, изменен ли файл.

Файловые операции

Как и для других объектов подсистемы VFS, таблица файловых операций является важной структурой. Операции, связанные со структурой struct file, — это знакомые системные вызовы, составляющие основу системных вызовов ОС Unix.

Методы работы с файловым объектом хранятся в структуре file_operationsи определены в файле следующим образом.

struct file_operations {

struct module *owner;

loff_t (*llseek)(struct file*, loff_t, int);

ssize_t (*read)(struct file*, char*, size_t, loff_t*);

ssize_t (*aio_read)(struct kiocb*, char*, size_t, loff_t);

ssize_t (*write)(struct file*, const char*, size_t, loff_t*);

ssize_t (*aio_write)(struct kiocb*, const char*, size_t, loff_t);

int (*readdir)(struct file*, void*, filldir_t);

unsigned int (*poll)(struct file*, struct poll_table_struct*);

int (*ioctl)(struct inode*, struct file*, unsigned int, unsigned long);

int (*mmap)(struct file*, struct vm_area_struct*);

int (*open)(struct inode*, struct file*);

int (*flush)(struct file*);

int (*release)(struct inode*, struct file*);

int (*fsync)(struct file*, struct dentry*, int);

int (*aio_fsync)(struct kiocb*, int);

int (*fasync)(int, struct file*, int);

int (*lock)(struct file*, int, struct file_lock*);

ssize_t (*readv)(struct file*, const struct iovec*,

unsigned long, loff_t*);

ssize_t (*writev)(struct file*, const struct iovec*,

unsigned long, loff_t*);

ssize_t (*sendfile)(struct file*, loff_t*, size_t,

read_actor_t, void*);

ssize_t (*sendpage)(struct file*, struct page*, int,

size_t, loff_t*, int);

unsigned long (*get_unmapped_area)(struct file*, unsigned long,

unsigned long, unsigned long, unsigned long);

int (*check_flags)(int flags);

int (*dir_notify)(struct file *filp, unsigned long arg);

int (*flock)(struct file *filp, int cmd, struct file_lock *fl);

};

Файловые системы могут реализовать уникальную функцию для каждой из этих операций или использовать общий существующий метод. Общие методы нормально работают для обычных Unix-подобных файловых систем. Разработчики файловых систем не обязаны реализовать все эти функции, хотя основные методы должны быть реализованы. Если какой-либо метод не представляет интереса, то его можно установить в значение NULL.

Рассмотрим каждую операцию подробнее.

loff_t llseek(struct file *file, loff_t offset, int origin);

Эта функция устанавливает значения указателя текущей позиции в файле (file pointer) в заданное значение параметра offset. Функция вызывается из системного вызова lseek().

ssize_t read(struct file *file,

char *buf, size_t count, loff_t* offset);

Эта функция считывает countбайт данных из указанного файла, начиная с позиции, заданной параметром offset, в буфер памяти, на который указывает параметр buf. После этого значение указателя текущей позиции в файле должно быть обновлено. Данная функция вызывается из системного вызова read().

ssize_t aio_read(struct kiocb *iocb,

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

Интервал:

Закладка:

Сделать

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

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


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

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

x