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  * @brief 包裹sched_enqueue(),将PCB加入就绪队列
62  *
63  * @param pcb
64  */
65 void sched_enqueue(struct process_control_block *pcb);
66 /**
67  * @brief 包裹sched_cfs(),调度函数
68  *
69  */
70 void sched();
71 
72 void sched_init();
73 
74 /**
75  * @brief 当时钟中断到达时,更新时间片
76  *
77  */
78 void sched_update_jiffies();
79 
80