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

Laboratornaya_Rabota_4

.docx
Скачиваний:
38
Добавлен:
01.04.2022
Размер:
1.33 Mб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РФ Федеральное учреждение высшего профессионального образования Московский технический университет связи и информатики

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

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

«Работа с командной̆ строкой Linux»

по дисциплине:

Операционные системы

Выполнил студент

группы БФИ 1901

Рахимов Е.К.

Проверила:

Королькова Татьяна Валерьевна

Москва 2021

Цель работы:

  • Изучение набора средств коммуникации процессов в ОС GNU/LINUX.

  • Получение практических навыков по использованию механизмов межпроцессного взамиодействия

Задание:

  1. Написать программу, выполняющую с помощью ВСЕХ перечисленных механизмов межпроцессного взаимодействия (разделяемая память, сокеты, каналы) одну из задач (в соответствии с № по журналу), приведенных в Таблице.

  2. Реализовать обмен текстовыми сообщениями между несколькими процессами. Обеспечить возможность отправки сообщения сразу нескольким адресатам. Реализовать подтверждение приема сообщения адресатом или, в случае потери сообщения, повторную его передачу.

Ход работы

Разделяемая память: В этой программе процесс 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, а также получил практические навыки по использованию механизмов межпроцессорного взаимодействия