Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС_ЛР 902_Часть2.doc
Скачиваний:
38
Добавлен:
15.04.2015
Размер:
274.94 Кб
Скачать

32

Л А Б О Р А Т О Р Н А Я Р А Б О Т А № 5

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

Продолжительность работы: 4 часа.

    1. Цель работы: знакомство с многозадачностью ОС Linux; научиться работать со многими процессами, планированию запуска команд в определенное время; мониторинг многозадачной среды; управление многозадачностью.

Краткие теоретические сведения

  1. Введение

    1. О процессах LINUX

Процессом в Linuxназывается выполняющаяся программа. ПосколькуLinux– многозадачная система, то в одно и то же время могут выполняться несколько процессов. Чтобы их различать,Linuxприсваивает каждому процессу уникальный номер, называемый идентификатором процесса (process ID).

Идентификатор процесса – это число, идентифицирующее каждый выполняющийся процесс. Увидеть идентификаторы процессов можно, например, с помощью команды ps.

Получив указание запустить программу (создать процесс), Linux выполняет его, делая точную копию программы, от которой это указание поступило. В простейшем случае, пользователь дает команду своей оболочке запустить программу. Оболочка посылает запрос на клонирование процесса ядру Linux.

    1. Клонирование процессов, процессы init и exec

Клонирование или ветвление (fork) процесса – это операция создания дубликата существующего процесса. Все новые процессы вLinuxсоздаются с помощью механизма клонирования. При этом создается почти точная копия существующего процесса, включая окружение и все открытые процессом файлы. Единственное, что отличает дубликаты, – это флаг, обозначающий ка­кой из процессов родительский, а какой – порождённый (дочерний).

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

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

    1. Стандартные ввод и вывод

Каждый вновь созданный процесс получает уже открытыми три «файла». Так как Linuxне делает различий между файлами и устройствами, открытый «файл» может быть настоящим файлом на диске или устройством, например, терминалом пользователя. Эти три открытых файла представляют собой стандартное устройство ввода(stdin),стандартное устройство вывода (stdout) и стандартное устройство вывода сообщений об ошибках (stderr). Все командыLinux, как и прикладные программы, получают информацию со стандартного устройства ввода и выводят информацию на стандартное устройство вывода. Все диагностические сообщения автоматически направляются на стандартное устройство вывода сообщений об ошибках.

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

#sort sales.dat

Её вводом будет не клавиатура (stdin), а файл sales.dat т.к. он указан после команды. Выводом же будет файл stdout (в нашем случае экран монитора), т.к. ничего дополнительно не оговаривается.

Пояснение

Команда sort, используемая без параметров, сортирует строки в текстовом файле, первым словом которых является число.

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

  1. Элементарные операции над процессами

В данной работе, для организации интерфейса ОС LINUXс пользователем используется командный интерпретаторshell, который идентичен своему аналогу в ОСUNIX. Поэтому, для выполнения контрольного задания, можно пользоваться такими командами какcat [файл] иls -F– для просмотра содержимого текстового файла и содержимого текущего каталога соответственно, т.к. в дальнейшем они больше упоминаться не будут.

    1. Перенаправление ввода и вывода

Множество программ принимают информацию с терминала или клавиатуры и выводят ее на экран терминала. В Linuxввод с клавиатуры связан с чтением из файла под названиемstdin, а вывод на терминал – с выводом в файл под названиемstdout. Можно перенаправить ввод и вывод так, чтобы вместо ввода с терминала или вывода на терминал информация считывалась из файла или направлялась в файл.

Для перенаправления ввода команды или программы так, чтобы для ввода использовался файл, а не терминал применяется оператор <(символ «меньше»). Предположим, что нужно отправить файл с именемinfoпо электронной почте адресатуSasha. Вместо того чтобы вручную перепечатывать содержимое файла для командыmail, укажите этой команде использовать файлinfoв качестве входного (stdin):

#mail Sasha < info

Для перенаправления вывода программы в файл применяется оператор >(символ «больше»). Вместо выдачи на экран терминала, информация помещается в файл. При этом, если файл с таким именем уже был – его содержимое замещается, а если нет, то такой файл создаётся. Командаdateотображает на экране текущее время и дату. Чтобы сохранить текущее время и дату в файле с именемnow воспользуемся командой:

#date > now

Если нужно добавить или дописать информацию в конец существующего файла, ис­пользуется двухсимвольный оператор >>. Для добавления текущей даты в файл с именемreport наберём в командной строке:

#date >> report

Рассмотрим в качестве примера ещё три команды:

#date >> sales_report

#sort < sales >> sales_report

(аналогично: #sort sales >> sales_report)

#mail Sasha Jack < sales_report

В первой строке примера вывод команды dateдописывается в файлsales_report. Во второй строке примера командаsortсчитывает ввод из файлаsales, а вывод добавляется к файлуsales_report. Последней строкой файлsales_reportотправляется пользователямSashaиJackпо электронной почте.