Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа--OC

.doc
Скачиваний:
28
Добавлен:
02.04.2015
Размер:
97.28 Кб
Скачать

Лабораторный практикум по курсу ОС Описание некоторых команд и системных вызовов linux

Команда top.

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

Основные поля вывода команды top:

Поле

Описание

PID

Идентификатор процесса.

PPID

Идентификатор родительского процесса.

USER

Идентификатор пользователя, запустившего процесс.

GROUP

Идентификатор группы, которой принадлежит процесс.

S

Состояние процесса.

PR

Приоритет процесса.

N1

Относительный приоритет процесса

TIME+, TIME

Количество процессорного времени, которое использует процесс с момента своего запуска.

VIRT

Полный объем виртуальной памяти, которую занимает процесс.

RES

Объем резидентной виртуальной памяти, которую занимает процесс.

SHR

Объем общей виртуальной памяти, которую использует процесс.

SWAP

Объем виртуальной памяти процесса, выгруженной на диск.

%CPU

Процент использования общего процессорного времени.

%MEM

Процент использования доступной физической памяти.

%MEM

Процент использования доступной физической памяти.

CMD

Команда, использованная для создания процесса.

Интерактивные команды, которые можно использовать в top:

Команда

Описание

Пробел

Немедленно обновить содержимое экрана

h

Вывести справку о программе

k

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

n

Изменить число отображаемых процессов. Вам предлагается ввести число.

u

Сортировать по имени пользователя.

M

Сортировать по объёму используемой памяти.

P

Сортировать по загрузке процессора.

H

Переключить отображения потоков

A

Включить режим отображения альтернативной панели top

R

Изменить nice-фактор процесса. Программа запрашивает у вас код процесса и nice-фактор, который будет ему присвоен.

Утилита Watch

Утилита, запускает и следит за программой через фиксированные интервалы времени. Если интервал не задан с помощью опции -n , то команда будет запускаться каждые 2 секунды. Завершить программу можно с помощью нажатия клавиш CTRL-C. Опция -d подсветит изменения в выводе.

Пример: watch -d ls -l – наблюдение за изменениями в директории

Команда ps.

Выдает информацию об активных процессах.

Командой ps обрабатываются следующие опции: 

Команда

Описание

-e

Вывести информацию обо всех процессах.

-d

Вывести информацию обо всех процессах, кроме лидеров групп

-N

отрицание выбора

-d

все процессы, кроме главных системных процессов сеанса

-l

Генерировать листинг в длинном формате

-f

Генерировать полный листинг

-C

-F

Пример: ps –e - вывести информацию о всех процессах

3.2 Системные вызовы управления процессами

int execv (const char *FILENAME, char *const ARGV[])

Функция исполняет файл, заданный строкой FILENAME как новое изображение процесса. Аргумент ARGV представляет собой массив строк, заканчивающихся нулем, которые используются как аргумент argv функции main. Последним элементом этого массива должен быть нулевой указатель. Первый элемент массива – имя файла программы. Среда нового изображения процесса берется из переменной environ текущего изображения процесса.

exit(int status);

Функция exit() приводит к обычному завершению программы, и величина status возвращается процессу-родителю.

pid_t fork (void)

Функция создает новый процесс. Прототип функции определен в заголовочном файле <unistd.h>. Если операция выполнилась успешно, то выполнение и родительского и дочернего процессов продолжается начиная с команды, следующей за fork. В случае дочернего процесса fork возвращает значение 0, а в случае родительского процесса – идентификатор порожденного процесса.

pid_t waitpid (pid_t PID, int *STATUS-PTR, int OPTIONS)

Используется для запроса информации о состоянии дочернего процесса, идентификатор которого равен PID. Обычно вызывающий процесс приостанавливает выполнение до тех пор, пока дочерний процесс не завершит выполнение. Аргумент PID может принимать и другие значения. Значение –1 означает ожидание любого процесса, 0 – запрашивает информацию о процессах, находящихся в той же группе процессов. Если информация о состоянии процесса доступна немедленно, функция не ожидает окончания выполнения процесса. Если запрошен статус нескольких процессов, то возвращается статус случайного процесса. Аргумент OPTIONS является битовой маской, значение которой может формироваться из следующих макросов:

