Непрерывные действия и команды — КиберПедия 

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Непрерывные действия и команды



Действием называется изменение контекста потока или, другими словами, действием можно назвать любую последовательность команд, которая изменяет контекст потока. Под контекстом действия понимается только та часть контекста потока, которая используется этим действием. В простейшем случае можно считать, что контекст действия определяется только переменными, которые используются этим действием. Действие называется непрерывным, если оно удовлетворяет следующим двум требованиям:

□ не прерывается во время своего исполнения;

□ контекст действия изменяется только самим действием.

Если непрерывное действие представляется одной командой микропроцессора, то оно называется непрерывной инструкцией или командой. В англоязычной литературе для обозначения непрерывного действия используется термин atomic action. Поэтому в русскоязычной литературе можно встретить также термины атомарное действие и неделимое действие, используемые для обозначения непрерывных действий.

Теперь поговорим подробнее о тех требованиях, которым должны удовлетворять непрерывные действия. Сначала рассмотрим первое требование, которое касается непрерывности действия. Действие может быть прервано только сигналом прерывания, который устанавливает соответствующий флаг микропроцессора. Этот сигнал может генерироваться как внешним устройством, требующим обслуживания, так и самим микропроцессором для обработки исключительных ситуаций, возникающих при выполнении программы. Будем считать, что обработка исключительных ситуаций неизбежна для нормального продолжения работы программы или ее завершения. Поэтому для того, чтобы обеспечить непрерывность действия, необходимо запретить обработку сигнала прерывания от внешних устройств во время выполнения этого действия. Однако отметим, что такой подход работает только в однопроцессорных системах, т. к. в мультипроцессорных системах действия могут выполняться параллельно разными процессорами. Причем возможна такая ситуация, в которой контексты параллельных действий пересекаются. В этом случае даже запрещение обработки прерываний на каждом микропроцессоре не обеспечивает непрерывности действий, т. к. может быть нарушено второе условие непрерывности действия. То есть, собственно говоря, второе требование к непрерывности действия и обеспечивает непрерывность действия на мультипроцессорных системах или, другими словами, запрещает действию, исполняемому одним процессором, изменять контекст действия, исполняемого другим процессором.



Определение синхронизации

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

await(логическое условие) действие;

Будем считать, что этот оператор работает следующим образом. Он ждет, пока логическое условие не примет значение "истина", и как только это случилось, то выполняется действие. Причем ожидание истинности значения логического условия и выполнение действия происходят непрерывным образом. То есть оператор await является непрерывным. Теперь можно дать определение синхронизации, которое является более естественным для практики программирования. Под синхронизацией потоков понимается исполнение этими потоками условных непрерывных действий.

Рассмотрим частные случаи синхронизации, которые наиболее часто встречаются на практике.

Если оператор await имеет следующий вид:

await(логическое условие);

то он просто ждет оповещения о выполнении некоторого логического условия. Этот случай называется условной синхронизацией, а само логическое условие также называется событием. В этом случае часто говорят, что оператор await ждет наступления некоторого события.

Если оператор await имеет вид:

await(TRUE) действие;

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






Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...





© cyberpedia.su 2017 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав

0.004 с.