Linux进程的调度策略

2019-07-13 07:49发布

Linux进程的调度策略分为以下几种:   #define SCHED_OTHER 0 #define SCHED_FIFO 1 #define SCHED_RR 2 #define SCHED_BATCH 3 #define SCHED_IDLE 5   可以把它们分为两大类: 实时进程 - SCHED_FIFOSCHED_RR 非实时进程 - SCHED_OTHERSCHED_BATCHSCHED_IDLE SCHED_OTHER又叫交互式进程,主要处理I/O任务,例如鼠标键盘操作 SCHED_BATCHSCHED_IDLE又叫批处理进程,主要处理优先级不高的任务,例如文本编辑程序和图形应用批处理程序 SCHED_FIFOSCHED_RR主要处理对实时性要求很高的的任务,例如程序语言的编译程序, 数据库搜索引擎以及科学计算实时进程   - 进程创建时,默认是SCHED_ OTHER - 常用的是前三种 - 对于实时进程linux采用FIFO或者Round Robin调度策略,由实时优先级(0-99 99最高)决定调度权值 - Linux分不清SCHED_OTHER、SCHED_BATCH和SCHED_IDLE,把它们统一归类为非实时进程,传统的linux调度器会提高交互式进程-的优先级,最新的CFS和RSDL等新的调度器则是完全公平的策略。 - FIFO进程运行前,实时优先级更高的先执行,FIFO进程开始执行后除非有优先级更高的实时进程就绪、或者当前FIFO进程主动休眠、或- 者FIFO进程执行完毕,否则该进程将会一直占用cpu - RR进程运行前,实时优先级最高的先执行,执行的时间片由RR进程的nice值(-20 – 19 -20最高 默认为0)决定,RR进程开始执行后时间片到0了则执行下一个RR进程。所有RR进程可以自行休眠或者被更高优先级的实时进程锁抢占。 - 所有的实时进程都可以随时抢占非实时进程。   相关函数: pthread_attr_setschedpolicy()设置进程调度策略 pthread_attr_setschedparam()设置进程优先级