Материал: 6261

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

176

Рисунок 6.10 — Используемые ОС сегменты разделяемой памяти

6.12 Передача сообщений

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

Процессам, функционирующим в пользовательском режиме ОС, необходимы свои средства сигнализации, которые бы позволяли:

•увеличить информативность сигналов, наполнив их семантикой прикладного содержания;

•обеспечить асинхронное распространение сигналов, не требующее совмест-

ного существования взаимодействующих процессов.

Траким средством, входящим в System V IPC, являются очереди сообщений.

В стандарте POSIX-2001, очереди сообщений — набор типизированных объектов, которыми процессы могут асинхронно взаимодействовать между собой, не затрачивая свои прикладные ресурсы на организацию и сопровождение самих очередей. Очереди сообщений - это наиболее семантически нагруженный способ взаимодействия процессов через линии связи, в котором на передаваемую информацию накладывается определенная структура, так что процесс, принимающий данные, может четко определить, где заканчивается одна порция информации и начинается другая. Такая модель позволяет задействовать одну и ту же линию связи для передачи данных в двух направлениях между несколькими процессами.

177

Общая структура сообщения описана в файле <sys/msg.h> , как struct msgbuf:

struct msgbuf {

long mtype; # строго положительная величина, задающая тип сообщения char mtext[1]; # адрес начала самого сообщения

};

Следуя этому шаблону, разработчик приложений может формировать и использовать свою собственную семантику приложений, например:

struct mymsgbuf { long mtype;

char mtext[1024]; } mybuf;

или

struct mymsgbuf { long mtype; struct {

int iinfo; float finfo;

}info;

}mybuf;

Замечание

Максимальный размер сообщения ограничен по разному для разных ОС. Например, в ОС Linux, максимальный размер сообщения равен 4080 байт. Администратор ОС дополнительно может уменьшить это ограничение.

Следуя общим правилам System V IPC, создание и доступ к очередям сообщений осуществляется посредством ключа, который генерируется с использованием системного вызова ftok(...), рассмотренного в предыдущем подразделе.

Непосредственная работа с очередями сообщений обеспечивается с помощью четырех системных вызовов:

#include <types.h>

#include <ipc.h> #include <msg.h>

int msgget(key_t key,

int msgflg);

int msgsnd(int msqid,

struct msgbuf *ptr, int length, int flag);

int msgrcv(int

msqid,

struct msgbuf *ptr, int length, long type, int flag);

int msgctl(int

msqid,

int cmd,

struct msqid_ds *buf);

Не вдаваясь в детали практического использования этих системных вызовов, кратко опишем их основное семантическое назначение:

 

178

msgget

Создает очередь сообщений или подключается к уже созданной

 

очереди, используя сгенерированный функцией ftok(...) уникальный

 

ключ.

 

Возвращает целочисленный дескриптор очереди, который используется

 

остальными тремя системными вызовами.

msgsend

Помещает в очередь сообщение заданного типа.

msgrcv

Читает из очереди сообщение заданного типа.

msgctl

Управляет очередью с использованием специальной структуры типа

 

msgid_ds. В частности, удаляет очередь из системы.

Замечание

Механизм очередей сообщений имеет достаточно развитый инструментарий их использования, который поддерживается ядром ОС в соответствии с общими правилами использования разделяемых ресурсов:

•поддерживается контроль прав доступа;

•блокирование читающего процесса, если в очереди отсутсвует сообщение с заданным типом;

•имеются различные варианты порядка чтения сообщений из очереди;

•имеются развитые средства выявления и обработки ошибочных ситуаций.

Вцелом, механизм очередей сообщений и другие средства System V IPC являются достаточно низкоуровневыми средствами взамодействия с ОС. Это требует от разработчиков системных и прикладных программ хорошей профессиональной подготовки, поэтому для прикладных целей используются более высокоуровневые средства, например, шина D-Bus и другие.

Вчастности, для анализа и администрирования очередей сообщений могут использоваться, уже уромянутые в предыдущем подразделе, утилиты: ipcs и ipcrm.

179

6.13 Лабораторная работа по теме №6

Цель лабораторной работы №6 — практическое закрепление учебного материала по теме «Управление процессами ОС».

Метод достижения указанной цели — закрепление учебного материала, изложенного в первом разделе пособия посредством утилит ОС, а также выполнение заданий, приведенных в данном разделе.

Чтобы успешно выполнить данную работу, студенту следует:

•запустить с flashUSB ОС УПК АСУ, подключить личный архив и переключиться в сеанс пользователя upk;

•запустить на чтение данное пособие и на редактирование личный отчет;

•открыть одно или несколько окон терминалов, причем хотя бы в одном окне терминала открыть Midnight Commander, для удобства работы с файловой системой ОС;

•приступить к выполнению работы, последовательно пользуясь рекомендациями представленных ниже подразделов.

Замечание

Многие команды ОС студенту еще не известны, поэтому следует:

•для вывода на консоль руководства по интересуемой команде, использовать: man имя_команды;

•для выяснения сущесвования команды, ее доступности и местоположения, использовать: command -v имя_команды;

•для уточнения правил запуска конкретной команды, можно попробовать один из вариантов: команда --help или команда -h или команда -?.

Впроцессе выполнения лабораторной работы студент заполняет личный отчет по каждому изученному вопросу!

6.13.1 Сценарий загрузки ОС

Прочитайте и усвойте учебный материал подразделов 6.1 и 6.2.

Запустите Midnight Commander и бедитесь в наличии файлов: /bin/sh и /sbin/init. Запустите файловый менеджер thunar, перейдите в директорию /etc/upkasu и запустите на просмотр с помощью mousepad сценарий init, который по содержанию соответствует файлу init, размещенному в корне временной файловой системы ОС. Изучите и опишите содержимое этого файла.

Особое внимание обратите на:

•певоначальное создание устройств;

•чтение параметров, передаваемых ядру ОС с помощью ПО GRUB;

•монтирование и перенос файловых систем;

•запуск основного процесса init.

Вслучае затруднений, обращайтесь к преподавателю за консультацией!

180

6.13.2 Разные подходы к управлению процессами

Прочитайте и усвойте учебный материал подразделов 6.3 - 6.6.

Изучите назначение и работу утилит runlevel, telinit и initctl, а также содержимое директорий /etc/init и /etc/init.d.

Опишите основные отличия подходов SysVinit и upstart.

С помощью руководства man, изучите systemd и systemctl, а также изучите и опишите содержимое директорий /lib/systemd и /etc/systemd.

6.13.3 Сигналы и средства IPC

Прочитайте и усвойте учебный материал подразделов 6.7 - 6.12. Изучите и освойте работу с утилитами kill, ipcs и ipcrm.

Сделайте краткое заключение по всем лабораторным работам: отметьте какие вопросы изложены недостаточно полно и требуют более глубокого изучения.

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