sched_yield(2)-Linux man page Name sched_yield-yield the processor Synopsis #include <sched.h> int sched_yield(void); Description A process can relinquish the processor voluntarily without blocking by calling sched_yield().The process will then be moved to the end of the queue for its static priority and a new process gets to run. Note:If the current process is the only process in the highest priority list at that time,this process will continue to run after a call to sched_yield(). POSIX systems on which sched_yield()is available define_POS/X_PR/ORITY_SCHEDULING in <unistd.h>. Return Value 验室 20 On success,sched yield()returns 0.On error,-1 is returned,and ero is set appropriately. RATORY JF USTC
2023/7/14 Linux操作系统分析 12/52
调度算法 Linuⅸ2.4的调度算法 >需要遍历可运行队列,算法O) >Epoch,基本时间片,动态优先级 Linuⅸ2.6.17的调度算法(2.6.23之前 >采用双队列(Active;expire),按照优先级组队,O(I) Linux2.6.26的调度算法8 >非实时:CFS,vruntime,红黑树 >实时:优先级队列 。Liux进程可以指定该进程所采用的调度策略 调度算法根据进程的调度策略,采用不同的调度算法 嵌入式系统实验室 2023/7/14 Linux操作系统分析 13/52 EMBEDDED SYSTEM LABORATORY 5uE料DUAN0 ITUTE FOR AOVANCED5 FUOY OF U百TC
2023/7/14 Linux操作系统分析 13/52 调度算法 ❖ Linux 2.4的调度算法 ➢ 需要遍历可运行队列,算法O(n) ➢ Epoch,基本时间片,动态优先级 ❖ Linux 2.6.17的调度算法(2.6.23之前) ➢ 采用双队列(Active;expire ),按照优先级组队,O(1) ❖ Linux 2.6.26的调度算法 ➢ 非实时:CFS,vruntime,红黑树 ➢ 实时:优先级队列 ❖ Linux进程可以指定该进程所采用的调度策略 ❖ 调度算法根据进程的调度策略,采用不同的调度算法
Linux2.6.26中的 调度策略:Policy,调度类型 00032: 00033: 米 Scheduling policies 00034: 00035: #define SCHED NORMAL 0 00036: #define SCHED FIFO 1 00037:#define SCHED RR 00038:#define SCHED BATCH 23 00039:/SCHED_ISO:reserved but not implemented yet * 00040: #define SCHED IDLE 5 include/linux/sched.h 在task_struct中,使用数据项oolicy:来表达该进程采用的调度策略 01065: unsigned int policy; Science and Technolv 嵌入式系统实验室 2023/7/14 Linux操作系统分析 14/52 EMBEDDED SYSTEM LABORATORY 5uE料DUAN0 ITUTE FOR AOVANCED5 FUOY OF U百TC
2023/7/14 Linux操作系统分析 14/52 Linux 2.6.26中的 调度策略:Policy,调度类型 include/linux/sched.h 在task_struct中,使用数据项policy来表达该进程采用的调度策略
查看linux-.2.6.26中各个policy的使用情况 Init_task.h (linux-2.6.26\includellinux): .policy SCHED NORMAL Kthread.c (linux-2.6.26\kernel): sched_setscheduler(create->result,SCHED_NORMAL,&pa Rtmutex-tester.c(linux-2.6.26\kernel): ret sched_setscheduler(threads[tid],SCHED_N sched-design-CFS.txt(linux-2.6.26\documentation\scheduler):SCHED_NORMAL/BATCH tasks be Sched.c (linux-2.6.26\kernel):scheduling class and "nice"value.For SCHED_NORMAL tasks this Sched.c (linux-2.6.26\kernel): case SCHED_NORMAL: Sched.c (linux-2.6.26\kernel): policy!=SCHED_NORMAL&&policy!=SCHED_BAT Sched.c (linux-2.6.26\kernel): 1..MAX_USER_RT_PRIO-1,valid priority for SCHED_NORMAL Sched.c (linux-2.6.26\kernel): case SCHED NORMAL: Sched.c (linux-2.6.26\kernel): case SCHED NORMAL: Sched.c (linux-2.6.26\kernel): setscheduler(rq,rq->idle,SCHED_NORMAL,0); Sched.c (linux-2.6.26\kernel): setscheduler(rq,p,SCHED_NORMAL,0); Sched.h (linux-2.6.26\include\linux):#define SCHED_NORMAL 0 Sched.h (linux-2.6.26\include\linux):priority is 0..MAX_RT_PRIO-1,and SCHED_NORMAL/SCHE Sched_fair.c(linux-2.6.26\kernel):Completely Fair Scheduling(CFS)Class(SCHED_NORMAL/S( 嵌入式系统实验室 2023/7/14 Linux操作系统分析 15/52 EMBEDDED SYSTEM LABORATORY 5uE料DUN0 ITUTE FOR AOVANCED5 FUOY OF U百TD
2023/7/14 Linux操作系统分析 15/52 查看linux-2.6.26中各个policy的使用情况
kernel/sched.c 04721: /Actually do priority change:must hold rq lock.* 04722:static void 04723: setscheduler(struct rq *rq,struct task_struct *p,int policy,int prio) 04724: { 04725: BUG_ON(p->se.on_rq); 04726: 04727: p->policy policy; 04728: switch (p->policy){ 04729: case SCHED NORMAL: 04730: case SCHED BATCH: 04731: case SCHED_IDLE: 04732: p->sched_class =&fair_sched class; 04733: break; 04734: case SCHED FIFO: 04735: case SCHED RR: 04736: p->sched_class &rt_sched_class; 04737: break; 04738: 0A720· 2023/7/14 Linux操作系统分析 16/52 K下习儿双玉 EMBEDDED SYSTEM LABORATORY 5uE料DUN0 ITUTE FOR AOVANCED5 FUOY OF U百TD
2023/7/14 Linux操作系统分析 16/52 kernel/sched.c