Розробка операційної системи реального часу для цифрового сигнального процесора MicroDSP-RTOS

Контрольная работа - Компьютеры, программирование

Другие контрольные работы по предмету Компьютеры, программирование

раз, оскільки ця змінна завжди буде містити коректне поточне значення пріоритету.

1.3 Синхронізація та взаємодію задач

 

Для синхронізації завдань і взаємодії їх один з одним передбачені наступні механізми:

  • сигнали;
  • семафори;
  • повідомлення;
  • черги повідомлень.

Тони.

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

Семафори.

У MiscoDSP-RTOS реалізовані виконавчі семафори і семафори з лічильником. Як ті, так і інші зазвичай використовуються для забезпечення контролю роботи із загальними ресурсами.

Двійковий семафор може приймати значення 1 або 0, що означає, відповідно, доступність і недоступність ресурсу. Якщо задачі потрібен доступ до ресурсу, вона повинна викликати системну функцію, яка перевіряє, чи доступний ресурс. Якщо він вже зайнятий, то завдання переводиться в стан очікування, а управління передається наступному найбільш пріоритетне завдання. Якщо ж ресурс доступний (значення семафора дорівнює 1), то він блокується (значення встановлюється в 0), і управління повертається в завдання. Коли робота з ресурсом завершена, його потрібно звільнити викликом відповідної функції. При цьому зі списку всіх завдань, які очікують даний ресурс, обирається найбільш пріоритетна і переводиться в стан готовності (а якщо вона має більш високий пріоритет, ніж поточна завдання, то відбувається перемикання). Якщо таких завдань немає, то ресурс просто позначається як вільний (значення встановлюється в 1), і управління повертається в виконуваних завдань.

Відмінність семафорів з лічильником від декількох двійкових семафорів полягає тільки в тому, що ресурси можуть використовуватися кількома завданнями одночасно. Наприклад, якщо є канал передачі даних, що складається з чотирьох паралельних ліній, що працюють незалежно, то для роботи з ним може використовуватися семафор з лічильником, спочатку рівним 4. Коли задачі потрібно лінія передачі даних, вона робить системний запит. У результаті, якщо кількість доступних ліній більше нуля, воно зменшується на 1; в іншому випадку завдання переводиться в режим очікування до тих пір, поки одна із завдань, які блокують ресурси, не звільнить використовувану лінію. Варто відзначити, що даний підхід суттєво відрізняється від використання декількох двійкових семафорів. Семафор з лічильником не робить відмінності між контрольованими їм ресурсами. У наведеному вище прикладі завдання, що очікує ресурс, переводиться в стан готовності при звільненні будь-який з чотирьох ліній. При використанні ж чотирьох двійкових семафорів довелося б чекати звільнення якоїсь однієї конкретної лінії, навіть якщо всі інші вже вільні.

Повідомлення.

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

Черги повідомлень.

Черги повідомлень можуть використовуватися, коли дані надходять нерегулярно, і невідомо, чи буде завдання встигати відразу зчитувати всі вступники повідомлення. Черга повідомлень організована у вигляді циклічного буфера типу FIFO. Довжина черги, а також кількість черг повідомлень, яке можна використовувати в програмі, задається у конфігураційних файлах RTOS-проекту. Робота з чергами організована таким же чином, як і з поодинокими повідомленнями, з тією лише різницею, що можна зберігати не одне повідомлення, а декілька.

 

1.4 Робота з динамічною памяттю

 

В операційній системі MicroDSP-RTOS реалізовані найпростіші механізми роботи з динамічною памяттю. Зрозуміло, механізми, що використовуються в багатьох сучасних системах програмування, не підходять для ОС реального часу, тому що час їх виконання недетермінованих і залежить від фрагментації памяті. Тому для цієї ОС був розроблений свій підхід, що дозволяє уникнути фрагментації памяті і зробити час виконання функцій детермінованим.

У конфігураційних файлах RTOS-проекту задається загальна кількість динамічної памяті, яке буде використовуватися програмою. Користувач повинен оцінити, скільки буде потрібно памяті, з огляду на витрату памяті на службову інформацію. Динамічна память організована у вигляді набору областей (пулів) памяті, кожна з яких складається з деякої кількості буферів однаков