
К9-12В. Вопросы и ответы к ГОСам 2013 / Операционные системы / 10. Понятие процесса. Управление процессами в ОС UNIX
.docx10. Понятие процесса. Управление процессами в ОС UNIX.
+ см. вопрос 6
Процесс - это совокупность программ и данных, которые обрабатываются на некотором процессоре.Процессы иногда называют "задачами".Управление процессами входит в основные функции ядра ОС (создание и уничтожение процессов,переключение процессов). Процесс является базовым понятием в ОС UNIX - в ней реализован принципразделения времени: управление процессами в соответствии с механизмами TimeSlicing и наличием активныхтерминалов в системе.
Управление процессами в операционной системе UNIX: Процесс строится для каждой выполняемойприкладной или системной программы, является единицей вычислительной работы и потребления ресурсов,выполняется в своем собственном виртуальном адресном пространстве.
Для управления процессами система при порождении процесса присваивает ему уникальный номер -идентификатор процесса(PID) число в диапазоне 0-30000.
При выполнении любого вычислительного задания прикладныеи системные процессы ядра должны взаимодействовать между собой. Это необходимо для обмена данными, для передачи управляющей информации при использовании системных ресурсов, длясинхронизации или управления последовательностью выполнения процессов и т.п.
Для этих целей служат специальные системные программы, встроенные в оболочку и поддерживающие следующие механизмывзаимодействия процессов:
- программы-сокеты— для обмена данными;
- программные каналы для обмена данными между утилитами(см. выше);
- асинхронные сигналы– ключевые слова, передаваемые отодного процесса к другому, например, для завершения выполненияпроцесса или для получения информации о свершении некоторыхсобытий в системе(сигнал от таймера, ошибка при передаче данных на устройство, попытка выполнения несуществующей команды и пр.);
- семафоры– синхронизация выполнения процессов посредством установки значений бит-"флагов" специальных системныхпеременных;
- совместно используемая общая область физической памяти.
Процессы выполняются в одном из двух режимов— пользовательском и в режиме ядра. В режиме ядра выполняются процессысистемных вызовов. В этом случае они имеют доступ к процедурам
и структурам данных ядра. Такая организация позволяет ядру защитить свои процедуры и структуры системных данных от искажений со стороны проблемных задач.
Часть информации дескриптора может быть выведена в листинг характеристик процесса с помощью специальной команды ps(см. ниже). Некоторые заголовки полей листинга:
- номер терминала, которому принадлежит процесс(TTY);
- приоритет(PRI);
- использованное время процессора(TIME);
- идентификатор процесса(PID);
- имя программы процесса или команды, выполняемой в телепроцедуры на момент запроса листинга(CMD);
- идентификатор родительского процесса(PPID);
- адрес процесса(ADDR);
- величина изменения значения приоритета(NI) и пр.
Фоновые процессы
При обычном запуске с терминала некоторой программы на исполнение (системной утилиты или прикладной задачи) интерпретаторомshell создается привилегированный процесс, который все
время связан со своим терминалом. Запуск следующего процессаможет быть выполнен пользователем только после завершениятекущего, т.е. при появлении приглашения'$' от интерпретатора.
В целях использования возможности параллельного выполнения программ в ОСUNIX отдельные задачи или задания пакетногорежима могут быть запущены одновременно с заданиями диалогового режима. Для запуска фонового (параллельного с другими потомками) процесса в командную строку необходимо и достаточнопоследним символом добавить знак & (амперсанд):
$ ccprog.c&
[1]2388
$
Shell выводит номер этого процесса(PID) и разрешает ввод следующей команды.
Фоновые процессы обладают некоторыми недостатками:
- не допускают ввода с клавиатуры;
- обеспечивают вывод на экран, но при этом нарушают целостность вывода диалогового процесса.
Общепринятый прием исключения влияния фонового выводана интерактивную работу:
$<командная_строка>>имя_файла.out&
- <командная_строка> планирует задание для фонового режима;
- перенаправляет вывод вместо экрана в указанный файл головного каталога пользователя.
Особенности работы с фоновым режимом:
- выполняемая в фоновом режиме программа(команда), требующая стандартного ввода, должна читать его из файла с использованием перенаправленного ввода;
- программа, выполняемая в фоновом режиме, не может быть прервана<Ctrl*C>, так как она отсоединяется от клавиатуры и может быть прекращена только с помощью команды kill или выходом из системы;
- выход из системы exit надо выполнять два раза: для завершения фонового процесса и завершения основного процесса shell.
В случаях, когда фоновый процесс все же требует ввода данныхс клавиатуры, то его надо временно перевести в оперативный режим, ввести данные, и вернуть опять в фоновый с помощью следующих команд:
fg %N— перевод фонового процесса в оперативный;
bg %N— перевод оперативного в фоновый режим.
Здесь N— порядковый номер фонового задания, которое в общем случае может содержать несколько активных процессов и всеони переводятся в соответствующий режим.
Номер задания“N” выводится:
- при запуске фоновой программы;
- командой jobs без приостановления или с приостановлением фонового процесса.
Приостановить выполнение процесса с выходом в shell (например, для анализа состояния и результатов работы процедуры) можно с помощью прерывания<ctrl*Z>
Выполнение фоновых заданий прекращается с выходом пользователя из системы. НО! Если фоновая программа должна быть продолжена и после прекращения текущего сеанса работы, то необходимо использовать команду:
$nohupимя_фоновой_программы&— команда, во-первых, запускает и защищает фоновую программу от прерываний, вырабатываемых при выходе пользователя из системы, и, во-вторых, перенаправляет фоновый протокол в системный файл nohup.out.
Вместе с тем, вывод протокола работы фоновой программыможно перенаправить в специальный файл, который можнопросмотреть позже без нарушения протокола работы с оперативной задачей:
$nohupимя_фон_программы>имя_файла&
nohup становится самостоятельным процессом, и егоPPID меняется— родительским процессом был shell (см. примеры выше), а стал init c PID=1, т.е. приоритет фонового процесса“усиливается” общесистемным процессом init и его выполнение будет продолжаться.
Управление приоритетами процессов
Максимальный приоритет процессов каждого пользователягруппы устанавливает администратор. Если при выполнении задания образуются несколько порожденных процессов, то все они имеют одинаковый приоритет равный родительскому. В этом случае все процессы получают ресурсы равными долями(простойрежим разделения времени). При необходимости выделения наиболее важных родительских процессов порожденным второстепенным можно понизить приоритет с помощью команды:
nice [-k] имя_программы— выполнение программы, указанной в строке, с пониженным приоритетом.
-k— коэффициент понижения приоритета(k = 1;...10; по умолчаниюk = 10).
Чем больше число, тем ниже приоритет.
Наибольший приоритет (и наименьшее значение nice) — −20. 19, либо 20 — наименьший приоритет, но это, с другой стороны, самые вежливые процессы.
Завершение процессов
Завершение процессов– одна из функций управления процесса-ми. Прекратить выполнение любого процесса можно с помощью
команды:
kill [-опции] PID1 [PID2......]— передает сигнал процессуPID.
Сигнал— ключевое слово, при получении которого процесс
выполняет некоторые действия. Сигналы с использованием команды kill могут передаваться другими прикладными процессами или системными программами (например, при появлении некоторых событий, как то сбой в канале, сигнала с таймера, завершения фонового процесса и пр.). Существуют двадцать пять видов сигналов, предназначенных для выполнения различных действий процессамипри наступлении определенных событий в системе. С получением
большинства сигналов процесс завершается самостоятельно. Тот, кто посылает сигнал, должен быть владельцем процесса или администратором. Для безусловного и немедленного завершения указанного процесса kill должен послать сигнал с именем TERM (по умолчанию). Другие сигналы передаются с помощью опции -S.
Перехватывание сигналов
trap ' список команд или имя sh-процедуры' сигнал1 сигнал2
Команда перехватывает указанные сигналы и последовательновыполняет все команды списка, прежде чем поступивший сигналбудет передан процессу. Например, команда может быть использована для синхронизации заданий, если надо выполнить какие-тодействия с файлами, а затем уже завершить процесс.