Архитектура Unix
ПРЕДИСЛОВИЕ
ГЛАВА 1. ОБЩИЙ ОБЗОР ОСОБЕННОСТЕЙ СИСТЕМЫ
ИСТОРИЯ
СТРУКТУРА СИСТЕМЫ
Архитектура системы UNIX
ОБЗОР С ТОЧКИ ЗРЕНИЯ ПОЛЬЗОВАТЕЛЯ
Файловая система
Пример древовидной структуры файловой системы
Программа копирования файла
Среда выполнения процессов
Программа порождения нового процесса
Элементы конструкционных блоков
ФУНКЦИИ ОПЕРАЦИОННОЙ СИСТЕМЫ
ПРЕДПОЛАГАЕМАЯ АППАРАТНАЯ СРЕДА
Процессы и режимы их выполнения
Прерывания и особые ситуации
Уровни прерывания процессора
Стандартные уровни прерываний
Распределение памяти
ВЫВОДЫ
ГЛАВА 2. ВВЕДЕНИЕ В АРХИТЕКТУРУ ЯДРА ОПЕРАЦИОННОЙ СИСТЕМЫ
АРХИТЕКТУРА ОПЕРАЦИОННОЙ СИСТЕМЫ UNIХ
Блок-схема ядра операционной системы
ВВЕДЕНИЕ В ОСНОВНЫЕ ПОНЯТИЯ СИСТЕМЫ
Обзор особенностей подсистемы управления файлами
Таблицы файлов, дескрипторов файла и индексов
Формат файловой системы
Процессы
Стеки задачи и ядра для программы копирования.
Информационные структуры для процессов
Состояния процесса и переходы между ними
Пример программы, создающей список
Список с указателями, некорректный
СТРУКТУРЫ ДАННЫХ ЯДРА
УПРАВЛЕНИЕ СИСТЕМОЙ
Многократная приостановка выполнения
ВЫВОДЫ И ОБЗОР ПОСЛЕДУЮЩИХ ГЛАВ
УПРАЖНЕНИЯ
ГЛАВА 3. БУФЕР СВЕРХОПЕРАТИВНОЙ ПАМЯТИ (КЕШ)
ЗАГОЛОВКИ БУФЕРА
Заголовок буфера
СТРУКТУРА ОБЛАСТИ БУФЕРОВ (БУФЕРНОГО ПУЛА)
Список свободных буферов
Буферы в хеш-очередях
МЕХАНИЗМ ПОИСКА БУФЕРА
Алгоритм выделения буфера
Поиск буфера - случай 1: буфер в хеш-очереди
Алгоритм высвобождения буфера
Второй случай выделения буфера
Третий случай выделения буфера
Четвертый случай выделения буфера
Состязание за свободный буфер
Пятый случай выделения буфера
ЧТЕНИЕ И ЗАПИСЬ ДИСКОВЫХ БЛОКОВ
Алгоритм чтения дискового блока
Алгоритм чтения блока с продвижением
Алгоритм записи дискового блока
ПРЕИМУЩЕСТВА И НЕУДОБСТВА БУФЕРНОГО КЕША
ВЫВОДЫ
УПРАЖНЕНИЯ
ГЛАВА 4. ВНУТРЕННЕЕ ПРЕДСТАВЛЕНИЕ ФАЙЛОВ
Алгоритмы файловой системы
ИНДЕКСЫ
Определение
Пример дискового индекса
Обращение к индексам
Алгоритм выделения индексов в памяти
Освобождение индекса
Освобождение индексов
СТРУКТУРА ФАЙЛА ОБЫЧНОГО ТИПА
Размещение непрерывных файлов
Блоки прямой и косвенной адресации в индексе
Объем файла в байтах при размере блока 1 Кбайт
Преобразование адреса смещения
Размещение блоков в файле и его индексе
КАТАЛОГИ
Формат каталога /etc
ПРЕВРАЩЕНИЕ СОСТАВНОГО ИМЕНИ
Алгоритм превращения имени пути поиска в индекс
СУПЕРБЛОК
НАЗНАЧЕНИЕ ИНДЕКСА НОВОМУ ФАЙЛУ
Алгоритм назначения новых индексов
Два массива номеров свободных индексов
Алгоритм освобождения индекса
Размещение номеров свободных индексов в суперблоке
Конкуренция в назначении индексов
Конкуренция в назначении индексов (продолжение)
ВЫДЕЛЕНИЕ ДИСКОВЫХ БЛОКОВ
Список номеров свободных дисковых блоков с указателями
Алгоритм выделения дискового блока
Запрашивание и освобождение дисковых блоков
ДРУГИЕ ТИПЫ ФАЙЛОВ
ВЫВОДЫ
УПРАЖНЕНИЯ
ГЛАВА 5. СИСТЕМНЫЕ ОПЕРАЦИИ ДЛЯ РАБОТЫ С ФАЙЛОВОЙ СИСТЕМОЙ
Функции для работы с файловой
OPEN
Алгоритм открытия файла
Структуры данных после открытия
Структуры данных после того, как
READ
Алгоритм чтения из файла
Параметры ввода-вывода, хранящиеся в пространстве процесса
Пример программы чтения из файла
Процессы, ведущие чтение и запись файла
WRIТЕ
Чтение из файла с использованием двух дескрипторов
ЗАХВАТ ФАЙЛА И ЗАПИСИ
УКАЗАНИЕ МЕСТА В ФАЙЛЕ, ГДЕ
CLOSЕ
Программа, содержащая вызов системной функции lseek
Таблицы после закрытия файла
СОЗДАНИЕ ФАЙЛА
Алгоритм создания файла
СОЗДАНИЕ СПЕЦИАЛЬНЫХ ФАЙЛОВ
Алгоритм создания новой вершины
Алгоритм смены текущего каталога
СМЕНА ТЕКУЩЕГО И КОРНЕВОГО КАТАЛОГА
СМЕНА ВЛАДЕЛЬЦА И РЕЖИМА ДОСТУПА К ФАЙЛУ
STAT И FSTАТ
Дерево процессов и совместное использование каналов
КАНАЛЫ
Системная функция pipе
Алгоритм создания каналов (непоименованных)
Открытие поименованного канала
Чтение из каналов и запись в каналы
Логическая схема чтения и записи в канал
Закрытие каналов
Примеры
Чтение из канала и запись в канал
Чтение и запись в поименованный канал
DUР
Структуры данных после выполнения функции dup
Программа на языке Си, иллюстрирующая
МОНТИРОВАНИЕ И ДЕМОНТИРОВАНИЕ ФАЙЛОВЫХ СИСТЕМ
Дерево файловых систем до и после выполнения функции mount
Алгоритм монтирования файловой системы
Пересечение точек монтирования
Структуры данных после монтирования
Модификация алгоритма получения доступа к индексу
Модификация алгоритма синтаксического анализа имени файла
Демонтирование файловой системы
Алгоритм демонтирования файловой системы
Файлы в дереве файловой системы
LINК
Алгоритм связывания файлов
UNLINК
Взаимная блокировка процессов при выполнении функции link
Архитектура Unix
Алгоритм удаления связи файла с каталогом
Целостность файловой системы
Поводы для конкуренции
Соперничество процессов за индекс
Удаление связи с открытым файлом
АБСТРАКТНЫЕ ОБРАЩЕНИЯ К ФАЙЛОВЫМ СИСТЕМАМ
Индексы для файловых систем различных типов
СОПРОВОЖДЕНИЕ ФАЙЛОВОЙ СИСТЕМЫ
ВЫВОДЫ
УПРАЖНЕНИЯ
Считывание нулей и конца файла
Чтение большой порции данных в маленький буфер
Каталог, создание которого не завершено
Пример программы с использованием функции chdir
ГЛАВА 6. СТРУКТУРА ПРОЦЕССОВ
СОСТОЯНИЯ ПРОЦЕССА И ПЕРЕХОДЫ МЕЖДУ НИМИ
Диаграмма переходов процесса из состояния в состояние
ФОРМАТ ПАМЯТИ СИСТЕМЫ
Области
Процессы и области
Страницы и таблицы страниц
Адресация физической памяти по страницам
Отображение логических номеров страниц на физические
Преобразование виртуальных адресов в физические
Размещение ядра
Переключение режима работы с непривилегированного
Пространство процесса
Карта памяти пространства процесса в ядре
КОНТЕКСТ ПРОЦЕССА
Компоненты контекста процесса
СОХРАНЕНИЕ КОНТЕКСТА ПРОЦЕССА
Прерывания и особые ситуации
Пример векторов прерывания
Алгоритм обработки прерываний
Взаимодействие с операционной
Примеры прерываний
Алгоритм обращения к системным функциям
Системная функция creat и сгенерированная
Конфигурация стека для системной функции creat
Переключение контекста
Последовательность шагов, выполняемых
Псевдопрограмма переключения контекста
Сохранение контекста на случай аварийного завершения
Копирование данных между
Пересылка данных из пространства
УПРАВЛЕНИЕ АДРЕСНЫМ ПРОСТРАНСТВОМ ПРОЦЕССА
Блокировка области и снятие блокировки
Выделение области
Алгоритм выделения области
Присоединение области к процессу
Алгоритм присоединения области
Изменение размера области
Пример присоединения существующей области команд
Загрузка области
Алгоритм изменения размера области
Увеличение области стека на 1 Кбайт
Алгоритм загрузки данных области из файла
Загрузка области команд (текста)
Алгоритм освобождения области
Освобождение области
Алгоритм отсоединения области
Отсоединение области от процесса
Копирование содержимого области
Алгоритм копирования содержимого существующей области
Копирование содержимого области
ПРИОСТАНОВКА ВЫПОЛНЕНИЯ
Стандартные контекстные уровни приостановленного процесса
События, вызывающие приостанов выполнения, и их адреса
Процессы, приостановленные до
Алгоритм приостанова процесса
Алгоритмы приостанова и возобновления выполнения
Алгоритм возобновления приостановленного процесса
ВЫВОДЫ
УПРАЖНЕНИЯ
ГЛАВА 7. УПРАВЛЕНИЕ ПРОЦЕССАМИ
Системные функции управления процессом
СОЗДАНИЕ ПРОЦЕССА
Алгоритм fork
Создание контекста нового процесса
Программа, в которой родительский
Использование функций pipe, dup и fork
СИГНАЛЫ
Диаграмма переходов процесса из
Алгоритм опознания сигналов
Обработка сигналов
Алгоритм обработки сигналов
Исходный текст программы приема сигналов
Результат дисассемблирования программы приема сигналов
Стек задачи и область сохранения
Программа, демонстрирующая возникновение
Группы процессов
Посылка сигналов процессами
Пример использования функции setpgrp
ЗАВЕРШЕНИЕ ВЫПОЛНЕНИЯ ПРОЦЕССА
Алгоритм функции exit
ОЖИДАНИЕ ЗАВЕРШЕНИЯ ВЫПОЛНЕНИЯ ПРОЦЕССА
Пример использования функции exit
Алгоритм функции wait
Пример использования функции
Пример указания причины появления
ВЫЗОВ ДРУГИХ ПРОГРАММ
Алгоритм функции exec
Образ исполняемого файла
Пример использования функции exec
Пример программы, ведущей запись в область команд
Алгоритм выделения областей
КОД ИДЕНТИФИКАЦИИ ПОЛЬЗОВАТЕЛЯ ПРОЦЕССА
Пример выполнения программы setuid
ИЗМЕНЕНИЕ РАЗМЕРА ПРОЦЕССА
Алгоритм выполнения функции brk
Пример программы, использующей
Основной цикл программы shell
КОМАНДНЫЙ ПРОЦЕССОР SHELL
Основной цикл программы shell (продолжение)
Взаимосвязь между процессами
ЗАГРУЗКА СИСТЕМЫ И НАЧАЛЬНЫЙ ПРОЦЕСС
Алгоритм загрузки системы
Алгоритм выполнения процесса init
Фрагмент файла inittab
ВЫВОДЫ
УПРАЖНЕНИЯ
Пример модуля, содержащего вызов
Пример программы, в которой
Программа, в которой процесс
Пример программы, использующей подпрограмму sbrk
ГЛАВА 8. ДИСПЕТЧЕРИЗАЦИЯ ПРОЦЕССОВ
ПЛАНИРОВАНИЕ ВЫПОЛНЕНИЯ ПРОЦЕССОВ
Алгоритм
Алгоритм планирования выполнения процессов
Параметры диспетчеризации
Диапазон приоритетов процесса
Переход процесса из одной очереди в другую
Примеры диспетчеризации процессов
Пример диспетчеризации процессов
Управление приоритетами
Планирование на основе кольцевого
Планирование на основе справедливого раздела
Работа в режиме реального времени
Пример планирования на основе
СИСТЕМНЫЕ ОПЕРАЦИИ, СВЯЗАННЫЕ СО ВРЕМЕНЕМ
Пример программы, использующей функцию times
ТАЙМЕР
Программа, использующая системную функцию alarm
Алгоритм обработки прерываний по таймеру
Перезапуск часов
Внутренние системные тайм-ауты
Включение новой записи в таблицу ответных сигналов
Построение профиля
Адреса некоторых алгоритмов ядра
Архитектура Unix
Пример результатов выполнения
Учет и статистика
Поддержание времени в системе
ВЫВОДЫ
УПРАЖНЕНИЯ
ГЛАВА 9. АЛГОРИТМЫ УПРАВЛЕНИЯ ПАМЯТЬЮ
СВОПИНГ
Управление пространством на устройстве выгрузки
Первоначальный вид карты памяти для устройства выгрузки
Алгоритм выделения пространства с помощью карт памяти
Выделение пространства на устройстве выгрузки
Освобождение пространства на устройстве выгрузки
Выделение пространства на устройстве
Выгрузка процессов
Отображение пространства процесса на устройство выгрузки
Загрузка процесса в память
Перенастройка карты памяти в случае выгрузки с расширением
Загрузка (подкачка) процессов
Алгоритм подкачки
Последовательность операций
Загрузка процессов в случае
ПОДКАЧКА ПО ЗАПРОСУ
Структуры данных, используемые
Рабочее множество процесса
Записи таблицы страниц и дескрипторы дисковых блоков
Взаимосвязь между структурами
Адресация страниц, участвующих
Функция vfork и искажение информации процесса
Отображение файла на область
Сборщик" страниц
Диаграмма состояний страницы
Пример "созревания" страницы
Отказы при обращениях к страницам
Алгоритм обработки отказа из-за
Иллюстрация к отказу из-за недоступности данных
Результат загрузки страницы в память
Два отказа на одной странице
Алгоритм обработки отказа системы
Отказ системы защиты из-за установки
Замещение страниц на менее сложной технической базе
Имитация установки "аппаратного"
СИСТЕМА СМЕШАННОГО ТИПА СО
ВЫВОДЫ
УПРАЖНЕНИЯ
ГЛАВА 10. ПОДСИСТЕМА УПРАВЛЕНИЯ ВВОДОМ-ВЫВОДОМ
ВЗАИМОДЕЙСТВИЕ ДРАЙВЕРОВ
Конфигурация системы
Точки входа для драйверов
Системные функции и взаимодействие с драйверами
Пример заполнения таблиц ключей
Алгоритм открытия устройства
Алгоритм закрытия устройства
Отображение в памяти ввода-вывода
Прерывания от устройств
Программы обработки прерываний
ДИСКОВЫЕ ДРАЙВЕРЫ
Разделы на диске RP07
Чтение данных с диска с использованием
ТЕРМИНАЛЬНЫЕ ДРАЙВЕРЫ
Символьные списки
Последовательность обращений и
Символьный блок
Удаление символов из символьного списка
Включение символов в символьный список
Терминальный драйвер в каноническом режиме
Алгоритм переписи данных на терминал
Передача данных через стандартный вывод
Алгоритм чтения с терминала
Конкуренция за данные, вводимые с терминала
Терминальный драйвер в режиме без обработки символов
Режим без обработки - чтение 5-символьных блоков
Опрос терминала
Опрос терминала
Назначение операторского терминала
Драйвер косвенного терминала
Вход в систему
Алгоритм регистрации
ПОТОКИ
Поток после открытия
Сообщения в потоках
Продвижение модуля к потоку
Более детальное рассмотрение потоков
Отображение виртуальных окон
Псевдопрограмма мультиплексирования окон
Анализ потоков
ВЫВОДЫ
УПРАЖНЕНИЯ
ГЛАВА 11. ВЗАИМОДЕЙСТВИЕ ПРОЦЕССОВ
ТРАССИРОВКА ПРОЦЕССОВ
Структура процесса отладки
Программа trace (трассируемый процесс)
Программа debug (трассирующий процесс)
ВЗАИМОДЕЙСТВИЕ ПРОЦЕССОВ В ВЕРСИИ V СИСТЕМЫ
Сообщения
Алгоритм посылки сообщения
Структуры данных, используемые в организации сообщений
Пользовательский процесс
Алгоритм получения сообщения
Обслуживающий процесс (сервер)
Разделение памяти
Структуры данных, используемые при разделении памяти
Алгоритм присоединения разделяемой памяти
Семафоры
Присоединение процессом одной
Разделение памяти между процессами
Структуры данных, используемые в работе над семафорами
Операции установки и снятия блокировки
Алгоритм выполнения операций над семафором
Структуры восстановления семафоров
Последовательность состояний
Общие замечания
ВЗАИМОДЕЙСТВИЕ В СЕТИ
ГНЕЗДА
Модель с использованием гнезд
Прием вызова сервером
Процесс-сервер в домене "UNIX system"
Процесс-клиент в домене "UNIX system"
ВЫВОДЫ
УПРАЖНЕНИЯ
ГЛАВА 12. МНОГОПРОЦЕССОРНЫЕ СИСТЕМЫ
Многопроцессорная конфигурация