Главная Другое
Экономика Финансы Маркетинг Астрономия География Туризм Биология История Информатика Культура Математика Физика Философия Химия Банк Право Военное дело Бухгалтерия Журналистика Спорт Психология Литература Музыка Медицина |
страница 1страница 2 ... страница 4страница 5 ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Государственное образовательное учреждение высшего профессионального образования Московский государственный институт электроники и математики (Технический университет) Кафедра математического обеспечения систем обработки информации и управления Межпроцессное взаимодействие на уровне «клиент-сервер» Методические указания к лабораторным и домашним работам по дисциплине «Операционные системы» Специальности: 230401 – Прикладная математика 220101 – Вычислительные машины, комплексы, системы и сети 071900 – Информационные системы и технологии 090102 – Компьютерная безопасность
Москва 2009Составитель канд. техн. наук, проф. А.Ю. Истратов УДК 681.1.06 Межпроцессное взаимодействие на уровне «клиент-сервер»/ Моск. гос. ин-т электроники и математики; Сост. –А.Ю. Истратов, 2005г. – с. 36Библиогр.: 3 назв. Рассматриваются вопросы программирования коммуникаций между асинхронными процессами операционной системы UNIX и процессами разных операционных систем. Излагаемый материал является общим для всех разновидностей UNIX – систем. Представлена информация об очередях сообщений, разделяемой области памяти и семафорах, гнездах, соединениях и протоколах обмена. Приведены задания лабораторных работ и примеры выполнения. Для студентов специальностей «Прикладная математика», «Компьютерная безопасность», «Информационные системы и технологии», «Вычислительные машины, комплексы, системы и сети»
Большая часть клиент/серверных систем достаточно похожа. Электронная почта, файловый сервер, средство удаленного доступа, распределенные базы данных и многие другие межпроцессные сервисы выглядят по-разному при представлении на экране, но работают они одинаково. Межпроцессные взаимодействия по схеме клиент/сервер в рамках операционной системы UNIX осуществляются следующими способами:
1. Обмен сообщениямиРеализация очередей сообщений аналогична реализации UNIX-файлов. В адресном пространстве ядра имеется таблица очередей сообщений, в которой отслеживаются все очереди сообщений, создаваемые в системе. ![]() В каждой записи хранится одно сообщение и присвоенный ему тип. В каждой записи таблицы сообщений можно найти следующие данные, относящиеся к одной из очередей:
Когда процесс передает сообщение в очередь, ядро создает для него новую запись и помещает ее в конец списка записей. В каждой такой записи указывается тип сообщения, число байтов данных и указатель на другую область данных ядра, где фактически находятся данные сообщения. Ядро копирует данные, содержащиеся в сообщении, из адресного пространства процесса-отправителя в эту область данных ядра. Когда процесс выбирает сообщение из очереди, ядро копирует относящиеся к нему данные из записи сообщения в адресное пространство этого процесса, а затем удаляет запись. Процесс может выбрать сообщение из очереди следующими способами:
На процедуру манипулирования сообщениями система устанавливает ряд ограничений, которые определяются в В заголовке Запись таблицы сообщений имеет тип данных struct msqid_ds, определяемый в Структура struct msg, определенная в
Все эти структуры используются в таблице сообщений и записях сообщений следующим образом: ![]() Для манипулирования сообщениями используется 4 системных вызова:
Для этих системных вызовов необходимы следующие файлы заголовков: #include #include #include int msgget(key_t key, int flag); Этот системный вызов открывает очередь сообщений, идентификатор которой совпадает с key и возвращает положительный целочисленный дескриптор. Если key — положительное число, этот системный вызов требует открыть очередь сообщений, идентификатор который совпадает с данным значением. Если же значением key является IPC_PRIVATE, системный вызов создает новую очередь сообщений. Если flag имеет нулевое значение, и нет очереди сообщений с идентификатором, равным key, системный вызов прерывается, в противном случае возвращается дескриптор этой очереди. Если процессу необходимо создать новую очередь (когда нет ни одной очереди), то значение flag должно содержать макрос IPC_CREAT, а также права доступа к этой очереди.
obbuf — указатель на объект, который содержит реальный текст и тип сообщения, подлежащего передаче, например: struct msgbuf { long mtype; // тип сообщения сhar text[MSGMAX]; // буфер для текста сообщения };
В случае успешного выполнения msgsnd возвращает 0, в случае передачи -1.
Аргумент flag может иметь значение 0. Это означает, что процесс можно блокировать. Если в очереди есть сообщение, превышающее len, системный вызов возвращает -1. Если flag == IPC_NOWAIT, то вызов будет неблокирующим. Если к IPC_NOWAIT установлен и флаг MSG_NOERROR, то сообщение, находящееся в очереди, можно читать, даже если его размер превышает len байтов. Системный вызов возвращает вызывающему процессу первые len байтов текста сообщения, а остальные данные отбрасывает. Системный вызов msgrcv возвращает количество байтов, записанных в буфер text объекта, на который указывает аргумент obbuf или -1.
Значения аргумента cmd следующие:
Для последних двух надо иметь права либо привилегированного пользователя, либо создателя, либо назначенного владельца. Пример. # include # include # include void main() { struct msqid_ds buf; int fd; fd = msgget(15, 0); if (fd > 0 && msgctl(fd, IPC_STAT, &buf) == 0) { printf("Количество сообщений: %d\n", buf.msg_qnum); buf.msg_perm.uid = getuid(); // изменить UID владельца if (msgctl(fd, IPC_SET, &buf) == -1) printf("Ошибка во 2-м msgctl\n"); } else printf("Ошибка в 1-м msgctl\n"); if (msgctl(fd, IPC_RMID, 0) == -1) perror("Ошибка в 3-м msgctl"); } Здесь процесс открывает очередь сообщений с ключевым идентификатором 15 и вызывает msgctl для считывания управляющих параметров очереди. Если msgget и msgctl выполняются успешно, процесс выводит на экран количество сообщений, находящихся в очереди, и устанавливает идентификатор владельца очереди равным своему идентификатору. Наконец, вызвав msgctl в 3-й раз, процесс удаляет очередь. Смотрите также: Методические указания к лабораторным и домашним работам по дисциплине «Операционные системы» Специальности: 230401 Прикладная математика
584.93kb.
5 стр.
Методические указания к лабораторным работам №1-5 для студентов специальности 210100
346.16kb.
1 стр.
Программа дисциплины математическое моделирование для специальности 230401. 65 «Прикладная математика»
153.49kb.
1 стр.
Методические указания к лабораторным работам по дисциплине «Дендрология» для студентов специальности 050807 «Лесохозяйственное дело»
81.03kb.
1 стр.
Прикладная математика и информатика
283.44kb.
1 стр.
Учебно-методический комплекс по дисциплине «Операционные системы, среды и оболочки» для студентов специальности 080801 «Прикладная информатика в экономике»
565.65kb.
3 стр.
Программа дисциплины «Квантовые вычисления»
112.23kb.
1 стр.
Вопросы к экзамену: Зоопарк операционных систем
21.77kb.
1 стр.
Методические указания к лабораторной работе операционные усилители д исциплина "Физические основы электроники"
83.78kb.
1 стр.
Методические указания к лабораторным работам для студентов iy-y курсов фэн всех форм обучения Новосибирск 2003 (076. 5)
133.46kb.
1 стр.
Методические указания к лабораторным работам по биологической химии для студентов 2 курса медицинского факультета Петрозаводск 2002
878.9kb.
3 стр.
Исследование полупроводниковых диодов методические указания к лабораторным работам по курсу «Электроника» 370.01kb.
3 стр.
|