kernel学习之进程调度器简介
副标题[/!--empirenews.page--]
多任务操作系统可分为非抢占式多任务和抢占式多任务。和大多数现代操作系统一样,linux也采用了抢占式多任务模式。这也就是说任务占用cpu的时间由调度器来决定。 调度策略: 决定在什么时候用怎样的方式选择一个新的进程在哪个cpu上运行多长时间的规则称为调度策略。 通常情况下,使用什么样的调度策略与进程的类型有关。进程常分为cpu消耗型和IO消耗型。 另一种分类方式为: 1、交互式进程(interactiveprocess):此类进程需要大量的人机交互,这样的进程会不断的睡眠,等待键盘和鼠标操作将其唤醒。这样的进程对系统响应时间要求高。典型的进程如文本编辑程序。 2、批处理进程(batch process):这样的进程不需要人机交互,常在后台进程,能忍受响应的迟缓,如编译器。 3、实时进程(real-time process):这样的进程对系统响应时间要求很高。如视频音频播放软件。 注:为了与实时进程对应,交互进程和批处理进程常称为普通进程。 策略标志: SCHED_NORMAL:默认的调度策略,在旧版本中名为SCHED_OTHER, 分时调度策略 SCHED_BATCH:针对批处理进程。 SCHED_IDLE:使用此调度器的进程的优先级最低。在实现CFS时引入。 SCHED_FIFO:针对实时进程的先进先出策略。一旦占用cpu就一直进行,直到有更高的优先级的进程或自己放弃cpu。适合时间要求高,每次运行时间短的进程。 SCHED_RR:针对实时进程的时间片轮转策略。进程的时间片用完后,系统会重新为其分配时间片,并把它放到队列的尾端。这样就能让每个进程都能运行一段时间。适用于每次执行时间较长的进程。 总结:SCHED_NORMAL,SCHED_BATCH,SCHED_IDLE:都是用与普通进程。区别:SCHED_NORMAL为默认的调度策略。SCHED_BATCH用于批处理进程。SCHED_IDLE用于优先级最低的后台程序。SCHED_NORMAL和SCHED_BATCH求别只是在唤醒时有区别。唤醒较频繁的进程不适合SCHED_BATCH。进程采用的调度策略反应在policy中,它的值为上面的值。子进程会继承父进程的policy。同时我们也可以通过sched_setscheduler来修改它。 所有任务都采用linux分时调度策略时。 1,创建任务指定采用分时调度策略,并指定优先级nice值(-20~19)。 2,将根据每个任务的nice值确定在cpu上的执行时间(counter)。 3,如果没有等待资源,则将该任务加入到就绪队列中。 查看本栏目更多精彩内容:http://www.bianceng.cn/OS/unix/ (编辑:云计算网_宿迁站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |