От редактора английского издания
От издательства
Предисловие
Изложение материала
Реализации UNIX
Для кого предназначена эта книга
Как организована эта книга
Некоторые обозначения, принятые в книге
Благодарности
Дополнительная литература
Глава Введение
Введение
Краткая история
Начало
Распространение
BSD
System V
Коммерциализация
Mach
Стандарты
OSFnUI
SVR и ее дальнейшее развитие
Причины изменений системы
Функциональные возможности
Сетевая поддержка
Производительность
Изменение аппаратных платформ
Улучшение качества
Глобальные изменения
Поддержка различных приложений
Чем меньше, тем лучше
Гибкость системы
Оглянемся назад, посмотрим вперед
Преимущества UNIX
Недостатки UNIX
Границы повествования книги
Дополнительная литература
Глава Ядро и процессы
Введение
Режим, пространство и контекст
Определение процесса
Состояние процесса
Контекст процесса
Полномочия пользователя
Область и и структура ргос
Выполнение в режиме ядра
Интерфейс системных вызовов
Обработка прерываний
Синхронизация
Операции блокировки
Прерывания
Многопроцессорные системы
Планирование процессов
Сигналы
Новые процессы и программы
Вызовы fork и exec
Создание процесса
Оптимизация вызова fork
Запуск новой программы
Завершение процесса
Ожидание завершения процесса
Процессы-зомби
Заключение
Упражнения
Дополнительная литература
Глава Нити и легковесные процессы
Введение
Причины появления технологии нитей
Нити и процессоры
Одновременность и параллельность
Основные типы нитей
Нити ядра
Легковесные процессы
Прикладные нити
Легковесные процессы: основные проблемы
Семантика вызова fork
Другие системные вызовы
Доставка и обработка сигналов
Видимость
Рост стека
Нитевые библиотеки прикладного уровня
Программный интерфейс
Реализация нитевых библиотек
Активации планировщика
Многонитевость в Solaris и SVR
Нити ядра
Реализация легковесных процессов
Прикладные нити
Реализация прикладных нитей
Обработка прерываний
Обработка системных вызовов
Нити в системе Mach
Задачи и нити в системе Mach
Библиотека C-threads
Digital UNIX
Интерфейс UNIX
Системные вызовы и сигналы
Библиотека pthreads
Продолжения в системе Mach
Модели выполнения программ
Использование продолжений
Оптимизация работы
Анализ производительности
Заключение
Упражнения
Дополнительная литература
Глава Сигналы и управление сеансами
Введение
Генерирование и обработка сигналов
Обработка сигналов
Генерирование сигналов
Типичные примеры возникновения сигналов
Спящие процессы и сигналы
Ненадежные сигналы
Надежные сигналы
Основные возможности
Сигналы в системе SVR
Механизм сигналов в BSD
Сигналы в SVR
Реализация сигналов
Генерация сигналов
Доставка и обработка
Исключительные состояния
Обработка исключительных состояний в Mach
Порты исключительных состояний
Обработка ошибок
Взаимодействие с отладчиком
Анализ
Группы процессов и управление терминалом
Общие положения
Модель SVR
Ограничения
Группы и терминалы в системе BSD
Недостатки модели BSD
Архитектура сеансов в системе SVR
Задачи, поставленные перед разработчиками
Сеансы и группы процессов
Структуры данных
Управляющие терминалы
Реализация сеансов в BSD
Заключение
Упражнения
Дополнительная литература
Глава Планирование процессов
Введение
Обработка прерываний таймера
Отложенные вызовы
Будильники
Цели, стоящие перед планировщиком
Планирование в традиционных системах UNIX
Приоритеты процессов
Реализация планировщика
Операции с очередью выполнения
Анализ
Планировщик в системе SVR
Независимый от класса уровень
Интерфейс с классами планирования
Класс разделения времени
Класс реального времени
Системный вызов priocntl
Анализ
Расширенные возможности планирования системы Solaris x
Вытесняющее ядро
Многопроцессорная поддержка
Скрытое планирование
Инверсия приоритетов
Реализация наследования приоритетов
Ограничения наследования приоритетов
Турникеты
Анализ
Планирование в системе Mach
Поддержка нескольких процессоров
Планировщик реального времени Digital UNIX
Поддержка нескольких процессоров
Другие реализации планирования
Планирование справедливого разделения
Планирование по крайнему сроку
Трехуровневый планировщик
Заключение
Упражнения
Дополнительная литература
Глава Межпроцессное взаимодействие
Введение
Универсальные средства IPC
Сигналы
Каналы
Каналы в системе SVR
Трассировка процессов
System VIPC
Общие элементы
Семафоры
Очереди сообщений
Разделяемая память
Применение механизмов IPC
MachlPC
Основные концепции
Сообщения
Структуры данных сообщения
Интерфейс передачи сообщений
Порты
Диапазон имен портов
Структура данных порта
Преобразования портов
Передача сообщений
Передача прав порта
Внешняя память
Управление нитью
Уведомления
Операции порта
Удаление порта
Резервные порты
Наборы портов
Передача прав
Расширяемость
Новые возможности Mach
Права на однократную отправку
Уведомления в Mach
Подсчет прав на отправку
Дискуссия о средствах MachlPC
Заключение
Упражнения
Дополнительная литература
Глава Синхронизация Многопроцессорные системы
Введение
Синхронизация в ядре традиционных реализаций UNIX
Блокировка прерываний
Приостановка и пробуждение
Ограничения традиционного ядра UNIX
Многопроцессорные системы
Модель памяти
Поддержка синхронизации
Программная архитектура
Особенности синхронизации в многопроцессорных системах
Проблема выхода из режима ожидания
Проблема быстрого роста
Семафоры
Семафоры как средство взаимного исключения
Семафоры и ожидание наступления событий
Семафоры и управление исчисляемыми ресурсами
Недостатки семафоров
Конвои
Простая блокировка
Применение простой блокировки
Условные переменные
Некоторые детали реализации условных переменных
События
Блокирующие объекты
Синхронизация чтения-записи
Задачи, стоящие перед разработчиками
Реализация синхронизации чтения-записи
Счетчики ссылок
Другие проблемы, возникающие при синхронизации
Предупреждение возникновения взаимоблокировки
Рекурсивная блокировка
Что лучше: приостановка выполнения или ожидание в цикле?
Объекты блокировки
Степень разбиения и длительность
Реализация объектов синхронизации в различных ОС
SVR/MP
Digital UNIX
Другие реализации систем UNIX
Заключение
Упражнения
Дополнительная литература
Глава Базовые элементы и интерфейс файловой системы
Введение
Интерфейс доступа пользователя к файлам
Файлы и каталоги
Атрибуты файлов
Дескрипторы файлов
Файловый ввод-вывод
Ввод-вывод методом сборки-рассоединения
Блокировка файлов
Файловые системы
Логические диски
Специальные файлы
Символические ссылки
Каналы и файлы FIFO
Базовые файловые системы
Архитектура vnode/vfs
Цели, поставленные перед разработчиками
Немного о вводе-выводе устройств
Краткий обзор интерфейса vnode/vfs
Краткий обзор реализации
Цели, стоящие перед разработчиками
Открытые файлы и объекты vnode
Структура vnode
Счетчик ссылок vnode
Объект vfs
Объекты, зависящие от файловой системы
Закрытые данные каждого файла
Вектор vnodeops
Зависящая от файловой системы часть уровня vfs
Монтирование файловой системы
Виртуальный переключатель файловых систем
Реализация вызова mount
Действия операции VFS_MOUNT
Операции над файлами
Преобразование полных имен
Кэш просмотра каталогов
Операция VOPJOOKUP
Открытие файла
Файловый ввод-вывод
Атрибуты файлов
Права пользователя
Анализ
Недостатки реализации в системе SVR
Модель BSD
Средства системы OSF/
Заключение
Упражнения
Дополнительная литература
Глава Реализации файловых систем
Введение
Файловая система System V (sfs)
Каталоги
Индексные дескрипторы
Суперблок
Организация ядра системы sfs
Индексные дескрипторы в памяти
Получение индексных дескрипторов
Файловый ввод-вывод
Запрос и возврат индексных дескрипторов
Анализ файловой системы sfs
Файловая система FFS
Структура жесткого диска
Хранение данных на диске
Блоки и фрагменты
Правила размещения
Новые возможности FFS
Длинные имена файлов
Символические ссылки
Другие возможности
Анализ файловой системы FFS
Временные файловые системы
Memory File System
Файловая система tmpfs
Файловые системы для специальных целей
Файловая система specfs
Файловая система/proc
Процессорная файловая система
Translucent File System
Буферный кэш в ранних версиях UNIX
Основные операции
Заголовки буфера
Преимущества
Недостатки
Целостность файловой системы
Заключение
Упражнения
Дополнительная литература
Глава Распределенные файловые системы
Ю Введение
Общие характеристики распределенных файловых систем
Некоторые соглашения
ЮЗ Network File System (NFS)
NFS с точки зрения пользователя
Цели, стоявшие перед разработчиками
Компоненты NFS
Сохранение состояний
Набор протоколов
Представление внешних данных (XDR)
Вызов удаленных процедур (RPC)
Реализация NFS
Управление потоком
Дескрипторы файлов
Операция монтирования
Просмотр полных имен
Семантика UNIX
Удаление открытых файлов
Чтение и запись
Производительность NFS
Узкие места
Кэширование на стороне клиента
Отложенная запись
Кэш повторных посылок
Специализированные серверы NFS
Архитектура функциональной многопроцессорной системы Auspex
Сервер HA-NFS фирмы IBM
Защита NFS
Контроль доступа в NFS
Переназначение групповых идентификаторов
Переназначение режима доступа root
NFS версии
Remote File Sharing (RFS)
Архитектура RFS
Протокол удаленных сообщений
Операции сохранения состояния
Реализация системы RFS
Удаленное монтирование
Серверы и клиенты RFS
Восстановление после отказа
Другие части системы
Кэширование на стороне клиента
Достоверность кэша
Andrew File System
Масштабируемая архитектура
Организация хранения и пространство имен
Семантика сеансов
Реализация AFS
Кэширование и достоверность данных
Просмотр имен
Безопасность
Недостатки файловой системы AFS
Распределенная файловая система DCE (DCE DFS),
Архитектура DPS
Корректность кэша
Менеджер маркеров доступа
Другие службы DFS
Анализ
Заключение
Упражнения
Дополнительная литература
Глава Усовершенствованные файловые системы
Введение
Ограничения традиционных файловых систем
Разметка диска в FFS
Преобладание операций записи
Модификация метаданных
Восстановление после сбоя
Кластеризация файловых систем (Sun-FFS)
Журналы
Основные характеристики
fl Структурированные файловые системы
Структурированная файловая система BSD
Запись в журнал
Получение данных из журнала
Восстановление после сбоя
Процесс cleaner
Анализ системы BSD-LFS
Ведение журнала метаданных
Функционирование в обычном режиме
Целостность журнала
Восстановление
Анализ
Файловая система Episode
Основные понятия
Структура системы
Ведение журнала
Другие возможности
Т Процесс watchdog
Наблюдение за каталогами
Каналы сообщений
Приложения
Portal File System в BSD
Применение порталов
Уровни стековой файловой системы
Инфраструктура и интерфейс
Модель SunSoft
Интерфейс файловой системы BSD
Файловые системы nullfs и union mount
Заключение
Упражнения
Дополнительная литература
Глава Выделение памяти ядром
Введение
Требования к функциональности
Критерии оценки
Распределитель карты ресурсов
Анализ
Простые списки, основанные на степени двойки
Анализ
Распределитель Мак-Кьюзика-Кэрелса
Анализ
Метод близнецов
Анализ
Алгоритм отложенного слияния в SVR
Отложенное слияние
Особенности реализации алгоритма в SVR
Зональный распределитель в системе Mach-OSF/
Сбор мусора
Анализ
Иерархический распределитель памяти для многопроцессорных систем
Анализ
Составной распределитель системы Solaris
Повторное использование объектов
Применение аппаратных кэшей
Рабочая площадка распределителя
Структура и интерфейс
Реализация алгоритма
Анализ
Заключение
Упражнения
Дополнительная литература
Глава Виртуальная память
Введение
Управление памятью в "каменном веке" вычислительной техники
Загрузка страниц по запросу
Требования к функциональности
Виртуальное адресное пространство
Первое обращение к странице
Область свопинга
Карты преобразования адресов
Правила замещения страниц
Аппаратные требования
Кэши MMU
Intel x
IBM RS/
MIPSR
Пример реализации: система BSD
Физическая память
Адресное пространство
Где может располагаться страница памяти
Пространство свопинга
Создание процесса
Обработка страничной ошибки
Список свободных страниц
Свопинг
Анализ
Упражнения
Дополнительная литература
Глава Архитектура VM системы SVR
Предпосылки появления новой технологии
o Файлы, отображаемые в памяти
Системный вызов mmap
oCI Основы архитектуры VM
Основные понятия
Физическая память
Адресное пространство
Отображение адресов
Анонимные страницы
Аппаратное преобразование адресов
Драйверы сегментов
Драйвер seg_vn
Драйвер segjnap
Драйвер seg_dev
Драйвер seg_kmem
Драйвер seg_kp
Уровень свопинга
Я Операции системы VM
Создание нового отображения
Обработка анонимных страниц
Создание процесса
Совместное использование анонимных страниц
Обработка страничных ошибок
Разделяемая память
Другие компоненты
Взаимодействие с подсистемой vnode
Изменения в интерфейсе vnode
Унификация доступа к файлам
Важные замечания
Виртуальное пространство свопинга в Solaris
Расширенное пространство свопинга
Управление виртуальным свопингом
Некоторые выводы
Анализ
Увеличение производительности
Причины большого количества исключений
Новые возможности подсистемы VM в SunOS
Итоги
Заключение
Упражнения
Дополнительная литература
Глава Дополнительные сведения об управлении памятью
Введение
Структура подсистемы управления памятью Mach
Цели, стоявшие перед разработчиками
Программный интерфейс
Фундаментальные понятия
Средства разделения памяти
Разделение памяти на основе копирования при записи
Разделение памяти на основе чтения-записи
Объекты памяти и менеджеры памяти
Инициализация объектов памяти
Интерфейс взаимодействия ядра и менеджера памяти
Обмен данными между ядром и менеджером памяти
Внешние и внутренние менеджеры памяти
Сетевой сервер разделяемой памяти
Замена страниц
Анализ
Управление памятью в BSD
Корректность буфера ассоциативной трансляции (TLB)
Корректность TLB в однопроцессорных системах
Корректность TLB в многопроцессорных системах
Алгоритм синхронизации TLB системы Mach
Синхронизация и предупреждение взаимоблокировок
Некоторые итоги
Корректность TLB в SVR и SVR
SVR/MP
SVR/MP
Отложенная перезагрузка
Незамедлительная перезагрузка
Некоторые итоги
Другие алгоритмы поддержания корректности TLB
Виртуально адресуемый кэш
Изменения отображений
Псевдонимы адресов
Прямой доступ к памяти
Поддержка корректности кэша
Анализ
Содержат
Упражнения
Дополнительная литература
Глава Ввод-вывод и драйверы устройств
Введение
Краткий обзор
Аппаратная часть
Прерывания устройств
Базовая структура драйвера устройства
Классификация устройств и их драйверов
Вызов кодов драйвера
Переключатели устройств
Входные точки драйвера
Подсистема ввода-вывода
Старший и младший номера устройств
Файлы устройств
Файловая система specfs
Общий объект snode
Клонирование устройств
Ввод-вывод символьных устройств
Системный вызов poll
Реализация вызова poll
Системный вызов select ОС BSD
Блочный ввод-вывод
Структура but
Взаимодействие с объектом vnode
Способы обращения к устройствам
Неформатированный ввод-вывод блочных устройств
Спецификация DDI/DKI
Общие рекомендации
Функции раздела
Другие разделы
Поздние версии SVR
Драйверы для многопроцессорных систем
Изменения в SVR/ES
Динамическая загрузка
Перспективы
Заключение
Упражнения
Дополнительная литература
Глава Подсистема STREAMS
Введение
Краткий обзор
Сообщения и очереди

Сообщения
Виртуальное копирование
Типы сообщений
Очереди и модули
Ввод-вывод потока
Диспетчер STREAMS
Уровни приоритетов
Управление потоком данных
Оконечный драйвер
Головной интерфейс потока
Конфигурирование и настройка
Конфигурирование модуля или драйвера
Открытие потока
Помещение модулей в поток
Клонирование устройств
Вызовы ioctl подсистемы STREAMS
Команда I_STR вызова ioctl
Прозрачные команды ioctl
Выделение памяти
Расширенные буферы STREAMS
Мультиплексирование
Мультиплексирование по входу
Мультиплексирование по выходу
Связывание потоков
Потоки данных
Обычные и постоянные соединения
FIFO и каналы
Файлы FIFO STREAMS
Каналы STREAMS
Сетевые интерфейсы
Интерфейс поставщиков транспорта (TPI)
Интерфейс транспортного уровня (TLI)
Сокеты
Реализация сокетов в SVR
Заключение
Упражнения
Дополнительная литература
Алфавитный указатель