进程与线程的调度问题

一、简述

在单核系统下,所谓的调度问题:

  • 选择下一个要运行的进程或者线程是哪一个。

所谓单核系统,就是计算机只有一个CPU。在任意时刻,只会执行一条机器指令,每个线程只有获得CPU的使用权才能执行指令。
所谓的多线程并行,从宏观上看,各个线程轮流获得CPU的使用权,分别执行各自的任务。

线程的调度与进程类似,对于按内核级别的调度,与线程所属的进程基本没有关系。

进程切换的代价是比较大的,包括用户态到内核态的切换、保存当前的状态、内存映像的改变、调度程序以及载入新进程的状态。另外,会导致高速缓存的失败。

调度程序要考虑的要素:

  1. 进程是CPU密集型还是I/O密集型。CPU密集型可能会长期占用CPU,而I/O密集型可能会需要尽快运行,并且很快会阻塞。
  2. 何时调度。创建进程、进程退出、进程阻塞以及I/O中断发生。
  3. 是否支持抢占。支持抢占的调度,可以不必等待当前进程运行或阻塞,直接上CPU运行。

二、调度算法的分类

不同的环境需要不同的调度算法那,也需要不同的考量指标。

  1. 批处理。批处理系统下,不需要特别快的响应速度,所以可以考虑非抢占以及每个进程都有长时间的抢占算法。指标主要是:吞吐量、周转时间以及CPU利用率。
  2. 交互式。交互式系统下,抢占是必须的,因为操作者会希望比较快的得到响应。考虑的指标主要是最小响应时间、均衡性。
  3. 实时。实时系统下,最重要的是满足截止时间要求,即在一定的时间内完成任务。

三、批处理系统中的调度

  1. 先来先服务(first-come-first-serve)。最简单的方式,非抢占式的先来先服务,从字面意思就可以看出,把任务作为一个队列,先来先服务。缺点是,无法体现任务的轻重缓急,达不到理想的指标性能。
  2. 最短作业优先。非抢占式下,即当一个任务完成时,从任务队列中挑选最短的一个作业执行。相对于先来先服务,提高了一些性能。运行时间必须提前掌握。
  3. 最短剩余时间优先。即最短作业优先的抢占版本。调度程序总是选择剩余运行时间最短的作业执行。每当一个新的作业到达,如果运行时间比当前进程的剩余运行时间短,就挂起当前进程并切换到新的进程。

四 、交互式系统中的调度

  1. 轮转调度。最简单且最公平的方法,给每个进程分配一个时间片。当时间片耗尽时,进程会下CPU并加入到就绪队列的队尾。问题的关键是选择合适的时间片。
  2. 优先级调度。进程有轻重缓急,于是给进程设置不同的优先级,每次调度优先级最高的进程运行。当然,这样可能会导致优先级低的进程饥饿。解决方法时,实行奖惩措施。高优先级进程耗尽时间片会降低它的优先级。
  3. 多级队列。给不同优先级的进程队列,设置不同单位的时间片。同时,设置不同单位的时间片。同时,也实行奖惩机制,耗尽时间片会改变进程的队列级别。

五、线程的调度

线程的调度,取决于支持的是内核级线程还是用户级线程
对于用户级线程,内核不知道线程的存在,就给了进程很大的自主权。内核只是调度进程,进程中的调度程序选择哪个线程来运行。
对于内核级线程,线程的调度就交给了系统完成。

参考文献:
[1] 百度百科-线程调度
[2] 操作系统学习笔记(三) 进程和线程的调度

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值