Содержание

  • Предисловие
  • Введение
  • ***
  • Итак…
  • Версия ядра
  • Читательская аудитория
  • Интернет-ресурс
  • Благодарности ко второму изданию
  • Об авторе
  • От издательства
  • ***
  • Для читателей
  • Глава 1
    Введение в ядро Linux
  • ***
  • Потом пришел Линус: введение в Linux
  • Обзор операционных систем и ядер
  • Ядро Linux в сравнении с классическими ядрами Unix
  • Версии ядра Linux
  • Сообщество разработчиков ядра Linux
  • Перед тем как начать
  • Глава 2
    Начальные сведения о ядре Linux
  • ***
  • Получение исходного кода ядра
  • Дерево исходных кодов ядра
  • Сборка ядра
  • "Зверек другого рода"
  • Резюме
  • Глава 3
    Управление процессами
  • ***
  • Дескриптор процесса и структура task structure
  • Создание нового процесса
  • Реализация потоков в ядре Linux
  • Завершение процесса
  • Резюме
  • Глава 4
    Планирование выполнения процессов
  • ***
  • Стратегия планирования
  • Алгоритм планирования
  • Вытеснение и переключение контекста
  • Режим реального времени
  • Системные вызовы для управления планировщиком
  • В завершение о планировщике
  • Глава 5
    Системные вызовы
  • ***
  • API, POSIX и библиотека С
  • Вызовы syscall
  • Обработка системных вызовов
  • Реализация системных вызовов
  • Контекст системного вызова
  • В заключение о системных вызовах
  • Глава 6
    Прерывания и обработка прерываний
  • ***
  • Прерывания
  • Обработчики прерываний
  • Написание обработчика прерывания
  • Реализация системы обработки прерываний
  • Управление прерываниями
  • Не нужно прерывать, мы почти закончили!
  • Глава 7
    Обработка нижних половин и отложенные действия
  • ***
  • Нижние половины
  • Механизм отложенных прерываний (softirq)
  • Тасклеты
  • Очереди отложенных действий
  • Какие обработчики нижних половин необходимо использовать
  • Блокировки между обработчиками нижних половин
  • Внизу обработки нижних половин
  • Глава 8
    Введение в синхронизацию выполнения кода ядра
  • ***
  • Критические участки и состояние конкуренции за ресурсы
  • Блокировки
  • Взаимоблокировки
  • Конфликт при захвате блокировки и масштабируемость
  • Блокировки в вашем коде
  • Глава 9
    Средства синхронизации в ядре
  • ***
  • Атомарные операции
  • Спин-блокировки
  • Спин-блокировки чтения-записи
  • Семафоры
  • Семафоры чтения-записи
  • Сравнение спин-блокировок и семафоров
  • Условные переменные
  • BKL: Большая блокировка ядра
  • Секвентные блокировки
  • Средства запрещения преемптивности
  • Барьеры и порядок выполнения
  • Резюмирование по синхронизации
  • Глава 10
    Таймеры и управление временем
  • ***
  • Информация о времени в ядре
  • Переменная jiffies
  • Аппаратные часы и таймеры
  • Обработчик прерываний таймера
  • Абсолютное время
  • Таймеры
  • Задержка выполнения
  • Время вышло
  • Глава 11
    Управление памятью
  • ***
  • Страницы памяти
  • Зоны
  • Получение страниц памяти
  • Уровень слябового распределителя памяти
  • Интерфейс слябового распределителя памяти
  • Статическое выделение памяти в стеке
  • Отображение верхней памяти
  • Выделение памяти, связанной с определенным процессором
  • Новый интерфейс percpu
  • Когда лучше использовать данные, связанные с процессорами
  • Какой способ выделения памяти необходимо использовать
  • Глава 12
    Виртуальная файловая система
  • ***
  • Общий интерфейс к файловым системам
  • Уровень обобщенной файловой системы
  • Файловые системы Unix
  • Объекты VFS и их структуры данных
  • Объект superblock
  • Объект inode
  • Объект dentry
  • Объект file
  • Структуры данных, связанные с файловыми системами
  • Структуры данных, связанные с процессом
  • Файловые системы в операционной системе Linux
  • Глава 13
    Уровень блочного ввода-вывода
  • ***
  • Анатомия блочного устройства
  • Буферы и заголовки буферов
  • Структура bio
  • Очереди запросов
  • Планировщики ввода-вывода
  • Лифтовой алгоритм Линуса
  • Резюме
  • Глава 14
    Адресное пространство процесса
  • ***
  • Дескриптор памяти
  • Области памяти
  • Работа с областями памяти
  • Функции mmap() и do_mmap(): создание интервала адресов
  • Функции munmap() и do_munmap(): удаление интервала адресов
  • Таблицы страниц
  • Заключение
  • Глава 15
    Страничный кэш и обратная запись страниц
  • ***
  • Страничный кэш
  • Базисное дерево
  • Буферный кэш
  • Демон pdflush
  • Коротко о главном
  • Глава 16
    Модули
  • ***
  • Модуль "Hello, World!"
  • Сборка модулей
  • Инсталляция модулей
  • Генерация зависимостей между модулями
  • Загрузка модулей
  • Управление конфигурационными параметрами
  • Параметры модулей
  • Экспортируемые символы
  • Вокруг модулей
  • Глава 17
    Объекты kobject и файловая система sysfs
  • ***
  • Объекты kobject
  • Типы ktype
  • Множества объектов kset
  • Подсистемы
  • Путаница со структурами
  • Управление и манипуляции с объектами kobject
  • Счетчики ссылок
  • Файловая система sysfs
  • Уровень событий ядра
  • Кратко об объектах kobject и файловой системе sysfs
  • Глава 18
    Отладка
  • ***
  • С чего необходимо начать
  • Дефекты ядра
  • Функция printk()
  • Сообщения Oops
  • Конфигурационные параметры отладки ядра
  • Генерация ошибок и выдача информации
  • Магическая клавиша SysRq
  • Сага об отладчике ядра
  • Исследование и тестирование системы
  • Нахождение исполняемых образов с изменениями приводящими к ошибкам
  • Если ничто не помогает — обратитесь к сообществу
  • Глава 19
    Переносимость
  • ***
  • История переносимости Linux
  • Размер машинного слова и типы данных
  • Выравнивание данных
  • Порядок следования байтов
  • Таймер
  • Размер страницы памяти
  • Порядок выполнения операций процессором
  • Многопроцессорность, преемптивность и верхняя память
  • Пару слов о переносимости
  • Глава 20
    Заплаты, разработка и сообщество
  • ***
  • Сообщество
  • Стиль написания исходного кода
  • Организация команды разработчиков
  • Отправка сообщений об ошибках
  • Генерация заплат
  • Представление заплат
  • Заключение
  • Приложение А
    Связанные списки
  • ***
  • Кольцевые связанные списки
  • Реализация связанных списков в ядре Linux
  • Работа со связанными списками
  • Перемещение по связанным спискам
  • Приложение Б
    Генератор случайных чисел ядра
  • ***
  • Принцип работы и реализация
  • Интерфейсы для ввода энтропии
  • Интерфейсы для вывода энтропии
  • Приложение В
    Сложность алгоритмов
  • ***
  • Алгоритмы
  • Множество О
  • Множество большого-тета
  • Объединяем все вместе
  • Опасность, связанная со сложностью алгоритмов
  • Приложение Г
    Библиография и список литературы
  • ***
  • Книги по основам построения операционных систем
  • Книги о ядрах Unix
  • Книги о ядрах Linux
  • Книги о ядрах других операционных систем
  • Книги по API Unix
  • Другие работы
  • Web-сайты