Процессы
Программой называют совокупность файлов.
Для того, чтобы запустить программу на выполнение, ОС должна создать окружение или среду выполнения задачи, куда относятся ресурсы памяти, возможность доступа к устройствам ввода-вывода, различным системным ресурсам, включая услуги ядра.
Процесс – это окружение (среда выполнения задачи).
Процесс состоит из:
инструкций, выполняемых процессором,
данных и информации о выполняемой задаче, такой как размещение в памяти, открытые файлы и
статус процесса.
Программа может породить несколько процессов.
Многозадачность ОС говорит о том, что в ОС одновременно могут выполняться несколько процессов.
Выполнение процесса заключается в точном следовании набору инструкций.
Процесс считывает и записывает информацию в раздел данных и в стек, но ему недоступны данные и стеки других процессов.
Однако процессы могут взаимодействовать м/у собой по средством средств межпроцессного взаимодействия, таких как разделяемая память, каналы, сигналы, семафоры, сообщения и обменники.
Создание процесса:
Инициализация системы.
Выполнение изданного работающим процессом системного запроса на создание процесса.
Запрос пользователя на создание процесса.
Инициирование пакетного задания.
Фоновые процессы, связанные с обработкой почты, обработкой запросов к web-страницам, обеспечивающие вывод на печать, называются демонами.
Но процессы могут создаваться и не только при загрузке, например, кокой либо существующий процесс может породить другой.
С технической точки зрения процесс формируется одинаково: текущий процесс выполняет системный запрос на создание нового процесса.
В роли текущего процесса может выступать:
процесс, запущенный пользователем;
системный процесс, инициированный клавиатурой или мышью;
или процесс, управляющий пакетами.
В Unix существует только один системный запрос, направленный на создание нового процесса – fork (ветвление).
Forkсоздает дубликат вызываемого процесса. После выполнения запросаforkдвум процессам – родительскому и дочернему – соответствуют одинаковые образы памяти, строки окружения и одни и те же открытые файлы.
Начальные установки дочернего процесса называют контекстом процесса.
Обычно дочерний процесс выполняет системный вызов exec для изменения своего образа памяти и запуска новой программы.
Завершение процесса.
После того, как процесс создан, он начинает выполнять свою работу. Процесс может быть завершен по одному из событий:
Обычный выход (преднамеренно);
Выход по ошибке (преднамеренно);
Выход по неисправимой ошибке (непреднамеренно);
Уничтожение другим процессом (непреднамеренно).
В основном процессы завершают свою работу, по мере выполнения. В Unix это системный процесс exit().
Для уничтожения процесса другим процессом используется вызов kill.
Иерархия процессов.
Все процессы в системе принадлежат к единому дереву, которое начинается с процесса init.
При запуске init считывает в файл, в котором находится информация о количестве терминалов.
Затем процесс разветвляется таким образом, чтобы каждому терминалу соответствовал один процесс.
Процессы ждут пока кто-либо из пользователей не войдет в систему.
Если пароль правильный, то процесс входа в систему запускает оболочку для обработки команд, которые в свою очередь могут запускать процессы.
Т.о. в Unix процессы иерархически создаются.
В ОС Windows понятия иерархии процессов не существует, все процессы равноправны.
Типы процессов:
Системные процессы – например init. Системные процессы не имеют соответсвующих им программ в виде исполняемых файлов
Инструкции и данные для системных процессов находятся в ядре ОС.
Демоны– это неинтерактивные процессы, которые запускаются обычным образом – путемзагрузки в память соответсвующих им программ и выполняются в фоновом режиме. Обычно запускаются при инициализации системы и обеспечивают работу различных подсистем.
Прикладные
все остальные процессы.
Атрибуты процесса позволяют ОС эффективно управлять его работой:
Идентификатор процесса Process ID (PID) – уникален, присваивается ядром ОС. Когда процесс завершает работу, ядро освобождает занятый им идентификатор.
Идентификатор родительского процесса Parent Process ID (PPID) – ID родительского процесса.
Приоритет процесса (Nice Number) – относительный приоритет процесса. Относительный приоритет не изменяется системой на всем протяжении жизни процесса (но м.б. изменен пользователем или администратором).
Терминальная линия (TTY) – терминал или псевдотерминал, с которого запущен процесс. Процессы демоны не имеют ассоциированного терминала.
Реальный (RID) и эффективный (EUID) идентификаторы пользователя. Реальным ИП данного процесса является идентификатор пользователя, запустившего процесс. Эффективный идентификатор служит для определения прав доступа процесса к системным ресурсам. Обычно они равны, но существует возможность задать процессу более широкие права, чем права пользователя, путем установки флага SUID, когда эффективному ID присваивается значение идентификатора администратора.
Реальный (RGID) и эффективный (EGID) идентификаторы группы. (флаг SGID).