Специфікація BTRON3 (Український переклад) | Специфікація ОС Sakamura BTRON / BTRON3
Повернутися до змісту цього розділу
Попередня сторінка: 1.2 Система міжпроцесних повідомлень (Повернутися)
Наступна сторінка: 1.4 Глобальні імена (Перейти)

1.3 Синхронізація та комунікація задач (Task Communication & Synchronization)

Ядро операційної системи BTRON3 надає 4 фундаментальні об'єкти для високоефективної синхронізації та взаємодії між окремими задачами (потоками):

Усі об'єкти синхронізації та комунікації створюються динамічно у системній пам'яті ядра та ідентифікуються унікальними позитивними системними ідентифікаторами (ID > 0).

Головна відмінність даних механізмів від підсистеми міжпроцесних повідомлень (Message Passing) полягає в тому, що міжпроцесні повідомлення адресуються між самими процесами, тоді як ці об'єкти забезпечують пряму синхронізацію між конкретними задачами (потоками). Базовим призначенням є внутрішньопроцесна взаємодія задач. Проте створені об'єкти синхронізації за наявності ID є глобально доступними для задач будь-яких процесів системи.

1.3.1 Визначення типів даних та констант (Data Types & Constants)

□ Визначення інтервалів очікування (Timeout)

typedef W   TMOUT;          /* Інтервал очікування (у мілісекундах) */

#define T_NOWAIT    ( 0)    /* Негайне повернення без очікування */
#define T_FOREVER   (-1)    /* Нескінченне очікування */

□ Константи атрибутів семафорів

#define SEM_SYNC    0x0000  /* Семафор синхронізації (Counting Semaphore) */
#define SEM_EXCL    0x4000  /* Семафор взаємного виключення (Mutex Semaphore) */

□ Константи очікування подієвих прапорців

#define WF_AND      0x0000  /* Очікування виконання всіх умов (AND Logic) */
#define WF_OR       0x0002  /* Очікування виконання хоча б однієї умови (OR Logic) */

1.3.2 Системні виклики синхронізації та комунікації (Task Comm System Calls)

cre_sem
 
Створення семафора (Create Semaphore)

【Синтаксис / Прототип】

WERR    cre_sem(W cnt, UW opt)

【Параметри】

W   cnt Початкове значення лічильника семафора
        Для семафорів синхронізації (SEM_SYNC) cnt >= 0.
        Для семафорів взаємного виключення (SEM_EXCL) cnt = 1.

UW  opt Атрибути створення сефора:
        ( SEM_SYNC || SEM_EXCL ) | [ DELEXIT ]
        SEM_SYNC    Семафор синхронізації
        SEM_EXCL    Семафор взаємного виключення
        DELEXIT     Автоматичне видалення при завершенні процесу-создателя

【Значення, що повертається】

> 0      Успішне виконання (ідентифікатор створеного семафора semid)
< 0      Помилка (Код помилки)

【Детальний опис】

Динамічно створює семафор із вказаним початковим значенням лічильника cnt та атрибутами opt. Створений семафор стає доступним для всіх задач системи за своїм ID.

