1 #pragma once 2 3 #include <common/glib.h> 4 #include <process/process.h> 5 6 /* 7 * Scheduling policies 8 */ 9 #define SCHED_NORMAL 0 10 #define SCHED_FIFO 1 11 #define SCHED_RR 2 12 #define SCHED_BATCH 3 13 /* SCHED_ISO: reserved but not implemented yet */ 14 #define SCHED_IDLE 5 15 #define SCHED_DEADLINE 6 16 #define SCHED_MAX_POLICY_NUM SCHED_DEADLINE 17 18 #define IS_VALID_SCHED_POLICY(_policy) ((_policy) > 0 && (_policy) <= SCHED_MAX_POLICY_NUM) 19 20 // struct sched_param 21 // { 22 // int sched_priority; 23 // }; 24 // struct sched_attr 25 // { 26 // uint32_t size; 27 28 // uint32_t sched_policy; 29 // uint64_t sched_flags; 30 31 // /* SCHED_NORMAL, SCHED_BATCH */ 32 // int32_t sched_nice; 33 34 // /* SCHED_FIFO, SCHED_RR */ 35 // uint32_t sched_priority; 36 37 // /* SCHED_DEADLINE */ 38 // uint64_t sched_runtime; 39 // uint64_t sched_deadline; 40 // uint64_t sched_period; 41 42 // /* Utilization hints */ 43 // uint32_t sched_util_min; 44 // uint32_t sched_util_max; 45 // }; 46 47 // static int __sched_setscheduler(struct process_control_block *p, const struct sched_attr *attr, bool user, bool pi); 48 // static int _sched_setscheduler(struct process_control_block *p, int policy, const struct sched_param *param, 49 // bool check); 50 // /** 51 // * sched_setscheduler -设置进程的调度策略 52 // * @param p 需要修改的pcb 53 // * @param policy 需要设置的policy 54 // * @param param structure containing the new RT priority. 目前没有用 55 // * 56 // * @return 成功返回0,否则返回对应的错误码 57 // * 58 // */ 59 // int sched_setscheduler(struct process_control_block *p, int policy, const struct sched_param *param); 60 61 // ================= Rust 实现 ============= 62 extern void sched_update_jiffies(); 63 extern void sched_init(); 64 extern void sched(); 65 extern void sched_enqueue(struct process_control_block *pcb, bool reset_time); 66 extern void sched_set_cpu_idle(uint64_t cpu_id, struct process_control_block *pcb); 67 extern void sched_migrate_process(struct process_control_block *pcb, uint64_t target); 68 69 void switch_proc(struct process_control_block *prev, struct process_control_block *proc); 70