进程调度的基本过程讲解

文章目录

  • 什么是进程
  • 什么是进程管理
  • 进程的调度
  • 内存分配
  • 进程间的通信

什么是进程

什么是进程呢?我们说一个运行起来的程序就是一个进程,打开任务管理器就可以看见在后台运行了哪些进程,以及他们所占用资源的情况。进程调度的基本过程讲解_第1张图片

什么是进程管理

为什么要进程管理呢?通过上图我们发现在后台运行了许多的进程,进程多了就需要管理,所谓的管理分为两步:

1、描述一个进程:使用结构体或者类,把一个进程有哪些信息表示出来。
2、组织这些进程:使用一定的数据结构,把这些结构体或者对象放到一起

上述进程管理的过程类似于学校的学生管理系统,学生管理系统首先要收集学生的信息,其次要使用一定数据结构将这些学生信息组织起来。

进程的调度

要了解进程调度,就需要对进程有更深度的了解,那么描述进程的结构体有哪些属性呢?

pid
pid是每一个进程的身份证,是他们唯一的身份标识

内存指针
内存指针描述了进程在运行时使用了哪些内存资源

文件描述符表
硬盘上的数据通常是以文件的形式进行整理的,而进程每次打开一个文件,就会产生一个文件描述符标记这个文件已经被打开,而一个进程的运行需要打开很多文件,这些文件描述符使用顺序表汇总起来就构成文件描述符表。简单来讲,文件描述符表描述了进程在运行的时候消耗哪些硬盘资源。

一个进程的运行需要硬件资源的支持,操作系统为进程分配资源,我们可以说进程就是系统进行资源分配的基本单位,而这些属性就描述了进程消耗了哪些资源例如:内存、硬盘、CPU,下面一些属性都是描述和CPU资源相关的属性:

进程状态
就绪态:该进程随时可以上cpu执行
阻塞态:该进程暂时无法上cpu执行

进程的优先级
进程与进程之间是有优先级的,有的进程先调用有的后调用

进程的上下文
这个属性类似于存档记录,进程离开CPU的时候把当前运行的中间结果存档,当下次进程再次在CPU上运行时,从上次存档的地方继续运行。

进程的记账信息
记录进程在CPU上运行多长时间,并且进行调整,可以作为调度的依据,如果时间比一般该进程运行的时间短,就进行相应的操作延长进程运行时间,保持一般状态。

那么这些属性如何影响进程对CPU上的资源的占用呢?大家一定都买过电脑,买电脑时对CPU的评价有一个类似8核心16线程的描述,这是什么意思呢?我们可以把CPU比作一个工厂,这16个线程就是工厂中干活的人,我们的进程就是需要干的活,我们发现只有16个工人但是我们有100多个活需要干,如何操作呢?操作系统采用了并行 + 并发的形式来完成操作。

并行就是同一时刻两个工人,同时干两个活
并发就是一个工人,一会干活1,一会干活2,并且切换速度极快,看起来就是活1跟活2一起执行的。

此时上面的属性就可以决定哪个进程执行,哪个不执行,哪个执行时间长,哪个执行时间短,从而影响了进程的调度。

进程管理第二步是使用数据结构组织进程,使用了什么数据结构呢?操作系统往往使用双向链表这样的数据结构来组织进程。

1、创建一个进程,就是创建了一个链表的节点
2、销毁一个进程,就是把链表的节点给删除了
3、遍历进程列表,就是在遍历链表

内存分配

通过上面的描述我们知道,进程的运行会消耗资源,内存资源也不例外,但是操作系统分配的内存是以虚拟地址的方式进行分配的,每个进程访问的都不是真实的物理地址。
进程调度的基本过程讲解_第2张图片
类似于上图,进程获得的虚拟地址需要通过页表进行翻译才可以访问到物理地址,这样设计的好处是可以增加进程之间的隔离性,一个进程挂了不会影响到另一个进程。如果直接访问物理地址很有可能,进程之间会相互影响。

进程间的通信

进程有时需要相互之间进行配合操作,如果每个进程都是直接访问内存那么就可以直接操作进行信息交换,但是现在进程获得是虚拟内存,各个进程之间具有隔离性,此时在进行信息交换时就需要找到一个公共区域,让两个进程借助这个区域来完成数据交换。此处仅作了解即可,不做过多的展开。

你可能感兴趣的:(JavaEE初阶,java)