找回密码
 立即注册
首页 业界区 业界 重生之我是操作系统(五)----CPU调度

重生之我是操作系统(五)----CPU调度

摹熹 前天 22:36
简介

当CPU有大量任务要处理,但由于资源有限,无法同时处理。所有就需要某种规则来决定任务处理的顺序,这就是调度。
调度层次

根据调度频率与层次,共分为三种

  • 高级调度
    也称为作业调度(Long-Trem Scheduling),频次很低,它决定哪些进程从外存(硬盘)加载到内存
  • 中级调度
    也称为内存调度(Medium-Term Scheduing),频次中等,将暂时无法运行的进程(阻塞进程)交换到外存,也就是所谓的挂起。释放内存资源,后续再重新加载到内存中。
  • 低级调度
    也称为进程调度(Short-Term Scheduing),频次极高,每秒可达数千次。它直接决定当前哪个就绪进程获得CPU。
----做什么?发生在哪?频率对进程的影响高级调度选择合适的作业调入内存,并创建进程外存=>内存最低NULL=>初始态=>就绪态中级调度从阻塞队列中选择合适的进程调回内存外存=>内存中等阻塞态=>就绪态低级调度从就绪队列中选择合适的进程配合CPU内存=>CPU极高就绪态=>运行态进程调度的模型


相对进程的状态模型,这里出现了两种新状态,就绪挂起和阻塞挂起。
这本质上是一种优化,比如进程进入了就绪态/阻塞态。但该进程优先级很低,CPU根本调度不到该进程,该进程还白白占用内存,那不如将它挂起,从内存移入外存。释放内存为更高优先级的进程服务。
比如你的屏保程序,是CPU完全没事干的时候,才会运行。如果一直占用内存,只会白白浪费。
眼见为实

2.png

常见调度算法

调度算法的选择直接影响系统性能,常见算法为抢占式(直接中断)和非抢占式(进程自愿释放)

  • 先来先服务(First-Come First-Served,FCFS)
    按照进程进入就绪队列的顺序分配CPU,先到先得。
    优点:实现简单,公平性基于到达顺序
    缺点:可能导致"护航消息",短CPU时间的进程要等待长CPU进程执行完成,周转性较差
  • 短作业优先(Shortest Job First,SJF)
    选择预计执行最短的进程优先运行。
    优点:平均周转时间最小化
    缺点:需要预知运行时间,实现很难。谁家好人算这个啊!
  • 轮转法(Round Robin,RR)
    为每个进程分配固定的时间片(比如15ms),进程时间片用完后,返回就绪队列。
    优点:保证程序快速响应,适合交互式系统
    缺点:上下文切换频繁,降低系统性能
  • 优先级调度(Priority Scheduling)
    为每个进程分配优先级,高优先级先执行。
    分为静态优先级:进程创建时即确定好优先级,动态优先级:根据运行情况动态调整优先级
    优点:按需运行,高优先级进程能占用大量CPU。
    缺点:低优先级进程可能一直得不到调用。动态设置优先级时,优先级难以界定。
  • 多级反馈队列(Multilevel Feedback Queues)
    设置多个优先级队列,比如按照时间片的长短分组。新进程首先进入高优先级队列,如果未在时间片内完成,则降级到下一级队列
进程调度时机与方式

什么时候需要进程调度?


  • 主动放弃

    • 进程正常终止
    • 运行过程中发生异常而终止
    • 主动阻塞,比如等待I/O,Sleep

  • 被动放弃

    • 分配的时间片用完
    • 更高优先级进程的插入,比如I/O中断

什么时候不能进程调度?


  • 处理中断的过程
  • 进程处于操作系统内核临界区
  • 系统原语操作过程
说人话就时,当系统执行原子操作时,就不能调度。
你都是原子操作了,要是能被调度,那还叫原子操作吗?
进程调度方式


  • 抢占式
    由操作系统剥夺当前进程的CPU使用权
  • 非抢占式
    进程主动放弃CPU,全凭良心。
进程调度程序


  • 支持内核级线程的操作系统,调度的对象是线程
  • 不支持内核级线程的操作系统,调度的对象是进程
Idle进程

CPU通电后,就需要一直运行。就算没有工作,也要给CPU几条指令,组成一个循环,在那里空转。
因此系统会创建这么一个特殊的Idle进程。
从它的工作性质不难猜出它的特性:

  • 优先级最低
  • 能耗低
  • 啥也不干
眼见为实

3.png


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册