сообщения (ожидание появления сообщения и обнуление семафора); 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