//----------------------------------------------------------------------------// // 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 *PsPrioClassesNames[]; //------------------------------------------// DEC_PER_CPU(Ps, ReSchedFlag, needReSched, bool); DEC_PER_CPU(Ps, PreemptCount, preemptCount, ulong); DEC_PER_CPU(Ps, IdlePrioProcs, idlePrioProcs, ListHead_t *); DEC_PER_CPU(Ps, ReglPrioProcs, reglPrioProcs, ListHead_t *); DEC_PER_CPU(Ps, ServPrioProcs, servPrioProcs, ListHead_t *); DEC_PER_CPU(Ps, TimeCritProcs, timeCritProcs, ListHead_t *); //------------------------------------------// // // Re-scheduling and preemption // XXX atomic operations // #define PsSetReSchedFlag(x) _PsSetReSchedFlag(x) #define PsDisablePreemption() _PsSetPreemptCount(GetPreemptCount()+1) #define PsEnablePreemption() do { KalAssert(GetPreemptCount() > 0); \ _PsSetPreemptCount(GetPreemptCount()-1); } while(0) //------------------------------------------// void PsInitSched(void); void PsFiniSched(void); void PsSchedThisProc(Process_t *); void PsSchedOnTick(void); //------------------------------------------// #endif