Изучение POSIX-команд для управления процессами и потоками в Linux
Цель работы: изучение возможностей контроля и управления процессами в операционной системе Linux.
Краткие теоретические сведения:
Каждому процессу соответствует контекст, в котором он выполняется. Контекст процесса системного уровня в ОС UNIX состоит из “статической” и “динамических” частей. Для каждого процесса имеется одна статическая часть контекста системного уровня и переменное число динамических частей.
Статическая часть контекста процесса системного уровня включает следующее:
- Описатель процесса, т.е. элемент таблицы описателей существующих в системе процессов. Описатель процесса включает, в частности, следующую информацию:
- состояние процесса;
- физический адрес в основной или внешней памяти u-области процесса;
- идентификаторы пользователя, от имени которого запущен процесс (UID, user identifier);
- идентификатор процесса (PID, process identifier);
- прочую информацию, связанную с управлением процессом.
- U-область (u-area) - индивидуальная для каждого процесса область пространства ядра, обладающая тем свойством, что хотя u-область каждого процесса располагается в отдельном месте физической памяти, u-области всех процессов имеют один и тот же виртуальный адрес в адресном пространстве ядра. Именно это означает, что какая бы программа ядра не выполнялась, она всегда выполняется как ядерная часть некоторого пользовательского процесса, и именно того процесса, u-область которого является "видимой" для ядра в данный момент времени. U-область процесса содержит:
- указатель на описатель процесса;
- идентификаторы пользователя;
- счетчик времени, в течение которого процесс реально выполнялся (т.е. занимал процессор) в режиме пользователя и режиме ядра;
- параметры системного вызова;
- результаты системного вызова;
- таблица дескрипторов открытых файлов;
- предельные размеры адресного пространства процесса;
- предельные размеры файла, в который процесс может писать;
- и т.д.
Традиционный механизм управления процессами на уровне пользователя
Как свойственно операционной системе UNIX вообще, имеются две возможности управления процессами – с использованием командного языка (того или другого варианта Shell) и с использованием языка программирования с непосредственным использованием системных вызовов ядра операционной системы.
Сигнал - это способ информирования процесса со стороны ядра о происшествии некоторого события. Смысл термина “сигнал” состоит в том, что сколько бы однотипных событий в системе не произошло, по поводу каждой такой группы событий процессу будет подан ровно один сигнал. Т.е. сигнал означает, что определяемое им событие произошло, но не несет информации о том, сколько именно произошло однотипных событий.
Примерами сигналов (не исчерпывающими все возможности) являются следующие:
- окончание процесса-потомка;
- возникновение исключительной ситуации в поведении процесса (выход за допустимые границы виртуальной памяти, попытка записи в область виртуальной памяти, которая доступна только для чтения и т.д.);
- превышение верхнего предела системных ресурсов;
- оповещение об ошибках в системных вызовах (несуществующий системный вызов, ошибки в параметрах системного вызова, несоответствие системного вызова текущему состоянию процесса и т.д.);
- сигналы, посылаемые другим процессом в пользовательском режиме (см. ниже);
- сигналы, поступающие вследствие нажатия пользователем определенных клавишей на клавиатуре терминала, связанного с процессом (например, Ctrl-C или Ctrl-D);
- сигналы, служащие для трассировки процесса.
Система предоставляет возможность для пользовательских процессов явно генерировать сигналы, направляемые другим процессам. Для этого используется системный вызов
(Этот системный вызов называется “kill”, потому что наиболее часто применяется для того, чтобы принудительно закончить указанный процесс.) Параметр signum задает номер генерируемого сигнала (в системном вызове kill можно указывать не все номера сигналов). Параметр pid имеет следующий смысл:
- если в качестве значения pid указано целое положительное число, то ядро пошлет указанный сигнал процессу, идентификатор которого равен pid;
- если значение pid равно нулю, то указанный сигнал посылается всем процессам, относящимся к той же группе процессов, что и посылающий процесс (понятие группы процессов аналогично понятию группы пользователей; полный идентификатор процесса состоит из двух частей - идентификатора группы процессов и индивидуального идентификатора процесса; в одну группу автоматически включаются все процессы, имеющие общего предка; идентификатор группы процесса может быть изменен с помощью системного вызова setpgrp);
- если значение pid равно -1, то ядро посылает указанный сигнал всем процессам, действительный идентификатор пользователя которых равен идентификатору текущего выполнения процесса, посылающего сигнал.
Задание 1: Контроль и управление процессами
Список используемых команд
ps | просмотр активных процессов в системе |
kill | команда передачи сигнала процессу |
Выполнение работы:
- Вывести список активных процессов. Дать характеристику основных свойств процесса.
- Привести подмножество активных процессов образующих иерархию "родительский процесс"-"порожденный процесс"
- Привести перечень сигналов, доступных для посылки процессам
- Передать сигнал "снятие процесса" выбранному процессу. Привести результаты выполнения такого действия.
- Передать сигналы "остановка процесса" и "возобновление процесса" выбранному процессу. Привести результаты выполнения этих сигналов.
2. Контроль и управление заданиями.
Список используемых команд
yes | команда выдачи знака " y " на ста |
jobs | просмотр активных заданий |
ps | список активных процессов |
fg | перевод задания в "активный" режим |
bg | перевод задания в "фоновый" режим |
Ctrl+Z | приостановка активного задания |
команда & | запуск задания в фоновом режиме |
- Запустить на выполнение “бесконечное” задание. Например, циклический вывод буквы “у” в нулевое устройство.
- Приостановить задание и просмотреть состояние активных заданий. Вывести список активных процессов. Прокомментировать результаты.
- Перевести задание в фоновый режим. Запустить несколько фоновых задач. Вывести список и охарактеризовать состояние активных заданий.
- Выполнить снятие ранее запущенного задания командой kill. Вывести список и охарактеризовать изменения в списке активных заданий.
Контрольные вопросы:
- Опишите все характеристики процесса для любых 3-х системных приложений в активном и фоновом режимах.
- Перечислите команды управления процессами и потоками в ОС linux
- Покажите на примере нескольких приложений «родительский процесс» и процесс потомок.
- Объясните связь между виртуальной памятью и системными процессами?
- Объясните связь между виртуальной памятью и процессами приложений?
Содержание отчета:
1. Цель работы.
2. Ответы на контрольные вопросы.
3. Распечатка хода работы в электронном виде.
Практическая работа № 11
Установка Linux, создание загрузочного раздела, выбор файловой системы
Цель работы: Изучение принципов установки операционной системы Linux.