1.1 Загальна функціональність

Всього в системі може бути присутнім максимум 63 користувацьких завдання. Самі завдання є звичайними функціями без параметрів, найчастіше представляють собою нескінченний цикл. Кожній задачі відповідає пріоритет від 0 до 62, що задається при підключенні, причому не може існувати двох завдань з однаковими пріоритетами. Системний час квантів, і в кожен квант часу виконується завдання, що має найвищий пріоритет (найвищий пріоритет відповідає значенню 0) серед тих, які не перебувають у стані очікування. На наведеній нижче схемі (Мал. 1) можна бачити основні стану, в яких може перебувати завдання, і можливі переходи між станами.


Рис. 1. Схема перемикання станів завдань

Після закінчення кожного кванта часу (system tick) викликається функція обробки переривання таймера. Ця функція виконує наступні дії:

·          оновлює значення часу очікування (таймауту) для кожного завдання, що знаходиться в стані очікування з якої-небудь причини;

·          якщо у якоїсь із завдань таймаут минув, переводить це завдання в стан готовності (Ready);

·          після цього з усіх завдань, які перебувають у стані готовності, вибирає завдання з найвищим пріоритетом і переключається на неї (зберігши контекст поточного завдання, якщо це потрібно).

У системі завжди присутній одна внутрішня завдання, що називається background і має найнижчий можливий пріоритет – 63. Це значення нижче пріоритету будь-якій з користувацьких завдань, і тому це завдання виконується тільки тоді, коли всі користувальницькі завдання знаходяться в стані очікування; таким чином, завдання background є індикатором простою системи. У початковій реалізації це завдання представляла собою цикл, що складається з декількох інструкцій NOP. Надалі туди була додана інструкція IDLE, яка зупиняє процесор до тих пір, поки не з'явиться запит на переривання. Тим самим було знижено енергоспоживання процесора на час простою.

1.2 Управління завданнями

1.         Підключення завдання.

2.         Завдання підключаються динамічно, тому на початку потрібно явно викликати функцію підключення для кожного завдання, яка буде виконуватися. При підключенні завдання додається у внутрішні структури даних системи, стек ініціалізується стартовим контекстом, який буде відновлений при першому перемиканні на це завдання.

3.         Відключення завдання.

4.         Ця функція повністю видаляє завдання з усіх внутрішніх структур даних операційної системи, і подальша робота з цим завданням стає неможливою. Для повторного використання завдання її потрібно знову підключити, після чого виконання завдання піде з самого початку.

5.         Призупинення виконання завдання.

6.         Виконання завдання може бути на час припинено. Це може знадобитися, наприклад, щоб запустити виконання менш пріоритетне завдання, маючи більш пріоритетну активне завдання. При виконанні функції вказується тривалість затримки в кванта часу. Після закінчення цього часу завдання переводиться в стан готовності і, якщо вона є найбільш пріоритетною, одержує управління.

7.         Відновлення з призупиненого стану.

8.         Ця функція дозволяє при необхідності достроково поставити призупинену завдання в чергу на виконання, перевівши її в стан готовності.

9.         Блокування завдання.

10.      Блокування завдання дуже схожа на відключення. Єдина відмінність полягає в тому, що при блокуванні стан завдання повністю запам'ятовується і може бути відновлена шляхом виклику відповідної функції, після чого завдання продовжить виконання з того ж місця, де була зупинена. У разі ж відключення продовжити виконання завдання не можна, її можна тільки підключити наново, і вона почне виконуватися з самого початку.

11.      Висновок з режиму блокування.

12.      Ця функція виконує дію, зворотне блокування. Стан завдання відновлюється в те, що було до блокування, за одним тільки винятком: якщо завдання виконувалася, вона переводиться в стан готовності, а не виконання. Таймаут (для станів призупинення та очікування) починає зменшуватися з кожним квантом часу; завдання може отримувати сигнали і повідомлення і так далі.

13.      Отримання даних, переданих завданню.

14.      При підключенні завдання їй можна передати будь-які дані (один з параметрів функції підключення – адреса довільної структури даних). Ця функція дозволяє отримати цю адресу, щоб мати можливість звернутися до переданих даних.

15.      Зміна пріоритету завдання.

16.      Ця функція дозволяє змінити пріоритет будь-якої задачі (при цьому новий пріоритет не повинен бути зайнятий). Для зручності роботи, щоб не потрібно було запам'ятовувати і визначати, яким пріоритет має кожна завдання в кожний момент часу, звернення до завдань здійснюється через унікальні ідентифікатори. По суті, ці ідентифікатори є змінними, які містять реальні значення пріоритетів завдань. У результаті до задачі, скажімо, номер 3 завжди можна звертатися через змінну TASK3, не замислюючись про те, змінювався чи є у неї пріоритет, і якщо змінювався, то який він зараз, оскільки ця змінна завжди буде містити коректне поточне значення пріоритету.



Информация о работе «Розробка операційної системи реального часу для цифрового сигнального процесора MicroDSP-RTOS»
Раздел: Информатика, программирование
Количество знаков с пробелами: 26612
Количество таблиц: 1
Количество изображений: 5

0 комментариев


Наверх