Густав Олссон, Джангуидо Пиани - Цифровые системы автоматизации и управления (1087169), страница 107
Текст из файла (страница 107)
10.4.2. События ным В некоторых случаях несколько процессов, имеющих д у ост п к обшим дан ельно должны работать с ними только при выполнении некоторых у ых словий, необязатель может '. у вием, нап имер, мох связанных с данными и разных для каждого процесса. Услов, р бьггь поступление новых данных на входной порт Все процессы имеют следую"'" структуру Ьея!и я а!С цп61 сонг)!гсов; шогЫу г!ага; епг! Программа делится на две основные части.
Сначала проверяются условия, а затем нуонзводятся операции над данными. Процедура проверки условия не изменяет дан„ях н поэтому не требует какой-либо специальной защиты доступа. Однако доступ к вным для модификации должен быть координирован между процессами. Если использовать семафоры, то их потребуется два: один — для контроля досту„в защишенную область с ланными, а другой — для индикации изменения общих „„нных и, соответственно, необходимости повторной проверки условий.
Применение первого семафора просто, а для второго необходимо следить за числом ожидаюших процессов н обеспечить, что при изменении условия ожидающие нрапессгя будут активизированы с.целью ега проверки, т. е, генерацию сигналов семафора, число которых равно числу ожидающих процессов. Это решение неудовлетннрительно из-за большого расхода машинного времени на многочисленные проверсн, при этом в программе довольно легко ошибиться. 1(ля решения этой проблемы была введена новая переменная синхронизации стелс (событие), с которой связаны операции аи а!с (ждать) и сацзе (вызвать) с.
Процесс, выполнивший операцию ацга!С (епепс), остается в состоянии ожидания, пока значение переменной еоепг не изменится. Это изменение контролируется с помощью операции саине. При наступлении события, т. е. выполнении операции саине (епепг), нсвобождаются все ожидающие его процессы, в то время как в случае семафора освобождается лишь один процесс. Операции с событиями можно реализовать либо с пояшдью двоичной переменной, либо с помошью счетчика, при этом основные принцины остаются одинаковыми. В противоположность семафору, переменчую события нельзя использовать для зашиты ресурса от конкурирующего доступа нескольких процессов, поскольку по ннределению она освобождает все ожидающие процессы. Вышеприведенная проблеяв решается с помощью переменной события и семафора, если все программы имеют следующий вид маг тигех.
зегпарЬоге, с(галде; ечепс; Ьея!п ч Ь!1е пос санс!!с!ап г(о ачга!с(с!запде)' чга!С( тигех); (* обработка общих переменных *) з!йпа1(тигех); савве(сйипяе); епд; П ик. " """ переменной епепс все процессы проверяют оп щоп, 'олька о те из них, для которых сопйгсап выполнено, могут продолжаться Лоступ Глаг, гол Го игла!с имеет значение не только ждать", но н "предстоять", т. с, конструкцию зьа!с гдз (д) можно трактовать, как "прелст"и" о"ь'тне А", Глагол т саизе означает "бьггь врн- т соб ~ннов", б ' ", побудительным мотивом, "вызнат ~о" т. е. конструкция савве (А) интерпре- ть что-либ ", Руется кзк "вызвать событие А" (в литературе н з операционнгях системах иногда вслоль- йнзтся н другве названия). — примем. Лзэ 440 Глава 10. Программирование систем реального врем мвни ~!) б, Обмен инФормацией между процессами 441 к общему ресурсу защищен с помощью семафора пзигех, при этом продолжае .
ается только один процесс. Это решение проще, чем основанное только на семафа, фарах Оно также более эффективно, поскольку процессы проверяют условия только т о тат. да кагьга"'имее!'смысл 'е п'сне изь!спецназначения соответствующих пер. переменных. Важный тип события в системах реального времени связан с внешними преры ываниями. Программа обработки — обработчик прерываний — ждет прерывания )(о„ оно происходит, исполнение обработчика возобновляется. 10.5. Обмен информацией между процессами 10.5.1.
Общие области памяти Взаимодействующие процессы нуждаются в обмене информацией. Поэтому мно. гозадачная операционная система должна обеспечивать необходимые для этого средства. Обмен данными должен быть прозрачным для процессов, т. е. передаваемые данные не должны изменяться, а сама процедура должна быть легко доступна дяя каждого процесса, Простейший метод — использование общих областей памяти, к которым разные процессы имеют доступ для чтения/записи.
Очевидно, что такая область представляет собой разделяемый ресурс, доступ к которому должен быть защищен, например, семафором. Главное преимущество общих областей памяти заключается в том, что к ним можно организовать прямой и мгновенный доступ, например один процесс может последовательно записывать поля, а другой затем считывать целые блоки данных. При программировании на машинном уровне общие области размещаются в опе ративной памяти по известным адресам. В языках высокого уровня вместо этого используются глобальные переменные, доступные нескольким дочерним пропессаи Так, например, происходит при порождении потоков, для которых переменные роли тельского процесса являются глобальными и работают как общие области памят~ В случае возможных конфликтов доступа к общим областям они должны быть ззшв щены семафорами.
10.5.2. Почтовые ящики Другой метод, позволяющий одновременно осуществлять обмен данными и ся" и сянх ронизацию процессов, — это почтовые ящики. Почтовый ящик представляет со собой структуру данных, предназначенную для приема и хранения сооошений (рис 1 чтовык Для обмена сообщениями различного типа можно определить несколько почто ящиков. ваимка гвобшгнмя отправка сообщения Рис. !0.8.
Работа почтового ящика Во многих операционных системах почтовые ящики реализованы в виде л „„„ ких файлов, доступ к которым аналогичен доступу к физическим файлам. С почтовыми якциками разрешены следующие операции: создание, открытие, запись/чтение шобшения, закрытие, удаление. В некоторых системах подде" "живаются дополниеяьные служебные функции, например счетчик сообщений в поч о почтовом ящике или гение сообщения без удаления его из ящика. Почтовые ящики размещаются в оперативной памяти или на диске и существуют явшь до выключения питания или перезагрузки. Если они ". з и ".изически расположены „„Лиске, то считаются временными файлам!и, уничтожаемым * .
и после выключения системы. Почтовые ящики не имекот имен подобно реальным " ьным "'аилам — при создании яи присваиваются логические идентификаторы, которые и.польз сп льзуются процессами яри обращении. Для создания почтового ящика операционная система опред ' определяет указатели на область памяти для операций чтения/записи и соответствующ е ие переменные для защиты доступа. Основными метолами реализации являются л б б яютсяли о у ер,размеркоторого задается при создании ящика, либо связнный список, кото , которыи, в принципе, не накладывает никаких ограничений нз число сообщений в почтовом ящике. В наиболее распространенных реализациях процесс, посылающий сообщение, записывает его в почтовый ящик с помощью оператора, похожего на оператор записи в файл рцс ша11Ъох (Ф1, шсзэаяе) Лналогично, ля пол , д учения сообщения процесс считывает его из почтового яп!ики с помощью оператора вила йес шак1Ъох (41 шеэзаяе) Запись сааб ени ш я в почтовый якцик означает, что оно просто копируется в какянный почтовый я ик.
Мож щ, жет случиться, что в почтовом ящике не хватает места ся в укаяяя хранения нового сааб ения,, щвеся в щ ия, т, е, почтовый ящик либо сликцком мал, либо храня- в нем сообщения еще не прочитаны. При чтении из почтового ваго ящика самое старое сообщение пересылается в приниРу уру д ! ! и удаляется из ящика, т.
е. почтовый ящик — это примеР мзюшую стачктчп анных яасснческойоче ели,о гани р д, р анизованнои по принципу Е)ЕО. Операция чтения из цуср р зличным результатам в зависимости от способа реализавго ящика приводит к азли блоки либо возвпащается п с р щ ся пустая строка (нулевой длины), либо операция чтения теяьн окируется до полччения соо У ообщения. В последнем случае, чтобы избежать нежелаьной остановки и оцесса, н Р ц ' а, необходимо предварительно проверить число сообщеимеющихся в данный момент в ящике. 10, 5 3 Каналы Канал! сани из аз (РРе) прелставляе т собой средство обмена данными между двумя процес- ывает, а другой считывает символы.
Этот механ б из которых олин запись оначально аз аоот а изм ыл ямх ола процесса. В разраоотан лля срелы О)ч1Х как срелство перенаправ ОС (кь!1)( физические Устройства ввода/ к! 1Х е РавлениЯ входа и к файл ввода/вывода рассматривают к ф йлы, а кажлая программа имеет станлаРтиое е устройство ввода (вход) и стан- 0 русской литературе также используется тепм" н Гкон ".
— П онвсйер". — Примеч. рвд. 442 Глава 10. Программирование систем реального вр време ни дартнос устройство вывода (выход), клавиатуру и экран монитора — можно о переоп. рсделить, например, с помощью файлов. Когда выход одной программы пере Ренапрап- ляется на вход другои, создается механизм, называемый каналом (в операл Рацион„ц системах для обозначения канала используется символ 1"). Каналы приме имевяются и операционных системах (31ч'1Х, 09/9 и лЪ'1пе(олуз г(Т в качестве средства связ связи меж процессами (программами). жлу Каналы можно рассматривать как частный случай почтового ящика, Р азлвчне между ними заключается в организации потока данных — почтовые ящики раб и Р отают с сообщениями, т. е. данными, для которых известны формат и длина, а канэл палы прин. ципиально ориентированы на неструктурированные потоки символов.
В неко некоторы~ операционных системах, однако, возможно определить структуру передава аваемых по каналу данных. Обычно процесс, выполняющий операцию чтения из канала, нала, ждет, пока в нем не появятся данные. В настоящее время операционные системы вклю ключают методы, позволяющие избежать блокировки программы, если это нежелательно с то л- ки зрения ес логики.