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

Отчёт по лабораторной работе №2

.docx
Скачиваний:
0
Добавлен:
30.09.2026
Размер:
1 Мб
Скачать
☆

Министерство цифрового развития связи и массовых коммуникаций

Ордена Трудового Красного Знамени

Федеральное государственное бюджетное образовательное учреждение

высшего образования

«МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

СВЯЗИ И ИНФОРМАТИКИ»

Кафедра «Системное программирование»

Отчёт по лабораторной работе №2

по дисциплине «Операционные системы»

Выполнил: студент группы БСТ2104

Ягудин Р.Р.

Проверил: ст. преп. Алексанян Д.А.

Москва, 2023 г.

Цели лабораторной работы:

  • Изучить архитектуру и основные компоненты ядра Linux, включая механизм системных вызовов

  • Изучить возможности утилиты strace для отладки и анализа работы программ на уровне системных вызовов

  • Приобрести практический навык создания и загрузки модуля в ядро Linux

  • Получение практических навыков использования Win32 API для исследования процессов

Задание на лабораторную работу

  1. Проанализировать системные вызовы при выполнении команд с помощью утилиты strace

  2. Собрать и загрузить модуль в ядро Linux

  3. Написать программу, которая выполняет следующие действия в интерактивном режиме:

 Принимая дескриптор, имя или полное имя модуля, возвращает другие два элемента в своих выходных параметрах

 Будет выполнять последовательно по шагам следующие задачи:

  • Используя функцию GetCurrentProcessId определит идентификатор текущего процесса.

  • Используя функцию GetCurrentProcess определит псевдодескриптор текущего процесса.

  • Используя функцию DuplicateHandl и значение псевдодескриптора определит дескриптора текущего процесса.

  • Используя функцию OpenProcess определит копию дескриптора текущего процесса.

  • Закроет дескриптор, полученный функцией DuplicateHandl.

  • Закроет дескриптор, полученный функцией OpenProcess.

 Выдаст список перечисления всех процессов, потоков, модулей и их свойства в системе: для Windows NT (и список загруженных драйверов устройств).

Задание 1.1. Анализ системных вызовов при выполнении команд с помощью утилиты strace

На рисунке 1 представлена установка утилиты strace

Рисунок 1 – Установка утилиты strace

На рисунке 2 представлена команда, предоставляющая ознакомление со справкой об использовании утилиты strace, на рисунке 3 представлен результат её выполнения.

Рисунок 2 – Команда, предоставляющая ознакомление со справкой об использовании утилиты strace

Рисунок 3 – Справка об использовании утилиты strace

На рисунке 4 представлен запуск strace для команды getconf

Рисунок 4 – Запуск strace для команды getconf

№

Системный вызов

Описание вызова

Входные

параметры

Время выполнения, мкс

Возвраща-емое значение

1

execve

используется для выполнения новой программы в текущем процессе

"/usr/bin/getconf"

["getconf"]

0x7fff6e2dab80

/* 27 vars */

0

0

(вызов выполнен успешно)

2

arch_prctl

используется для управления архитектурными параметрами процессора в пользовательском пространстве

0x3001

/* ARCH_??? */

0x7ffe2fc092c0

37

-1

(Недопустимый аргумент)

3

openat

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

AT_FD CWD

"/etc/ld.so.cache"

0_RDONLY|0_CLOEXEC

349

3

(вызов выполнен успешно)

4

openat

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

AT_FD CWD

"/usr/lib/libc.so.6"

0_RDONLY|0_CLOEXEC

349

3

(вызов выполнен успешно)

5

set_tid_address

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

0x7f7284f36950

38

1557

(вызов выполнен успешно)

Таблица 1 – Результаты системных вызовов

На рисунке 5 представлена команда для перенаправления вывода strace в файл log в вашей домашней директории

Рисунок 5 – Команда для перенаправления вывода strace в файл log

На рисунке 6 представлена команда для получения статистики выполненных системных вызовов, на рисунке 7 представлен результат её выполнения

Рисунок 6 – Команда для получения статистики выполненных системных вызовов

Рисунок 7 – Выполненные системные вызовы

На рисунке 8 представлена команда для вывода списка процессов со всей доступной информацией, включая PID

Рисунок 8 – Команда для вывода списка процессов

На рисунке 9 представлен один из работающих процессов, который будет использоваться для трассировки системных вызовов

Рисунок 9 – Процесс, использующийся для трассировки системных вызовов

На рисунке 10 представлена команда для трассировки системных вызовов, на рисунке 11 представлен результат её выполнения

Рисунок 10 – Команда для трассировки системных вызовов

Рисунок 11 – Результат выполнения трассировки системных вызовов

Задание 1.2. Сборка и загрузка модуля в ядро Linux

На рисунках 12 и 13 представлены команды для установки необходимых пакетов при сборке и загрузке модуля в ядро Linux

Рисунок 12 – Команда для установки утилиты make и компилятора gcc

Рисунок 13 – Команда для установки заголовочных файлов

На рисунке 14 представлены команды для создания и перехода в каталог модуля

Рисунок 14 – Команды для создания и перехода в каталог модуля

На рисунке 15 представлены команды для создания файла mhello.c и его открытия в текстовом редакторе

Рисунок 15 – Команды для создания файла mhello.c и его открытия

На рисунке 16 представлено содержимое файла mhello.c

Рисунок 16 – Содержимое файла mhello.c

На рисунке 17 представлены команды для создания файла Makefile и его открытия в текстовом редакторе

Рисунок 17 – Команды для создания файла Makefile и его открытия

На рисунке 18 представлено содержимое файла Makefile

Рисунок 18 - Содержимое файла Makefile

На рисунке 19 представлена сборка модуля ядра с помощью команды make

Рисунок 19 – Сборка модуля ядра

На рисунке 20 представлена команда для просмотра сборки модуля ядра, на рисунке 21 представлен результат её выполнения

Рисунок 20 – Команда для просмотра сборки модуля ядра

Рисунок 21 – Просмотр сборки модуля ядра

На рисунке 22 представлена команда для установки модуля ядра

Рисунок 22 – Команда для установки модуля ядра

На рисунке 23 представлена команда для просмотра установки модуля ядра, на рисунке 24 представлен результат её выполнения

Рисунок 23 – Команда для просмотра установки модуля ядра

Рисунок 24 – Просмотр установки модуля ядра

На рисунке 25 представлена команда для выгрузки модуля ядра

Рисунок 25 – Команда для выгрузки модуля ядра

На рисунке 26 представлена команда для просмотра выгрузки модуля ядра и результат её выполнения

Рисунок 26 – Команда для просмотра выгрузки модуля ядра и результат её выполнения

Задание 2. Процессы и потоки

На рисунке 27 представлен код приложения, обеспечивающий работу с процессами и потоками

Рисунок 27 – Код приложения

На рисунке 28 представлен результат работы программы

Рисунок 28 – Результат работы программы

10