计算机系统学习之(3):进程调度算法概览

进程调度关系的问题

  • 当前调度哪个进程进行操作
  • 调度某个进程多长的时间
  • 什么时候会发生调度问题:
    • 进程创建的时候(creation)
    • 进程退出的时候(exit)
    • 进程阻塞的时候(block)
    • 进程中断的时候(interrupt)

为什么进程调度困难

  • 不同的工作负载
  • 不同的环境(操作系统)有不同的需求,对下列不同的系统目标是不同的:
    • Batch (periodic analytic tasks)
    • Interactive(user facing)
    • Real Time(need to meet deadlines)

    对于不同操作系统的知识可以参考:
    https://www.geeksforgeeks.org/types-of-operating-systems/?ref=gcse

  • 调度器对于每个进程的信息知之甚少

调度器的主要衡量指标(scheduler objectives)

  • 公平性:
    • 所有的进程都能够公平的分配 CPU 资源
  • 吞吐量:
    • 单位时间内完成的进程数尽可能多
  • 周转时间:
    • 让每个进程从开始到结束的时间尽可能短
  • 响应时间:
    • 从第一次提交请求到第一次响应产生的时间尽可能短

调度算法的目标(scheduling algorithm goals)

  • 对于所有的系统都尽可能实现:

    • 公平性
    • 策略实施:确保既定政策得到贯彻执行
    • 均衡性:让系统的所有部分都处于 busy 状态
  • 对于 Batch system,尽可能完成下列要求:

    • Throughput(吞吐量)
    • Turnaround time(周转时间)
    • CPU 利用率
  • 对于 interactive system,尽可能实现:

    • 响应时间(response time)
    • 适应性(Proportionality):符合用户的预期
  • 对于 real-time system,尽可能实现:

    • meeting deadlines:avoid losing data
    • predictability:avoid quality degradation in multimedia systems

调度算法分类

  • 抢占调度:进程按照到达的顺序被放入 ready queue;进程可以在执行一段时间后被中断
  • 非抢占调度(Non-preemptive):CPU 被分配给进程,进程会持有 CPU 资源运行到自己结束或者阻塞

进程 / 上下文切换

  • 上下文切换的时候要对当前进程的状态进行保存:
    • 保存当前的寄存器加载状态以及内存的相关内容(程序计数器、栈指针位置等)
    • 更新各种内存表(memory tables)和列表(lists)

调度算法总览

适用于 batch system 的

在这里插入图片描述

First-come first-serverd

  • 先进入等待列表的进程会被优先处理
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ay4XB92Y-1647488311489)(attachment:image.png)]
pros(优点)
  • 简单并且公平
cons(缺点)
  • 如果有进程是 IO密集型的进程,那么整个系统的效率就会极其低

Shortest Job First

比较 a, b 情况的平均周转时间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-64M19H2P-1647488311490)(attachment:image.png)]

  • 其实这种调度的方式的优势在于最大程度降低了进程的平均等待时间,进而降低了平均的周转时间。
  • 也正是因为这个特性,这种算法经常被用在面对 batch 任务的系统中
  • shortest job first 调度算法本身是一种非抢占式的调度算法,但是通过改进后的 shortest remaining time next 是一种抢占式的调度算法

shortest remaining time next

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t6QNzy45-1647488311490)(attachment:image.png)]

  • 详细描述也是参照上述连接

适用于 interactive system 的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hDxL4Q8h-1647488311491)(attachment:image.png)]

Round-Robin

  • 使用时间片(也称为时间量程 quantum)以相等的部分和循环顺序分配给每个进程,处理所有没有优先级的进程(也称为循环执行)
  • 调度程序设置一个计时器,在特定的时间量(quantum)之后生成一个中断
  • quantum 就是进程不间断运行的时间
  • 循环调度简单,易于实现,并且没有 starvation 的问题

starvation: 有些进程由于一直没有分配到 CPU 资源而无法进行处理

Priority Scheduling

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6RgpAVXj-1647488311492)(attachment:image.png)]

  • 重要的任务总是在不那么重要的任务之前运行
  • 例如:系统进程在某些情况下比用户进程更重要
  • 静态与动态优先级问题
  • 潜在的问题:starvation。如果更重要的任务不断到来,那么低优先级的任务可能永远不会执行。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
通过优先权法和轮转算法的模拟加深对进程概念和进程调度过程的理解,掌握进程状态之间的切换,同掌握进程调度算法的实现方法和技巧。 要求: 1.用C语言或C++语言来实现对n个进程采用优先权优先算法以及轮转算法进程调度。 2.每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段: (1)进程优先数ID,其0为闲逛进程,用户进程的标识数为1,2,3…。 (2)进程优先级Priority,闲逛进程(idle)的优先级为0,用户进程的优先级大于0,且随机产生,优先数越大,优先级越高。 (3)进程占用的CPU间CPUtime,进程每运行一次,累计值等于4。 (4)进程总共需要运行间Alltime,利用随机函数产生。 (5)进程状态,0:就绪态;1:运行态;2:阻塞态。 (6)队列指针next,用来将多个进程控制块PCB链接为队列。 3.优先数改变的原则 (1)进程在就绪队列每呆一个间片,优先数增加1。 (2)进程每运行一个间片,优先数减3。 4.在调度前,系统拥有的进程数PCB_number由键盘输入,经初始化后,所有的进程控制块PCB链接成就绪队列。其它们的初始化状态如下: This is an example for priority processing : Input the number of the PCB to be started :1 PCB: ID priority CPUtime ALLtime State 5 86 4 64 ready 1 32 20 68 ready 6 59 0 47 ready 2 18 20 62 ready 4 86 4 6 ready 7 72 4 51 ready 8 76 0 60 ready 9 4 4 19 ready 13 94 12 19 ready 16 88 12 24 ready 5.为了清楚地观察诸进程的调度过程,程序应将每个间片内的进程的情况显示出来,参照输出格式如下所示: This is an example for priority processing : Input the number of the PCB to be started : PCB: ID priority CPUtime ALLtime State 1 42 0 68 ready 建立: Creating -> ready 1 41 4 68 running 变迁1:ready -> running 1 41 0 68 blocked 变迁2:running -> blocked 1 41 0 68 ready 变迁4:running -> ready The idle prcess is running! 变迁1:ready -> running The idle prcess is completed! 销毁: running -> Destroy The idle prcess is running! 变迁1:ready -> running The idle prcess is completed! 销毁: running -> Destroy The idle prcess is running! 变迁1:ready -> running

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暖仔会飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值