SEM_EXCL — Семафор взаємного виключення (М'ютекс):
SEM_SYNC — Лічильний семафор синхронізації:

【Коди помилок】


ER_NOSPC   : Недостатньо оперативної пам'яті ядра для виконання операції.
ER_PAR     : Неприпустиме значення одного з параметрів системного виклику.

del_sem
 
Видалення семафора (Delete Semaphore)

【Синтаксис / Прототип】

ERR     del_sem(W semid)

【Параметри】

W   semid   Ідентифікатор семафора

【Значення, що повертається】

= 0      Успішне виконання
< 0      Помилка (Код помилки)

【Детальний опис】

Видаляє семафор semid із системи. Усі задачі, заблоковані у виклику wai_sem() на цьому семафорі, негайно розблоковуються з поверненням коду помилки ER_DLT.

【Коди помилок】


ER_ID      : Неприпустимий ідентифікатор ID об'єкта або процесу.

sig_sem
 
Звільнення ресурсу семафора (Signal Semaphore / V-Operation)

【Синтаксис / Прототип】

ERR     sig_sem(W semid, W cnt)

【Параметри】

W   semid   Ідентифікатор семафора
W   cnt     Кількість повернутих ресурсів (значення cnt > 0)

【Значення, що повертається】

= 0      Успішне виконання
< 0      Помилка (Код помилки)

【Детальний опис】

Збільшує значення лічильника семафора semid на величину cnt. Якщо у черзі очікування даного семафора перебувають заблоковані задачі, вони розблоковуються у порядку їх пріоритетів.

【Коди помилок】


ER_ID      : Неприпустимий ідентифікатор ID об'єкта або процесу.
ER_PAR     : Неприпустиме значення одного з параметрів системного виклику.
ER_OVVR    : Помилка виконання системного виклику.

wai_sem
 
Захоплення ресурсу семафора (Wait Semaphore / P-Operation)

【Синтаксис / Прототип】

ERR     wai_sem(W semid, W cnt, TMOUT tmout)

【Параметри】

W     semid  Ідентифікатор семафора
W     cnt    Кількість необхідних ресурсів (cnt > 0)
TMOUT tmout  Інтервал очікування (0: не чекати, -1: нескінченно)

【Значення, що повертається】

= 0      Успішне виконання (ресурс успішно захоплено)
< 0      Помилка (Код помилки)

【Детальний опис】

Захоплює cnt ресурсів семафора semid, зменшуючи його лічильник. Якщо ресурсів недостатньо, викликаюча задача блокується у стан очікування (Wait) до звільнення ресурсів або спливання таймауту tmout.

【Коди помилок】


ER_ID      : Неприпустимий ідентифікатор ID об'єкта або процесу.
ER_PAR     : Неприпустиме значення одного з параметрів системного виклику.
ER_TMOUT   : Помилка виконання системного виклику.
ER_BUSY    : Ресурс або файл заблокований у монопольному режимі іншим процесом.
ER_MINTR   : Обробку перервано внаслідок надходження системного сигналу.
ER_DLT     : Помилка виконання системного виклику.

cre_flg
 
Створення подієвого прапорця (Create Event Flag)

【Синтаксис / Прототип】

WERR    cre_flg(UW flgptn, UW opt)

【Параметри】

UW  flgptn Початкова 32-бітна маска бітів подієвого прапорця
UW  opt    Атрибути створення [ DELEXIT ]

【Значення, що повертається】

> 0      Успішне виконання (ідентифікатор прапорця flgid)
< 0      Помилка (Код помилки)

【Детальний опис】

Створює новий 32-бітний об'єкт подієвого прапорця з початковою бітовою маскою flgptn.

【Коди помилок】


ER_NOSPC   : Недостатньо оперативної пам'яті ядра для виконання операції.

del_flg
 
Видалення подієвого прапорця (Delete Event Flag)

【Синтаксис / Прототип】

ERR     del_flg(W flgid)

【Параметри】

W   flgid   Ідентифікатор подієвого прапорця

【Значення, що повертається】

= 0      Успішне виконання
< 0      Помилка (Код помилки)

【Детальний опис】

Видаляє подієвий прапорець flgid з системи. Заблоковані на ньому задачі розблоковуються з помилкою ER_DLT.

set_flg
 
Встановлення бітів подієвого прапорця (Set Event Flag)

【Синтаксис / Прототип】

ERR     set_flg(W flgid, UW setptn)

【Параметри】

W   flgid   Ідентифікатор подієвого прапорця
UW  setptn  Бітова маска для встановлення (OR-операція)

【Значення, що повертається】

= 0      Успішне виконання
< 0      Помилка (Код помилки)

【Детальний опис】

Встановлює біти подієвого прапорця flgid шляхом виконання побітової операції OR із маскою setptn.

clr_flg
 
Очищення бітів подієвого прапорця (Clear Event Flag)

【Синтаксис / Прототип】

ERR     clr_flg(W flgid, UW clrptn)

【Параметри】

W   flgid   Ідентифікатор подієвого прапорця
UW  clrptn  Бітова маска для скидання (AND-операція з інверсією)

【Значення, що повертається】

= 0      Успішне виконання
< 0      Помилка (Код помилки)

【Детальний опис】

Скидає в 0 біти подієвого прапорця flgid відповідно до маски clrptn.

wai_flg
 
Очікування виконання умови подієвого прапорця (Wait Event Flag)

【Синтаксис / Прототип】

ERR     wai_flg(UW* p_flgptn, W flgid, UW waiptn, UW wfmode, TMOUT tmout)

【Параметри】

UW*   p_flgptn Буфер для повернення стану бітів прапорця на момент виконання умови
W     flgid    Ідентифікатор прапорця
UW    waiptn   Очікувана маска бітів
UW    wfmode   Режим очікування (WF_AND / WF_OR | [ CLEAR ])
TMOUT tmout    Інтервал очікування

【Значення, що повертається】

= 0      Успішне виконання (умову виконано)
< 0      Помилка (Код помилки)

【Детальний опис】

Блокує задачу до виконання умови очікування бітів waiptn за логікою WF_AND або WF_OR. Якщо вказано прапорець CLEAR, після виконання умови біти прапорця автоматично скидаються в 0.

cre_mbf
 
Створення буфера повідомлень (Create Message Buffer)

【Синтаксис / Прототип】

WERR    cre_mbf(W mbfsz, W maxmsz, UW opt)

【Параметри】

W   mbfsz   Загальний розмір буфера (у байтах)
W   maxmsz  Максимальний розмір одного повідомлення (у байтах)
UW  opt     Атрибути [ DELEXIT ]

【Значення, що повертається】

> 0      Успішне виконання (ідентифікатор буфера mbfid)
< 0      Помилка (Код помилки)

【Детальний опис】

Створює локальний кільцевий буфер повідомлень між задачами заданого розміру mbfsz.

del_mbf
 
Видалення буфера повідомлень (Delete Message Buffer)

【Синтаксис / Прототип】

ERR     del_mbf(W mbfid)

【Детальний опис】

Видаляє буфер повідомлень mbfid із системи.

snd_mbf
 
Надсилання у буфер повідомлень (Send Message Buffer)

【Синтаксис / Прототип】

ERR     snd_mbf(W mbfid, VP msg, W msgsz, TMOUT tmout)

【Детальний опис】

Надсилає повідомлення msg розміром msgsz у буфер mbfid.

rcv_mbf
 
Прийом з буфера повідомлень (Receive Message Buffer)

【Синтаксис / Прототип】

WERR    rcv_mbf(W mbfid, VP msg, TMOUT tmout)

【Детальний опис】

Зчитує повідомлення з буфера mbfid у пам'ять msg.

cre_por
 
Створення порту рандеву (Create Rendezvous Port)

【Синтаксис / Прототип】

WERR    cre_por(W maxcmsz, W maxrmsz, UW opt)

【Детальний опис】

Створює порт синхронного двостороннього обміну рандеву (Rendezvous Port).

del_por
 
Видалення порту рандеву (Delete Rendezvous Port)

【Синтаксис / Прототип】

ERR     del_por(W porid)

【Детальний опис】

Виконує системну операцію даного виклику підсистеми ядра Sakamura BTRON3 згідно з переданими параметрами та правами доступу.

cal_por
 
Виклик рандеву (Call Rendezvous)

【Синтаксис / Прототип】

WERR    cal_por(W porid, W calptn, VP cmg, W cmsz, VP rmg, TMOUT tmout)

【Детальний опис】

Викликає процедуру рандеву на порту porid з передачею даних cmg та очікуванням відповіді rmg.

acp_por
 
Прийняття виклику рандеву (Accept Rendezvous)

【Синтаксис / Прототип】

WERR    acp_por(W porid, W acpptn, RDNVP* rdnvp, VP cmg, TMOUT tmout)

【Детальний опис】

Приймає вхідний виклик рандеву на порту porid.

fwd_por
 
Перенаправлення рандеву (Forward Rendezvous)

【Синтаксис / Прототип】

ERR     fwd_por(W porid, W calptn, W rdnvno, VP cmg, W cmsz)

【Детальний опис】

Перенаправляє поточне прийняте рандеву на інший порт porid.

rpl_por
 
Завершення та відповідь рандеву (Reply Rendezvous)

【Синтаксис / Прототип】

ERR     rpl_por(W rdnvno, VP rmg, W rmsz)

【Детальний опис】

Завершує процедуру рандеву та повертає відповідь rmg викликаючій задачі.


Повернутися до змісту цього розділу
Попередня сторінка: 1.2 Система міжпроцесних повідомлень (Повернутися)
Наступна сторінка: 1.4 Глобальні імена (Перейти)