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

Тут можно читать онлайн Роберт Лав - Разработка ядра Linux - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Издательский дом Вильямс, год 2006. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Разработка ядра Linux
  • Автор:
  • Жанр:
  • Издательство:
    Издательский дом Вильямс
  • Год:
    2006
  • Город:
    Москва
  • ISBN:
    5-8459-1085-4
  • Рейтинг:
    3.67/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Роберт Лав - Разработка ядра Linux краткое содержание

Разработка ядра Linux - описание и краткое содержание, автор Роберт Лав, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

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

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

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

Разработка ядра Linux - читать книгу онлайн бесплатно, автор Роберт Лав
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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

/* следующая функция используется для считывания суперблока с диска */

struct super_block*(*get_sb)(

struct file_system_type*, int, char*, void*);

/* эта функция используется для прекращения доступа к суперблоку */

void (*kill_sb)(struct super_block*);

struct module *owner; /* соответствующий модуль (если есть) */

struct file_system_type *next; /* следующая файловая система в списке */

struct list_head fs_supers; /* список объектов типа суперблок */

};

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

Для каждого типа файловой системы существует только одна структура file_system_type, независимо от того, сколько таких файловых систем смонтировано и смонтирован ли хотя бы один экземпляр соответствующей файловой системы.

Значительно интереснее становится, когда файловая система монтируется, при этом создается структура vfsmount. Эта структура используется для представления конкретного экземпляра файловой системы, или, другими словами, точки монтирования.

Структура vfsmountопределена в файле следующим образом.

struct vfsmount {

struct list_head mnt_hash; /* список хеш-таблицы */

struct vfsmount *mnt_parent; /* родительская файловая система */

struct dentry *mnt_mountpoint; /* объект элемента каталога

точки монтирования */

struct dentry *mnt_root; /* объект элемента каталога корня

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

struct super_block *mnt_sb; /* суперблок данной файловой системы */

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

смонтированных к данной */

struct list_head mnt_child; /* потомки, связанные с родителем */

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

int mnt_flags; /* флаги монтирования */

char *mnt_devname; /* имя смонтированного устройства */

struct list_head mnt_list; /* список дескрипторов */

struct list_head mnt_fslinkk; /* истекший список, специфичный

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

struct namespace *mnt_namespace; /* связанное пространство имен */

};

Самая сложная задача — это поддержание списка всех точек монтирования и взаимоотношений между данной файловой системой и другими точками монтирования. Эта информация хранится в различных связанных списках структуры vfsmount.

Структура vfsmountтакже содержит поле mnt_flags. В табл. 12.1 приведен список стандартных флагов монтирования.

Таблица 12.1. Список стандартных флагов монтирования

Флаг Описание
MNT_NOSUID Запрещает использование флагов setuid и setgid для бинарных файлов на файловой системе
MNT_NODEV Запрещает доступ к файлам устройств на файловой системе
MNT_NOEXEC Запрещает выполнение программ на файловой системе

Эти флаги полезны, в основном, для сменных носителей, которым администратор не доверяет.

Структуры данных, связанные с процессом

Каждый процесс в системе имеет свои открытые файлы, корневую файловую систем); текущий рабочий каталог, точки монтирования и т.д. Следующие три структуры данных связывают вместе подсистему VFS и процессы, которые выполняются в системе. Это структуры files_struct, fs_structи namespace.

Структура files_structопределена в файле . Адрес этой структуры хранится в поле files дескриптора процесса. В данной структуре хранится вся информация процесса об открытых файлах и файловых дескрипторах. Эта структура, с комментариями, имеет следующий вид.

struct files_struct {

atomic_t count; /* счетчик ссылок на данную структуру */

spinlock_t file_lock; /* блокировка для защиты данной структуры */

int max_fds; /* максимальное количество файловых объектов */

int max_fdset; /* максимальное количество

файловых дескрипторов */

int next_fd; /* номер следующего файлового дескриптора */

struct file **fd; /* массив всех файловых объектов */

fd_set *close on exec; /* файловые дескрипторы, которые должны

закрываться при вызове exec() */

fd_set *open_fds; /* указатель на дескрипторы открытых файлов */

fd_set close_on_exec init; /* первоначальные файлы для закрытия

при вызове exec() */

fd_set open_fds_init; /* первоначальный набор

файловых дескрипторов */

struct file *fd_array[NR_OPEN_DEFAULT]; /* массив файловых объектов */

};

Массив fdуказывает на список открытых файловых объектов. По умолчанию это массив fd_array. Так как по умолчанию значение константы NR_OPEN_DEFAULTравно 32, то это соответствует 32 файловым объектам. Если процесс открывает больше 32 файловых объектов, то ядро выделяет новый массив и присваивает полю fdуказатель на него. При таком подходе доступ к небольшому количеству файловых объектов осуществляется быстро, потому что они хранятся в статическом массиве. В случае, когда процесс открывает аномально большое количество файлов, ядро может создать новый массив. Если большинство процессов в системе открывает больше 32 файлов, то для получения оптимальной производительности администратор может увеличить значение константы NR_OPEN_DEFAULTс помощью директивы препроцессора. Следующая структура данных, связанная с процессом, — это структура fs_struct, которая содержит информацию, связанную с процессом, и на которую указывает поле fsдескриптора процесса. Эта структура определена в файле и имеет следующий вид с поясняющими комментариями.

struct fs_struct {

atomic_t count; /* счетчик ссылок на структуру */

rwlock_t lock; /* блокировка для защиты структуры */

int umask; /* права доступа к файлу, используемые

по умолчанию */

struct dentry *root; /* объект dentry корневого каталога */

struct dentry *pwd; /* объект dentry

текущего рабочего каталога */

struct dentry *allroot; /* объект dentry альтернативного корня */

struct vfsmount *rootmnt; /* объект монтирования корневого каталога */

struct vfsmount *pwdmnt; /* объект монтирования

текущего рабочего каталога */

struct vfsmount *altrootmnt; /* объект монтирования

альтернативного корня */

};

Эта структура содержит текущий рабочий каталог и корневой каталог данного процесса.

Третья, и последняя, структура — это структура namespace, которая определена в файле и на экземпляр которой указывает поле namespaceдескриптора процесса. Пространства имен, индивидуальные для каждого процесса, были введены в ядрах Linux серии 2.4. Это позволило создать для каждого процесса уникальное представление о смонтированных файловых системах. Иными словами, процесс может иметь не только уникальный корневой каталог, но и полностью уникальную иерархию смонтированных файловых систем, если это необходимо. Как обычно, ниже приведена соответствующая структура данных с комментариями.

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

Интервал:

Закладка:

Сделать


Роберт Лав читать все книги автора по порядку

Роберт Лав - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Разработка ядра Linux отзывы


Отзывы читателей о книге Разработка ядра Linux, автор: Роберт Лав. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x