//----------------------------------------------------------------------------// // GNU GPL OS/K // // // // Desc: Scheduler-related functions // // // // // // Copyright © 2018-2019 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 _KALKERN_BASE_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 = 5, // 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 *PrioClassesNames[]; //------------------------------------------// DEC_PER_CPU(ReSchedFlag, needReSched, bool); DEC_PER_CPU(PreemptCount, preemptCount, ulong); DEC_PER_CPU(IdlePrioProcs, idlePrioProcs, ListHead_t *); DEC_PER_CPU(ReglPrioProcs, reglPrioProcs, ListHead_t *); DEC_PER_CPU(ServPrioProcs, servPrioProcs, ListHead_t *); DEC_PER_CPU(TimeCritProcs, timeCritProcs, ListHead_t *); //------------------------------------------// // // Re-scheduling and preemption // XXX atomic operations // #define SetReSchedFlag(x) _SetReSchedFlag(x) #define DisablePreemption() _SetPreemptCount(GetPreemptCount()+1) #define EnablePreemption() do { KalAssert(GetPreemptCount() > 0); \ _SetPreemptCount(GetPreemptCount()-1); } while(0) //------------------------------------------// void SchedInit(void); void SchedFini(void); void SchedThisProc(Process_t *); void SchedOnTick(void); //------------------------------------------// #endif