美文网首页
进程调度

进程调度

作者: R_est | 来源:发表于2020-06-17 00:15 被阅读0次

进程调度指在合适的时候以一定策略选择一个就绪进程的运行

  • 进程调度的目标
    1.响应速度尽可能快
    2.进程处理的时间尽可能短
    3.系统吞吐量尽可能大
    4.资源利用率尽可能高
    5.对所有进程要公平
    6.避免饥饿
    7.避免死锁
    上述部分原则之间存在自相矛盾,入1和2, 1和3,2和5,因此针对特定使用环境选择一些目标,忽略其他目标。

  • 可量化的目标:周转时间/平均周转时间、带权周转时间/平均带权周转时间
    周转时间,指进程提交给计算机到最终完成所花费的时间,说明进程在系统中停留时间的长短。
    单个进程的周转时间无法体现操作系统进程调度效率,而要使用平均值。平均周转时间越短,表明系统吞吐量越大,资源利用率也越高
    由于进程大小和周转时间相关,采用带权周转时间(周转时间与进程运行时间比值),表明进程在系统相对停留时间。同样,存在带权周转时间也存在平均值。

  • 典型调度算法

算法 策略 特点
先来先服务调度(First Come First Serve,FCFS) 按照作业进入系统的时间先后来挑选作业,先入系统的作业优先被运行 容易实现,效率不高,只考虑作业等候时间,而没考虑运行时间的长短,不利于短作业
短作业优先调度(Short Job First) 参考运行时间,选取运行时间最短的作业投入运行 易于实现,效率不高,忽略了作业等待时间,易出现饥饿现象
响应比高者优先调度 计算每个作业的响应比,选择响应比最高的作业优先投入运行 有利于短作业和等候长的作业,长作业可通过等待足够久的时候后获得CPU
优先数调度 根据进程优先数,把CPU分配给优先数最高的进程 兼顾多方效益
循环轮转调度(Round-Robin) 把所有就绪进程按先进先出的原则排成队列,新来进程加入队列末尾,以时间片为单位轮流使用CPU,构成环形队列 公平,每个就绪进程有平等机会获得CPU;交互,每个进程等待N-1个时间片就可重新获得CPU。
循环轮转调度
  • 响应比是作业响应时间与运行时间的比值,响应比=1+等待时间/运行时间。

  • 进程优先数=静态优先数+动态优先数
    静态优先数,在整个进程运行期间不再改变。进程创建时,根据所需资源,程序运行时间,进程类型等确定
    动态优先数,在进程运行期间根据CPU使用时长,I/O操作,进程等待时长等进行改变。

  • 循环轮转调度的时间片很大,交互性变差,算法可退化为FCFS;时间片太小,进程切换频繁,系统开销增加。可使用可变时间片,或组织多个就绪队列进行改善。

  • Linux进程调度
    普通进程,采用动态优先级来调度,调度程序周期性地修改优先级,避免饥饿
    实时进程,采用静态优先级来调度,由用户预先指定,以后不会改变,实时进程的子进程也是实时进程

  • task_struct
    包含policy(调度策略)、priority(进程静态优先级)、rt_priority(实时进程特有优先级)、counter(进程能连续运行时间)

  • policy指明进程调度策略,0号策略给普通分时进程,1和2号策略给实时进程。
    SCHED_OTHER(0号,动态优先级)
    成员counter表示动态优先级
    调用sched_setscheduler改变调度策略
    SCHED_FIFO(1号,先进先出)
    当前实时进程一直占有CPU直到退出或阻塞或被抢占
    阻塞再就绪时被添加到同优先级队列的末尾
    SCHED_RR(2号,时间片轮转)
    与其他实时进程以时间片轮转方式共同使用CPU
    确保同优先级的多个进程能共享CPU

  • counter
    进程能连续运行的时间,单位是时间滴答tick(10ms)
    较高优先级的counter较大
    counter可看作动态优先级
    初值为priority,运行一个tick时,counter减1,直到0被阻塞。
    子进程新建的counter只从父进程counter中继承一半,防止用户无限制地创建后代进程而长期占有CPU资源。

  • 调度时机
    1.中断处理过程中直接调用schedule,时间中断、I/O中断、系统调用和异常,内核被动调用的情形
    2.中断处理过程返回用户态时直接调用schedule,必须根据need_resched标记
    3.内核线程可直接调用schedule,内核主动调用的情形
    4.用户进程只能通过陷入内核后在中断处理过程中被动调度,必须根据need_resched标记

  • 进程切换
    内核挂起当前CPU上的进程并恢复之前挂起的某个进程
    任务切换和上下文切换,区别于和中断上下文切换(同个进程)
    包含用户地址空间,控制信息,硬件上下文等信息

  • 进程调度和切换流程
    采用schedule函数实现
    选择新进程next=pick_next_task(进程调度算法)
    调用宏context_switch(内部调用switch_to)切换进程上下文

相关文章

  • Nuttx Task Schedule

    调度概念 进程调度 按照某种调度算法从就绪队列中选取进程分配CPU,主要是协调对CPU等的资源使用。进程调度目标是...

  • 第三章 处理机调度与死锁

    3.2 作业与作业调度 3.2.3 先来先服务(FCFS)和短作业优先(SJF)调度算法 进程调度 进程调度方式:...

  • 学习之路 | 1 进程调度

    进程调度 多任务 Linux的进程调度 策略 策略决定调度程序在何时让什么进程运行。调度器的策略往往就决定系统的整...

  • 常用调度算法简介

    常用调度算法简介 一、关于调度 进程调度用于多进程或者多线程并发访问资源。 进程调度的需求出现在同时执行多个任务(...

  • 进程调度

    目标 本章将讨论Linux内核是如何进行进程调度的,进程调度程序(也称为调度器)的工作与实现原理。 进程调度程序负...

  • Linux 调度

    调度策略与调度类 进程包括两类: 实时进程(优先级高); 普通进程 两种进程调度策略不同: task_struct...

  • Linux进程调度

    Linux进程调度是通过内核子系统:进程调度程序完成的。进程调度程序决定投入运行的进程、何时运行已经运行时长。从这...

  • Linux内核学习013——进程调度(二)

    Linux内核学习013——进程调度(二) Linux的进程调度 早期版本(1~2.4)的Linux内核中,调度程...

  • 打通Framework与Kernel-谈谈我对进程管理的理解

    Kernel:Linux学习-进程管理与调度(一)-进程描述及其生命周期Linux学习-进程管理与调度(二)-进程...

  • 操作系统-03-操作系统的作业管理

    进程调度 进程调度是指计算机通过决策决定哪一个就绪进程可以获得CPU的使用权。 进程调度一般需要保留旧进程的运行信...

网友评论

      本文标题:进程调度

      本文链接:https://www.haomeiwen.com/subject/xrmdxktx.html