Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции_ОСС.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
476.16 Кб
Скачать

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

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

fork - exec - exit совокупность этих переключений

состояний процесса определяют время

существования процесса.

В общем случае активныйпроцесс (выполняемая задача) может находиться в одном из шести состояний (в Linux):

  • ожидание процессора в очереди

  • выполнение на процессоре в течение выделенного кванта времени

  • ожидание освобождения ресурса (например – устройства)

  • приостановлен специальным сигналом

  • завершился, но его дескриптор еще в оперативной памяти ядра ОС

  • процесс свопирован на внешнюю память .

В ОП в активном состоянии находится несколько процессов - до 30000. .Каждому процессу выделяется виртуальная память практически без ограничений (за счет страничной организации).

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

  • программы-сокеты - для обмена данными;

  • программные каналы для обмена данными между утилитами (см. выше);

  • асинхронные сигналы – ключевые слова, передаваемые от одного процесса к другому, напрмер, для завершения выполнения процесса или для получения информации о свершении некоторых событий в системе (сигнал от таймера, ошибка при передачи данных на устройство, попытка выполнения несуществующей команды и пр.);

  • семафоры – синхронизация выполнения процессов посредством установки значений бит-"флагов" специальных системных переменных;

  • совместно используемая общая область физической памяти.

Перечисленные механизмы использует как сама ОС (write,mail и пр.), так и прикладные программы с помощью команд управления процессами или системных вызоваов.

Роассмотрим создание и работу процессов на примере процедуры. Так как sh-процедура - исполняемый файл то процесс его выполнения обеспечивается в ОС обычными механизмами построения и управления процессами. Для каждой sh-процедуры строится свой процесс со своим дескриптором - порожденный процесс. В дескрипторе процесса хранится информация, необходимая ядру для управления процессом. Дескриторы хранятся в адресном пространствя ядра ОС в виде двунаправленного приоритетного списка, упорядоченного в соответствии с их номерами – идентификаторами процессов (PID).

Пример.

$ vi proc

date

ls

$sh proc

< дата>

f1

f2

$

Рассмотрим как реализуются процессы процедуры примера.

В ответ на приглашение -$ вводится имя процедуры proc и создается порожденный процесс shell. Он вводит данные, необходимые для своего выполнения из указанного файла proc - командные строки. Каждая команда sh-процедуры выполняется порожденным для неё процессом (как обычно для команды, введенной с клавиатуры - процессы утилит). Как только все команды окажутся выполненными, sh-процесс завершается и управление возвращается родительскому процессу. Процедура выполнена.

Планировщик обрабатывает процессы двух видов – обычные и более приоритетные процессы реального времени. Место в очереди определяется его приоритетом.

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

Дескрипторы процессов создаются и удаляются динамически при выполнении процессов. Поэтому состав и размер списка постоянно меняются. Так как все процессы связаны между собой родственными отношениями, то списковая организация процессов используется для процессов одного ранга (например – для всех порожденных одним родительским или для всехродительских и т.п.). Таким образом вся система дескрипторов представляет собой некоторую древовидную структуру с коренным общисистемным процессом (swapper – имеющего идентификатор PID=0), который компилируется в состав ядра и используется для построения всей структуры дескрипторов и ее обработки. Открывается очередь наиболее приоритетным процессом инициатора ОС (init – PID=1), который строится первым при инициализпации ОС и уничтожается при завершении работы ОС.

Процессор выделяется каждому процессу в очереди на ограниченные кванты времени. Это принципиально отличает многозадачный режим обработки заданий в UNIX от однозадачного режима (DOS), где процессор выделяется процессам строго последовательно на все время выполнения процесса. В UNIX пересчет приоритетов происходит постоянно по прерываниям определенного типа с частотой - около одного раза в сек.

Часть инфориации дескриптора может быть выведена в листинг характеристик процесса с помощью специальной команды ps (см. ниже). Некоторые заголовки полей листинга:

  • номер терминала, которому принадлежит процесс (TTY)

  • приоритет (PRI)

  • использованное время процессора (TIME)

  • идентификатор процесса (PID)

  • имя программы процесса или команды, выполняемой в теле процедуры на момент запроса листинга (CMD)

  • идентификатор родительского процесса (PPID)

  • адрес процесса (ADDR)

  • величина изменения значения приоритета (NI) и пр..

Полную информацию о процессе пользователь или администратор может получить с помощью этой команды в следующем формате:

$ps [-k] [<входное_имя_пользователя>] - вывод листинга

характеристик процесса.

Некоторые значения ключей:

  • -a[l] показать процессы данного терминала или

  • -af полный (достаточный_ формат сообщения

  • -afl длинный формат

  • -u показать все активные процессы и пр..

Пример:

$ps -flu lev

PID PPID TTY PRI TIME CMD

927 1 tty5 0:04 sh

1001 927 tty5 0:02 ps

..

Для вывода листинга процессов, принадлежащих пользователю можно воспользоваться конструкцией:

$ps -f|grep <имя_пользователя>.