Введение в программирование - Учебное пособие (Корочкин А. В.)

Глава 12. защищенные   модул и

Ада 95 характеризуется появлением в ней еще одного вида программных модулей - защищенных модулей ( protected units ). Их назначение - расширение возможностей языка при программировании параллельных процессов, в частности - для решения проблемы доступа к общим ресурсам. Кроме того, защищенные модули обеспечивают поддержку различных парадигм систем реального времени.

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

В Аде 95 эта проблема решена с помощью добавления в язык ориентированного на данные механизма синхронизации, основанного на концепции защищенных объектов. Операции над защищенными обьектами позволяют нескольким задачам синхронизировать свои действия при работе с общими данными.

Концепция защищенных модулей основана на механизмах критических условных областей ( critical region condition ) и условных мониторов ( condition monitors ) [14,15 ]. Идея монитора, предложенная Б.Хансеном и развитая С.Хоаром, основывается на обьединении переменных, описывающих общий ресурс, и действий , определяющих способы доступа к ресурсу.

Монитор - программный модуль, содержащий переменные и процедуры для работы с ними, причем доступ к переменным возможен только через процедуры монитора. Такой концепции в определенной мере соответствует в Аде реализация пакетов. Однако назначение монитора не только в инкапсуляции. Монитор - средство распределения ресурсов и взаимодействия процессов. Это назначение монитора реализуется с помощью свойств, которыми наделены процедуры монитора. Характерная особенность процедур монитора -взаимное исключение ими друг друга. В любой момент времени может выполняться только одна процедура монитора. Если некоторый процесс вызвал и выполняет процедуру монитора, то ни один другой процесс не может выполнять процедуры монитора. При попытке вызова другим процессором этой же или другой процедуры монитора

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

В условных мониторах с помощью условных переменных ( типа Condition) и операций над ними Signal и Wait обеспечивается более гибкая возможность работы с монитором. Здесь в зависимости от значения условных переменных можно блокировать или разблокировать процессы, находящиеся в мониторе, используя операции Signal и Wait и разрешать выполнение других процедур монитора.

Таким образом, монитор подобен пакету. Он не является активным подобно задаче, то есть не требует процессорных ресурсов, а сам предоставляет свои ресурсы в виде общих переменных и процедур и контролирует их использование.

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

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

Понятие защищенного модуля , базируется на таких понятиях как защищенный тип ( protecred type ) , защищенный объект ( protected object ), защищенная операция ( protected operation ), защищенная подпрограма ( protected subprogram ) , защищенный вход ( protected entry), барьер ( barrier).