Основные команды Unix для управления процессами

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

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

Состояние процессов

В многозадачной (многопроцессной) системе процесс может находиться в одном из трех основных состояний:

ВЫПОЛНЕНИЕ - активное состояние процесса, во время которого процесс обладает всеми необходимыми ресурсами и непосредственно выполняется процессором;

ОЖИДАНИЕ - пассивное состояние процесса, процесс заблокирован, он не может выполняться по своим внутренним причинам, он ждет осуществления некоторого события, например, завершения операции ввода-вывода, получения сообщения от другого процесса, освобождения какого-либо необходимого ему ресурса;

ГОТОВНОСТЬ - также пассивное состояние процесса, но в этом случае процесс заблокирован в связи с внешними по отношению к нему обстоятельствами: процесс имеет все требуемые для него ресурсы, он готов выполняться, однако процессор занят выполнением другого процесса.

В ходе жизненного цикла каждый процесс переходит из одного состояния в другое в соответствии с алгоритмом планирования процессов, реализуемым в данной операционной системе. Типичный граф состояний процесса показан на рисунке 2.1.

В состоянии ВЫПОЛНЕНИЕ в однопроцессорной системе может находиться только один процесс, а в каждом из состояний ОЖИДАНИЕ и ГОТОВНОСТЬ - несколько процессов, эти процессы образуют очереди соответственно ожидающих и готовых процессов. Жизненный цикл процесса начинается с состояния ГОТОВНОСТЬ, когда процесс готов к выполнению и ждет своей очереди. При активизации процесс переходит в состояние ВЫПОЛНЕНИЕ и находится в нем до тех пор, пока либо он сам освободит процессор, перейдя в состояние ОЖИДАНИЯ какого-нибудь события, либо будет насильно "вытеснен" из процессора, например, вследствие исчерпания отведенного данному процессу кванта процессорного времени. В последнем случае процесс возвращается в состояние ГОТОВНОСТЬ. В это же состояние процесс переходит из состояния ОЖИДАНИЕ, после того, как ожидаемое событие произойдет.

КОМАНДЫ

ps
(="print status(печать статуса)" или "process status(статус процессов)") выводит список процессов, выполняемых в текущий момент с указанием идентификаторов процессов(ID или PID). Используйте ps axu для просмотра списка всех процессов, выполняемых в системе (включая процессы, выполняемые другими пользователями и процессы, не контроллируемые с терминалов) с именами владельцев. Используйте "top" для удержания списка выполняемых процессов.

некая_команда &
выполнение команды в фоновом режиме (символ "&" значит "выполнять в фоновом режиме"). Номер_задания выводится на экран, так что вы можете перенести команду на передний план(см. ниже), если захотите. Я использую "&" в основном для запуска программ с графическим интерфейсом из X-терминала.

jobs
выводит список моих фоновых и остановленных заданий и показывает их номера.

fg номер_задания
Переносит фоновое или остановленное задание на передний план.

bg номер_задания
Помещает процесс в фоновый режим, так как если бы он был запущен с &. Это перезапустит установленный процесс. Текущий процесс переднего плана может быть приостановлен клавишами <Ctrl>z. Если у вас есть приостановленные процессы или процессы фонового режима, вам придется набрать exit дважды, чтобы выйти.

batch
at>updatedb<Ctrl>d
выполнить некоторую команду (обычно требующую больщого количества времени для завершения) когда загрузка системы уменьшится. Я могу покинуть систему, а процесс продолжит работу. Когда программа будет завершена, ее вывод будет послан мне по электронной почте. В приведенном выше примере "at>" представляет приглашение ввода команды, команда для выполнения updatedb, и <Ctrl><d> завершает ввод задания (Я могу ввести много комманд, разделенных <Enter>).

at 17:00
выполнить команду в заданное время. У вас будут спрашивать команды для выполнения, пока вы не нажмете <Ctrl>d. С этой командой связана atq (показывает очередь программ заданных командой at) и atrm (удаляет программы из этой очереди).

kill PID
Завершить процесс. Для начала определите идентификатор процесса(PID), который собираетесь завершить, используя ps.

killall имя_программы
Завершить программу (программы) с указанным именем. К примеру, killall pppd завершит вашу работу с удаленным соединением.

nohup имя_программы
(=no hungup(не откладывать)). Выполняет программу имя_программы так, что она не прекращается, когда вы покидаете систему. Вывод перенаправляется в nohup.out в вашей домашней директории. Естественно, не стоит выполнять интерактивные программы используя nohup.

lpc
(как "root") Проверка и управление принтерами. Введите "?" для получения списка используемых команд.

lpq
Показывает содержимое очереди принтера. Под KDE (X-Windows), вы можете использовать "Printer Queue(Очередь принтера)" доступную из меню "K"-"Utilities(Утилиты)".

Приоритеты Unix

nice имя_программы
выполнить имя_программы, изменив его приоритет. Поскольку в примере приоритет не указан, он будет увеличен на 10 пунктов (процесс будет выполняться медленнее) от значения по умолчанию (обычно 0). Чем меньше число ("приятности" другим пользователям системы), тем выше приоритет. Значение приоритета изменяется в границах от -20 до 19. Только "root" может использовать отрицательные значения. Используйте top для просмотра приоритетов выполняемых процессов.

renice -18 PID
(как "root") Уменьшить приоритет процесса на 18. Нормальный пользователь может только увеличивать приоритет, причем относительно текущего значения (только замедлить процесс). Он может, кроме того, renice +10 -u peter передав пользователю peter освободившееся время процессора для его заданий с интенсивными вычислениями в обход других пользователей.

lsof
Cписок открытых файлов. Если я "root", будут перчислены все открытые файлы. Я могу ограничиться файлами, открытыми с определенной консоли: lsof /dev/tty1 . Для списка файлов, открытых по сети (полезно для контроля безопасности), можно использовать lsof -i (как "root").

watch -n 60 моя_команда
выполнять команду моя_команда раз за разом с 60-секундными интервалами (интервал по умолчанию - 2 секунды).

Память. Типы адресов

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

Типы адресов

Для идентификации переменных и команд используются символьные имена (метки), виртуальные адреса и физические адреса (рисунок 2.7).

Символьные имена присваивает пользователь при написании программы на алгоритмическом языке или ассемблере.

Основные команды Unix для управления процессами - student2.ru Виртуальные адреса вырабатывает транслятор, переводящий программу на машинный язык. Так как во время трансляции в общем случае не известно, в какое место оперативной памяти будет загружена программа, то транслятор присваивает переменным и командам виртуальные (условные) адреса, обычно считая по умолчанию, что программа будет размещена, начиная с нулевого адреса. Совокупность виртуальных адресов процесса называется виртуальным адресным пространством. Каждый процесс имеет собственное виртуальное адресное пространство. Максимальный размер виртуального адресного пространства ограничивается разрядностью адреса, присущей данной архитектуре компьютера, и, как правило, не совпадает с объемом физической памяти, имеющимся в компьютере.

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

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

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

Преобразование адресов из одного типа в другой

1. пишем прогу -символьные -компилирование -физич адрес

2. символ -физич напр с-мы реал времени, те когда заранее известны усл вып программы

Наши рекомендации