进程调度

一、进程调度概念

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

  • 调度时机
  • 调度策略
  • 调度目标

 

调度目标

  1. 响应速度尽可能快
  2. 进程处理的时间尽可能短
  3. 系统吞吐量尽可能大
  4. 资源利用率尽可能高
  5. 对所有进程要公平
  6. 避免饥饿
  7. 避免死锁

目标原则之间存在自相矛盾

两个量化的衡量目标

  • 周转时间/平均周转时间
  • 带权周转时间/平均带权周转时间

周转时间:进程提交给计算机到最终完成所花费的时间

平均周转时间:平均周转时间越小,意味着系统吞吐量大,资源利用率越高

带权周转时间:为进程的周转时间/进程的运行时间(含义:进程在系统相对停留时间)

 

二、典型的调度算法

1、先来先服务调度(FCFS)

类似于排队

算法

  • 按照作业进入系统的时间先后来挑选作业。先进先运行。

特点:容易实现,效率不高

此算法不利于短作业。

 

2、短作业优先调度算法(SJF)

算法:参考运行时间,选取运行时间最短的作业投入运行

特点:容易实现,效率不高

此算法会使长作业产生饥饿状态

 

3、响应比高者优先调度算法

响应比定义

  • 作业的响应时间与运行时间的比值

算法:计算每个作业的响应比,选择响应比最高的作业优先投入运行

特点:

  • 响应比=1+等待时间/运行时间
  • 等待时间相同,则运行时间越短的作业越容易被调度,有利于短作业
  • 运行时间相同,则等待时间越长的作业月容易被调度,有利于长作业

 

4、优先数调度算法

算法:

  • 根据进程优先数,把CPU分配给最高的进程
  • 进程优先数=静态优先数+动态优先数

静态优先数的确定

  • 基于进程所需的资源多少
  • 基于程序运行时间长短
  • 基于进程的类型

动态优先数的确定

  • 当使用CPU超过一定时长时
  • 当进行I/o操作后
  • 当进程等待超过一定时长时

 

5、循环轮转调度法

概念:

把所有就绪进程按先进先出的原则排成队列。新来进程加到队尾。

进程以时间片q为单位轮流使用CPU。刚刚运行一个时间片的进程排到队列末尾,等候下一轮运行

队列逻辑是循环的

优点:

  • 公平性
  • 交互性

改进

  • 时间片的大小可变
  • 组织多个就绪队列

 

三、Linux进程调度

进程类型

普通进程

  • 采用动态优先级来调度
  • 调度程序周期性地修改优先级(避免饥饿)

实时进程

  • 采用静态优先级来调度
  • 由用户预先指定,以后不会改变

静态优先级和动态优先级

 

调度策略

实时进程

  • 先进先出
  • 时间片轮转

非实时进程(普通进程)

  • 动态优先级

调度时机

  • 中断处理过程
  • 中断处理过程返回用户态
  • 内核线程可直接调用进行进程切换
  • 用户态进程只能通过陷入内核后在中断处理过程被调用

 

进程切换

概念

  • 内核挂起当前CPU上的进程并恢复之前挂起的某个进程
  • 任务切换、上下文切换

进程调度和切换的流程

  • 进程调度算法
  • 切换进程上下文

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值