Роберт Лав - Разработка ядра 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 - читать книгу онлайн бесплатно, автор Роберт Лав
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Структура vm_area_structописывает одну непрерывную область памяти в данном адресном пространстве. Ядро рассматривает каждую область памяти, как уникальный объект. Для каждой области памяти определены некоторые общие свойства, такие как права доступа и набор соответствующих операций. Таким образом, одна структура VMA может представлять различные типы областей памяти, например файлы, отображаемые в память, или стек пространства пользователя. Это аналогично объектно-ориентированному подходу, который используется в подсистеме VFS (см. главу 12, "Виртуальная файловая система").

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

struct vm_area_struct {

struct mm_struct *vm_mm; /* соответствующая структура mm_struct */

unsigned long vm_start; /* начало диапазона адресов */

unsigned long vm_end; /* конец диапазона адресов */

struct vm_area_struct *vm_next; /* список областей VMA */

pgprot_t vm_page_prot; /* права доступа */

unsigned long vm_flags; /* флаги */

struct rb_node vm_rb; /* узел текущей области VMA */

union { /* связь с address_space->i_mmap, или i_mmap_nonlinear */

struct {

struct list_head list;

void *parent;

struct vm_area_struct *head;

} vm_set;

struct prio_tree_node prio_tree_node;

} shared;

struct list_head anon_vma_node; /* анонимные области */

struct anon_vma *anon_vma; /* объект анонимной VMA */

struct vm_operations_struct *vm_ops; /* операции */

unsigned long vm_pgoff; /* смещение в файле */

struct file *vm_file; /* отображенный файл (если есть) */

void *vm_private_data; /* приватные данные */

};

Как уже было рассказано, каждый дескриптор памяти связан с уникальным диапазоном (интервалом) адресов в адресном пространстве процесса. Поле vm_ start — это начальный (минимальный) адрес, а поле vm_end — конечный (максимальный) адрес данного интервала. Следовательно, значение ( vm_end - vm_start) — это размер (длина) интервала адресов в байтах. Интервалы адресов разных областей памяти одного адресного пространства не могут перекрываться.

Поле vm_mmуказывает на структуру mm_struct, связанную с данной областью VMA. Заметим, что каждая область VMA уникальна для той структуры mm_struct, с которой эта область связана. Поэтому, даже если два разных процесса отображают один и тот же файл на свои адресные пространства, то для каждого процесса создается своя структура vm_area_struct, чтобы идентифицировать уникальные области памяти каждого процесса. Следовательно, два потока, которые совместно используют адресное пространство, также совместно используют и все структуры vm_area_structв этом адресном пространстве.

Флаги областей VMA

Поле флагов vm_flagsсодержит битовые флаги, которые определены в файле . Они указывают особенности поведения и содержат описательную информацию о страницах памяти, которые входят в данную область памяти. В отличие от прав доступа, которые связаны с определенной физической страницей памяти, флаги областей VMA указывают особенности поведения, за которые отвечает ядро, а не аппаратное обеспечение. Более того, поле vm_flagsсодержит информацию, которая относится к каждой странице в области памяти или, что то же самое, ко всей области памяти в целом. В табл. 14.1 приведен список возможных значений флагов vm_flags.

Таблица 14.1. Флаги областей VMA

Флаг Влияние на область VMA и на ее страницы памяти
VM_READ Из страниц памяти можно считывать информацию
VM_WRITE В страницы памяти можно записывать информацию
VM_EXEC Можно выполнять код, хранящийся в страницах памяти
VM_SHARED Страницы памяти являются совместно используемыми
VM_MAYREAD Можно устанавливать флаг VM_READ
VM_MAYWRITE Можно устанавливать флаг VM_WRITE
VM_MAYEXEC Можно устанавливать флаг VM_EXEC
VM_MAYSHARE Можно устанавливать флаг VM_SHARED
VM_GROWSDOWN Область памяти может расширяться "вниз"
VM_GROWSUP Область памяти может расширяться "вверх"
VM_SHM Область используется для разделяемой (совместно используемой) памяти
VM_DENYWRITE В область отображается файл, в который нельзя выполнять запись
VM_EXECUTABLE В область отображается выполняемый файл
VM_LOCKED Страницы памяти в области являются заблокированными
VM_IQ В область памяти отображается пространство ввода-вывода аппаратного устройства
VM_SEQ_READ К страницам памяти, вероятнее всего, осуществляется последовательный доступ
VM_RAND_READ К страницам памяти, вероятнее всего, осуществляется случайный доступ
VM_DONTCOPY Область памяти не должна копироваться при вызове fork()
VM_DONTEXPAND Область памяти не может быть увеличена с помощью вызова remap()
VM_RESERVED Область памяти не должна откачиваться на диск
VM_ACCOUNT Область памяти является объектом, по которому выполняется учет ресурсов
VM_HUGETLB В области памяти используются гигантские ( hugetlb) страницы памяти
VM_NONLINEAR Область памяти содержит нелинейное отображение

Рассмотрим подробнее назначение наиболее интересных и важных флагов. Флаги VM_READ, VM_WRITEи VM_EXECуказывают обычные права на чтение-запись и выполнение для страниц памяти, которые принадлежат данной области памяти. При необходимости их можно комбинировать для формирования соответствующих прав доступа. Например, отображение выполняемого кода процесса может быть выполнено с указанием флагов VM_READи VM_EXEC, но никак не с указанием флага VM_WRITE. С другой стороны, сегмент данных из выполняемого файла может отображаться с указанием флагов VM_READи VM_WRITE, указывать при этом флаг VM_EXECне имеет смысла. Файл данных, который отображается только для чтения, должен отображаться с указанием только флага VM_READ.

Флаг VM_SHAREDуказывает на то, что область памяти содержит отображение, которое может совместно использоваться несколькими процессами. Если этот флаг установлен, то такое отображение называют совместно используемым ( shared mapping ), что интуитивно понятно. Если этот флаг не установлен, то такое отображение доступно только одному процессу и оно называется частным отображением , ( private mapping ).

Флаг VM_IOуказывает, что область памяти содержит отображение области ввода-вывода аппаратного устройства. Этот флаг обычно устанавливается драйверами устройств при выполнении вызова mmap()для отображения в память области ввода-вывода аппаратного устройства. Кроме всего прочего, этот флаг указывает, что область памяти не должна включаться в файл core процесса. Флаг VM_RESERVEDуказывает, что область памяти не должна откачиваться на диск. Этот флаг также укалывается при отображении на память областей ввода-вывода аппаратных устройств.

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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