Книга: Разработка ядра Linux
Оглавление книги
- Предисловие
- Введение
- Об авторе
- От издательства
- Глава 1 Введение в ядро Linux
- Потом пришел Линус: введение в Linux
- Обзор операционных систем и ядер
- Ядро Linux в сравнении с классическими ядрами Unix
- Версии ядра Linux
- Сообщество разработчиков ядра Linux
- Перед тем как начать
- Глава 2 Начальные сведения о ядре Linux
- Получение исходного кода ядра
- Дерево исходных кодов ядра
- Сборка ядра
- "Зверек другого рода"
- Отсутствие библиотеки libc
- Компилятор GNU С
- Отсутствие защиты памяти
- Нельзя просто использовать вычисления с плавающей точкой
- Маленький стек фиксированного размера
- Синхронизация и параллелизм
- Переносимость — это важно
- Резюме
- Глава 3 Управление процессами
- Дескриптор процесса и структура task structure
- Выделение дескриптора процесса
- Хранение дескриптора процесса
- Состояние процесса
- Манипулирование текущим состоянием процесса
- Контекст процесса
- Дерево семейства процессов
- Создание нового процесса
- Реализация потоков в ядре Linux
- Завершение процесса
- Резюме
- Глава 4 Планирование выполнения процессов
- Стратегия планирования
- Процессы, ограниченные скоростью ввода-вывода и скоростью процессора
- Приоритет процесса
- Квант времени
- Вытеснение процесса
- Стратегия планирования в действии
- Алгоритм планирования
- Очереди выполнения
- Массивы приоритетов
- Пересчет квантов времени
- Вычисление приоритетов и квантов времени
- Переход в приостановленное состояние и возврат к выполнению
- Балансировка нагрузки
- Вытеснение и переключение контекста
- Режим реального времени
- Системные вызовы для управления планировщиком
- Системные вызовы, связанные с управлением стратегией и приоритетом
- Системные вызовы управления процессорной привязкой
- Передача процессорного времени
- В завершение о планировщике
- Глава 5 Системные вызовы
- API, POSIX и библиотека С
- Вызовы syscall
- Обработка системных вызовов
- Реализация системных вызовов
- Контекст системного вызова
- Окончательные шаги регистрации системного вызова
- Доступ к системным вызовам из пространства пользователя
- Почему не нужно создавать системные вызовы
- В заключение о системных вызовах
- Глава 6 Прерывания и обработка прерываний
- Прерывания
- Обработчики прерываний
- Написание обработчика прерывания
- Реализация системы обработки прерываний
- Управление прерываниями
- Запрещение и разрешение прерываний
- Запрещение определенной линии прерывания
- Состояние системы обработки прерываний
- Не нужно прерывать, мы почти закончили!
- Глава 7 Обработка нижних половин и отложенные действия
- Нижние половины
- Механизм отложенных прерываний (softirq)
- Тасклеты
- Очереди отложенных действий
- Реализация очередей отложенных действий
- Использование очередей отложенных действий
- Старый механизм очередей заданий
- Какие обработчики нижних половин необходимо использовать
- Блокировки между обработчиками нижних половин
- Внизу обработки нижних половин
- Глава 8 Введение в синхронизацию выполнения кода ядра
- Критические участки и состояние конкуренции за ресурсы
- Блокировки
- Взаимоблокировки
- Конфликт при захвате блокировки и масштабируемость
- Блокировки в вашем коде
- Глава 9 Средства синхронизации в ядре
- Атомарные операции
- Спин-блокировки
- Спин-блокировки чтения-записи
- Семафоры
- Семафоры чтения-записи
- Сравнение спин-блокировок и семафоров
- Условные переменные
- BKL: Большая блокировка ядра
- Секвентные блокировки
- Средства запрещения преемптивности
- Барьеры и порядок выполнения
- Резюмирование по синхронизации
- Глава 10 Таймеры и управление временем
- Информация о времени в ядре
- Переменная jiffies
- Внутреннее представление переменной jiffies
- Переполнение переменной jiffies
- Пространство пользователя и параметр HZ
- Аппаратные часы и таймеры
- Обработчик прерываний таймера
- Абсолютное время
- Таймеры
- Задержка выполнения
- Время вышло
- Глава 11 Управление памятью
- Страницы памяти
- Зоны
- Получение страниц памяти
- Получение страниц заполненных нулями
- Освобождение страниц
- Функция kmalloc()
- Флаги gfp_mask
- Функция kfree()
- Функция vmalloc()
- Уровень слябового распределителя памяти
- Интерфейс слябового распределителя памяти
- Статическое выделение памяти в стеке
- Отображение верхней памяти
- Выделение памяти, связанной с определенным процессором
- Новый интерфейс percpu
- Работа с данными, связанными с процессорами, на этапе компиляции
- Работа с данными процессоров на этапе выполнения
- Когда лучше использовать данные, связанные с процессорами
- Какой способ выделения памяти необходимо использовать
- Глава 12 Виртуальная файловая система
- Общий интерфейс к файловым системам
- Уровень обобщенной файловой системы
- Файловые системы Unix
- Объекты VFS и их структуры данных
- Объект superblock
- Объект inode
- Объект dentry
- Объект file
- Структуры данных, связанные с файловыми системами
- Структуры данных, связанные с процессом
- Файловые системы в операционной системе Linux
- Глава 13 Уровень блочного ввода-вывода
- Анатомия блочного устройства
- Буферы и заголовки буферов
- Структура bio
- Очереди запросов
- Планировщики ввода-вывода
- Лифтовой алгоритм Линуса
- Планировщик ввода-вывода с лимитом по времени
- Прогнозирующий планировщик ввода-вывода
- Планировщик ввода-вывода с полностью равноправными очередями
- Планировщик ввода-вывода noop
- Выбор планировщика ввода-вывода
- Резюме
- Глава 14 Адресное пространство процесса
- Дескриптор памяти
- Выделение дескриптора памяти
- Удаление дескриптора памяти
- Структура mm_struct и потоки пространства ядра
- Области памяти
- Флаги областей VMA
- Операции с областями VMA
- Списки и деревья областей памяти
- Области памяти в реальной жизни
- Работа с областями памяти
- Функции mmap() и do_mmap(): создание интервала адресов
- Функции munmap() и do_munmap(): удаление интервала адресов
- Таблицы страниц
- Заключение
- Глава 15 Страничный кэш и обратная запись страниц
- Глава 16 Модули
- Модуль "Hello, World!"
- Сборка модулей
- Инсталляция модулей
- Генерация зависимостей между модулями
- Загрузка модулей
- Управление конфигурационными параметрами
- Параметры модулей
- Экспортируемые символы
- Вокруг модулей
- Глава 17 Объекты kobject и файловая система sysfs
- Объекты kobject
- Типы ktype
- Множества объектов kset
- Подсистемы
- Путаница со структурами
- Управление и манипуляции с объектами kobject
- Счетчики ссылок
- Файловая система sysfs
- Добавление и удаление объектов на файловой системе sysfs
- Добавление файлов на файловой системе sysfs
- Уровень событий ядра
- Кратко об объектах kobject и файловой системе sysfs
- Глава 18 Отладка
- С чего необходимо начать
- Дефекты ядра
- Функция printk()
- Устойчивость функции printk()
- Уровни вывода сообщений ядра
- Буфер сообщений ядра
- Демоны syslogd и klogd
- Замечание относительно функции printk() и разработки ядра
- Сообщения Oops
- Конфигурационные параметры отладки ядра
- Генерация ошибок и выдача информации
- Магическая клавиша SysRq
- Сага об отладчике ядра
- Исследование и тестирование системы
- Использование идентификатора UID в качестве условия
- Использование условных переменных
- Использование статистики
- Ограничение частоты следования событий при отладке
- Нахождение исполняемых образов с изменениями приводящими к ошибкам
- Если ничто не помогает — обратитесь к сообществу
- Глава 19 Переносимость
- История переносимости Linux
- Размер машинного слова и типы данных
- Выравнивание данных
- Порядок следования байтов
- Таймер
- Размер страницы памяти
- Порядок выполнения операций процессором
- Многопроцессорность, преемптивность и верхняя память
- Пару слов о переносимости
- Глава 20 Заплаты, разработка и сообщество
- Сообщество
- Стиль написания исходного кода
- Отступы
- Фигурные скобки
- Длинные строки
- Имена
- Функции
- Комментарии
- Использование директивы typedef
- Использование того, что уже есть
- Никаких директив ifdef в исходном коде
- Инициализация структур
- Исправление ранее написанного кода
- Организация команды разработчиков
- Отправка сообщений об ошибках
- Генерация заплат
- Представление заплат
- Заключение
- Приложение А Связанные списки
- Кольцевые связанные списки
- Реализация связанных списков в ядре Linux
- Работа со связанными списками
- Перемещение по связанным спискам
- Приложение Б Генератор случайных чисел ядра
- Приложение В Сложность алгоритмов
- Алгоритмы
- Множество О
- Множество большого-тета
- Объединяем все вместе
- Опасность, связанная со сложностью алгоритмов
- Приложение Г Библиография и список литературы
- Книги по основам построения операционных систем
- Книги о ядрах Unix
- Книги о ядрах Linux
- Книги о ядрах других операционных систем
- Книги по API Unix
- Другие работы
- Web-сайты
- Сноски из книги
- Содержание книги
- Популярные страницы
Оглавление статьи/книги
- Предисловие
- Введение
- Об авторе
- От издательства
- Глава 1 Введение в ядро Linux
- Глава 2 Начальные сведения о ядре Linux
- Глава 3 Управление процессами
- Глава 4 Планирование выполнения процессов
- Глава 5 Системные вызовы
- Глава 6 Прерывания и обработка прерываний
- Глава 7 Обработка нижних половин и отложенные действия
- Глава 8 Введение в синхронизацию выполнения кода ядра
- Глава 9 Средства синхронизации в ядре
- Глава 10 Таймеры и управление временем
- Глава 11 Управление памятью
- Глава 12 Виртуальная файловая система
- Глава 13 Уровень блочного ввода-вывода
- Глава 14 Адресное пространство процесса
- Глава 15 Страничный кэш и обратная запись страниц
- Глава 16 Модули
- Глава 17 Объекты kobject и файловая система sysfs
- Глава 18 Отладка
- Глава 19 Переносимость
- Глава 20 Заплаты, разработка и сообщество
- Приложение А Связанные списки
- Приложение Б Генератор случайных чисел ядра
- Приложение В Сложность алгоритмов
- Приложение Г Библиография и список литературы
- Сноски из книги
- Содержание книги
- Популярные страницы
Похожие страницы
- Разработка ядра Linux
- InterBase Classic Server под Linux
- Каталог BIN в InterBase Classic Server для Linux
- Разработка через тестирование и разработка с тестами
- 2.5. Разработка технического задания на проведение детального анализа рынка при работе над инновационным проектом. Основ...
- Разработка приложений баз данных InterBase на Borland Delphi
- Вам очень пригодится «Разработка ценностных предложений», если…
- Chapter 16. Commercial products based on Linux, iptables and netfilter
- Глава 5. Разработка и анализ бизнес-планов в системе Project Expert
- 2.2. Практическая разработка фирменного стиля компании 51
- 1.1 Режимы ядра и пользователя Windows
- 1 Введение в Linux