События принадлежат задаче

Любое событие в системе должно принадлежать задаче (только одной). Каждой задаче может принадлежать не более N событий (максимальное количество событий N указано в вашем индивидуальном задании). События, принадлежащие одной задаче, имеют идентификаторы EVENT_1, EVENT_2, …. Любое событие системы однозначно идентифицируется парой «Задача:Идентификатор».

Каждая задача может ожидать одно или несколько из своих событий. Эти события задаются маской событий, которая является структурой данных типа TEventMask (реализуется разработчиком ОСРВ, используется в качестве типа входного параметра в сервисах ОСРВ, связанных с событиями - см. документ "Спецификация API"). Формирование маски осуществляется операцией add_mask. Например (маска на события 1 и 12):

TEventMask mask;

mask= EVENT_1 add_mask EVENT_12;

Каждая задача имеет две маски:

1. Маска ожидаемых событий.

2. Маска произошедших (установленных) событий.

Задача, находящаяся в состоянии выполнения, может начать ожидание событий задаваемых маской и перейти в состояние waiting (предыдущая маска ожидания должна быть сброшена). Если для этой задачи будет установлено хоть одно из ожидаемый событий, задача перейдет в состояние ready (возможно running). В маске ожидаемых событий признаки ожидания произошедших событий должны быть сброшены, признаки ожидания остальных событий должны быть оставлены. В маске произошедших событий признаки произошедших событий, ожидаемых задачей (события которых «дождалась» задача) должны быть сброшены до перехода задачи в состояние ready (возможно running).

Установка событий, не ожидаемых задачей, не должна приводить к изменению состояния задачи.

Если к моменту начала ожидания хоть одно из ожидаемых событий установлено состоянии задачи не должно измениться (то есть задача не переводится в состояние waiting и в этом случае не вызывается планировщик). При этом установленные признаки события должны быть очищены, маска ожидаемых событий должна быть изменена в соответствии с приведенными правилами.

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

Ожидание событий допускается лишь задачей, которой эти события принадлежат. Очистка маски произошедших событий может осуществляться только задачей «владельцем» событий.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: