FreeBSD: архитектура и реализация

Маршалл К. МакКузик Джордж В. Невилл-Нил

Предисловие
Об авторах
Часть I. Обзор
Глава 1. История и цели
.1. История UNIX
Происхождение
Исследовательский UNIX
AT&T UNIX System III и System V
Berkley Software Distributions
UNIX в мире
2. BSD и другие системы
Влияние сообщества пользователей
3. Переход BSD на открытый исходный код
Networking Release 2
Судебный процесс
4.4BSD
4.4BSD-Lite Release 2
4. Модель разработки FreeBSD
Ссылки
Глава 2. Обзор дизайна FreeBSD
2.1. Средства FreeBSD и ядро
Ядро
2.2. Организация ядра
2.3. Службы ядра
2.4. Управление процессами
Сигналы
Группы процессов и сеансы
2.5. Управление памятью
Проектные решения по управлению памятью BSD
Управление памятью внутри ядра
2.6. Система ввода/вывода
Дескрипторы и ввод/вывод
Управление дескрипторами
Устройства
Механизм взаимодействия сокетов
Разбросанный ввод/вывод
Поддержка нескольких файловых систем
2.7. Устройства
2.8. Файловые системы
Файловое хранилище
2.9. Сетевая файловая система
2.10. Терминалы
2.11. Межпроцессное взаимодействие
2.12. Сетевая коммуникация
2.13. Реализация работы в сети
2.14. Работа системы
Упражнения
Ссылки
Глава 3. Службы ядра
3.1. Организация ядра
Системные процессы
Системный вход
Организация времени выполнения
Вход в ядро
Возвращение из ядра
3.2. Системные вызовы
Обработка результатов
Возвращение из системного вызова
3.3. Исключения и прерывания
Исключения
Прерывания от устройств ввода/вывода
Программные прерывания
3.4. Прерывания от часов
Статистика и планирование процессов
Тайм-ауты
3.5 Службы управления памятью
3.6. Службы времени
Реальное время
Внешнее представление
Корректировка времени
Интервальное время
3.7. Идентификаторы пользователя, группы и другие идентификаторы
Идентификаторы хостов
Группы процессов и сеансы
3.8. Службы ресурсов
Приоритеты процессов
Использование ресурсов
Ограничения ресурсов
Квоты файловой системы
3.9. Службы управления системой
Учет использования ресурсов
Упражнения
Ссылки
Глава 4. Управление процессами
4.1. Введение в управление процессами
Многозадачное программирование
Планирование
4.2. Состояние процесса
Структура процесса
Структура потока
4.3. Переключение контекста
Состояние потока
Переключение контекста на низком уровне
Добровольное переключение контекста
Синхронизация
м...Синхронизация с помощью мьютекса
Блокировки менеджера блокировок
Другие виды синхронизации
4.4. Планирование потоков
Планировщик 4.4BSD
Планирование потоков с разделением времени
Вычисления приоритета потоков
Процедуры вычисления приоритета потока
Очереди выполнения потоков и переключение контекста
Планировщик ULE
4.5. Создание процесса
4.6. Завершение процесса
4.7. Сигналы
История сигналов
Отправка сигнала
Доставка сигнала
4.8. Группы процессов и сеансы
Сеансы
Управление заданиями
4.9. Тюрьмы
Семантика тюрьмы
Реализация тюрьмы
Ограничения тюрьмы
4.10. Отладка процессов
Упражнения
Ссылки
Глава 5. Управление памятью
5.1. Терминология
Процессы и память
Страничная подкачка
Алгоритмы замещения
Модель рабочего набора
Подкачка процессов
Преимущества виртуальной памяти
Аппаратные требования для виртуальной памяти
5.2. Обзор системы виртуальной памяти FreeBSD
5.3. Управление памятью ядра
Отображения и подотображения ядра
Выделение адресного пространства ядра
Malloc ядра
Зональный распределитель ядра
5.4. Ресурсы процесса
Виртуальное адресное пространство процесса FreeBSD
Передача отказов страниц
Отображение на объекты
Объекты
Объекты к страницам
5.5. Разделяемая память
Модель mmap
Разделяемое отображение
Индивидуальное отображение
Сворачивание теневых цепочек
Индивидуальные моментальные снимки
5.6. Создание нового процесса
Резервирование ресурсов ядра
Дублирование адресного пространства пользователя
Создание нового процесса без копирования
5.7. Исполнение файла
5.8. Манипулирование процесса своим адресным пространством
Изменение размера процесса
Отображение файлов
Изменение защиты
5.9. Завершение процесса
5.10. Интерфейс пейджера
Пейджер vnode
Пейджер устройств
Пейджер физической памяти
Пейджер подкачки
5.11. Страничная подкачка
Дизайн аппаратного кеша
Раскраска страниц (page coloring)
5.12. Замещение страниц
Параметры страничной подкачки
Демон выгрузки страниц
Подкачка процессов
Процесс подкачки
5.13. Переносимость
Роль модуля pmap
Инициализация и запуск
Выделение и освобождение отображения
Изменение для отображений атрибутов доступа и резервирования
Управление информацией об использовании страницы
Инициализация физических страниц
Управление внутренними структурами данных
Упражнения
Ссылки
Часть III. Система ввода/вывода
Глава 6. Обзор системы ввода/вывода
6.1. Отображение ввода/вывода от пользователя на устройство
Драйверы устройств
Очередь ввода/вывода
Обработка прерываний
6.2. Символьные устройства
Непосредственные устройства и физический ввод/вывод
Символьно-ориентированные устройства
Точки входа для драйверов символьных устройств
6.3. Дисковые устройства
Точки входа для драйверов дисковых устройств
Сортировка запросов дискового ввода/вывода
Метки дисков
6.4. Управление дескрипторами и службы дескрипторов
Открытые элементы файлов
Управление дескрипторами
Асинхронный ввод/вывод
Блокировка дескриптора файла
Мультиплексирование ввода/вывода для дескрипторов
Реализация select
Перемещение данных внутри ядра
6.5. Интерфейс виртуальной файловой системы
Содержимое vnode
Операции vnode
Трансляция имен путей
Службы экспортированных файловых систем
6.6. Службы, независимые от файловой системы
Кеш имен
Управление буферами
Реализация управления буферами
6.7. Наращиваемые файловые системы
Простые уровни файловых систем
Файловая система union
Другие файловые системы
Упражнения
Ссылки
Глава 7. Устройства
7.1. Обзор устройств
Архитектура ввода/вывода PC
Структура подсистемы ввода/вывода запоминающих устройств большой емкости ......FreeBSD
Именование устройств и доступ к ним
7.2. Уровень GEOM
Терминология и топологические правила
Изменение топологии
Функционирование
Топологическая гибкость
7.3. Уровень CAM
Подсистема SCSI
Путь запроса ввода/вывода через подсистему CAM
7.4. Уровень ATA
Путь запроса ввода/вывода через подсистему ATA
7.5. Конфигурирование устройств
Идентификация устройств
Структуры данных автоконфигурирования
Упражнения
Ссылки
Глава 8. Локальные файловые системы
8.1. Управление иерархическими файловыми системами
8.2. Структура inode
Изменения формата inode
Расширенные атрибуты
Возможности новой файловой системы
Флаги файлов
Динамические inode
Управление массивом inode
8.3. Именование
Каталоги
Отыскание имен в каталогах
Преобразование имен путей
Ссылки
8.4. Квоты
8.5. Блокировки файлов
8.6. Мягкие обновления
Зависимости обновлений в файловой системе
Структуры зависимостей
Отслеживание зависимости битовой карты
Отслеживание зависимости inode
Отслеживание зависимостей прямых блоков
Отслеживание зависимостей косвенного блока
Отслеживание зависимостей для новых косвенных блоков
Отслеживание зависимости нового элемента каталога
Отслеживание зависимостей нового каталога
Отслеживание зависимости удаления элемента каталога
Усечение файлов
Повторное использование inode файлов и каталогов
Отслеживание зависимостей переименования элемента каталога
Отслеживание зависимостей удаления файла
Требования fsync для мягких обновлений
Требования удаления файла для мягких обновлений
Требования мягкого обновления для fsck
Производительность мягких обновлений
8.7. Моментальные снимки файловой системы
Создание моментального снимка файловой системы
Хранение моментальных снимков файловой системы
Моментальные снимки больших файловых систем
Производительность моментальных снимков
Фоновая fsck
Видимые для пользователя моментальные снимки
Динамические дампы
8.8. Локальное файловое хранилище
Обзор файлового хранилища
Пользовательский ввод/вывод в файле
8.9. Быстрая файловая система Беркли
Организация быстрой файловой системы Беркли
Загрузочные блоки
Оптимизация использования хранилища
Политики размещения
Механизмы выделения
Кластеризация блоков
Выделение, основанное на экстентах
Упражнения
Ссылки
Глава 9. Сетевая файловая система
9.1. История и обзор
9.2. Структура и работа NFS
Протокол NFS
Реализация NFS FreeBSD
Клиент-серверные взаимодействия
Транспортные проблемы RPC
Проблемы безопасности
9.3. Методики по повышению производительности
Владения
Восстановление после сбоев
Упражнения
Ссылки
Глава 10. Управление терминалами
0.1. Режимы обработки терминалов
0.2. Дисциплины линии связи
0.3. Интерфейс пользователя
0.4. Структура tty
0.5. Группы процессов, сеансы и управление терминалом
0.6. С-списки
0.7. RS-232 и управление модемом
0.8. Операции терминала
Open
Дисциплина выходной линии связи
Вывод на терминал
Ввод с терминала
Процедура ioctl
Переходы модема
Закрытие терминальных устройств
0.9. Другие дисциплины линии связи
Упражнения
Ссылки
Часть IV. Межпроцессное взаимодействие
Глава 11. Межпроцессное взаимодействие
1.1. Модель межпроцессного взаимодействия
Использование сокетов
1.2. Структура реализации и обзор
1.3. Управление памятью
Mbuf
Алгоритмы управления хранилищем
Вспомогательные процедуры mbuf
1.4. Структуры данных
Коммуникационные домены
Сокеты
Адреса сокетов
Блокировки
1.5. Установление соединения
1.6. Обмен данными
Передача данных
Получение данных
1.7. Отключение сокета
1.8. Локальное межпроцессное взаимодействие
Семафоры
Очереди сообщений
Разделяемая память
Упражнения
Ссылки
Глава 12. Сетевая коммуникация
2.1. Внутренняя структура
Поток данных
Коммуникационные протоколы
Сетевые интерфейсы
2.2. Интерфейс между сокетами и протоколами
Процедуры пользовательских запросов протокола
Процедура управления выводом протокола
2.3. Интерфейс протокол-протокол
pr_output
pr_input
pr_ctlinput
2.4. Интерфейс между протоколом и сетевым интерфейсом
Передача пакета
Прием пакетов
2.5. Маршрутизация
Таблицы маршрутизации ядра
Поиск маршрутизации
Перенаправления маршрутизации
Интерфейс таблицы маршрутизации
Политики маршрутизации уровня пользователя
Интерфейс маршрутизации уровня пользователя: сокет маршрутизации
2.6. Буферирование и управление перегрузкой
Политики буферирования протокола
Ограничение очереди
2.7. Непосредственные сокеты
Управляющие блоки
Обработка ввода
Обработка вывода
2.8. Дополнительные темы сетевой подсистемы
Внеполосные данные
Протокол разрешения адресов
Упражнения
Ссылки
Глава 13. Сетевые протоколы
3.1. Сетевые протоколы IPv4
Адреса IPv4
Широковещательные адреса
Многоадресная рассылка Интернета
Порты и связи Интернета
Управляющие блоки протоколов
3.2. Протокол пользовательских дейтаграмм (UDP)
Инициализация
Вывод
Ввод
Управляющие операции
3.3. Протокол Интернета (IP)
Вывод
Ввод
Пересылка
3.4. Протокол управления передачей (TCP)
Состояния TCP-соединения
Переменные, описывающие последовательность
3.5. Алгоритмы TCP
Таймеры
Оценка времени обращения
Установление соединения
Кеш SYN
Отключение соединения
3.6. Обработка ввода TCP
3.7. Обработка вывода TCP
Отправка данных
Избегание синдрома незначительного окна
Избежание небольших пакетов
Отложенные подтверждения и обновления окон
Состояние повторной передачи
Медленный старт
Обработка сдерживания источника
Задание размеров буфера и окна
Избежание перегрузки с помощью медленного старта
Быстрая повторная передача
3.8. Протокол управляющих сообщений Интернета (ICMP)
3.9. IPv6
Адреса IPv6
Форматы пакета IPv6
Изменения API сокетов
Автоконфигурирование
3.10. Безопасность
Обзор IPSec
Протоколы безопасности
Управление ключами
Реализация IPSec
Криптографическая подсистема
Упражнения
Ссылки
Часть V. Работа системы
Глава 14. Запуск и выключение
4.1. Обзор
4.2. Начальная загрузка
Программа boot
4.3. Инициализация ядра
Запуск на языке ассемблера
4.4. Инициализация модуля ядра
Базовые службы
Инициализация потоков ядра
Инициализация модулей устройств
Загружаемые модули ядра
Запуск межпроцессного взаимодействия
Запуск потоков ядра
4.5. Инициализация уровня пользователя
/sbin/init
Сценарии запуска системы
/usr/libexec/getty
/usr/bin/login
4.6. Работа системы
Конфигурация ядра
Выключение системы и автоматическая перезагрузка
Отладка системы
Передача информации ядру и от ядра
Упражнения
Ссылки
Глоссарий
Предметный указатель