Специфікація BTRON3 (Український переклад) | Специфікація ОС Sakamura BTRON / BTRON3
Повернутися до змісту цього розділу
Попередня сторінка: 1.2 Система міжпроцесних повідомлень (Повернутися)
Наступна сторінка: 1.4 Глобальні імена (Перейти)
Ядро операційної системи BTRON3 надає 4 фундаментальні об'єкти для високоефективної синхронізації та взаємодії між окремими задачами (потоками):
- Семафори (Semaphores) — лічильники ресурсів та м'ютекси взаємного виключення
- Подієві прапорці (Event Flags) — бітові маски сигналізації та чекання умов
- Буфери повідомлень (Message Buffers) — локальні черги обміну даними між задачами
- Рандеву (Rendezvous) — синхронний двосторонній обмін даними та виклики процедур
Усі об'єкти синхронізації та комунікації створюються динамічно у системній пам'яті ядра та ідентифікуються унікальними позитивними системними ідентифікаторами (ID > 0).
Головна відмінність даних механізмів від підсистеми міжпроцесних повідомлень (Message Passing) полягає в тому, що міжпроцесні повідомлення адресуються між самими процесами, тоді як ці об'єкти забезпечують пряму синхронізацію між конкретними задачами (потоками). Базовим призначенням є внутрішньопроцесна взаємодія задач. Проте створені об'єкти синхронізації за наявності ID є глобально доступними для задач будь-яких процесів системи.
□ Визначення інтервалів очікування (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) */
| 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 — Семафор взаємного виключення (М'ютекс):
- Завжди повинен використовуватися у суворій послідовності: захоплення (
wai_sem) -> звільнення (sig_sem).
- Якщо задача завершується, утримуючи незахоплений м'ютекс, ядро автоматично звільняє його.
- Початкове значення cnt обов'язково дорівнює 1.
SEM_SYNC — Лічильний семафор синхронізації:
- Немає обмежень на порядок викликів
wai_sem та sig_sem.
- Автоматичне звільнення при завершенні задачі не виконується.
- Початкове значення cnt може бути будь-яким невід'ємним числом (cnt >= 0).
【Коди помилок】
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 Глобальні імена (Перейти)