zoukankan      html  css  js  c++  java
  • 操作系统 linux 内核的三种进程调度方法

    1。SCHED_OTHER 分时调度策略;
    2。SCHED_FIFO 实时调度策略。先到先服务;
    3,SCHED_RR 实时调度策略,时间片轮转 。



            实时进程将得到优先调用,实时进程依据实时优先级决定调度权值,分时进程则通过nice和counter值决定权值,nice越小,counter越大,被调度的概率越大。也就是以前使用了 cpu 最少的进程将会得到优先调度。


    SHCED_RR 和 SCHED_FIFO 的不同:

            当採用 SHCED_RR 策略的进程的时间片用完,系统将又一次分配时间片。并置于就绪队列尾。放在队列尾保证了全部具有同样优先级的RR任务的调度公平。    

            SCHED_FIFO 一旦占用 cpu 则一直执行。一直执行直到有更高优先级任务到达或自己放弃。

            假设有同样优先级的实时进程(依据优先级计算的调度权值是一样的)已经准备好,FIFO时必须等待该进程主动放弃后才干够执行这个优先级同样的任务。

    而RR能够让每一个任务都执行一段时间。


    同样点:

            RR 和 FIFO 都仅仅用于实时任务。

            创建时优先级大于0(1-99)。

            依照可抢占优先级调度算法进行。

            就绪态的实时任务马上抢占非实时任务。


    全部任务都採用Linux分时调度策略时,

    1,创建任务指定採用分时调度策略。并指定优先级nice值(-20~19)。

    2,将依据每一个任务的nice值确定在cpu上的运行时间(counter)。

    3。假设没有等待资源,则将该任务增加到就绪队列中。

    4。调度程序遍历就绪队列中的任务。通过对每一个任务动态优先级的计算(counter+20-nice)结果。选择计算结果最大的一个去执行,当这 个时间片用完后(counter减至0)或者主动放弃cpu时。该任务将被放在就绪队列末尾(时间片用完)或等待队列(因等待资源而放弃cpu)中。

    5,此时调度程序反复上面计算过程,转到第4步。

    6。当调度程序发现全部就绪任务计算所得的权值都为不大于0时,反复第2步。


    全部任务都採用 FIFO 时

    1。创建进程时指定採用 FIFO,并设置实时优先级 rt_priority(1-99)。

    2,假设没有等待资源,则将该任务增加到就绪队列中。

    3。调度程序遍历就绪队列。依据实时优先级计算调度权值(1000+rt_priority),选择权值最高的任务使用 cpu,该 FIFO 任务将一直占有 cpu 直到有优先级更高的任务就绪(即使优先级同样也不行)或者主动放弃(等待资源)。

    4,调度程序发现有优先级更高的任务到达(高优先级任务可能被中断或定时器任务唤醒。再或被当前执行的任务唤醒,等等)。则调度程序马上在当前任务 堆栈中保存当前cpu寄存器的全部数据。又一次从高优先级任务的堆栈中载入寄存器数据到cpu。此时高优先级的任务開始执行。

    反复第3步。

    5,假设当前任务因等待资源而主动放弃cpu使用权。则该任务将从就绪队列中删除。增加等待队列。此时反复第3步。


    全部任务都採用RR调度策略时

    1。创建任务时指定调度參数为 RR,并设置任务的实时优先级和nice值(nice值将会转换为该任务的时间片的长度)。

    2。假设没有等待资源。则将该任务增加到就绪队列中。

    3,调度程序遍历就绪队列。依据实时优先级计算调度权值 (1000+rt_priority) ,选择权值最高的任务使用 cpu。

    4,假设就绪队列中的 RR 任务时间片为0。则会依据 nice 值设置该任务的时间片,同一时候将该任务放入就绪队列的末尾。反复步骤3。

    5,当前任务因为等待资源而主动退出 cpu,则其增加等待队列中。

    反复步骤3。


    系统中既有分时调度,又有时间片轮转调度和先进先出调度时

    1,RR 调度和 FIFO 调度的进程属于实时进程,以分时调度的进程是非实时进程。

    2。当实时进程准备就绪后,假设当前 cpu 正在执行非实时进程,则实时进程马上抢占非实时进程。

    3。RR 进程和 FIFO 进程都採用实时优先级做为调度的权值标准,RR是FIFO的一个延伸。FIFO时,假设两个进程的优先级一样,则这两个优先 级一样的进程详细运行哪一个是由其在队列中的位置决定的,这样导致一些不公正性(优先级是一样的。为什么要让你一直运行?),假设将两个优先级一样的任务 的调度策略都设为RR,则保证了这两个任务能够循环运行,保证了公平。

  • 相关阅读:
    SpringBoot-13-简单整合Dubbo
    SpringBoot-12-整合Redis
    SpringBoot-11-任务
    SpringBoot-10-Swagger
    SpringBoot-09-Apche Shiro
    SpringBoot-08-Spring Security
    五十七-代码审计-JAVA项目框架类漏洞分析报告
    五十六:代码审计-JAVA项目Filter过滤器及XSS挖掘
    五十五:代码审计-JAVA项目注入上传搜索或插件挖掘
    五十四:代码审计-TP5框架审计写法分析及代码追踪
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6950054.html
Copyright © 2011-2022 走看看