进程管理

首页 / 操作系统 / 正文

进程与线程

进程:进程可以理解为程序对数据或请求的处理过程,也是资源分配的基本单位,具体来说包含以下四个方面:

  1. 进程至少运行一个可执行程序,含有代码和初始数据,在进程创建时说明
  2. 进程包含一个独立的进程用户空间,在创建时由操作系统分配
  3. 进程包括系统资源,在创建和执行过程中由操作系统分配给进程的,例如I/O设备、文件等
  4. 进程包含一个执行栈区。

进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态,所谓的创建进程和撤销进程,都是指对 PCB 的操作。

线程:独立的CPU调度单位,可以被进程调度程序占用CPU并发运行,在一个进程中包含多个可以并发(并行)执行的线程

区别:

  • 在引入线程后,进程成为系统资源的分配单位,线程则是CPU的分配单位。线程不拥有资源,但是可以访问隶属进程的资源
  • 同一进程中,线程的切换不会引起进程切换。从一个进程中的线程切换至另外一个进程中的线程时会引起进程的切换
  • 由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程 CPU 环境的保存及新调度进程 CPU 环境的设置,而线程切换时只需保存和设置少量寄存器内容,开销很小。
  • 线程间可以通过直接读写同一进程中的数据进行通信,但是进程通信需要借助 IPC。
  • 进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒大小不同。

进程状态

截屏2021-09-10 下午8.14.56.png
就绪态:一个进程具备了所有可以执行的条件,只要获得CPU就能开始执行

运行态:当前占有CPU、正在执行的进程状态

阻塞态:指一个进程因为缺少某些条件,即使分配CPU也无法执行的状态

进程调度

  • 先来先服务调度算法(FCFS)

    按照进程进入就绪队列的先后次序进行选择,当长作业先达到就绪状态时,会使得短作业等待时间过长,增加了进程的平均周转时间

  • 优先级调度算法

    按照进程的优先级高低来进行调度

  • 时间片轮转调度算法

    将所有就绪进程按 FCFS 的原则排成一个队列,每次调度时,把 CPU 时间分配给队首进程,该进程可以执行一个时间片。当时间片用完时,由计时器发出时钟中断,调度程序便停止该进程的执行,并将它送往就绪队列的末尾,同时继续把 CPU 时间分配给队首的进程。

    时间片轮转算法的效率和时间片的大小有很大关系:

    • 因为进程切换都要保存进程的信息并且载入新进程的信息,如果时间片太小,会导致进程切换得太频繁,在进程切换上就会花过多时间。
    • 而如果时间片过长,那么实时性就不能得到保证。
  • 短进程优先调度算法(SJF)

    非抢占式的调度算法,按估计运行时间最短的顺序进行调度。

    长作业有可能会饿死,处于一直等待短作业执行完毕的状态。因为如果一直有短作业到来,那么长作业永远得不到调度。

  • 最短剩余时间优先调度算法(SRTN)

    最短作业优先的抢占式版本,按剩余运行时间的顺序进行调度。 当一个新的作业到达时,其整个运行时间与当前进程的剩余时间作比较。如果新的进程需要的时间更少,则挂起当前进程,运行新的进程。否则新的进程等待。

  • 最高响应比优先调度算法

    响应时间:进程等待时间+要求的服务时间 优先数 = 响应时间/要求的服务时间

    短作业优先,当长作业等待了较长时间后,优先数提高,得到了CPU。

  • 多级反馈队列调度算法

    一个进程需要执行 100 个时间片,如果采用时间片轮转调度算法,那么需要交换 100 次。

    多级队列是为这种需要连续执行多个时间片的进程考虑,它设置了多个队列,每个队列时间片大小都不同,例如 1,2,4,8,..。进程在第一个队列没执行完,就会被移到下一个队列。这种方式下,之前的进程只需要交换 7 次。

    每个队列优先权也不同,最上面的优先权最高。因此只有上一个队列没有进程在排队,才能调度当前队列上的进程。

    可以将这种调度算法看成是时间片轮转调度算法和优先级调度算法的结合。

    截屏2021-09-10 下午8.42.41.png

无标签
评论区
头像
文章目录