![]() |
|
сделать стартовой | добавить в избранное |
![]() |
Компьютеры, Программирование
Программное обеспечение
Механизмы межпроцессных взаимодействий в операционной системе Unix |
Сергей Кузнецов Возникшие проблемы Избыточный набор системных средств, предназначенных для обеспечения возможности взаимодействия и синхронизации процессов, которые не обязательно связаны отношением родства IPC - I er-Process Commu ica io Facili ies с появлением U IX Sys em V Release 4.0 все эти средства были узаконены и вошли в фактический стандарт ОС U IX современного образца в разных вариантах системы средства IPC реализуются по-разному эффективность реализации различается усложняется разработка мобильных асинхронных программных комплексов Пакет средств IPC U IX Sys em V Release 3.0 средства, обеспечивающие возможность наличия общей памяти между процессами (сегменты разделяемой памяти - shared memory segme s) средства, обеспечивающие возможность синхронизации процессов при доступе с совместно используемым ресурсам, например, к разделяемой памяти (семафоры - semaphores) средства, обеспечивающие возможность посылки процессом сообщений другому произвольному процессу (очереди сообщений - message queues) Общие свойства всех трех механизмов: для каждого механизма поддерживается общесистемная таблица, элементы которой описывают всех существующих в данный момент представителей механизма (конкретные сегменты, семафоры или очереди сообщений) элемент таблицы содержит некоторый числовой ключ, который является выбранным пользователем именем представителя соответствующего механизма процесс, желающий начать пользоваться одним из механизмов, обращается к системе с системным вызовом из семейства "ge ", ответным параметром является числовой дескриптор ключ IPC PRIVA E ключ IPC CREA защита доступа основывается на тех же принципах, что и защита доступа к файлам Разделяемая память shmge создает новый сегмент разделяемой памяти или находит существующий сегмент с тем же ключом shma подключает сегмент с указанным дескриптором к виртуальной памяти обращающегося процесса shmd отключает от виртуальной памяти ранее подключенный к ней сегмент с указанным виртуальным адресом начала shmc l служит для управления параметрами, связанными с существующим сегментом После подключения сегмента разделяемой памяти к виртуальной памяти процесса, он может обращаться к соответствующим элементам памяти с использованием обычных машинных команд чтения и записи shmid = shmge (key, size, flag); size определяет желаемый размер сегмента в байтах если в таблице разделяемой памяти находится элемент, содержащий заданный ключ, и права доступа не противоречат текущим характеристикам процесса, то значением системного вызова является дескриптор существующего сегмента реальный размер сегмента можно узнать с помощью системного вызова shmc l иначе создается новый сегмент с размером не меньше установленного в системе минимального размера сегмента разделяемой памяти и не больше установленного максимального размера создание сегмента не означает немедленного выделения под него основной памяти откладывается до выполнения первого системного вызова подключения сегмента к виртуальной памяти некоторого процесса при выполнении последнего системного вызова отключения сегмента от виртуальной памяти соответствующая основная память освобождается vir addr = shma (id, addr, flags); id - это ранее полученный дескриптор сегмента addr - желаемый процессом виртуальный адрес, который должен соответствовать началу сегмента в виртуальной памяти vir addr - реальный виртуальный адрес начала сегмента не обязательно совпадает со значением прямого параметра addr если addr == 0, ядро выбирает наиболее удобный виртуальный адрес начала сегмента shmd (addr); addr - виртуальный адрес начала сегмента в виртуальной памяти, ранее полученный от системного вызова shma shmc l(id, cmd, shss a buf); cmd идентифицирует требуемое конкретное действие важна функция уничтожения сегмента разделяемой памяти Семафоры Обобщение классического механизма семафоров общего вида Диекстры Целесообразность обобщения сомнительна Обычно использовался облегченный вариант двоичных семафоров Известен алгоритм реализации семафоров общего вида на основе двоичных Семафор в ОС U IX: значение семафора идентификатор процесса, который хронологически последним работал с семафором число процессов, ожидающих увеличения значения семафора число процессов, ожидающих нулевого значения семафора Три системных вызова: semge для создания и получения доступа к набору семафоров semop для манипулирования значениями семафоров semc l для выполнения управляющих операций над набором семафоров id = semge (key, cou , flag); key, flag и id - обычный смысл cou - число семафоров в наборе семафоров, обладающих одним и тем же ключом индивидуальный семафор идентифицируется дескриптором набора семафоров и номером семафора в наборе если набор семафоров с указанным ключом уже существует, то число семафоров в группе можно узнать с помощью системного вызова semc l oldval = semop(id, oplis , cou ); id - дескриптор группы семафоров oplis - массив описателей операций над семафорами группы cou - размер этого массива возвращается значение последнего обработанного семафора Элемент массива oplis : номер семафора в указанном наборе семафоров операция флаги Если проверка прав доступа проходит нормально указанные в массиве oplis номера семафоров не выходят за пределы общего размера набора семафоров для каждого элемента массива oplis значение семафора изменяется в соответствии со значением поля "операция" Значение поля операции положительно значение семафора увеличивается на единицу все процессы, ожидающие увеличения значения семафора, активизируются (пробуждаются) Значение поля операции равно нулю если значение семафора равно нулю, выбирается следующий элемент массива oplis иначе число процессов, ожидающих нулевого значения семафора, увеличивается на единицу обратившийся процесс переводится в состояние ожидания (усыпляется) Значение поля операции отрицательно (1) его абсолютное значение меньше или равно значению семафора это отрицательное значение прибавляется к значению семафора если значение семафора стало нулевым, то ядро активизирует все процессы, ожидающие нулевого значения этого семафора (2) значение семафора меньше абсолютной величины поля операции число процессов, ожидающих увеличения значения семафора увеличивается на единицу текущий процесс откладывается Стремление добиться возможности избегать тупиковых ситуаций Системный вызов semop выполняется как атомарная операция Флаг IPC OWAI заставляет ядро ОС U IX не блокировать текущий процесс лишь сообщать в ответных параметрах о возникновении ситуации, приведшей бы к блокированию процесса semc l(id, umber, cmd, arg); id - это дескриптор группы семафоров umber - номер семафора в группе cmd - код операции arg - указатель на структуру, содержимое которой интерпретируется в зависимости от операции Можно уничтожить индивидуальный семафор в указанной группе Очереди сообщений Четыре системных вызова: msgge для образования новой очереди сообщений или получения дескриптора существующей очереди msgs d для посылки сообщения (его постановки в очередь сообщений) msgrcv для приема сообщения (выборки сообщения из очереди) msgc l для выполнения управляющих действий msgqid = msgge (key, flag); Сообщения хранятся в виде связного списка Декскриптор очереди сообщений - индекс в массиве заголовков очередей сообщений В заголовке очереди хранятся: указатели на первое и последнее сообщение в данной очереди число сообщений общий размер в байтах сообщений, находящихся в очереди идентификаторы процессов, которые последними послали или приняли сообщение через данную очередь временные метки последних выполненных операций msgs d, msgrsv и msgc l Структуры данных, используемые для организации очередей сообщений msgs d(msgqid, msg, cou , flag); msg - это указатель на структуру, содержащую целочисленный тип сообщения и символьный массив cou - задает размер сообщения в байтах flag определяет действия ядра при выходе за пределы допустимых размеров внутренней буферной памяти Условия успешной постановки сообщения в очередь: процесс должен иметь право на запись в очередь длина сообщения не должна превосходить верхний предел общая длина сообщений не должна превосходить установленного предела тип сообщения должен быть положительным целым числом Процесс продолжает свое выполнение Ядро активизирует (пробуждает) все процессы, ожидающие поступления сообщений из очереди Превышается верхний предел суммарной длины сообщений обратившийся процесс откладывается до разгрузки очереди но есть флаг IPC OWAI (как для семафоров) cou = msgrcv(id, msg, maxcou , ype, flag); msg - указатель на структуру данных в адресном пространстве пользователя для размещения принятого сообщения maxcou - размер области данных (массива байтов) в структуре msg ype специфицирует тип сообщения, которое желательно принять flag указывает ядру, что следует предпринять, если в указанной очереди сообщений отсутствует сообщение с указанным типом cou - реальное число байтов, переданных пользователю Значением параметра ype является нуль выбирается первое сообщение копируется в заданную пользовательскую структуру данных процессы, отложенные по причине переполнения очереди сообщений, активизируются если значение параметра maxcou оказывается меньше реального размера сообщения, ядро не удаляет сообщение из очереди и возвращает код ошибки если задан флаг MSG OERROR, то выборка сообщения производится, и в буфер пользователя переписываются первые maxcou байтов сообщения Значение ype есть положительное целое число выбирается первое сообщение с таким же типом Значение ype есть отрицательное целое число выбирается первое сообщение, значение типа которого меньше или равно абсолютному значению ype В очереди отсутствуют сообщения, соответствующие спецификации ype процесс откладывается до появления в очереди требуемого сообщения но есть флаг IPC OWAI msgc l(id, cmd, ms a buf); опрос состояния описателя очереди сообщений изменение его состояния уничтожение очереди сообщений Программные каналы Создание неименованного программного канала pipe(fdp r); fdp r - это указатель массива из двух целых чисел для размещения дескриптора для чтения из программного канала (с помощью read) и записи в программный канал (с помощью wri e) обычные дескрипторы файлов два элемента таблицы открытых файлов процесса Создание именованных программных каналов (или получение доступа к существующим) Обычный системный вызов ope если канал открывается на запись, и ни один процесс не открыл его для чтения, то процесс блокируется до тех пор, пока некоторый процесс не откроет этот канал для чтения аналогично обрабатывается открытие для чтения имеется флаг O DELAY Запись и чтение: read и wri e при записи данные помещаются в начало канала при чтении выбираются из конца канала возможны откладывания процессов Окончание работы процесса: close при выполнении последнего закрытия канала по записи все процессы, ожидающие чтения из программного канала, активизируются с возвратом кода ошибки из системного вызова Программные гнезда (socke s) Поддерживаемый ядром механизм, скрывающий особенности сетевой среды и позволяющий единообразно взаимодействовать процессам выполняющимся на одном компьютере в пределах одной локальной сети разнесенным на разные компьютеры территориально распределенной сети Первое решение: U IX BSD 4.1
ргей Кузнецов Возникшие проблемы Избыточный набор системных средств, предназначенных для обеспечения возможности взаимодействия и синхронизации процессов, которые не обязательно связаны отношением родства IPC - I er-Process Commu ica io Facili ies с появлением U IX Sys em V Release 4.0 все эти средства были узаконены и вошли в фактический стандарт ОС U IX современного образца в разных вариантах системы средства IPC реализуются по-разному эффективность реализации различается усложняется разработка мобильных асинхронных программных комплексов Пакет средств IPC U IX Sys em V Release 3.0 средства, обеспечивающие возможность наличия общей памяти между процессами (сегменты разделяемой памяти - shared memory segme s) средства, обеспечивающие возможность синхронизации процессов при доступе с совместно используемым ресурсам, например, к разделяемой памяти (семафоры - semaphores) средства, обеспечивающие возможность посылки процессом сообщений другому произвольному процессу (очереди сообщений - message queues) Общие свойства всех трех механизмов: для каждого механизма поддерживается общесистемная таблица, элементы которой описывают всех существующих в данный момент представителей механизма (конкретные сегменты, семафоры или очереди сообщений) элемент таблицы содержит некоторый числовой ключ, который является выбранным пользователем именем представителя соответствующего механизма процесс, желающий начать пользоваться одним из механизмов, обращается к системе с системным вызовом из семейства "ge ", ответным параметром является числовой дескриптор ключ IPC PRIVA E ключ IPC CREA защита доступа основывается на тех же принципах, что и защита доступа к файлам Разделяемая память shmge создает новый сегмент разделяемой памяти или находит существующий сегмент с тем же ключом shma подключает сегмент с указанным дескриптором к виртуальной памяти обращающегося процесса shmd отключает от виртуальной памяти ранее подключенный к ней сегмент с указанным виртуальным адресом начала shmc l служит для управления параметрами, связанными с существующим сегментом После подключения сегмента разделяемой памяти к виртуальной памяти процесса, он может обращаться к соответствующим элементам памяти с использованием обычных машинных команд чтения и записи shmid = shmge (key, size, flag); size определяет желаемый размер сегмента в байтах если в таблице разделяемой памяти находится элемент, содержащий заданный ключ, и права доступа не противоречат текущим характеристикам процесса, то значением системного вызова является дескриптор существующего сегмента реальный размер сегмента можно узнать с помощью системного вызова shmc l иначе создается новый сегмент с размером не меньше установленного в системе минимального размера сегмента разделяемой памяти и не больше установленного максимального размера создание сегмента не означает немедленного выделения под него основной памяти откладывается до выполнения первого системного вызова подключения сегмента к виртуальной памяти некоторого процесса при выполнении последнего системного вызова отключения сегмента от виртуальной памяти соответствующая основная память освобождается vir addr = shma (id, addr, flags); id - это ранее полученный дескриптор сегмента addr - желаемый процессом виртуальный адрес, который должен соответствовать началу сегмента в виртуальной памяти vir addr - реальный виртуальный адрес начала сегмента не обязательно совпадает со значением прямого параметра addr если addr == 0, ядро выбирает наиболее удобный виртуальный адрес начала сегмента shmd (addr); addr - виртуальный адрес начала сегмента в виртуальной памяти, ранее полученный от системного вызова shma shmc l(id, cmd, shss a buf); cmd идентифицирует требуемое конкретное действие важна функция уничтожения сегмента разделяемой памяти Семафоры Обобщение классического механизма семафоров общего вида Диекстры Целесообразность обобщения сомнительна Обычно использовался облегченный вариант двоичных семафоров Известен алгоритм реализации семафоров общего вида на основе двоичных Семафор в ОС U IX: значение семафора идентификатор процесса, который хронологически последним работал с семафором число процессов, ожидающих увеличения значения семафора число процессов, ожидающих нулевого значения семафора Три системных вызова: semge для создания и получения доступа к набору семафоров semop для манипулирования значениями семафоров semc l для выполнения управляющих операций над набором семафоров id = semge (key, cou , flag); key, flag и id - обычный смысл cou - число семафоров в наборе семафоров, обладающих одним и тем же ключом индивидуальный семафор идентифицируется дескриптором набора семафоров и номером семафора в наборе если набор семафоров с указанным ключом уже существует, то число семафоров в группе можно узнать с помощью системного вызова semc l oldval = semop(id, oplis , cou ); id - дескриптор группы семафоров oplis - массив описателей операций над семафорами группы cou - размер этого массива возвращается значение последнего обработанного семафора Элемент массива oplis : номер семафора в указанном наборе семафоров операция флаги Если проверка прав доступа проходит нормально указанные в массиве oplis номера семафоров не выходят за пределы общего размера набора семафоров для каждого элемента массива oplis значение семафора изменяется в соответствии со значением поля "операция" Значение поля операции положительно значение семафора увеличивается на единицу все процессы, ожидающие увеличения значения семафора, активизируются (пробуждаются) Значение поля операции равно нулю если значение семафора равно нулю, выбирается следующий элемент массива oplis иначе число процессов, ожидающих нулевого значения семафора, увеличивается на единицу обратившийся процесс переводится в состояние ожидания (усыпляется) Значение поля операции отрицательно (1) его абсолютное значение меньше или равно значению семафора это отрицательное значение прибавляется к значению семафора если значение семафора стало нулевым, то ядро активизирует все процессы, ожидающие нулевого значения этого семафора (2) значение семафора меньше абсолютной величины поля операции число процессов, ожидающих увеличения значения семафора увеличивается на единицу текущий процесс откладывается Стремление добиться возможности избегать тупиковых ситуаций Системный вызов semop выполняется как атомарная операция Флаг IPC OWAI заставляет ядро ОС U IX не блокировать текущий процесс лишь сообщать в ответных параметрах о возникновении ситуации, приведшей бы к блокированию процесса semc l(id, umber, cmd, arg); id - это дескриптор группы семафоров umber - номер семафора в группе cmd - код операции arg - указатель на структуру, содержимое которой интерпретируется в зависимости от операции Можно уничтожить индивидуальный семафор в указанной группе Очереди сообщений Четыре системных вызова: msgge для образования новой очереди сообщений или получения дескриптора существующей очереди msgs d для посылки сообщения (его постановки в очередь сообщений) msgrcv для приема сообщения (выборки сообщения из очереди) msgc l для выполнения управляющих действий msgqid = msgge (key, flag); Сообщения хранятся в виде связного списка Декскриптор очереди сообщений - индекс в массиве заголовков очередей сообщений В заголовке очереди хранятся: указатели на первое и последнее сообщение в данной очереди число сообщений общий размер в байтах сообщений, находящихся в очереди идентификаторы процессов, которые последними послали или приняли сообщение через данную очередь временные метки последних выполненных операций msgs d, msgrsv и msgc l Структуры данных, используемые для организации очередей сообщений msgs d(msgqid, msg, cou , flag); msg - это указатель на структуру, содержащую целочисленный тип сообщения и символьный массив cou - задает размер сообщения в байтах flag определяет действия ядра при выходе за пределы допустимых размеров внутренней буферной памяти Условия успешной постановки сообщения в очередь: процесс должен иметь право на запись в очередь длина сообщения не должна превосходить верхний предел общая длина сообщений не должна превосходить установленного предела тип сообщения должен быть положительным целым числом Процесс продолжает свое выполнение Ядро активизирует (пробуждает) все процессы, ожидающие поступления сообщений из очереди Превышается верхний предел суммарной длины сообщений обратившийся процесс откладывается до разгрузки очереди но есть флаг IPC OWAI (как для семафоров) cou = msgrcv(id, msg, maxcou , ype, flag); msg - указатель на структуру данных в адресном пространстве пользователя для размещения принятого сообщения maxcou - размер области данных (массива байтов) в структуре msg ype специфицирует тип сообщения, которое желательно принять flag указывает ядру, что следует предпринять, если в указанной очереди сообщений отсутствует сообщение с указанным типом cou - реальное число байтов, переданных пользователю Значением параметра ype является нуль выбирается первое сообщение копируется в заданную пользовательскую структуру данных процессы, отложенные по причине переполнения очереди сообщений, активизируются если значение параметра maxcou оказывается меньше реального размера сообщения, ядро не удаляет сообщение из очереди и возвращает код ошибки если задан флаг MSG OERROR, то выборка сообщения производится, и в буфер пользователя переписываются первые maxcou байтов сообщения Значение ype есть положительное целое число выбирается первое сообщение с таким же типом Значение ype есть отрицательное целое число выбирается первое сообщение, значение типа которого меньше или равно абсолютному значению ype В очереди отсутствуют сообщения, соответствующие спецификации ype процесс откладывается до появления в очереди требуемого сообщения но есть флаг IPC OWAI msgc l(id, cmd, ms a buf); опрос состояния описателя очереди сообщений изменение его состояния уничтожение очереди сообщений Программные каналы Создание неименованного программного канала pipe(fdp r); fdp r - это указатель массива из двух целых чисел для размещения дескриптора для чтения из программного канала (с помощью read) и записи в программный канал (с помощью wri e) обычные дескрипторы файлов два элемента таблицы открытых файлов процесса Создание именованных программных каналов (или получение доступа к существующим) Обычный системный вызов ope если канал открывается на запись, и ни один процесс не открыл его для чтения, то процесс блокируется до тех пор, пока некоторый процесс не откроет этот канал для чтения аналогично обрабатывается открытие для чтения имеется флаг O DELAY Запись и чтение: read и wri e при записи данные помещаются в начало канала при чтении выбираются из конца канала возможны откладывания процессов Окончание работы процесса: close при выполнении последнего закрытия канала по записи все процессы, ожидающие чтения из программного канала, активизируются с возвратом кода ошибки из системного вызова Программные гнезда (socke s) Поддерживаемый ядром механизм, скрывающий особенности сетевой среды и позволяющий единообразно взаимодействовать процессам выполняющимся на одном компьютере в пределах одной локальной сети разнесенным на разные компьютеры территориально распределенной сети Первое решение: U IX BSD 4.1
ргей Кузнецов Возникшие проблемы Избыточный набор системных средств, предназначенных для обеспечения возможности взаимодействия и синхронизации процессов, которые не обязательно связаны отношением родства IPC - I er-Process Commu ica io Facili ies с появлением U IX Sys em V Release 4.0 все эти средства были узаконены и вошли в фактический стандарт ОС U IX современного образца в разных вариантах системы средства IPC реализуются по-разному эффективность реализации различается усложняется разработка мобильных асинхронных программных комплексов Пакет средств IPC U IX Sys em V Release 3.0 средства, обеспечивающие возможность наличия общей памяти между процессами (сегменты разделяемой памяти - shared memory segme s) средства, обеспечивающие возможность синхронизации процессов при доступе с совместно используемым ресурсам, например, к разделяемой памяти (семафоры - semaphores) средства, обеспечивающие возможность посылки процессом сообщений другому произвольному процессу (очереди сообщений - message queues) Общие свойства всех трех механизмов: для каждого механизма поддерживается общесистемная таблица, элементы которой описывают всех существующих в данный момент представителей механизма (конкретные сегменты, семафоры или очереди сообщений) элемент таблицы содержит некоторый числовой ключ, который является выбранным пользователем именем представителя соответствующего механизма процесс, желающий начать пользоваться одним из механизмов, обращается к системе с системным вызовом из семейства "ge ", ответным параметром является числовой дескриптор ключ IPC PRIVA E ключ IPC CREA защита доступа основывается на тех же принципах, что и защита доступа к файлам Разделяемая память shmge создает новый сегмент разделяемой памяти или находит существующий сегмент с тем же ключом shma подключает сегмент с указанным дескриптором к виртуальной памяти обращающегося процесса shmd отключает от виртуальной памяти ранее подключенный к ней сегмент с указанным виртуальным адресом начала shmc l служит для управления параметрами, связанными с существующим сегментом После подключения сегмента разделяемой памяти к виртуальной памяти процесса, он может обращаться к соответствующим элементам памяти с использованием обычных машинных команд чтения и записи shmid = shmge (key, size, flag); size определяет желаемый размер сегмента в байтах если в таблице разделяемой памяти находится элемент, содержащий заданный ключ, и права доступа не противоречат текущим характеристикам процесса, то значением системного вызова является дескриптор существующего сегмента реальный размер сегмента можно узнать с помощью системного вызова shmc l иначе создается новый сегмент с размером не меньше установленного в системе минимального размера сегмента разделяемой памяти и не больше установленного максимального размера создание сегмента не означает немедленного выделения под него основной памяти откладывается до выполнения первого системного вызова подключения сегмента к виртуальной памяти некоторого процесса при выполнении последнего системного вызова отключения сегмента от виртуальной памяти соответствующая основная память освобождается vir addr = shma (id, addr, flags); id - это ранее полученный дескриптор сегмента addr - желаемый процессом виртуальный адрес, который должен соответствовать началу сегмента в виртуальной памяти vir addr - реальный виртуальный адрес начала сегмента не обязательно совпадает со значением прямого параметра addr если addr == 0, ядро выбирает наиболее удобный виртуальный адрес начала сегмента shmd (addr); addr - виртуальный адрес начала сегмента в виртуальной памяти, ранее полученный от системного вызова shma shmc l(id, cmd, shss a buf); cmd идентифицирует требуемое конкретное действие важна функция уничтожения сегмента разделяемой памяти Семафоры Обобщение классического механизма семафоров общего вида Диекстры Целесообразность обобщения сомнительна Обычно использовался облегченный вариант двоичных семафоров Известен алгоритм реализации семафоров общего вида на основе двоичных Семафор в ОС U IX: значение семафора идентификатор процесса, который хронологически последним работал с семафором число процессов, ожидающих увеличения значения семафора число процессов, ожидающих нулевого значения семафора Три системных вызова: semge для создания и получения доступа к набору семафоров semop для манипулирования значениями семафоров semc l для выполнения управляющих операций над набором семафоров id = semge (key, cou , flag); key, flag и id - обычный смысл cou - число семафоров в наборе семафоров, обладающих одним и тем же ключом индивидуальный семафор идентифицируется дескриптором набора семафоров и номером семафора в наборе если набор семафоров с указанным ключом уже существует, то число семафоров в группе можно узнать с помощью системного вызова semc l oldval = semop(id, oplis , cou ); id - дескриптор группы семафоров oplis - массив описателей операций над семафорами группы cou - размер этого массива возвращается значение последнего обработанного семафора Элемент массива oplis : номер семафора в указанном наборе семафоров операция флаги Если проверка прав доступа проходит нормально указанные в массиве oplis номера семафоров не выходят за пределы общего размера набора семафоров для каждого элемента массива oplis значение семафора изменяется в соответствии со значением поля "операция" Значение поля операции положительно значение семафора увеличивается на единицу все процессы, ожидающие увеличения значения семафора, активизируются (пробуждаются) Значение поля операции равно нулю если значение семафора равно нулю, выбирается следующий элемент массива oplis иначе число процессов, ожидающих нулевого значения семафора, увеличивается на единицу обратившийся процесс переводится в состояние ожидания (усыпляется) Значение поля операции отрицательно (1) его абсолютное значение меньше или равно значению семафора это отрицательное значение прибавляется к значению семафора если значение семафора стало нулевым, то ядро активизирует все процессы, ожидающие нулевого значения этого семафора (2) значение семафора меньше абсолютной величины поля операции число процессов, ожидающих увеличения значения семафора увеличивается на единицу текущий процесс откладывается Стремление добиться возможности избегать тупиковых ситуаций Системный вызов semop выполняется как атомарная операция Флаг IPC OWAI заставляет ядро ОС U IX не блокировать текущий процесс лишь сообщать в ответных параметрах о возникновении ситуации, приведшей бы к блокированию процесса semc l(id, umber, cmd, arg); id - это дескриптор группы семафоров umber - номер семафора в группе cmd - код операции arg - указатель на структуру, содержимое которой интерпретируется в зависимости от операции Можно уничтожить индивидуальный семафор в указанной группе Очереди сообщений Четыре системных вызова: msgge для образования новой очереди сообщений или получения дескриптора существующей очереди msgs d для посылки сообщения (его постановки в очередь сообщений) msgrcv для приема сообщения (выборки сообщения из очереди) msgc l для выполнения управляющих действий msgqid = msgge (key, flag); Сообщения хранятся в виде связного списка Декскриптор очереди сообщений - индекс в массиве заголовков очередей сообщений В заголовке очереди хранятся: указатели на первое и последнее сообщение в данной очереди число сообщений общий размер в байтах сообщений, находящихся в очереди идентификаторы процессов, которые последними послали или приняли сообщение через данную очередь временные метки последних выполненных операций msgs d, msgrsv и msgc l Структуры данных, используемые для организации очередей сообщений msgs d(msgqid, msg, cou , flag); msg - это указатель на структуру, содержащую целочисленный тип сообщения и символьный массив cou - задает размер сообщения в байтах flag определяет действия ядра при выходе за пределы допустимых размеров внутренней буферной памяти Условия успешной постановки сообщения в очередь: процесс должен иметь право на запись в очередь длина сообщения не должна превосходить верхний предел общая длина сообщений не должна превосходить установленного предела тип сообщения должен быть положительным целым числом Процесс продолжает свое выполнение Ядро активизирует (пробуждает) все процессы, ожидающие поступления сообщений из очереди Превышается верхний предел суммарной длины сообщений обратившийся процесс откладывается до разгрузки очереди но есть флаг IPC OWAI (как для семафоров) cou = msgrcv(id, msg, maxcou , ype, flag); msg - указатель на структуру данных в адресном пространстве пользователя для размещения принятого сообщения maxcou - размер области данных (массива байтов) в структуре msg ype специфицирует тип сообщения, которое желательно принять flag указывает ядру, что следует предпринять, если в указанной очереди сообщений отсутствует сообщение с указанным типом cou - реальное число байтов, переданных пользователю Значением параметра ype является нуль выбирается первое сообщение копируется в заданную пользовательскую структуру данных процессы, отложенные по причине переполнения очереди сообщений, активизируются если значение параметра maxcou оказывается меньше реального размера сообщения, ядро не удаляет сообщение из очереди и возвращает код ошибки если задан флаг MSG OERROR, то выборка сообщения производится, и в буфер пользователя переписываются первые maxcou байтов сообщения Значение ype есть положительное целое число выбирается первое сообщение с таким же типом Значение ype есть отрицательное целое число выбирается первое сообщение, значение типа которого меньше или равно абсолютному значению ype В очереди отсутствуют сообщения, соответствующие спецификации ype процесс откладывается до появления в очереди требуемого сообщения но есть флаг IPC OWAI msgc l(id, cmd, ms a buf); опрос состояния описателя очереди сообщений изменение его состояния уничтожение очереди сообщений Программные каналы Создание неименованного программного канала pipe(fdp r); fdp r - это указатель массива из двух целых чисел для размещения дескриптора для чтения из программного канала (с помощью read) и записи в программный канал (с помощью wri e) обычные дескрипторы файлов два элемента таблицы открытых файлов процесса Создание именованных программных каналов (или получение доступа к существующим) Обычный системный вызов ope если канал открывается на запись, и ни один процесс не открыл его для чтения, то процесс блокируется до тех пор, пока некоторый процесс не откроет этот канал для чтения аналогично обрабатывается открытие для чтения имеется флаг O DELAY Запись и чтение: read и wri e при записи данные помещаются в начало канала при чтении выбираются из конца канала возможны откладывания процессов Окончание работы процесса: close при выполнении последнего закрытия канала по записи все процессы, ожидающие чтения из программного канала, активизируются с возвратом кода ошибки из системного вызова Программные гнезда (socke s) Поддерживаемый ядром механизм, скрывающий особенности сетевой среды и позволяющий единообразно взаимодействовать процессам выполняющимся на одном компьютере в пределах одной локальной сети разнесенным на разные компьютеры территориально распределенной сети Первое решение: U IX BSD 4.1
Точно так же у хороших системных администраторов вырабатывается умение определять, нормально ли функционирует компьютер, по внешним, малозаметным признакам. И они умеют распознавать малейшие отклонения. Компьютеры предназначены для того, чтобы выполнять одни и те же операции по многу раз, и если операция выполняется не так, как обычно,P значит, это неспроста. Опытные специалисты улавливают внутренний ритм компьютера по задержкам отклика на нажатие клавиш, по миганию огоньков на панели модема, по ежедневным записям в журнале регистрации подключений. Фирма Santa Cruz Operation (названная как бы в честь небольшого городка в северной части Калифорнии, где находился главный офис фирмы) начинала свою деятельность с того, что организовала продажу одной из версий операционной системы UNIX, предназначенной для персональных компьютеров. За восемь лет скромная фирма превратилась в преуспевающую компанию с капиталом во много миллионов долларов. Стеф Марр был одним из тех специалистов, которые отвечали за бесперебойную работу компьютерных систем
1. Автоматизация информационного взаимодействия в системе органов государственного финансового контроля
2. Операционные системы, разновидности ОС, краткие характеристики
3. Нелинейные многоволновые взаимодействия в упругих системах
4. Инквизиционный процесс. Формальная система доказательств
9. Операционная система MS-DOS
10. Операционная система MS DOS. Приглашение MS DOS. Диалог Пользователя с MS DOS
11. Теоретический анализ эффективности использования операционной системы ЛИНУКС
13. Операционные системы (шпаргалка)
14. Операционная система LINUX
15. Работа с командами операционной системы MS - DOS
16. Бизнес-процессы в системе управления предприятием
19. Реализация сети в операционной системе Linux
21. Несанкционированный доступ к терминалам серверов с операционными системами семейства UNIX
25. Операционные системы описание
27. Сети, операционная система Netware
28. Планировщик и диспетчер процессов в системе разделения времени
29. Система информационной поддержки процессов принятия решений в сельскохозяйственном производстве
30. Система внебюджетных фондов: назначение, источники и механизм действия
31. Гражданский процесс в системе юридического
32. Безопасность в системе Windows Vista. Основные службы и механизмы безопасности
33. Настройка интерфейса операционной системы Windows
34. Операционная система FreeBSD
35. Операционная система NetWare
37. Операционная система Windows
41. Операционные системы Unix и Windows NT
42. Операционные системы локальной сети
43. Операционные системы, альтернативные Windows
44. Операционный система Windows ХР
45. Основы работы в операционной системе Windows
46. Переход на 64-битные операционные системы
47. Работа с операционной системой Windows 95
49. Современные операционные системы и системное программирование в Delphi
50. Способы защиты операционной системы от вирусных программ
51. Что такое операционная система вообще и Linux в частности
52. Операционная: системы медицинского газоснабжения, микроклимат и электробезопасность
53. Средства обеспечения коррекционно-образовательного процесса в системе специального образования
57. Мобильное программирование в среде ОС UNIX
58. Наблюдение за ресурсами, пользователями ОС UNIX. Передача сообщений. Управление ресурсами
59. Информационные основы процессов управления
60. Информационное обеспечение процессов бизнес-планирования
61. Налоговая система и налогоплательщики в России: варианты взаимодействия
62. Дистанционные взаимодействия в системе отношений человек-человек
63. Социальные роли как механизм взаимодействия личности и общества
65. Теории механизмов взаимодействия и гипотеза об их синтезе
66. Современные нейролептики: взаимодействие с системами нейротрансмиттеров мозга
67. Объекты вселенной и процессы их взаимодействия
68. Изучение взаимодействия в системе NaF-Bi2O3-BiF3 при 600 и 650 градусах Цельсия
69. Информационный обмен между изолированными системами (Взаимодействие информационных систем)
73. Активизация речевого взаимодействия учащихся в процессе обучения иноязычному общению
75. Отравления: характеристика процессов взаимодействия организма с ядом
76. Взаимодействие социальных институтов в управлении педагогическим процессом
77. Процессы межличностного взаимодействия
78. Исследование взаимодействия в системах нитраты целлюлозы – уретановые каучуки
79. Классическое содержание экологии как науки о взаимодействиях в системе "организм - среда"
80. Гравитационные взаимодействия
82. Письменные доказательства в системе доказательств гражданского процесса
83. Избирательная система РФ (избирательное право, виды избирательных систем, избирательный процесс)
84. Особенности взаимодействия актера и зрителя
85. Взаимодействие человека и природы
90. Одаренные дети, особенности учебно-воспитательного взаимодействия с ними
91. Моделирование процессов функционирования технологических жидкостей в системе их применения
92. Взаимодействие в конфликте
93. Одаренные дети, особенности учебно-воспитательного взаимодействия с ними
94. Понятие общества. Общество и природа. Взаимодействие основных сфер общественной жизни
95. Социокультурная динамика межпоколенных взаимодействий
97. Философский аспект проблемы взаимодействия интеллектуальных систем
98. Взаимодействие жизненного цикла товара и рекламы
99. Программирование и планирование в ситуациях коллективного взаимодействия