четвер, 19 лютого 2009 р.

Перестановка пріоритетів

Опис проблеми перестановки пріоритетів в багатозадачних системах (програмах).

Проблема

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

В деяких ситуаціях перестановка пріоритетів може і не викликати видимих проблем. Проте існує багато ситуацій коли перестановка пріоритетів може призвести до серйозних проблем. Якщо пріоритетне завдання залишиться знемагати без ресурсів, це може привести до несправностей або виклику коректуючих дій, так watch dog timer (пильнуючий таймер) може перевантажити всю систему якщо процес не відповідає вчасно. Проблема що виникла у Mars lander "Mars Pathfinder" є класичним прикладом перестановки пріоритетів в системах реального часу.

Перестановка пріоритетів також може зменшити видиму продуктивність системи.

Рішення

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

  • Відключення всіх переривань для захисту критичних секцій
    Коли відключення всіх переривань використовується для недопущення перестановки пріоритетів існує тільки два типи пріоритетів: резервуючий та блокуючий переривання. Без третього пріоритету перестановка неможлива. Оскільки є тільки один шматок заблокованих даних, хаотичне впорядкування неможливе, тому неможливим стає взаємне блокування (deadlock). Оскільки критичні процеси завжди добігають до завершення зависання не трапляється. Слід пам'ятати що це спрацює тільки якщо всі перериваня відключенні. Коли відключенні тільки деякі апаратні переривання, перестановка пріоритетів відтвориться через пріоритизацію апаратних переривань.
  • Максимізація пріоритетів. (A priority ceiling)
    Із збільшенням пріоритетів до верхньої межі спільний блокуючий процес (що виконує системний код) сам має специфічний (високий) пріоритет, який також присвоєний завданню що тримає блок. Це працює добре не дозволяючи іншим високо пріоритетним завданням мати пріоритет вищий максимального.
  • Успадкування пріоритетів
    За правилами успадкування пріоритетів, якщо високо-пріоритетне завдання має чекати на певний ресурс розділений з менш пріоритетним завданням, мало пріоритетному завданню присвоюється найбільший пріоритет з очікуючих завдань на час використання ним спільних ресурсів, таким чином дозволяючи завданням з середніми та високими пріоритетами уникати затримок (первісно) мало пріоритетного завдання.
Цікаво знати:

вівторок, 2 грудня 2008 р.

Як це: "Qt Embedded для Linux" початківцям

Еволюція

Icon - Qt Designer Device - MOTOMING A1200 blue box 120px
Після того як Trolltech був поглинутий Noki-єю та став Qt Software графічні та мультимедійні можливості цього кросплатформеного фреймворку значно розширилися. І хоч Qt for device creation існували під різними назвами вже давно позитивні зрушення стали зараз особливо помітними.

Qt Running on Three Different Mobile OS's
Збільшилася кількість мультимедійних модулів, анонсовано підтримку на Symbian S60 а це вже понад 8 млн. проданих пристроїв.


Вантажимо, Компілимо, Запускаємо
Завдяки власній системі збірки програмних продуктів дуже рідко виникають проблеми, але QtEmbedded виявився не таким інтуїтивним, і тому й з'явився цей допис. Він розрахований на людей які пробували свої сили на Qt for Desktop та хочуть так само відчути на дотик QtEmbedded.



Більшісь коду ваших стандартних додатків не доведеться переписувати для мобільних притроїв крім очевидно інтерфейсів. Але 1) необхідна "особлива" версія Qt; 2) потрібний емулятор/термінал для відображення і вхаємодіїї з мобільним софтом. 3) Linux.

Отож по порядку:
  • Вантажимо Qt for ApplicationDevelopment
    Це необхідно для того щоб зібрати віртуалний фреймбуфер. Адже він повинен запускатися на вашому звичайному комп'ютері.
    cd path/to/Qt/tools/qvfb
    make
    ./qvfb


  • Вантажимо Qt Embedded Opensource

    cd path/to/QtEmbedded
    ./configure -qvfb make
  • Запускаємо

    ./dragdroprobot -qws



Корисно прочитати:
http://doc.trolltech.com/4.4/qvfb.html

середа, 5 листопада 2008 р.

Додана кнопка "Планети разработчиков"

Участник планеты Developers.org.ua

Додана кнопка "Планети разработчиков"
Інтегруємося у спільноту!