前言
随着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可以同时执行多个进程,我们把这种情况叫做并行;
总结
这里只是简单地介绍了系统对于进程的调度方式,随着学习的深入,我还会为大家介绍更多的调度算法,如果您觉得文章对您有帮助的话,不妨点个赞再走吧!!!