Специфікація BTRON3 (Український переклад) | Специфікація ОС Sakamura BTRON / BTRON3
Повернутися до змісту цього розділу
Попередня сторінка: 1.3 Синхронізація та комунікація задач (Повернутися)
Наступна сторінка: 1.5 Управління оперативною пам'яттю (Перейти)

1.4 Глобальні імена та реєстр системних об'єктів (Global Name Management)

1.4.1 Огляд підсистеми глобальних імен (Overview)

Підсистема управління глобальними іменами надає засоби для створення спільних системних даних, доступних будь-яким процесам системи за їхнім символьним ім'ям, а також для пошуку та зчитування цих даних за створеним ім'ям. Дані, зареєстровані у системі за допомогою ім'я, називаються глобальними іменами (Global Name Data).

Значенням, що реєструється у системі, є одне 32-бітне ціле число (W). Ім'я, яке зв'язується з цим значенням, складається максимум з 8 символів TRON Code (до 16 байтів). Зазвичай як ім'я використовуються осмислені текстові строки, проте обмежень немає — ім'ям може слугувати будь-яка послідовність байтів довжиною до 8 символів, що завершується символом TNULL(0).

Після реєстрації глобальне ім'я та пов'язане з ним значення стають доступними для читання та модифікації з будь-якого процесу операційної системи.

Глобальні імена поділяються на 2 категорії за часом їхнього існування:

  1. Постійні імена: Існують у системі незалежно від роботи процесу, що їх створив чи змінив. Такі імена залишаються в пам'яті ядра до їхнього явного видалення системним викликом del_nam().
  2. Тимчасові імена (DELEXIT): Автоматично видаляються ядром при завершенні процесу, який їх створив чи востаннє модифікував.

Підсистема глобальних імен зазвичай використовується для публікації загальносистемних ресурсів та сервісів між неограниченим колом процесів, наприклад:

Операції з глобальними іменами
Мал. 5: Операції з глобальними іменами

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

□ Атрибути створення та зміни глобальних імен

#define N_CREATE    0x0000      /* Створення нового глобального імені (помилка якщо існує) */
#define N_MODIFY    0x0001      /* Зміна існуючого глобального імені (помилка якщо не існує) */
#define N_FORCE     0x0002      /* Примусове створення або перезапис значення імені */
#define DELEXIT     0x8000      /* Автоматичне видалення імені при завершенні процесу */

1.4.3 Системні виклики підсистеми глобальних імен (Global Name Calls)

cre_nam
 
Створення або зміна глобального імені (Create Global Name)

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

WERR    cre_nam(TC* name, W data, W opt)

【Параметри】

TC* name    Вказівник на ім'я об'єкта (враховуються перші 8 символів / 16 байтів)
W   data    32-бітне значення, що реєструється
W   opt     Атрибути створення:
            ( N_CREATE || N_MODIFY || N_FORCE ) | [ DELEXIT ]
N_CREATE :

Створює нове глобальне ім'я лише у випадку, якщо воно ще не існує в системному реєстрі. Якщо ім'я з таким назвою вже зареєстровано, повертається помилка ER_EXS.

N_MODIFY :

Модифікує 32-бітне значення існуючого глобального імені. Якщо ім'я не знайдене в реєстрі, повертається помилка ER_NOEXS.

N_FORCE :

Примусово реєструє ім'я: якщо воно відсутнє, створюється новий запис, а якщо існує — його значення перезаписується новим значенням data.

DELEXIT :

Реєструє прапор автоматичного видалення імені при завершенні процесу-создателя або процесу, який востаннє викликав модифікацію з цим прапорцем.

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

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

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

Створює новий запис глобального імені name у реєстрі ядра або змінює значення data для існуючого імені відповідно до вказаного режиму opt.

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


ER_ADR     : Неприпустима адреса вказівника у віртуальній пам'яті.
ER_EXS     : Вказаний об'єкт, файл або ім'я вже існує у системі.
ER_NOEXS   : Вказаний об'єкт, файл або ім'я відсутнє у системі.
ER_NOSPC   : Недостатньо оперативної пам'яті ядра для виконання операції.
ER_PAR     : Неприпустиме значення одного з параметрів системного виклику.

del_nam
 
Видалення глобального імені (Delete Global Name)

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

ERR     del_nam(TC* name)

【Параметри】

TC* name    Вказівник на ім'я об'єкта (перші 8 символів / 16 байтів)

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

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

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

Видаляє запис вказаного глобального імені name з реєстру об'єктів ядра та звільняє виділені під нього ресурси пам'яті.

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


ER_ADR     : Неприпустима адреса вказівника у віртуальній пам'яті.
ER_NOEXS   : Вказаний об'єкт, файл або ім'я відсутнє у системі.
ER_PAR     : Неприпустиме значення одного з параметрів системного виклику.

get_nam
 
Зчитання значення глобального імені (Get Global Name)

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

ERR     get_nam(TC* name, W* data)

【Параметри】

TC* name    Вказівник на шукане глобальне ім'я
W*  data    Вказівник на змінну для збереження зчитаного 32-бітного значення

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

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

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

Знаходить у системному реєстрі запис глобального імені name та записує зв'язане з ним 32-бітне системне значення за адресою data.

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


ER_ADR     : Неприпустима адреса вказівника у віртуальній пам'яті.
ER_NOEXS   : Вказаний об'єкт, файл або ім'я відсутнє у системі.
ER_PAR     : Неприпустиме значення одного з параметрів системного виклику.


Повернутися до змісту цього розділу
Попередня сторінка: 1.3 Синхронізація та комунікація задач (Повернутися)
Наступна сторінка: 1.5 Управління оперативною пам'яттю (Перейти)