Специфікація BTRON3 (Український переклад) | Розділ 5: Ядро операційної системи (Kernel)
Повернутися до змісту розділу Ядра
Попередня сторінка: 1.7 Менеджер подій (Повернутися)
Наступна сторінка: 1.9 Системний годинник (Перейти)
Підсистема управління пристроями ядра BTRON забезпечує уніфікований асинхронний та синхронний ввід/вивід для блокових (Block), символьних (Character) та спеціальних системних пристроїв.
Доступ до пристроїв здійснюється за допомогою унікальних логічних дескрипторів пристрою (DID — Device ID), які видаються системним викликом opn_dev().
Пристрої ідентифікуються символьними назвами у кодуванні TRON Code (наприклад, "fdd0", "hdd0", "com1", "kbd", "display").
□ Режими відкриття пристрою (Open Mode)
#define TD_READ 0x0001 /* Дозвіл на читання (Read Mode) */
#define TD_WRITE 0x0002 /* Дозвіл на запис (Write Mode) */
#define TD_UPDATE 0x0003 /* Дозвіл на читання та запис (Read/Write) */
#define TD_EXCL 0x0100 /* Монопольний ексклюзивний доступ (Exclusive) */
#define TD_WAIT 0x0200 /* Очікування вивільнення заблокованого пристрою */
□ Атрибути пристроїв (Device Attributes)
#define TDA_BLK 0x0001 /* Блоковий пристрій (Block Device) */
#define TDA_CHR 0x0002 /* Символьний пристрій (Character Device) */
#define TDA_REMOV 0x0010 /* Знімний носій (Removable Media - FD/Flash/CD) */
#define TDA_RO 0x0020 /* Носій лише для читання (Read-Only) */
□ Команди управління пристроєм (Device Control Requests for dev_sts)
#define TD_GSTAT ( 1) /* Отримання поточного статусу та параметрів пристрою */
#define TD_SSTAT ( 2) /* Встановлення режимів та параметрів пристрою */
#define TD_EJECT ( 3) /* Програмне вилучення / виштовхування носія (Eject) */
#define TD_FORMAT ( 4) /* Низькорівневе форматування диска/треку */
#define TD_FLUSH ( 5) /* Скидання незбережених буферів запису на диск (Flush Cache) */
□ Інформація про пристрій (DEV_INFO)
typedef struct {
TC name[32]; /* Логічна символьна назва пристрою */
UW attr; /* Атрибути пристрою (TDA_BLK, TDA_CHR, TDA_REMOV) */
W blksz; /* Розмір дискового блоку/сектора у байтах */
W nblk; /* Загальна кількість блоків у пристрої */
} DEV_INFO;
| opn_dev |
| Open Device |
| Відкриття пристрою та отримання дескриптора DID (Open Device) |
|
【Синтаксис / Прототип】
DID opn_dev(TC *devnm, W mode)
【Параметри】
TC *devnm Логічна назва пристрою у кодуванні TRON Code (наприклад, "fdd0")
W mode Режим відкриття (TD_READ, TD_WRITE, TD_EXCL, TD_WAIT)
【Значення, що повертається】
> 0 Успішне відкриття: логічний дескриптор пристрою (DID)
< 0 Помилка (Код помилки)
【Детальний опис】
Шукає зареєстрований пристрій за ім'ям devnm, ініціалізує сесію доступу відповідно до режиму mode та повертає дескриптор DID. Якщо пристрій уже відкритий у режимі монопольного доступу TD_EXCL, виклик блокується (при TD_WAIT) або повертає помилку ER_BUSY.
【Коди помилок】
ER_NOEXS : Пристрій із вказаною назвою devnm не зареєстрований у системі.
ER_BUSY : Пристрій вже заблокований іншим процесом у режимі TD_EXCL.
ER_NOSPC : Переповнено системну таблицю відкритих дескрипторів пристроїв.
ER_PAR : Некоректний режим відкриття mode або адреса devnm.
| cls_dev |
| Close Device |
| Закриття пристрою (Close Device) |
|
【Синтаксис / Прототип】
ERR cls_dev(DID did)
【Параметри】
DID did Дескриптор відкритого пристрою
【Значення, що повертається】
= 0 Успішне закриття пристрою (E_OK)
< 0 Помилка (Код помилки)
【Детальний опис】
Завершує сесію роботи з пристроєм did, скидає кешовані буфери на носій та вивільняє дескриптор пристрою у системній таблиці.
【Коди помилок】
ER_DID : Недійсний або закритий дескриптор пристрою did.
| rea_dev |
| Read Device |
| Зчитування даних з пристрою (Read Device) |
|
【Синтаксис / Прототип】
WERR rea_dev(DID did, W start, VP buf, W size, TMO tmout)
【Параметри】
DID did Дескриптор пристрою
W start Початковий номер блоку (для блокових) або 0 (для символьних)
VP buf Буфер у віртуальній пам'яті для збереження даних
W size Кількість байтів для зчитування
TMO tmout Таймаут очікування у мілісекундах (TMO_FEVR, TMO_POL)
【Значення, що повертається】
>= 0 Кількість фактично зчитаних байтів
< 0 Помилка (Код помилки)
【Детальний опис】
Зчитує size байтів даних із пристрою did, починаючи з блоку start, і записує їх у буфер пам'яті buf.
【Коди помилок】
ER_DID : Недійсний дескриптор пристрою did.
ER_IO : Апаратна помилка зчитування вводу/виводу.
ER_TMOUT : Перевищено час очікування готовності пристрою.
ER_ADR : Неприпустима адреса буфера buf у пам'яті.
| wri_dev |
| Write Device |
| Запис даних на пристрій (Write Device) |
|
【Синтаксис / Прототип】
WERR wri_dev(DID did, W start, VP buf, W size, TMO tmout)
【Параметри】
DID did Дескриптор пристрою
W start Початковий номер блоку (для блокових) або 0 (для символьних)
VP buf Буфер у віртуальній пам'яті з даними для запису
W size Кількість байтів для запису
TMO tmout Таймаут очікування у мілісекундах
【Значення, що повертається】
>= 0 Кількість фактично записаних байтів
< 0 Помилка (Код помилки)
【Детальний опис】
Записує size байтів із буфера пам'яті buf на пристрій did, починаючи з блоку start.
【Коди помилок】
ER_DID : Недійсний дескриптор пристрою did.
ER_ROVR : Спроба запису на носій, захищений від запису (Read-Only).
ER_IO : Апаратна помилка запису на пристрій.
ER_TMOUT : Перевищено час очікування операції запису.
| chg_dmd |
| Change Device Mode |
| Зміна режимів доступу до пристрою (Change Device Mode) |
|
【Синтаксис / Прототип】
ERR chg_dmd(DID did, W mode)
【Параметри】
DID did Дескриптор відкритого пристрою
W mode Нові маски режимів відкриття (TD_READ, TD_WRITE, TD_EXCL)
【Значення, що повертається】
= 0 Успішна зміна режиму (E_OK)
< 0 Помилка (Код помилки)
【Детальний опис】
Динамічно змінює права доступу або режим ексклюзивного заблокування для вже відкритого дескриптора пристрою did.
| dev_sts |
| Device Status / Control (ioctl) |
| Отримання статусу та прямого керування пристроєм (Device Control) |
|
【Синтаксис / Прототип】
WERR dev_sts(DID did, W req, VP buf)
【Параметри】
DID did Дескриптор пристрою
W req Команда керування (TD_GSTAT, TD_SSTAT, TD_EJECT, TD_FORMAT, TD_FLUSH)
VP buf Буфер передачі параметрів або отримання результатів
【Значення, що повертається】
>= 0 Успішне виконання команди
< 0 Помилка (Код помилки)
【Детальний опис】
Виконує низькорівневі виклики управління драйвером пристрою (аналог ioctl): форматування носіїв, виштовхування дискет/дисків, очищення внутрішніх кеш-буферів драйвера.
| get_dev |
| Get Device Information |
| Отримання конфігураційної інформації про пристрій (Get Device Info) |
|
【Синтаксис / Прототип】
ERR get_dev(TC *devnm, DEV_INFO *info)
【Параметри】
TC *devnm Символьна логічна назва пристрою
DEV_INFO *info Буфер у віртуальній пам'яті для збереження метиданих DEV_INFO
【Значення, що повертається】
= 0 Успішне зчитування інформації (E_OK)
< 0 Помилка (Код помилки)
【Детальний опис】
Зчитує глобальні параметри зареєстрованого пристрою (розмір дискового сектора, кількість блоків, прапорці блокового/символьного пристрою) без необхідності попереднього відкриття його дескриптора.
| lst_dev |
| List Registered Devices |
| Отримання переліку зареєстрованих у системі пристроїв (List Devices) |
|
【Синтаксис / Прототип】
WERR lst_dev(DEV_INFO *info, W cnt)
【Параметри】
DEV_INFO *info Масив структур DEV_INFO для збереження списку пристроїв
W cnt Максимальна кількість елементів масиву info
【Значення, що повертається】
>= 0 Фактична кількість зареєстрованих у системі пристроїв
< 0 Помилка (Код помилки)
【Детальний опис】
Заповнює масив info переліком усіх активних пристроїв та драйверів, які наразі зареєстровані в ядрі ОС BTRON.
| sus_dev |
| Suspend Device |
| Переведення пристрою у стан енергозбереження / зупинки (Suspend Device) |
|
【Синтаксис / Прототип】
ERR sus_dev(DID did, W mode)
【Параметри】
DID did Дескриптор пристрою
W mode Режим зупинки / сну (0 = активний, 1 = Standby, 2 = Suspend/Power Off)
【Значення, що повертається】
= 0 Успішне переведення стану пристрою (E_OK)
< 0 Помилка (Код помилки)
【Детальний опис】
Управляє станом живлення периферійного пристрою для підсистеми Power Management (зупинка обертання шпинделя жорсткого диска, переведення у режим сну контролера тощо).
Повернутися до змісту цього розділу
Попередня сторінка: 1.7 Менеджер подій (Повернутися)
Наступна сторінка: 1.9 Системний годинник (Перейти)