WNOHANG Родительский процесс не должен ожидать завершения дочернего;

WUNTRACED Запрашивается информация об остановленных и завершенных

процессах.

Информация о состоянии сохраняется в объекте, на который указывает STATUS-PTR если он не является нулевым указателем.

В случае нормального завершения функция возвращает идентификатор

процесса, для которого запрашивается состояние, иначе возвращается –1. Переменная errno может принимать следующие значения:

EINTR Выполнение функции прервалось поступившим сигналом;

ECHILD Отсутствуют дочерние процессы или процесс, идентификатор которого передан в функции не является дочерним;

EINVAL Неверное значение аргумента OPTIONS.

Функция sigaction определяет обработчик сигнала. Функция определена в заголовочном файле <signal.h>.

int sigaction(int SIGNUM, const struct sigaction *ACTION, struct sigaction *OLD_ACTION)

Структура sigaction определяется следующим образом:

struct sigaction {

int sa_flags;

sighandler_t sa_handler;

sigset_t sa_mask;

};

sa_handler используется таким же образом, как и аргумент ACTION в функции signal; sa_mask задает список сигналов, которые должны быть заблокированы при выполнении обработчика; sa_flags задает значения флагов, которые влияют на поведение сигнала.

Аргумент ACTION задает новый обработчик для сигнала, OLD_ACTION используется для того, чтобы возвратить информацию об обработчике, ассоциированном с сигналом. Если OLD_ACTION является нулевым указателям, информация о предыдущем обработчике не возвращается. Если ACTION является нулевым указателем, обработчик сигнала не изменяется. Функция возвращает следующие значения:

0 в случае успеха;

-1 в случае ошибки;

EINVAL в случае неправильно заданного идентификатора сигнала.

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

int sigprocmask(int HOW, const sigset_t *SET, sigset_t *OLDSET)

Аргумент HOW определяет каким образом изменяется маска сигналов и может принимать следующие значения:

SIG_BLOCK сигналы, задаваемые в наборе, блокируются – добавляются к уже существующей маске сигналов;

SIG_UNBLOCK сигналы, задаваемые в наборе, разблокируются – удаляются из уже существующей маски сигналов процесса;

SIG_SETMASK устанавливает набор сигналов для процесса, старое содержимое маски игнорируется.

Аргумент OLDSET используется для возврата старого содержимого маски сигналов процесса. Функция возвращает 0 в случае успеха и –1 в противном случае. При возникновении ошибки переменная errno может принимать следующее значение:

EINVAL SIGNUM содержит неправильный номер сигнала.

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

int sigpending(sigset_t *SET)

Функция возвращает информацию об активных в текущий момент сигналах. Если имеется заблокированный сигнал, поступивший процессу, то он также включается в маску сигналов. Возвращает 0 в случае успешного выполнения и –1 в случае ошибки.

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

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

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

  • два процесса необходимо синхронизировать при одновременном выполнении.

int kill(pid_t PID, int SIGNUM)

Функция kill посылает сигнал SIGNUM процессу или группе процессов, задаваемому PID. PID может принимать следующие значения:

  • > 0 сигнал посылается процессу, идентификатор которого равен PID;

  • == 0 сигнал посылается всем процессам, которые находятся в той же группе процессов, что и процесс-отправитель;

  • < -1 сигнал посылается группе процессов, идентификатор которой равен PID;

  • == -1 если процесс является привилегированным, то сигнал посылается всем процессам, кроме некоторых системных процессов. Иначе, сигнал посылается всем процессам, владельцем которых является текущий пользователь.

Если сигнал успешно послан, то kill возвращает 0, иначе сигнал не посылается и функция возвращает –1. В случае неудачи в переменной errno возвращаются следующие коды:

EINVAL аргумент SIGNUM содержит неправильный номер сигнала;

EPERM отсутствуют привилегии на посылку сигнала процессу или группе процессов;

ESCRH аргумент PID не соответствует ни одному из существующих процессов или групп процессов.

Процесс может послать сигнал самому себе с помощью вызова kill(getpid(), SIG), что равнозначно raise(SIG).

Наиболее безопасным способом ожидания сигнала является использование функции sigsuspend:

