Linux进程调度过程

本文详细介绍了Linux操作系统中的进程调度,包括进程调度程序的工作原理、多任务操作系统的概念、时间片分配、调度策略、进程优先级管理、内核抢占和上下文切换等关键概念。调度程序通过合理分配处理器时间,确保系统的高效运行和进程的公平调度。
摘要由CSDN通过智能技术生成

目录

什么是进程调度程序?

多任务操作系统

时间片

进程调度的策略

进程优先级

优先级数组

重新计算时间片

schedule函数

schedule函数如何找到下一个需要执行的进程?

计算优先级与时间片

睡眠与唤醒

Linux负载平衡程序

抢占与上下文切换

用户抢占

内核抢占

什么时候调度内核才是安全的呢?

内核抢占的发生时间点


什么是进程调度程序?

调度程序是内核的组成部分,负责选择下一个要运行的进程,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统。

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

多任务操作系统

多任务操作系统就是能同时的并发交互执行多个进程的操作系统

非抢占式多任务:除非进城自己主动停下,否则他会一直执行,进程主动挂起自己的操作称为让步,有很多缺点一般不会使用。

抢占式多任务:由调度程序来决定什么时候停止一个进程的运行以便其他进程能够得到执行机会,这个强制的挂起动作就叫做抢占。

时间片

进程在被抢断之前能够独立运行的时间是之前预设好的,而且有一个专门的名字叫做进程的时间片。时间片实际上就是分配给每个可运行进程的处理器时间段,有效管理时间,便能使调度程序从系统全局的角度做出调动决定,还可以避免个别进程独占系统资源。

进程调度的策略

I/O消耗型:大部分的时间都在用来提交I/O请求,或者是等待I/O请求,这样的进程,经常处于可运行状态,但是运行时间较短,因为在等待更多的I/O请求时,总是会阻塞。

处理器消耗:把时间大多用在执行代码上,除非被抢断,否则他们通常都一直不停的运行,因为他们没有太多的io需求。

对于以上的两种可能出现的情况,对于io消耗型,我们可以提高它的优先级,快速的响应。对于消耗型系统我们可以降低它的优先级较低,时间片比较长。我们需要在两个矛盾的目标中寻找平衡,进程响应速度和最大系统利用率

进程优先级

调度算法中最基本的一类就是基于优先级的调度。是根据进程的优先级和其对处理器的时间需求来分配

Linux内部实现的是一个动态的优先级的调度方法,一开始,该方法设置基本的优先级,然而它允许调度程序根据需要来加、减优先级。

主要有两种独立的优先级范围

  1. nice值(-20 ~ 19),nice值越高表示该进程的优先级越低,nice值越低优先级越高
  2. 实时优先级:其值在0到99,任何事和操作进程的优先级都高于普通
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux进程调度过程是指操作系统在多个进程之间分配CPU时间片的过程。调度过程主要包括进程的选择和CPU时间片的分配。 在Linux中,进程调度采用抢占式调度方式,即操作系统可以在任何时候中断正在运行的进程,并将CPU分配给其他进程。进程调度的主要目的是提高系统的性能和响应速度,同时保证公平性和稳定性。 Linux进程调度过程包括以下几个步骤: 1. 选择就绪队列中的进程:就绪队列是指已经准备好运行的进程队列。操作系统会从就绪队列中选择一个优先级最高的进程进行调度。 2. 分配CPU时间片:操作系统会为选中的进程分配一个时间片,通常为几毫秒到几十毫秒不等。如果进程在时间片结束前没有完成任务,则操作系统会将CPU分配给其他进程。 3. 运行进程:操作系统将CPU分配给选中的进程,进程开始执行任务。 4. 中断进程:如果进程在运行过程中发生了中断,如IO操作或者信号处理等,操作系统会中断进程的执行,并将CPU分配给其他进程。 5. 将进程放回就绪队列:当进程的时间片用完或者被中断时,操作系统会将进程放回就绪队列,等待下一次调度。 总之,Linux进程调度过程是一个动态的过程,操作系统会根据进程的优先级和CPU的使用情况,不断地进行调度,以保证系统的性能和稳定性。 ### 回答2: Linux进程调度过程主要分为三个部分:优先级调度、时间片轮转和实时调度。 1. 优先级调度 优先级调度是针对非实时进程(普通进程)的调度方式。Linux中将优先级分为0~139个等级,其中0~99为实时优先级,100~139为普通优先级。优先级越高,调度器会越先让这个进程执行。如果优先级相同,则采用时间片轮转的方式进行调度。 2. 时间片轮转 时间片轮转是针对普通进程的一种调度方式,主要思想是为每个任务分配一个时间片段,当时间片用完后,将任务放回就绪队列,并分配下一个任务。调度器会周期性地给每个进程分配一段时间。对于多个优先级相同的进程,采用轮转方式分配时间片。 3. 实时调度 实时调度是针对实时进程的一种调度方式。实时进程通常对时间敏感,需要保证实时性,而时间片轮转无法满足这种要求。实时调度主要分为以下两种: (1)基于优先级的实时调度:与普通进程调度类似,采用优先级调度的方式。不同之处是所有的实时进程都是具有相同优先级的。 (2)基于期限的实时调度:每个实时进程有一个期限(deadline),即完成任务的最后时间,而这个期限是固定的,无法改变。调度器会优先处理剩余时间最短的任务。如果到期限时任务没有完成,则会被取消。 总的来说,Linux进程调度过程是一个复杂的流程,既要考虑非实时进程的调度,也要考虑实时进程的调度,需要根据不同的任务类型和优先级进行合理的分配和调度,以保证系统的稳定性和实时性。 ### 回答3: 在 Linux 中,进程调度是内核中非常重要的组成部分。Linux 采用时间片轮转和优先级两种基本的进程调度算法,其中时间片轮转算法是最主要的调度方式。下面重要步骤: 1. 进程调度队列 Linux 内核中将进程存放在 Ready Queue、Wait Queue 和 Sleep Queue 中。其中,进程在等待资源(如等待 I/O 操作)时,会被放入 Wait Queue 中,并且会被阻塞挂起。而 Sleep Queue 则是处理睡眠进程的队列,这些进程通常是因为等待某种事件而被挂起的。 Ready Queue 是最关键的队列,它存放了所有可以运行的进程。这个队列中的进程通常以循环链表的形式被连接起来。 2. 时间片轮转调度 时间片轮转调度算法是 Linux 中的主要调度算法。它首先通过设置一个时间片,为每个进程分配一定的 CPU 时间,然后在这段时间内轮流执行这些进程。当一个进程已经用完了它分配的时间片后,它会被重新放入 Ready Queue 的队尾,等待下一个时间片继续执行。 需要注意的是,在轮流执行进程时,如果一个进程已经完成了它的任务或者等待某个事件的返回,那么它就会从 Ready Queue 中移除,释放 CPU ,等待下一个任务的分配。 3. 优先级调度 Linux 内核中实现了两种不同的优先级调度方法:静态优先级和动态优先级。静态优先级是在进程创建时即被确定的,动态优先级则可以根据进程实际运行情况进行调整。 在 Linux 中,为了避免高优先级进程“饥饿”现象,可以针对低优先级进程设置抢占式调度策略,以保障所有进程都能够被公平地分配 CPU 时间。 总而言之,Linux进程调度算法遵循时间片轮转和优先级调度两种方式,以此保证进程可以在合理的时间内被分配到 CPU 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值