Материал: 396_OS_uchebnoe_posobie_part1_2012

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

сообщения (ожидание появления сообщения и обнуление семафора); 3) ожидание освобождения сообщения (ожидание обнуления семафора).

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

Действия сервера:

1)создаёт область разделяемой памяти с размером, достаточным для передачи одного сообщения, создаёт три семафора;

2)подключается к разделяемой памяти и ожидает прихода сообщения;

3)при появлении сообщения блокирует память и обрабатывает его следующим образом: если от клиента пришло «hi», сервер отвечает

«hello»; если от клиента пришло «how_are_you?» – «fine»; если от клиента пришло «bye» – «bye». Если строка от клиента не совпадает ни с одним из перечисленных вариантов, то клиенту передаётся фраза «i_don't_understand_you». После передачи сообщения память разблокирывается. Далее опять ожидает появления сообщения. Цикл прекращается после появления строки «bye», после чего сервер ждёт

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

Действия клиента:

1)Подключается к разделяемой памяти и области семафоров. Устанавливает значение семафора, сигнализирующего о запуске клиентов. Ожидает освобождения очереди сообщений, после чего блокирует память и предлагает пользователю ввести строку, из которой формируется сообщение и через разделяемую память передаётся серверу.

2)После ввода устанавливает семафор появления сообщения, и освобождает память. Ожидает появления сообщения от сервера. После чего блокирует память, считывает сообщение и выводит на экран, освобождает память.

3)Если от сервера пришла строка «bye», цикл передачи сообщений заканчивается. Перед завершением освобождается память, и уменьшается значение семафора, регулирующего запуск клиентов.

126

Контрольные вопросы

1.Что такое семафор и зачем он используются?

2.Можно ли передавать больший объём информации, используя семафоры?

3.Предусмотрены ли ограничения на использования счётчиков?

4.Где хранятся семафоры?

5.Что такое критическая секция?

6.Функция semget.

7.Типы операций над семафорами. Функция semop.

8.Разделяемая память. Принцип работы приложения, использующего разделяемую память.

9.Функции shmget, shmdt.

127

Сергей Николаевич Мамойленко Ольга Владимировна Молдованова

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

Учебное пособие

Часть 1. Операционная система Linux

Редактор: А.Ю.Поляков Корректор: В.В.Сиделина

-------------------------------------------------------------------------------------------------------

Подписано в печать 23.03.2012г.

Формат бумаги 60 х 84/16, отпечатано на ризографе, шрифт № 10, изд. л. 8,0 заказ № 21, тираж – 100 экз., СибГУТИ.

630102, г. Новосибирск, ул. Кирова, д. 86 128

Источник: https://studfile.net/preview/16708918/