
- •Введение
- •Понятие операционной системы. Типы операционных систем
- •Функции операционной системы
- •Структура операционной системы. Ос ms dos
- •Файлы и каталоги на дисках
- •Драйверы устройств
- •Базовая система ввода-вывода (bios)
- •Загрузчик операционной системы
- •Ядро ms dos
- •Командный процессор dos
- •Внешние команды dos
- •Файловая структура диска
- •Стартовый сектор
- •Каталоги
- •Область данных
- •Операционные системы Windows
- •Выбор платформы Windows
- •Термины
- •Архитектура Windows Режимы выполнения программного кода
- •Многозадачность
- •Управление памятью в Windows
- •Выполнение приложений
- •Интерфейс прикладного программирования Win32
- •Реестр Windows
- •Операционная система unix
- •Ядро и процессы unix
- •Диспетчер unix
- •Процессы unix
- •Дескриптор и контекст процесса
- •Иерархия процессов
- •Идентификаторы процесса
- •Группы процессов
- •Взаимодействие процессов
- •Процессы-«демоны»
- •Межпроцессные коммуникации unix
- •Сигналы
- •Сигналы unix по мере возрастания их значений:
- •Семафоры
- •Программные каналы (Pipes)
- •Очереди сообщений
- •Разделяемая память
- •Многопользовательская защита в unix
- •Идентификаторы пользователя и группы
- •Код защиты файла
- •Привилегированный пользователь
- •Эффективные и реальные идентификаторы
- •Свопинг и пейджинг в unix
- •Буфер кеш-памяти
- •Управление вводом/выводом
- •Специальные файлы
- •Взаимодействие драйверов с программной и аппаратной средой
- •Файловая система unix
- •Основные системные каталоги
- •Корневой каталог /
- •Каталог /var
- •Каталог /etc
- •Каталог /usr
- •Каталог /home (/export/home)
- •Каталог/opt (/opti, /opt2, ... /optn)
- •Команды управления swap
- •Команда mkfile
- •Специальные файлы
- •Класс устройства
- •Тип и номер
- •Связь физической и логической структур
- •Создание и монтирование файловой системы
- •Дисковые устройства в unix
- •Внутренняя структура файловой системы Распределение дискового пространства
- •Индексные дескрипторы
- •Системные вызовы unix для работы с файлами
- •Стандартные библиотечные функции ввода/вывода
- •Поточные функции ввода/вывода
- •Литература
- •Оглавление
Иерархия процессов
Процессы образуют иерархические отношения между собой. Существуют понятия "процесс-отец" и "процесс-сын". Процессы могут порождать другие процессы, и их отношения лучше всего выражает родственное дерево.
Рис.5 Граф процессов
К примеру, рис. 5 показывает отношения процессов Р1, Р2, РЗ, Р4, Р5. В этом графе существуют следующие отношения:
• Р1 порождает два процесса: Р2 и Р4: При этом Р1 является "отцом' а Р2 и Р4 являются его "сыновьями".
• Р2 создает РЗ. При этом Р2 является "родителем" РЗ, а РЗ - соответственно его "сыном" и "потомком" Р1.
• Р4 является "родителем" Р5 и Рб; Р5 и Р6 - соответственно "детьми" Р4.
• Р1 является "дедушкой" РЗ, Р5 и Р6.
• РЗ, Р5 и Р6 - "внуки" Р1.
• РЗ, Р5 и Р6 не имеют порожденных процессов.
«Процесс-сын» наследует все свойства "процесса-отца", включая переменные окружения, текущий рабочий директорий, открытые файлы.
Любой процесс в UNIX порождается с помощью системного вызова fork. После выполнения fork оба процесса продолжают выполнение с одной и той же точки. Имеется процедура опознания порождающего и порождаемого процессов.
Породивший процесс может приостановить свое выполнение до завершения одного из порожденных процессов с помощью системного вызова wait (status). Значение, которое будет возвращено в переменную status, содержит в младшем байте идентификатор завершившегося процесса, а в
старшем байте - статус завершения.
Любой процесс может завершиться по собственной
инициативе с помощью системного вызова exit
(status). Аргумент status передается порождающему процессу, если тот ожидает завершения порожденного процесса.
ОC UNIX, являясь в своей основе средством управления процессами,сама по себе может рассматриваться как система параллельных взаимодействующих процессов с древовидной структурой. Общий прародитель всех процессов в системе - процесс init, находящийся в вершине генеалогического древа. Этот процесс порождается особым образом и далее постоянно присутствует в системе. Все другие процессы порождаются в системе по унифицированной схеме с помощью системного вызова fork().
Идентификаторы процесса
Каждому созданному процессу в UNIX назначается уникальный идентификатор, известный как процесс ID (или PID). Этот PID идентифицирует процесс и для самой ОС, и для множества команд и системных вызовов. В добавление к этому каждый процесс имеет также
parent process ID (или PPID), который представляет собой идентификатор породившего его процесса.
Используя команду ps, всегда можно увидеть идентификаторы текущих процессов в системе.
Группы процессов
Техника идентификаторов используется также при группировании процессов. Каждый процесс (за исключением системных процессов, таких, как init и swapper) является членом группы (process group). При создании задания (JOB) оболочка (Shell) назначает всем процессам в задании идентификатор группы процессов (GID - process group ID). Сигналы (это специальные системные вызовы UNIX) могут распространяться по всем процессам в данной группе. Это очень важная особенность в управлении заданиями, когда все родственные процессы в задании могут получать посылаемые им сигналы.
Еще один способ группирования - объединение процессов в терминальную группу. Члены группы получают в качестве атрибута идентификатор терминальной группы TGID, который равен значению PID лидера этой группы. В качестве лидера выступает процесс, который открыл терминал. Управляющий терминал используется для передачи через управляющий процесс (т. е. процесс-лидер) сигналов для всех процессов - членов группы. Сигналы вырабатываются при нажатии определенных клавиш на клавиатуре. Следует отметить, что каждый пользователь, входящий в систему по login, обязательно порождает новые процессы. При этом каждый процесс в контексте пользователя имеет один и тот же идентификатор пользователя (user ID) UID. Соответствие между UID и login-именем пользователя фиксируется в файле /etc/passwd. Пользователи получают различные привилегии. Имеются суперпользователи с неограниченными возможностями. Процесс суперпользователя (superuser) имеет UID, равный нулю, а остальные - целые положительные числа, отличные от девяти.