OS_Run() sonsuz bir döngü içeren ve görev düzenleyiciyi (scheduler) çağıran bir servistir. Bu servis main() fonksiyonunun sonunda çağrılmalıdır. Bu servis ayrıca tüm kontrolü OSA kernel’e devretmektedir. Görev düzenleyici (scheduler) tüm görevleri (task) işler ve yüksek öncelikli hazır görevleri (task) bekler. Bu tür bir görev (task), olayı (event) bulduğunda ise görev düzenleyici (scheduler) bunu işleme alır.

OS_Run() bir makrodur. Bu makro global etiketler içerir; bu yüzden bu servis program içerisinde sadece bir kez kullanılabilir.

Sonuç olarak programınızın örnek görüntüsü aşağıdaki gibi olacaktır:

void main (void)
{
    OS_Init();
    OS_Task_Create(...);
    OS_Task_Create(...);
    // İhtiyacınız olan tüm görevleri (task) oluşturunuz
    // ...

    OS_Run();
}

Görev düzenleyici (scheduler) öncelikle tüm aktif görevleri (task) tarar (bu görevler OS_Task_Create ile yaratılmışlardır) ve işletilmeye hazır olan tüm görevleri (task) bulur. Daha sonra görev düzenleyici (scheduler) hazır görevlerin (task) önceliklerini karşılaştırır ve bunlardan önceliği en büyük olana kontrolü verir. Burada sadece bir istisna vardır: bir görev (task) kritik bölümde (critical sections) tanımlanmışsa sadece bu görev (task) kontrolü alabilir; diğer görevler (task) bu durumda görev düzenleyici (scheduler) tarafından atlanır.

Eğer görevler (task) taranırken iş düzenleyici önceliği 0 yani en yüksek görevi (task) bulursa, görev düzenleyici (scheduler) aramayı durdurur ve kontrolü bu göreve (task) aktarır. Bu görev düzenleyicinin (scheduler) hızını arttırır.