Отчёт по лабораторной работе №3
.docxМинистерство цифрового развития связи и массовых коммуникаций
Ордена Трудового Красного Знамени
Федеральное государственное бюджетное образовательное учреждение
высшего образования
«МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
СВЯЗИ И ИНФОРМАТИКИ»
Кафедра «Системное программирование»
Отчёт по лабораторной работе №3
по дисциплине «Операционные системы»
Выполнил: студент группы БСТ2104
Ягудин Р.Р.
Проверил: ст. преп. Алексанян Д.А.
Москва, 2023 г.
Цель лабораторной работы:
Получить практические навыки при исследовании методов синхронизаций потоков
Задание на лабораторную работу
Исследовать на конкретных примерах следующие методы синхронизации потоков:
1) критические секции
2) мьютексы
3) события
4) семафоры
Задание 1. Исследование критической секции
Описание задачи:
Разработка программы для учёта баланса банковского счёта. У нас есть два потока, каждый из которых может обращаться к балансу счёта и изменять его. Первый поток связан с внесением суммы, второй поток связан со снятием суммы. Чтобы избежать «гонки данных», используется критическая секция для блокировки доступа к счёту во время изменения баланса.
На рисунке 1 представлен код реализации критической секции
Рисунок 1 – Код реализации критической секции
На рисунке 2 представлен результат реализации критической секции
Рисунок 2 – Результат реализации критической секции
Задание 2. Исследование мьютекса
Описание задачи:
Разработка программы для взаимодействия с текстовым файлом. У нас имеются два процесса. Оба процесса используют два одинаковых потока. Первый поток связан с вводом данных в файл, второй поток связан с выводом данных из файла. При запуске программы выводятся два диалоговых окна (два процесса), при этом между ихними потоками реализована синхронизация. Мьютекс в данном примере нужен для синхронизации доступа к файлу при наличии нескольких процессов.
На рисунке 3 представлен код реализации мьютекса
Рисунок 3 – Код реализации мьютекса
На рисунках 4 и 5 представлены результаты реализации мьютекса
Рисунок 4 – Результат реализации мьютекса при вводе данных (первый процесс)
Рисунок 5 – Результат реализации мьютекса при выводе данных (второй процесс)
Задание 3. Исследование события
Описание задачи:
Разработка программы, связанной со скачиванием определённого количества файлов и с оповещением о завершении скачивания. У нас есть два потока. Первый поток начинает скачивание с первого файла, второй поток – со второго файла. Между ними реализована «конкуренция» за скачивание файлов. Когда один поток заканчивает скачивание файла, он переходит к скачиванию следующего свободного файла. Событие в данном примере используется в качестве сигнала о завершении скачивания всех файлов.
На рисунке 6 представлен код реализации события
Рисунок 6 – Код реализации события
На рисунке 7 представлен результат реализации события
Рисунок 7 – Результат реализации события
Задание 4. Исследование семафора
Описание задачи:
Разработка программы, связанной с совместным использованием ограниченных ресурсов. Предположим, имеются три приложения, каждое из которых должно выполнить вывод на печать, а у компьютера только два параллельных порта. Установив семафор с начальным значением счетчика ресурсов, равным двум, можно заставить приложения запрашивать сервис печати только тогда, когда есть свободный параллельный порт.
На рисунке 8 представлен код реализации семафора
Рисунок 8 – Код реализации семафора
На рисунках 9 и 10 представлены результаты реализации семафора
Рисунок 9 – Результат реализации семафора при освобождении 1 порта
Рисунок 10 – Результат реализации семафора при освобождении 2 порта
