Главная » Просмотр файлов » Гордеев А.В. Операционные системы (2-е изд., 2004)

Гордеев А.В. Операционные системы (2-е изд., 2004) (1186250), страница 86

Файл №1186250 Гордеев А.В. Операционные системы (2-е изд., 2004) (Гордеев А.В. Операционные системы (2-е изд., 2004)) 86 страницаГордеев А.В. Операционные системы (2-е изд., 2004) (1186250) страница 862020-08-27СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 86)

После этого индивидуальный семафор идентифицируется деск­риптором набора семафоров и номером семафора в этом наборе. Если к моментувыполнения системного вызова semget набор семафоров с указанным ключом ужесуществует, то обращающийся процесс получит соответствующий дескриптор, нотак и не узнает о реальном числе семафоров в группе (хотя позже это все-такиможно узнать с помощью системного вызова semctl).Основным системным вызовом для манипулирования семафором является semop:oldval = semopdd.

oplist, count);Здесь id — это ранее полученный дескриптор группы семафоров, oplist — массивописателей операций над семафорами группы, a count— размер этого массива.Значение, возвращаемое системным вызовом, является значением последнего об­работанного семафора. Каждый элемент массива oplist имеет следующую структуру:Q номер семафора в указанном наборе семафоров;•операция;Q флаги.Если проверка прав доступа проходит нормально и указанные в массиве oplist но­мера семафоров не выходят за пределы общего размера набора семафоров, то сис­темный вызов выполняется следующим образом. Для каждого элемента массиваoplist значение соответствующего семафора изменяется в соответствии со значе­нием поля операции, как показано ниже.• Если значение поля операции положительно, то значение семафора увеличи­вается на единицу, а все процессы, ожидающие увеличения значения семафо­ра, активизируются {пробуждаются — в терминологии UNIX).Семейство операционных систем UNIX331а Если значение поля операции равно нулю и значение семафора также равнонулю, выбирается следующий элемент массива oplist.

Если же значение поляоперации равно нулю, а значение семафора отлично от нуля, то ядро увеличи­вает на единицу число процессов, ожидающих нулевого значения семафора,причем обратившийся процесс переводится в состояние ожидания (засыпает —в терминологии UNIX).О Если значение поля операции отрицательно и его абсолютное значение меньшеили равно значению семафора, то ядро прибавляет это отрицательное значениек значению семафора.

Если в результате значение семафора стало нулевым, тоядро активизирует (пробуждает) все процессы, ожидающие нулевого значенияэтого семафора. Если же значение семафора оказывается меньше абсолютнойвеличины поля операции, то ядро увеличивает на единицу число процессов,ожидающих увеличения значения семафора, и откладывает (усыпляет) теку­щий процесс до наступления этого события.Интересно заметить, что основным поводом для введения массовых операций надсемафорами было стремление дать программистам возможность избегать тупико­вых ситуаций, возникающих в связи с семафорной синхронизацией. Это обеспечи­вается тем, что системный вызов semop, каким бы длинным он ни был (по причинепотенциально неограниченной длины массива oplist), выполняется как атомарнаяоперация, то есть во время выполнения semop ни один другой процесс не можетизменить значение какого-либо семафора.Наконец, среди флагов-параметров системного вызова semop может содержатьсяфлаг с символическим именем IPC_NOWAIT, наличие которого заставляет ядро UNIXне блокировать текущий процесс, а лишь сообщать в ответных параметрах о воз­никновении ситуации, приведшей к блокированию процесса в случае отсутствияфлага IPC_NOWAIT.

Мы не будем обсуждать здесь возможности корректного завер­шения работы с семафорами при незапланированном завершении процесса; заме­тим только, что такие возможности обеспечиваются.Системный вызов semctl имеет следующий формат:semctKid. number, cmd. arg);Здесь id — это дескриптор группы семафоров, number — номер семафора в группе,cmd — код операции, arg — указатель на структуру, содержимое которой интерпре­тируется по-разному в зависимости от операции.

В частности, с помощью вызоваsemctl можно уничтожить индивидуальный семафор в указанной группе. ОднакоДетали этого системного вызова настолько громоздки, что лучше рекомендовать вслучае необходимости обращаться к технической документации используемоговарианта операционной системы.Программные каналыМы уже познакомились с программными каналами в главе 7. Рассмотрим этотмеханизм еще раз, так сказать, в его исходном, изначальном толковании.Программные каналы (pipes) в системе UNIX являются очень важным средствомвзаимодействия и синхронизации процессов.

Теоретически программный канал332Глава 10. Краткий обзор современных операционных системпозволяет взаимодействовать любому числу процессов, обеспечивая дисциплинуFIFO (First In First Out — первый пришедший первым и выбывает). Другими сло­вами, процесс, читающий из программного канала, прочитает те данные, которыебыли записаны в программный канал раньше других.

