- •20 Билет
- •1)Установление связи
- •2) Передача данных
- •2.Системные вызовы
- •3.Примеры
- •2 Билет.
- •1.Управление процессами
- •2. Сигналы.
- •3 Билет
- •1.Обработка Сигнала
- •2) Группы процессов
- •3)Примеры
- •4 Билет
- •1)Посылка сигналов процессами
- •2)Межпроцессные комуникации
- •3)Примеры в качестве примера можно привести программу ,которая принимает сигналы о прерывании (sigint) и сама посылает их (в результате выполнения функции kill
- •5 Билет.
- •6 Билет.
- •7 Билет
- •1)Атомарные (неделимые) операции с каналами
- •2)Примечания к полудуплексным каналам
- •8 Билет
- •1)Именованные каналы (fifo: First In First Out): основные понятия
- •2)Операции с fifo
- •3) Примеры
- •9 Билет
- •1) Базовые понятия System V ipc
- •2) Идентификаторы ipc
- •10 Билет
- •11 Билет
- •1)Буфер сообщения
- •13 Билет
- •1)Системный вызов msgctl
- •2)Семафоры. Основные понятия
- •1)Системный вызов semget.
- •2) Системный вызов semop.
- •15 Билет
- •1) Системный вызов semctl
- •2) Разделяемая память. Основные понятия.
- •3) Примеры
- •16 Билет
- •1) Системный вызов shmget
- •2) Системный вызов shmctl
- •3) Примеры
- •17 Билет
- •Системный вызов shmat
- •Системный вызов shmdt
- •18 Билет
- •Системный вызов mmap
- •19 Билет
- •1) Создание сокета
- •2) Привязка к локальным именам
- •3) Примеры:
- •20 Билет
- •1)Установление связи
- •2) Передача данных
- •3) Примеры Установление связи
- •Передача данных
- •21 Билет
- •1. Закрытие сокетов.
- •22 Билет.
- •1) Алгоритмы
- •2) Оценки эффективности алгоритмов.
- •3) Примеры
- •23 Билет
- •1.Ядро операционной системы
- •2.Системные вызовы
- •3.Примеры
- •24 Билет.
- •25 Билет
- •1) Системный вызов semctl
- •2) Разделяемая память. Основные понятия.
- •3) Примеры
- •26 Билет
- •1) Группы процессов
- •2)Обработка Сигнала
- •3)Примеры
- •27 Билет
- •1) Создание сокета
- •2) Привязка к локальным именам
- •3) Примеры:
- •28 Билет.
- •29 Билет
- •1. Закрытие сокетов.
- •30 Билет
- •1)Установление связи
- •2) Передача данных
- •3) Примеры Установление связи
- •Передача данных
11 Билет
1)Буфер сообщения
Структурой, которую мы рассмотрим, будет
msgbuf. Ее можно понимать как шаблон для данных сообщения. Посколь
ку данные в сообщении программист определяет сам, он обязан понимать,
что на самом деле они являются структурой msgbuf. Ее описание находит
ся в linux/msg.h:
/* буфер сообщения для вызовов msgsnd и msgrcv*/
struct msgbuf {
long mtype; /* тип сообщения */
char mtext[1]; /* текст сообщения */
};
2) Системный вызов msgget
Вызов нужен для того, чтобы создать
очередь сообщений или подключиться к существующей очереди.
int msgget( key_t key, int msgflg );
3) Пример
struct my_msgbuf { long mtype; /* тип сообщения */ long request_id; /* идентификатор запроса */ struct client info; /* информация о клиенте */ }
12 Билет
1)Системный вызов msgsnd
Получив идентификатор очереди, мы
можем выполнять над ней различные действия. Чтобы поставить сообще
ние в очередь, используйте системный вызов msgsnd:
int msgsnd( int msqid, struct msgbuf *msgp, int msgsz, int msgflg );
2)Системный вызов msgrcv
Теперь, когда мы имеем сообщение в оче
реди, попытайтесь при помощи ipcs посмотреть на ее статус. Обсудим, как
забрать из очереди сообщение. Для этого используется системный вызов
msgrcv:
int msgrcv(int msqid, struct msgbuf *msgp, int msgsz, long msgtype,
int msgflg);
3)Пример
#include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> int msgsnd(int msqid, struct msgbuf *ptr, int length, int flag);
13 Билет
1)Системный вызов msgctl
Благодаря использованию функций переходников, вы имеете элегантный подход к созданию и использованию очередей сообщений в ваших приложениях. Теперь коснемся непосредственно манипулирования внутренними структурами, связанными сданной очередью сообщений.
Для осуществления контроля над очередью предназначен системный
вызов msgctl.
int msgctl(int msgqid, int cmd, struct msqid_ds *buf);
2)Семафоры. Основные понятия
Основные понятия. Семафоры лучше всего представлять себе как
счетчики, управляющие доступом к общим ресурсам. Чаще всего они используются как блокирующий механизм, не позволяющий одному процессу захватить ресурс, пока этим ресурсом пользуется другой. Семафоры часто подаются как наиболее трудные для восприятия из всех трех видов IPC-объектов. Для полного понимания, что же такое семафор, немного 21 поясним это понятие прежде, чем переходить к системным вызовам и операционной теории.
Слово ¾семафоры в действительности является старым железнодорожным термином, соответствующим человеческим рукам, не дающим траекториям движущихся составов пересекаться на перекрестках. То же самое можно сказать и про семафоры. Семафор в положении ON (руки подняты вверх), если ресурс свободен, и в положении OFF (руки опущены), если ресурс недоступен (нужно ждать). Важно знать, что в IPC используются множества семафоров, а не отдельные экземпляры, которые, разумеется, могут содержать и один семафор, как в приведенном выше примере.
Возможен подход к семафорам как к счетчикам ресурсов. Приведем другой пример. Представьте компьютер, управляющий работой нескольких принтеров, каждый из которых обрабатывает по нескольку заданий.
Гипотетический менеджер печати будет использовать множество семафоров для установления доступа к каждому из принтеров. Предположим, что в комнате имеются пять работающих принтеров. Наш менеджер конструирует пять семафоров по одному на каждый принтер. Поскольку каждый принтер может обрабатывать за один раз только по одному запросу, все семафоры устанавливаются в 1, что означает готовность всех принтеров печатать.
Пользователь послал запрос на печать. Менеджер смотрит на семафоры и находит первый из них со значением 1. Перед тем, как запрос попадет
на физическое устройство, менеджер печати уменьшит соответствующий
семафор на 1. Теперь значение семафора есть 0. В мире семафоров System
V нуль означает стопроцентную занятость ресурса на семафоре. В нашем
примере принтер не будет ничего печатать пока значение семафора не
изменится.
Когда пользователь напечатал все свои документы, менеджер печати
увеличивает семафор на 1. Теперь его значение вновь равно 1 и принтер
может принимать задания снова.
Семафоры, трактуемые как счетчики ресурсов, могут изначально устанавливаться в любое натуральное число, не только в 0 или 1. Если бы
наши принтеры умели печатать по 500 документов за один раз, мы могли
бы проинициализировать семафоры значением 500, уменьшая семафор на
1 при каждом поступающем задании и увеличивая после его завершения.
Как вы узнаете из следующей главы, семафоры имеют очень близкое отношение к разделяемым участкам памяти, блокируя попытки записи в
один и тот же сегмент памяти.
билет
