- •Unix-подобные операционные системы
- •Часть 1. Введение в операционные системы unix 10
- •Часть 2. Использование unix 44
- •Unix-подобныеОс
- •Термин «unix-подобный» и торговая марка unix
- •Категории
- •История развития ос unix
- •Часть 1. Введение в операционные системы unix
- •Основные концепции операционных систем Обзор компьютерных систем
- •Назначение операционной системы
- •Операционная система как виртуальная машина
- •Операционная система как менеджер ресурсов
- •Архитектура операционной системы
- •Монолитная операционная система
- •Микроядерная операционная система
- •Классификация операционных систем по назначению
- •Архитектура unix. Файлы и устройства Особенности архитектуры unix
- •Два объекта unix: файлы и процессы
- •Беглый взгляд на архитектуру unix
- •Ядро unix
- •Файловая система unix
- •Особенности файловой системы
- •Виртуальная файловая система
- •Дерево каталогов
- •Устройства и драйверы
- •Архитектура unix. Процессы
- •Управление памятью
- •Управление процессами
- •Контекст процесса
- •Планирование процессов
- •Создание новых процессов
- •Процессы и потоки
- •Межпроцессное взаимодействие
- •Разделяемая память
- •Переменные окружения
- •Сигналы
- •Часть 2. Использование unix Терминал и командная строка
- •Терминал
- •Управляющие символы
- •Одновременный доступ к системе
- •Командная строка
- •Командная оболочка
- •Приглашение
- •Команды
- •Параметры
- •Шаблоны
- •Перенаправление ввода и вывода
- •Программное окружение
- •Стандартные переменные окружения
- •Служебные символы
- •Процесс выполнения команды
- •Возвращаемое значение
- •Эффективное использование командной строки
- •Редактирование командной строки
- •История команд
- •Автодополнение
- •Средства объединения команд
- •Справочная подсистема
- •Страницы руководства
- •Поиск по руководствам
- •Программа info
- •Документация, поставляемая с программой
- •Интегрированные системы документации
- •Введение в безопасность unix
- •Основы информационной безопасности
- •Политика безопасности
- •Управление доступом
- •Аутентификация и авторизация
- •Концепции безопасности unix
- •Пользователи и группы
- •Права доступа
- •Разделяемые каталоги
- •Подмена идентификатора процесса
- •Ограничения базовой модели доступа и её расширения
- •Суперпользователь
- •Аутентификация пользователей
- •Управление пользователями и правами доступа База данных пользователей системы
- •Изменение базы данных пользователей
- •Изменение прав доступа
- •Ограничения сеанса пользователя
- •Литература
Планирование процессов
Основной проблемой организации многопользовательского (правильнее сказать, мультипрограммного) режима в любой операционной системе является организация планирования «параллельного» выполнения нескольких процессов. Операционная система должна обладать четкими критериями для определения того, какому готовому к выполнению процессу и когда предоставить ресурс процессора.
Наиболее распространенным алгоритмом планирования в системах разделения времени является кольцевой режим (Round Robin). Основной смысл алгоритма состоит в том, что время процессора делится на кванты фиксированного размера, а процессы, готовые к выполнению, выстраиваются в кольцевую очередь (см. Рисунок 1.24, «Схема планирования с кольцевой очередью»). У этой очереди имеются два указателя — начала и конца. Когда процесс, выполняющийся на процессоре, исчерпывает свой квант процессорного времени, он снимается с процессора, ставится в конец очереди, а ресурсы процессора отдаются процессу, находящемуся в начале очереди. Если выполняющийся на процессоре процесс откладывается (например, по причине обмена с некоторым внешним устройством) до того, как он исчерпает свой квант, то после повторной активизации он становится в конец очереди (не смог доработать — не вина системы). Это прекрасная схема разделения времени в случае, когда все процессы одновременно помещаются в оперативной памяти.
Рисунок 1.24. Схема планирования с кольцевой очередью

Однако операционная система UNIX всегда была рассчитана на то, чтобы обслуживать больше процессов, чем можно одновременно разместить в основной памяти. Другими словами, часть процессов, потенциально готовых выполняться, размещалась во внешней памяти (куда образ памяти процесса попадал в результате откачки). Для оптимизации работы в этом случае требуется несколько более гибкая схема планирования при разделении ресурсов процессора. В результате было введено понятие приоритета (см. Рисунок 1.25, «Схема планирования с кольцевой очередью и приоритетами»). В операционной системе UNIX на основании значения приоритета процесса определяется, во-первых, возможность процесса пребывать в основной памяти и на равных конкурировать за процессор. Во-вторых, от значения приоритета процесса зависит размер временного кванта, который предоставляется процессу для работы на процессоре при достижении своей очереди. В-третьих, значение приоритета влияет на место процесса в общей очереди процессов.
Рисунок 1.25. Схема планирования с кольцевой очередью и приоритетами

Создание новых процессов
Механизм порождения новых процессов довольно существенно различается в разных операционных системах. Во всех операционных системах семейства UNIX новые процессы в системе не появляются «из ниоткуда», а ответвляются от уже существующих в системе процессов.
Когда возникает необходимость создания нового процесса (C), текущий процесс (P) выполняет системный вызов fork (см. рисунок Рисунок 1.26, «Создание нового процесса»). При этом создаётся новый процесс, представляющий собой копию исходного процесса и его контекста. Новый процесс отличается тем, что у него другой PID, а родителем для него является запустивший процесс (P). Далее дочерний процесс (C) с помощью системного вызова exec запускает вместо себя другую программу, заново проинициализировав свои код и данные.
Рисунок 1.26. Создание нового процесса

Существует также и обратная связь между дочерним процессом и родительским. Родительский процесс (P) может синхронизовать своё исполнение с завершением процесса (C) (ожидать завершения дочернего процесса) с помощью специального системного вызова wait.
