Laboratornaya_Rabota_4
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РФ Федеральное учреждение высшего профессионального образования Московский технический университет связи и информатики
Кафедра системного программирования
Лабораторная работа 4
«Работа с командной̆ строкой Linux»
по дисциплине:
Операционные системы
Выполнил студент
группы БФИ 1901
Рахимов Е.К.
Проверила:
Королькова Татьяна Валерьевна
Москва 2021
Цель работы:
Изучение набора средств коммуникации процессов в ОС GNU/LINUX.
Получение практических навыков по использованию механизмов межпроцессного взамиодействия
Задание:
Написать программу, выполняющую с помощью ВСЕХ перечисленных механизмов межпроцессного взаимодействия (разделяемая память, сокеты, каналы) одну из задач (в соответствии с № по журналу), приведенных в Таблице.
Реализовать обмен текстовыми сообщениями между несколькими процессами. Обеспечить возможность отправки сообщения сразу нескольким адресатам. Реализовать подтверждение приема сообщения адресатом или, в случае потери сообщения, повторную его передачу.
Ход работы
Разделяемая память: В этой программе процесс a записывает случайное число в общую память каждую секунду, а процесс b читает число из общей памяти каждую секунду.(Рисунок 1-2)
Рисунок 1- Код файла «b.c»
Рисунок 2- Код файла «a.c»
Рисунок 3- Результат работы программы разделяемой памяти
Каналы:
«server.c» -Сервер создает именованный канал и считывает сообщение, отправленное клиентом в канал.
«client.c» - Клиент записывает данные в конвейер через стандартный ввод.(Рисунок 4-6)
Рисунок 4- Код файла «server.c»
Рисунок 5- Код файла «client.c»
Рисунок 6- Результат работы программы каналов
Сокеты:
sockserver.c - это серверная программа, которая сначала создает сокет, затем связывает порт, а затем прослушивает сокет, игнорирует сообщение остановки дочернего процесса и т. д., затем входит в цикл и продолжает проверять, подключен ли клиент к серверу. Если да, вызовите fork, чтобы создать дочерний процесс для обработки запроса. Для того, чтобы прочитать информацию, отправленную клиентом я использую read, а для отправления клиенту использую write.(Рисунок 7)
sockclient.c - это клиентская программа. Для начала я создал сокет, а затем подключился к указанному серверу IP-портов. Если соединение установлено успешно, использую write для отправки информации на сервер, а затем read для получения обработанной информации с сервера и вывода ее.(Рисунок 7)
Рисунок 7- Код файла «socksserver.c»
Рисунок 8- Код файла «sockclient.c»
Рисунок 9- Результат работы программы на сокетах
В этом примере мы запустили серверную программу и три клиентские программы. По результатам выполнения все запросы, отправленные клиентом серверной программе, были обработаны, то есть A было изменено на B. Системные вызовы чтения и записи, используемые между программами сервера и клиента, аналогичны системным вызовам чтения и записи, которые блокируются при использовании именованных каналов.
Вывод: Я изучил набора средств коммуникации процессов в ОС GNU/LINUX, а также получил практические навыки по использованию механизмов межпроцессорного взаимодействия