【多线程】进程调度的基本过程

进程调度的基本过程

  • 1. 什么是进程/任务(Process/Task)
  • 2. 描述一个进程
  • 3. 什么是进程调度?
    • 3.1 进程状态
    • 3.2 进程的优先级
    • 3.3 进程的上下文
    • 3.4 进程的记账信息
  • 4. 组织这些进程

1. 什么是进程/任务(Process/Task)

操作系统本身是一个大的话题,是一个非常复杂的软件

操作系统中的功能非常多,其中有一个功能模块,叫做进程管理

那么什么是进程(process)/任务(task)?

一个运行起来的程序,就是进程。

进程管理

为什么需要进程管理?因为进程多了,才需要管理

所谓的管理,其实就是分两步:

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

例如

一个学校中有很多的学生,学生很多,需要进行管理

第一步:明确每个学生的相关属性信息

第二步:通过一定的数据结构把这些学生的信息存放起来(例如表格)

2. 描述一个进程

描述进程的结构体里面有哪些属性?(属性非常多,只是挑几个核心的)

描述进程的结构体叫PCB(process control block)——进程控制块

那么PCB里面有哪些属性呢?

  1. pid(process identity)进程标识

    每个进程需要有一个唯一的身份标识

  2. 内存指针:当前这个进程使用的内存是哪一部分。(标志了进程运行的时候,使用了哪些内存上的资源)

    进程运行起来,就需要消耗一定的硬件资源,比如,内存

  3. 文件描述符表(标志了进程运行的时候,使用了哪些硬盘上的资源)

文件描述符表,是一个顺序表,存储的元素是文件描述符。
文件描述符和文件相关。

文件:硬盘上存储的数据,往往就是以文件为单位进行整理的

进程每次打开一个文件,就会产生一个”文件描述符“(标识了这个被打开的文件)

一个进程可能会打开很多文件,对应一组文件描述符。

把这些文件描述符放到一个顺序表这样的结构里,就构成文件描述符表

  1. 接下来这一组属性,都是描述和cpu资源相关的属性

    这些属性都是辅助进行进程调度的。

3. 什么是进程调度?

程序能够运行,全靠cpu。那么cpu怎么运行呢?我们经常听到描述cpu是8核16线程。意思是8个物理核心,16个逻辑核心。8个干活的人,能够干16个人的活。但是这个也是不够的,因为我们的进程有上百个【多线程】进程调度的基本过程_第1张图片

因此我们有了,“并行”和“并发”两个概念

并行:同一时刻,两个核心,同时执行两个进程,此时这两个进程就是“并行”执行的

并发:一个核心,先执行进程1,执行一会之后,再去执行进程2,再执行一会之后,再去执行进程3,此时只要这里的切换速度足够快,看起来进程123就是“同时”执行的

此时,虽然只有16个核心,也可以通过“并行+并发”方式,同时执行很多个任务了。不过“并行+并发”完全是操作系统自身控制的,程序员感知不到,所以很多时候,就把 “并行+并发”统称为并发

为了保证进程并发时候的进程切换的足够高效,这个时候就需要进程调度。

3.1 进程状态

简单认为,进程状态主要是这两个:就绪态和阻塞态

就绪态:该进程已经准备好,随时可以上cpu执行

阻塞态:该进程暂时无法上cpu执行

3.2 进程的优先级

进程之间的调度不一定是“公平”的,有的进程要优先调度

3.3 进程的上下文

上下文,就是描述当前进程执行到哪里这样的“存档记录”

进程在离开cpu的时候就要把当前运行的中间结果进行“存档”

等到下次进程回到cpu的时候,再恢复之前的“存档”,从上次的结果继续往后执行

这里“存档记录”就是进程运行过程中,cpu内部的一系列寄存器的值

注意1:cpu中存空间的地方,我们叫做寄存器,寄存器有很多种,其中最典型的作用就是保存当前进程执行的中间结果,包括进程运行到哪一条指令,进程离开cpu,就需要把这些寄存器的值保存到PCB的上下文字段中,进程下次回来cpu,再把PCB中的值给恢复到寄存器中。

注意2:cpu上有哪些寄存器,这些寄存器的含义是什么,不做过多讨论,我们不太关注底层

3.4 进程的记账信息

统计了每个进程,在cpu上执行了多久

可以作为调度的参考依据

PCB的属性是非常多的,我们只是讲了几个重点来介绍

4. 组织这些进程

操作系统往往使用双向链表这样的结构来组织pcb

换言之

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

因此进程调度的过程就是操作系统描述进程,调度进程,组织进程的过程。

你可能感兴趣的:(多线程,java,java-ee)