Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные / ОС_лабораторная 2.docx
Скачиваний:
7
Добавлен:
12.02.2024
Размер:
3.33 Mб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования

«Московский технический университет связи и информатики»

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

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

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

«Ядро Linux. Процессы и потоки в ОС GNU/LINUX»

Выполнил:

студент группы БСТ2104

Станишевский И.А.

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

Москва, 2023 г.

Содержание

1. Задание 1. Ядро Linux 3

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

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

5. Задание 2.1. Получение системной информации. 13

Вывод 16

1. Задание 1. Ядро Linux 3

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

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

4. Задание 2. Функции получения системной информации 13

5. Задание 2.1. Получение системной информации. 13

Вывод 16

  1. Задание 1. Ядро Linux

Цели работы:

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

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

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

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

На рисунке 1 представлено установка утилиты strace. Команда «sudo pacman -S strace» устанавливает пакет strace с использованием менеджера пакетов pacman под учетной записью с привилегиями суперпользователя.

Рисунок 1 – Установка пакета strace

На рисунке 2 представлено проверка установки утилиты и вывод характеристик о ней. Команда «pacman -Qi strace», выводит информацию о пакете strace, включая его имя, версию, описание и другую полезную информацию.

Рисунок 2 – Вывод информации о пакете strace

Запускаю strace для команды необходимого варианта. На основании полученных результатов заполняю таблицу 1 для 5-7 различных системных вызовов.

Вариант №19 Команда: head

Команда head выводит начальные строки (по умолчанию — 10) из одного или нескольких документов. Для реализации команды head нужно создать текстовый файл. На рисунке 3 представлен текст для работы команды head.

Рисунок 3 – Текстовый файл для работы с head

Выполним команду «strace -c head -n 'filename.txt'», где:

  • -c -- флаг указывает strace выводить итоговую статистику системных вызовов, подсчитывая количество вызовов каждого типа.

  • head -- это утилита командной строки, которая используется для вывода начальных строк из файла или стандартного ввода, где n означает вывод первых строк из файла.

  • 'filename.txt' -- это аргумент команды, который указывает на файл, из которого будут выводиться строки с помощью команды head.

На рисунке 4 представлен вывод команды head.

Рисунок 4 – вывод команды head

Заполним таблицу 1, в которой опишем информацию о нескольких системных вызовах на основании полученных результатов.

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

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

Входные параметры

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

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

1

read

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

(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220~\2\0\0\0\0\0"..., 832)

349

832 (количество успешных прочитанных байтов)

2

arch_prctl

устанавливает специфичное для данной архитектуры состояние процесса или треда.

(0x3001 /* ARCH_??? */, 0x7fff8609fe30)

5

-1

3

getdents64

читает несколько структур из каталога, на который указывает открытый файловый дескриптор fd, в буфер, указанный в dirp.

(3, 0x56448e9ee110 /* 3 entries */, 32768)

33

96

4

access

проверяет, имеет ли вызвавший процесс права доступа к файлу pathname.

("/etc/ld.so.preload", R_OK)

0

-1 ENOENT (Нет такого файла или каталога)

5

futex

предоставляет программам метод для ожидания пока определённое условие не станет истинным. Также futex() можно использовать для пробуждения процессов или нитей, ожидающих определённого условия.

(0x7febe2a3f72c, FUTEX_WAKE_PRIVATE, 214748364)

4

FUTEX_WAKE_PRIVATE: 0

6

brk

Вызов brk() изменяет расположение маркера окончания программы (program break), который определяет конец сегмента данных процесса. устанавливает конец сегмента данных в значение, указанное в аргументе addr, если это значение является приемлемым, система имеет достаточно памяти и процесс не достиг максимально возможного размера своего сегмента данных.

NULL

21

0x559a143d0000

Таблица 1 – Информация о системных вызовах команды head

На рисунке 5 показана перенаправление вывода strace в файл log в домашнюю директорию. Для этого нужно использовать команду strace -c head –n 3 'filename.txt’> ~/log, где оператор> перенаправляет стандартный вывод команды strace в файл log в вашей домашней директории (~/log).

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

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

Рисунок 6 – Перенаправление вывода strace в файл log в вашей домашней директории и вывод статистики

С помощью команды sudo stracep 641.Флаг –p указывается для идентификатора процесса, который нужно прослушать.

Рисунок 7 – Перенаправление вывода strace в файл log в вашей домашней директории и вывод статистики