В традиционной реализациипрограммных каналов для хранения данных использовались файлы. В современ­ных версиях операционных систем семейства UNIX для реализации программныхканалов применяются другие средства взаимодействия между процессами (в час­тности, очереди сообщений).В UNIX различаются два вида программных каналов — именованные и неимено­ванные. Именованный программный канал может служить для общения и синх­ронизации произвольных процессов, знающих имя данного программного каналаИ имеющих соответствующие права доступа.

Неименованным программным кана­лом могут пользоваться только породивший его процесс и его потомки (необяза­тельно прямые).Для создания именованного программного канала (или получения к нему досту­па) используется обычный файловый системный вызов open. Для создания же не­именованного программного канала существует специальный системный вызов pipe(исторически более ранний). Однако после получения соответствующих дескрип­торов оба вида программных каналов используются единообразно с помощью стан­дартных файловых системных вызовов read, write и close.Системный вызов pipe имеет следующий синтаксис:pipe(fdptr);Здесь fdptr — это указатель на массив из двух целых чисел, в который после созда­ния неименованного программного канала будут помещены дескрипторы, пред­назначенные для чтения из программного канала (с помощью системного вызоваread) и записи в программный канал (с помощью системного вызова write).

Деск­рипторы неименованного программного канала — это обычные дескрипторы фай­лов, то есть такому программному каналу соответствуют два элемента таблицыоткрытых файлов процесса. Поэтому при последующих системных вызовах read иwrite процесс совершенно не обязан отличать случай использования программныхканалов от случая использования обычных файлов (собственно, на этом и основа­на идея перенаправления ввода-вывода и организации конвейеров).Для создания именованных программных каналов (или получения доступа к ужесуществующим каналам) используется обычный системный вызов open. Основ­ным отличием от случая открытия обычного файла является то, что если имено­ванный программный канал открывается для записи и ни один процесс не открылтот же программный канал для чтения, то обращающийся процесс блокируется дотех пор, пока некоторый процесс не откроет данный программный канал для чте­ния.

Аналогично обрабатывается открытие для чтения.Запись данных в программный канал и чтение данных из программного канала (не­зависимо от того, именованный он или не именованный) выполняются с помощьюсистемных вызовов read и write. Отличие от случая использования обычных файловсостоит лишь в том, что при записи данные помещаются в начало канала, а при чте­нии выбираются (освобождая соответствующую область памяти) из конца канала.Семейство операционных систем UNIXОкончание работы процесса с программным каналом (независимо от того, имено­ванный он или не именованный) производится с помощью системного вызова close.Очереди сообщенийДля обмена данными между процессами используется механизм очередей сооб­щений, который поддерживается следующими системными вызовами:a msgget — образование новой очереди сообщений или получение дескрипторасуществующей очереди;a msgsnd — отправка сообщения (точнее, его постановка в указанную очередь со­общений);a msgrcv — прием сообщения (точнее, выборка сообщения из очереди сообщений);• msgctl — выполнение ряда управляющих действий.Ядро хранит сообщения в виде связного списка (очереди), а дескриптор очередисообщений является индексом в массиве заголовков очередей сообщений.Системный вызов msgget имеет следующий синтаксис:msgqid = msgget(key.

flag):Здесь параметры key и flag имеют то же значение, что и в вызове semget при запросесемафора.При выполнении системного вызова msgget ядро UNIX-системы либо создает но­вую очередь сообщений, помещая ее заголовок в таблицу очередей сообщений ивозвращая пользователю дескриптор вновь созданной очереди, либо находит эле­мент таблицы очередей сообщений, содержащий указанный ключ, и возвращаетсоответствующий дескриптор очереди.Для отправки сообщения используется системный вызов msgsnd:msgsnd(msgqid, msg, count, flag):Здесь msg — указатель на структуру, содержащую определяемый пользователемцелочисленный тип сообщения и символьный массив (собственно сообщение);count — размер сообщения в байтах; flag — значение, которое определяет действияядра при выходе за пределы допустимых размеров внутренней буферной памяти.Для приема сообщения используется системный вызов msgrcv:count » msgrcvdd, msg. maxcount, type, flag);Здесь msg — указатель на структуру данных в адресном пространстве пользовате­ля, предназначенную для размещения принятого сообщения; maxcount — размеробласти данных (массива байтов) в структуре msg; type — тип сообщения, котороетребуется принять; flag — значение, которое указывает ядру, что следует предпри­нять, если в указанной очереди сообщений отсутствует сообщение с указаннымтипом.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6549
Авторов
на СтудИзбе
300
Средний доход
с одного платного файла
Обучение Подробнее