前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Linux内核】进程调度

【Linux内核】进程调度

作者头像
看、未来
发布2020-08-25 14:17:35
2.8K0
发布2020-08-25 14:17:35
举报
在这里插入图片描述
在这里插入图片描述

文章目录
  • 前言
  • I/O消耗型与处理器消耗性
  • 进程优先级
  • 时间片
  • 进程抢占

前言

调度程序没有太复杂的原理。最大限度地利用处理器时间的原则是,只要有可以执行的进程,那么就总会有进程正在执行。但是只要系统中进程的数目比处理器的个数多,就注定会有一些进程不能一 直执行。这些进程在等待运行。在一 组处于可运行状态的进程中选择一个来执行,是调度程序所需完成的基本工作。

多任务系统可以划分为两类:非抢占式多任务(cooperative multitasking) 和抢占式多任务(preemptive multitasking)。Linux 提供了抢占式的多任务模式。在此模式下,由调度程序来决定什么时候停止一个进程的运行以便其他进程能够得到执行机会。这个强制的挂起动作就叫抢占(preemption)。== 进程在被抢占之前能够运行的时间是预先设置好的==,而且有一个专门的名字,叫进程的时间片(timeslicc):时间片实际上就是分配给每个进程的处理器时间段。有效管理时间片能使调度程序从系统全局的角度做出调度决定,这样做还可以避免个别进程独占系统资源。

相反,在非抢占式多任务模式下,除非进程自己主动停止运行,否则它会一直执行。 进程主动挂起自己的操作称为让步(yielding)。 这种机制有很多缺点:调度程序无法对每个进程该执行多长时间做出统一规定,所以进程独占的处理器时间可能超出用户的预料,更糟的是,一个决不做出让步的悬挂进程就能使系统崩溃。

I/O消耗型与处理器消耗性

进程可以被分为I/O消耗型和处理器消耗型。前者指进程的大部分时间用来提交I/O请求或是等待I/O请求。因此,这样的进程经常处于可运行状态,但通常都是运行短短的一会儿, 因为它在等待更多的I/O请求时最后总会阻塞(这里指的是所有的I/O操作,像键盘活动等都包括,并不仅仅局限于磁盘I/O)。相反,处理器耗费型进程把时间大多用在执行代码上。除非被抢占,否则它们通常都一直不停地运行,因为它们没有太多的I/O需求。但是,因为它们不属于I/O驱动类型,所以从系统响应速度考虑,调度器不应该经常让它们运行。对于这类处理器消耗型的进程,调度策略是尽量降低它们的运行频率,而将它们的运行时间拖长一些。

进程优先级

调度算法中最基本的类就是基于优先级的调度。 这是一种根据进程的价值和其对处理器时间的需求来对进程分级的想法。优先级高的进程先运行,低的后运行,相同优先级的进程按轮转方式进行调度(一个接一个,重复进行)。在包括Linux在内的某些系统中,优先级高的进程使用的时间片也较长。调度程序总是选择时间片未用尽面且优先级最高的进程运行。用户和系统都可以通过设置进程的优先级来影响系统的调度。

时间片

时间片是一个数值,它表明进程在被抢占前能持续运行的时间。调度策略必须规定一个默认的时间片,但这并不是一个简单的事。 时间片过长会导致系统对交互的响应表现欠佳,让人觉得系统无法并发执行应用程序。时间片太短会明显增大进程切换带来的处理器耗时,因为肯定会有相当一部分系统时间用在进程切换上,而这些进程能够用来运行的时间片却很短。此外,I/O消耗型和处理器消耗型的进程之间的矛盾在这里也再次显露出来:I/O消耗型不需要长的时间片,而处理器消耗型的进程则希望越长越好(比如说这样可以让它们的高速缓存命中率更高)。

从上面的争论中可以看出,任何长时间片都将导致系统交互表现欠佳。很多操作系统中都特别重视这一点,所以默认的时间片很短如20毫秒。

在这里插入图片描述
在这里插入图片描述

注意,进程并不是一定非要一次就用完它所有的时间片。举例来说,一个拥有100毫秒时间片的进程并不一定在一次运行中就要用完所有这些时间。相反,进程可以通过重复调度,分五次每次20毫秒用完这些时间片。这样,即使是交互式程序也能从中获益一当 它们没必要一次用这么多时间的时候,它们可以分几次使用,这样能保证它们尽可能长时间的处于可运行状态。

当一个进程的时间片耗尽时,就认为进程到期了。没有时间片的进程不会再投入运行,除非等到其他所有的进程都耗尽了它们的时间片(也就是说它们]的剩余时间片为0)。在那个时候,所有进程的时间片会被重新计算。

进程抢占

像前面所说的,Linux 系统是抢占式的。当-个进程进入TASK_RUNNING状态,内核会检查它的优先级是否高于当前正在执行的进程。如果是这样,调度程序会被唤醒,重新选择新的进程执行(应该会是刚刚进人可运行状态的这个进程)。此外,当一个进程的时间片变为0时,它会被抢占,调度程序被唤醒以选择-一个新的进程。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 前言
  • I/O消耗型与处理器消耗性
  • 进程优先级
  • 时间片
  • 进程抢占
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档