- •«Московский технический университет связи и информатики» (мтуси)
- •Цель работы
- •Задания на лабораторную работу Задание 1. Анализ системных вызовов при выполнении команд с помощью утилиты strace
- •Задание 2. Системные вызовы вашей̆ программы
- •Задание 3. Сборка и загрузка модуля в ядро Linux
- •Выполнение работы Задание 1.
- •Задание 2.
- •Задание 3.
- •Приложение 1: «Список группы бст2154».
Задание 2.
Было написано две программы:
start.sh – ведущая запись мониторинга вызовов целевой программы;
typer.sh – простая программа (typer.sh), которая делает суммарно пять записей в текстовом файле с интервалом в 1 секунду.
К сожалению, получить PID другого bash скрипта только по имени файла, из которого он был запущен, напрямую в bash невозможно. Вот почему: Bash не хранит эту информацию – Bash не отслеживает, из какого файла был запущен скрипт, кроме того, он может быть запущен просто как команда в командной строке, без запуска из файла.
Примененное решение: использован механизм именных каналов (named pipes) для передачи данных между скриптами. В первом скрипте мосоздан именованный канал, в другом - записан в него PID, а в первом чтение его.
Программа start.sh запускается с правами суперпользователя для доступа к вызовам запроса strace -p $typerpid -s 1024 -T -o exfile 2>&1. Из этой программы запускается typer.sh, в результате работы обеих программ остаются два новых текстовых файла:
exfile – в нем сохранен вывод команды strace;
lines – в нем можно посмотреть на записанные программой typer.sh строки.
Для Контроля работы программ, в терминал выводятся их PID для ручного завершения процесса в случае ошибок, также в текстовые файлы пишется вывод команды date для проверки.
Рисунок 9. Исходные коды написанных скриптов start.sh и typer.sh.
Рисунок 10. Результаты работы написанных скриптов start.sh и typer.sh: два новых текстовых файла: exfile и lines.
Рисунок 11. Содержимое файла lines.
Рисунок 12. Фрагмент содержимого файла exfile.
Выполнен разбор системных вызовов для программы typer.sh.
Таблица 4. Результаты анализа
№ |
Системный вызов |
Описание вызова |
Входные параметры |
Время выполнения, мкс |
Возвращаемое значение |
1. |
rt_sigprocmask |
Устанавливает или получает маску сигналов |
SIG_BLOCK, [CHLD], [], 8 |
0.000007 |
0 |
2. |
clone |
Создает новый процесс (клонирует текущий) |
hild_stack=NULL, flags=CLONE_CHILD_CLEARTID| CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x741dde75ba10 |
0.001052 |
3086 |
3. |
wait4 |
Ожидание завершения процесса |
1, {WIFEXITED(s) && WEXITSTATUS(s) == 0}, 0, NULL |
1.000251 |
3089 |
4. |
ioctl |
Управление устройством |
2, TIOCGWINSZ, {wsrow=55, wscol=137, wsxpixel=640, wsypixel=480} |
0.000008 |
0 |
5. |
rt_sigr-eturn |
Возврат из обработчика сигнала |
{mask=}
|
0.000008 |
0 |
6. |
rt_sigaction |
Установка обработчика сигнала |
SIGINT, {sahandler=0x5847f0913540, samask=, saflags=SARESTORER, sarestorer=0x741dde445320}, {sahandler=0x5847f08ed750, samask=[], saflags=SARESTORER, sarestorer=0x741dde445320}, 8 |
0.000008 |
0 |
wait4 - Этот системный вызов используется для ожидания завершения процесса. Он может использоваться для ожидания завершения конкретного процесса (с указанием PID) или для ожидания завершения любого дочернего процесса.
ioctl - Системный вызов для взаимодействия с устройствами. В этом случае он используется для получения информации о размере окна терминала.
clone - Системный вызов для создания нового процесса.
rt_sigaction - Системный вызов используется для установки обработчиков сигналов.
rt_sigprocmask - Системный вызов для управления маской сигналов.
rt_sigreturn - Системный вызов для возврата из обработчика сигнала.
Некоторые системные вызовы, такие как rt_sigaction и rt_sigprocmask, могут вызываться несколько раз в течение короткого периода времени. Время выполнения каждого вызова может отличаться в зависимости от используемого оборудования и нагрузки на систему.
