Как се изпълнява планировчик на VxWorks?

Бих искал да знам как се извиква планировчикът, за да може да превключва задачи. Както и при неговото предварително планиране или кръгово планиране - планировчикът трябва да се появи на снимката, за да извърши всякакъв вид превключване на задачи. Да предположим, че задача с нисък приоритет има безкраен цикъл - кога планировчикът се намесва и превключва към задача с по-висок приоритет?

Запитването е: 1. Кой се обажда на планировчика? [в VxWorks] 2. Ако се извиква на редовни интервали - как се прилага този механизъм?

Благодаря предварително.

--Ашвин


person Ashwin    schedule 08.06.2010    source източник
comment
Въпреки че не познавам VxWorks, в други операционни системи планировчикът обикновено се извиква от прекъсване на таймера, така че може да превключва задачи, дори ако една задача в момента е заета.   -  person Rudi    schedule 08.06.2010


Отговори (4)


Простият отговор е, че vxWorks поема контрола чрез хардуерно прекъсване от системния таймер, което се случва непрекъснато на фиксирани интервали, докато системата работи.

Ето още подробности:

Когато vxWorks стартира, той конфигурира вашия хардуер да генерира таймер прекъсване на всеки n милисекунди, където n често е 10, но напълно зависи от вашия хардуер. Интервалът на таймера обикновено се задава от vxWorks във вашия пакет за поддръжка на борда (BSP), когато стартира.

Всеки път, когато таймерът задейства прекъсване, системата започва да изпълнява манипулатора за прекъсване на таймера. Манипулаторът за прекъсване на таймера е част от vxWorks, така че сега vxWorks има контрол. Първото нещо, което прави, е да записва състоянието на процесора (като регистри) в Блок за управление на задачи (TCB) на изпълняваната в момента задача.

След това в крайна сметка vxWorks стартира планировчика, за да определи кой да стартира следващия. За да изпълни задача, vxWorks копира състоянието на задачата от своя TCB в регистрите на машината и след като го направи, задачата има контрол върху процесора.

Информация за бонуса:

vxWorks предоставя кукички в превключването на задачи логика, така че да можете да извикате функция, когато задачата ви бъде изпреварена.

person indiv    schedule 08.06.2010
comment
Обърнете внимание, че това е вярно само ако активирате циклично планиране (чрез извикване на kernelTimeSlice()), по подразбиране е базирано на приоритет превантивно планиране. - person nos; 01.12.2011
comment
@nos: Прекъсването на таймера винаги се изпълнява, за да следи броя на тиковете, таймерите за наблюдение и изчакванията на семафора, независимо от политиката за планиране. Просто се случва, че за приоритетно базирано изпреварващо планиране, vxWorks планировчикът не избира нова задача за изпълнение, освен ако някаква операция на таймера не е преместила задача с по-висок приоритет в опашката за готовност. Но честно. Винаги съм искал да актуализирам този отговор, за да бъде по-прецизен и да включва системни извиквания, които напълно забравих да спомена по това време. - person indiv; 01.12.2011
comment
Също така трябва да се помни, че кръговият режим е В ДОПЪЛНЕНИЕ към базирания на приоритет. Независимо от това получавате приоритет. Кръговото планиране засяга само задачи в рамките на същото ниво на приоритет. В допълнение, дори само в приоритет, задачите все още могат да използват например taskDelay, така че системните отметки все още трябва да се носят. - person mjs; 31.10.2013

indiv дава много добър отговор, но е само частично точен.
Действителната работа на системата е малко по-сложна.

Планировчикът може да се изпълни в резултат на синхронни или асинхронни операции.

Синхронно се отнася до операции, които са причинени в резултат на кода в текущо изпълняваната задача. Основен пример за това би бил да вземете семафор (semTake).
Ако семафорът не е наличен, текущо изпълняваната задача ще чака и вече няма да бъде достъпна за изпълнение. В този момент планировчикът ще бъде извикан и ще определи следващата задача, която трябва да се изпълни, и ще извърши превключване на контекста.

Асинхронните операции по същество се отнасят до прекъсвания. Прекъсванията на таймера бяха много добре описани от indiv. Редица различни елементи обаче могат да доведат до изпълнение на прекъсване: мрежов трафик, сензор, серийни данни и т.н.

Също така е добре да запомните, че прекъсването на таймера не причинява непременно превключване на контекста! Да, прекъсването ще се случи и отложената задача и броячите на отрязъците от време ще бъдат намалени. Въпреки това, ако времевият отрязък не е изтекъл или няма преходи на задача с по-висок приоритет от чакащо към състояние на готовност, тогава планировчикът няма да бъде извикан в действителност и вие ще се върнете обратно към първоначалната задача, точно на мястото, където изпълнението е прекъснато.

Имайте предвид, че планировчикът няма собствен контекст; не е задача. Това е просто код, който се изпълнява в какъвто и контекст да е извикан. Или от контекста на прекъсване (асинхронно), или от контекста на извикващата задача (синхронно).

person Benoit    schedule 15.02.2011
comment
Note that the scheduler does not have its own context; it is not a task. It is simply code that executes in whatever context it is invoked from. Either from the interrupt context (asynchronous) or from the invoking task context (synchronous). Това е вярно за ПОВЕЧЕТО операционни системи според мен, в реално време или не - person HighOnMeat; 28.12.2018

Освен ако нямате основно персонализирана целева компилация, планировчикът се извиква от прекъсването на таймера. Подробностите обаче са специфични за платформата.

person myron-semack    schedule 08.06.2010

Планировчикът също се извиква, ако текущата задача бъде завършена или блокира.

person blah    schedule 08.06.2010