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


Процессы в UNIX.

    Процесс – запущенная на выполнение программа.

 

    Каждый процесс выполняется в своем адресном пространстве и на своем виртуальном процессоре. Процесс при своем запуске наследует от родителя открытые файлы, каналы и устройства, а так же среду выполнения, которая определена набором значений различных переменных среды. Состояние процесса в каждый момент времени определяется состоянием его адресного пространства, его виртуального процессора и среды окружения. Все эти состояния вместе называются образом, или контекстом процесса. Контекст принято рассматривать состоящим из трех частей:

 

    пользовательская часть контекста

 

    регистровая часть

 

    системная часть

 

    Пользовательская часть определяется сегментами кода, данных и стека, открытыми файлами. Регистровая часть контекста определяется состоянием регистров процессора, а системная часть – набором элементов таблиц, связанных с процессором.

 

    Планировщик системы осуществляет переключение контекста в следующих случаях:

 

    процесс перешел в состояние ожидания какого-либо ресурса (добровольное переключение контекста)

 

    в системе обнаружен процесс с более высоким приоритетом (принудительное переключение контекста)

 

    При переключении планировщик сохраняет контекст текущего процесса и восстанавливает контекст следующего.

 

    В Unix все выполняемые процессы связанны родственными отношениями в дерево:

 

 

    В вершине дерева находиться процесс init, который активируется при загрузке системы и запускает другие процессы.

 

    Каждый процесс имеет свой уникальный идентификатор PID, также ему известен идентификатор родительского процесса PPID.

 

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

 

 

    В различных системах существует разное количество пассивных состояний процессов. Граф состояний процессов имеет следующий вид:

    Процесс создается с состоянием SNONE.

 

    SNONE - характеризует состояние, когда в системной таблице процессов уже есть элемент для нового процесса, но не выделена память и не создан контекст.

 

    SIDL – состояние, когда для процесса выделена память, создан контекст, но он не готов к выполнению и не находиться в очереди планировщика.

 

    SRUN – процесс готов к выполнению и находиться в очереди готовых процессов планировщика.

 

    Процессы ожидают, когда планировщик выделит им время центрального процессора (ЦП). После выделения времени ЦП процесс переходит в активное состояние RUNNING. В случае принудительного переключения контекста процесс опять переходит в состояние SRUN. Если в ходе выполнения процесс перешел в ожидание какого-либо ресурса, он переводиться в состояние SSLEEP, а после освобождения занятого ресурса снова переводиться в SRUN.

 

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

 

    Выполняемый процесс переводиться в состояние SSTOP, если ему был направлен специальный сигнал SIGSTOP. Чтобы продолжить выполнение приостановленному процессу, ему необходимо получить сигнал SIGCONT. После чего он перейдет в SRUN. Однако, если сигнал SIGSTOP был получен процессом в состоянии SSLEEP, то после получения SIGCONT он вернется в SSLEEP.

 

    Обычно процессы запускаются с помощью командного процессора Shell, поэтому Shell является родителем для большинства пользовательских процессов.

 

    Shell позволяет запускать процессы в двух режимах: оперативном (запущенный процесс имеет связь с консолью) и фоновом (выполняется в отсоединенном от консоли состоянии).

 

 

    Запущенный процесс захватывает консоль, поэтому Shell до окончания запущенного процесса не может работать с консолью и воспринимать команды.

 

    В случае работы в фоновом режиме прикладной процесс не взаимодействует с консолью, поэтому Shell может параллельно с запущенным процессом воспринимать команды и выполнять их

 

 

    Для того, чтобы посмотреть состояние запущенного пользовательского процесса используется команда ps [PID].

 

    Если PID не указан, то выводится состояния всех запущенных пользовательских процессов.

 



Дата добавления: 2020-10-01; просмотров: 322;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.01 сек.