//----------------------------------------------------------------------------// // OS on Kaleid // // // // Desc: Scheduler-related functions // // // // // // Copyright © 2018-2020 The OS/K Team // // // // This file is part of OS/K. // // // // OS/K is free software: you can redistribute it and/or modify // // it under the terms of the GNU General Public License as published by // // the Free Software Foundation, either version 3 of the License, or // // any later version. // // // // OS/K is distributed in the hope that it will be useful, // // but WITHOUT ANY WARRANTY//without even the implied warranty of // // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // // GNU General Public License for more details. // // // // You should have received a copy of the GNU General Public License // // along with OS/K. If not, see . // //----------------------------------------------------------------------------// #ifndef _KERNEL_H #include #endif #ifndef _KALKERN_SCHED_H #define _KALKERN_SCHED_H //----------------------------------------------------------------------------// // // Value of the preemption count indicating that preemption is activated // enum { PREEMPT_ON = 0 }; // Time in ticks a process should be run enum { DEF_PROC_TSLICE = 3, // 20 ticks TCR_PROC_TSLICE = 20000 // 20000 ticks (time critical) }; // Priority classes enum { TIME_CRIT_PROC = 0, SERV_PRIO_PROC = 1, REGL_PRIO_PROC = 2, IDLE_PRIO_PROC = 3, }; // Names of the priority classes extern const char *PsPrioClassesNames[]; //----------------------------------------------------------------------------// // // Re-scheduling and preemption // XXX atomic operations // #define PsRequestReSched() do { ++KeCurCPU->needReSched; } while (0) #define PsDisablePreemption() do { ++KeCurCPU->preemptCount; } while (0) #define PsEnablePreemption() do { assert(KeCurCPU->preemptCount > 0); \ --KeCurCPU->preemptCount; } while(0) //----------------------------------------------------------------------------// void PsInitSched(void); void PsFiniSched(void); void PsSchedThisProc(Process_t *); void PsSchedOnTick(void); //----------------------------------------------------------------------------// #endif