int sigsuspend(sigset_t *SET)

Функция заменяет маску сигналов процесса и приостанавливает его работу до поступления одного из сигналов, который не заблокирован маской. Маска, задаваемая SET действует только на время ожидания, вызываемому функцией, после возвращения управления процессу восстанавливается старая маска сигналов.

Лабораторная работа 1.

Процессы и потоки. Часть 1.

Цель работы: практическое изучение процессов и потоков с помощью дискриптора процессов top в UNIX-подобной ОС.

  1. Загрузить ОС UBUNTU, выбрав соответствующий вариант загрузки в меню загрузчика.

  2. Ввести имя пользователя studentN, где N – номер рабочего места в лаборатории, если считать по часовой стрелке.

  3. На приглашение ввести пароль, набрать 12345678.

После загрузки ОС в графическом режиме, выбрать в меню Applications Accessoires, а затем, Terminal.

  1. Ввести команду вызова справочной системы ОС man с указанием объекта справки,

т.е, man top.

5. Ознакомиться с описанием дискриптора top.

  1. Ввести команду top для ее запуска в режиме отображения основной панели.

  1. Используя top, определить:

  • общее количество процессов;

  • активных;

  • в состоянии ожидания;

  • остановленных;

  • zombie.

  1. С помощью субкоманды А включить режим отображения альтернативной панели top.

  2. Ввести субкоманду u и имя пользователя процессы которого следует отображать:

u studentN.

9. Используя данные, отображаемые дискриптором, определить для процессов

пользователя top, bash и gnome-terminal их идентификаторы (PID) и

идентификаторы процессов родителей (PPID).

  1. Используя эти данные, определить:

- какие из этих процессов были созданы ОС, а какие – пользователем;

- какие из этих трех процессов являются родительскими, а какие – дочерними по отношению к друг к другу;

- cобытия (действия) которые приводили к созданию каждого из этих процессов.

  1. Включить полученные выводы в отчет.

  1. В письменном виде ответить на следующие вопросы:

  • Может ли выполняться программа на компъютере без операционной системы?

Может ли в мультипрограммной среде в каждый данный момент времени выполняться более одного процесса? Описание некоторых команд и системных вызовов linux

Лабораторная работа 2.

Процессы и потоки. Часть 2

  1. Для прцессов gnom-terminal, bash и top определить следующие параметры:

  • приоритет;

  • статус;

  • размер резидентной памяти;

  • процент использования процессора;

  • размер разделяемой памяти процесса;

  • размер свопируемой памями;

  • размер физической памяти используемый исполняемым кодом;

  • размер памяти выделенной для данных и стека;

  • количество неудачных обращений процесса к страницам вне его адресного пространства;

  • количество страниц, которые были модефицированы с тех пор, когда они были последний раз записаны на диск.

  1. Используя субкоманду, H – переключение отображения потоков, определить потоки, их PID, PPID, и название, а также, родственные связи и их возможную принадлежность к процессам пользователя.

  1. Для выявленных потоков определить значения параметров, приведенных в пункте 1.

  1. С помощью top определить процесс с PID равным 1, и его свойства.

  1. Включить в отчет ответы на следующие вопросы:

  • что такое образ процесса;

  • название, назначение и свойства процесса с идентификатором 1.

Лабораторная работа 3.

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

  1. Используя субкоманду Renice ( R ), изменить статус ( NI ) прцесса init со значения 0 на значение -5.

  2. Используя субкоманду Renice ( R ), изменить статус ( NI ) процесса khelper со значения -5 на значение -1.

  3. Убедиться что статус процессов init и gnom-terminal преобрели необходимые значения.

2. Уничтожение процессов.

  1. С помощью субкоманды k уничтожить процессы созданные ОС:

  • dbus-launch;

  • mapping-daemon;

  • ssh-agent.

  1. Зделаль выводы по результатам выполнения пункта 3 работы в письменном виде. В частности, определить, возможен ли случай, когда при уничтожении процесса уничтожаются и другие процессы. Объяснить это явление.

  2. Определить в каких случаях уничтожение процесса может приводить к зависанию ОС.

  3. В письменном виде ответить на вопрос в чем главное отличие между процессами x-session-manage и gnome-screensav?