indiv дава много добър отговор, но е само частично точен.
Действителната работа на системата е малко по-сложна.
Планировчикът може да се изпълни в резултат на синхронни или асинхронни операции.
Синхронно се отнася до операции, които са причинени в резултат на кода в текущо изпълняваната задача. Основен пример за това би бил да вземете семафор (semTake).
Ако семафорът не е наличен, текущо изпълняваната задача ще чака и вече няма да бъде достъпна за изпълнение. В този момент планировчикът ще бъде извикан и ще определи следващата задача, която трябва да се изпълни, и ще извърши превключване на контекста.
Асинхронните операции по същество се отнасят до прекъсвания. Прекъсванията на таймера бяха много добре описани от indiv. Редица различни елементи обаче могат да доведат до изпълнение на прекъсване: мрежов трафик, сензор, серийни данни и т.н.
Също така е добре да запомните, че прекъсването на таймера не причинява непременно превключване на контекста! Да, прекъсването ще се случи и отложената задача и броячите на отрязъците от време ще бъдат намалени. Въпреки това, ако времевият отрязък не е изтекъл или няма преходи на задача с по-висок приоритет от чакащо към състояние на готовност, тогава планировчикът няма да бъде извикан в действителност и вие ще се върнете обратно към първоначалната задача, точно на мястото, където изпълнението е прекъснато.
Имайте предвид, че планировчикът няма собствен контекст; не е задача. Това е просто код, който се изпълнява в какъвто и контекст да е извикан. Или от контекста на прекъсване (асинхронно), или от контекста на извикващата задача (синхронно).
person
Benoit
schedule
15.02.2011