进程调度的基本过程


前言

随着Java学习的深入,我们有必要学习一些关于操作系统的知识,今天我们就来简单地介绍一下操作系统中关于进程调度基本过程的介绍;


1. 进程是什么?

进程就是一个应用程序,一个软件可以有多个进程为它服务,比如我们使用QQ(或者TIM)时,打开任务管理器,可以看到
至少有三个进程在为它服务;
在这里插入图片描述

2. 操作系统对进程的调度

操作系统管理进程,会用到进程控制块(PCB)或者叫进程表,我们可以把进程表理解为是一种数据结构,把进程当作链表中的结点;

2.1 进程的执行周期

一个进程,从被创建到被执行,这个过程是怎么样的呢?

首先,为了管理进程,系统会先创建一个PCB,PCB被创建后,会做以下五项工作:
(1)标记进程身份:为每个进程创建一个pid,用于区分不同的进程;
(2)标记进程状态:运行、阻碍、就绪等状态;
(3)存储进程的内存指针;
(4)为进程创建描述符表;
(5)记录进程的调度信息:如执行了多少行代码,等待了多久等;

2.2 系统如何调度进程?

对于进程,CPU的一个核心同时只能执行一个进程,那么计算机是如何做到可以同时运行多个程序的呢?

实际上,系统在执行程序时会一直“反复横跳”,也就是每个程序只执行一段时间,然后再去执行下一个程序,只要在一定的时间内跳的次数足够多,我们就能感觉到系统好像是同时在执行多个程序。

这是不是有点像我们小时候边写作业边看电视的场景呢?系统就好像是我们的注意力,我们的注意力不可能同时集中在“写作业”和“看电视”两件事情上,那么之所以我们能做到边写作业边看电视,就是因为我们的“注意力”在反复横跳,只要它跳地足够快,那么既按时完成作业,又不耽误看电视的目标还是可以完成的;

2.3 时间片轮转调度算法

我们在上文说可以把PCB看作是数据结构,既然是数据结构,必然涉及到多种算法,事实上也的确是这样,系统对于进程的调度,其实涉及到多种调度算法,在这里,我们简要的介绍一下时间片轮转调度算法;

在时间片轮转算法中,进程B在被执行之前,先进入就绪状态,等待上一个进程A执行结束后,进程B就进入了运行状态,进程B后面也许还会有等待被执行的进程C、D、E、F,如果此时进程F想要“插队”,那么它就会进入阻塞状态,然后从阻塞状态进入就绪状态,就绪状态结束后进入运行状态,完成“插队”;
在这里插入图片描述

2.4 并发和并行

如上文所说的那样,系统以时间片轮转的方式“同时”执行多个进程的情况,我们把它叫做并发;
随着计算机硬件水平的飞速发展,如今的计算机不再是单一核心的CPU,多核心的好处就是每一个核心都能执行一个进程,所以一个CPU可以同时执行多个进程,我们把这种情况叫做并行;


总结

这里只是简单地介绍了系统对于进程的调度方式,随着学习的深入,我还会为大家介绍更多的调度算法,如果您觉得文章对您有帮助的话,不妨点个赞再走吧!!!

  • 36
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 54
    评论
### 回答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 。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

马孔多镇长

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

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

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

打赏作者

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

抵扣说明:

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

余额充值