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

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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

unsigned long free_area_cache; /* первый незанятый участок

адресного пространства */

pgd_t *pgd; /* глобальный каталог страниц */

atomic_t mm_users; /* счетчик пользователей адресного

пространства */

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

int map_count; /* количество областей памяти */

struct rw_semaphore mmap_sem; /* семафор для областей памяти */

spinlock_t page_table_lock; /* спин-блокировка

таблиц страниц */

struct list_head mmlist; /* список всех структур mm_struct */

unsigned long start_code; /* начальный адрес сегмента кода */

unsigned long end code; /* конечный адрес сегмента кода */

unsigned long start_data; /* начальный адрес сегмента данных */

unsigned long end_data; /* конечный адрес сегмента данных */

unsigned long start_brk; /* начальный адрес сегмента "кучи" */

unsigned long brk; /* конечный адрес сегмента "кучи" */

unsigned long start_stack; /* начало стека процесса */

unsigned long arg_start; /* начальный адрес

области аргументов */

unsigned long arg_end; /* конечный адрес

области аргументов */

unsigned long env_start; /* начальный адрес

области переменных среды */

unsigned long env_end; /* конечный адрес

области переменных среды */

unsigned long rss; /* количество физических страниц памяти */

unsigned long total_vm; /* общее количество страниц памяти */

unsigned long locked_vm; /* количество заблокированных страниц

памяти */

unsigned long def_flags; /* флаги доступа, используемые

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

unsigned long cpu_vm_mask; /* маска отложенного переключения

буфера TLB */

unsigned long swap_address; /* последний сканированный адрес */

unsigned dumpable:1; /* можно ли создавать файл core? */

int used_hugetlb; /* используются ли гигантские

страницы памяти (hugetlb)? */

mm_context_t context; /* данные, специфичные для аппаратной

платформы */

int core_waiters; /* количество потоков, ожидающих на

создание файла core */

struct completion *core_startup_done; /* условная переменная начала

создания файла core */

struct completion core_done; /* условная переменная завершения

создания файла core */

rwlock_t ioctx_list_lock; /* блокировка списка асинхронного

ввода-вывода (AIO) */

struct kioctx *ioctx_list; /* список асинхронного ввода-вывода (AIO) */

struct kioctx default_kioctx; /* контекст асинхронного ввода-

вывода, используемый по умолчанию */

};

Поле mm_users— это количество процессов, которые используют данное адресное пространство. Например, если одно и то же адресное пространство совместно используется двумя потоками, то значение поля mm_usersравно двум. Поле mm_count — это основной счетчик использования структуры mm_struct. Наличие пользователей структуры, которым соответствует поле mm_users, приводит к увеличению счетчика mm_countна единицу. В предыдущем примере значение поля mm_countравно единице. Когда значение поля mm_usersстановится равным нулю (т.е. когда два потока завершатся), только тогда значение поля mm_countуменьшается на единицу. Когда значение поля mm_count становится равным нулю, то на соответствующую структуру mm_structбольше нет ссылок, и она освобождается, Поддержка двух счетчиков позволяет ядру отличать главный счетчик использования ( mm_count) от количества процессов, которые используют данную структуру ( mm_users).

Поля mmapи mm_rb— это два различных контейнера данных, которые содержат одну и ту же информацию: информацию обо всех областях памяти в соответствующем адресном пространстве. В первом контейнере эта информация хранится в виде связанного списка, а во втором — в виде красно-черного бинарного дерева. Поскольку красно-черное дерево — это разновидность бинарного дерева, то, как и для всех типов бинарного дерева, количество операций поиска заданного элемента в нем равно О(log(n) ). Более детальное рассмотрение красно-черных деревьев найдете в разделе "Списки и деревья областей памяти".

Хотя обычно в ядре избегают избыточности, связанной с введением нескольких структур для хранения одних и тех же данных, тем не менее в данном случае эта избыточность очень кстати. Контейнер mmap— это связанный список, который позволяет очень быстро проходить по всем элементам. С другой стороны, контейнер mm_rb— это красно-черное дерево, которое очень хорошо подходит для поиска заданного элемента. Области памяти будут рассмотрены в этой главе несколько ниже,

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

Интервал:

Закладка:

Сделать

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

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


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

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

x