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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

Области памяти

Области памяти (memory areas) представляются с помощью объектов областей памяти, которые хранятся в структурах типа vm_area_struct. Эта структура определена в файле . Области памяти часто называются областями виртуальной памяти ( virtual memory area , или VMA).

Структура 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.

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

Интервал:

Закладка:

Сделать

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

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


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

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

x