Friday, May 18th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Общая информация Управление процессами

Управление процессами

FreeBSD поддерживает многозадачное окружение. Каждая задача или поток исполнения называется процессом. Контекст процесса FreeBSD состоит из состояния пользователя, которое включает содержимое адресного пространства и окружения времени выполнения, и состояния ядра, включающего параметры планировки процесса, управление ресурсами и идентификационную информацию. Контекст включает все используемое ядром для обслуживания процесса. Пользователи могут создавать процессы, управлять ходом их выполнения и получать уведомления, когда состояние выполнения процесса изменяется. Каждому процессу присваивается уникальное значение, называемое идентификатором процесса (process identifier - PID). Это значение используется ядром для идентификации процесса при сообщении пользователю об изменениях состояния и пользователем при указании процесса в системном вызове.

Ядро создает процесс, дублируя контекст другого процесса. Новый процесс называется порожденным процессом (child process) первоначального родительского процесса (parent process). Контекст, дублированный в ходе создания процесса, включает как состояние пользователя процесса, так и системное состояние процесса, управляемое ядром.

Процесс может создать новый процесс, являющийся копией оригинального, используя системный вызов fork. Вызов fork возвращается дважды: один раз в родительском процессе, где возвращаемым значением является идентификатор порожденного процесса, и один раз в порожденном процессе, где возвращаемое значение равно 0. Отношение «порожденный - родитель» создает в системе иерархическую структуру набора процессов. Новый процесс разделяет со своим родителем все ресурсы родителя, такие, как дескрипторы файлов, состояние обработки сигналов и распределение памяти.

Хотя есть случаи, когда новый процесс должен быть копией родительского, более полезным и обычным действием является загрузка и выполнение другой программы. Процесс может перекрыть себя образом памяти другой программы, передав вновь созданному образу набор параметров с использованием системного вызова execve. Одним параметром является имя файла, содержимое которого согласуется с форматом, распознаваемым системой, будучи либо двоичным исполняемым файлом, либо файлом, вызывающим запуск определенной программы интерпретатора для анализа своего содержимого.

Процесс может завершиться, выполнив системный вызов exit, посылая 8 бит статуса завершения своему родителю. Если процесс хочет передать своему родителю более одного байта информации, он должен либо установить межпроцессное взаимодействие, использовав каналы или сокеты, либо использовать вспомогательный файл.

Процесс может приостановить выполнение до тех пор, пока любой из его порожденных процессов не завершится, использовав системный вызов wait, который возвращает PID и статус завершения порожденного процесса. Родительский процесс может организовать свое уведомление сигналом, когда порожденный процесс завершается ненормально. Использовав системный вызов wait, родитель может получить информацию о событии, вызвавшем завершение порожденного процесса, и о ресурсах, использованных процессом в течение времени его жизни. Если процесс оказывается покинутым, поскольку его родители завершились раньше него, ядро организует посылку статуса завершения порожденного процесса назад специальному системному процессу.

Выполнение процессов планируется в соответствии с параметром приоритета процесса. При работе с планировщиком по умолчанию этот приоритет управляется с помощью алгоритма планировки ядра. Пользователи могут повлиять на планировку процесса, указав параметр относительного приоритета (nice), который изменяет вес общих коэффициентов планирования, но по-прежнему принуждает разделять время используемого процессора в соответствии с политикой планировки ядра. FreeBSD имеет также планировщик реального времени. Процессы, работающие под планировщиком реального времени, сами управляют своим приоритетом, который не изменяется ядром. Ядро будет запускать на исполнение процесс реального времени с наивысшим среди всех других процессов приоритетом. Таким образом, процессы реального времени не обязаны разделять ресурсы использующегося процессора.


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 69 гостей онлайн

Реклама на сайте: