进程与线程¶
约 1168 个字 2 张图片 预计阅读时间 6 分钟
什么是进程¶
进程的概念与特征¶
进程
进程可以说是计算机中某个程序在运行时的一个实例.举个例子,程序就是一道菜的菜谱,而进程就是你实际做菜的过程.每次你根据菜谱做菜,你都在创建一个新的进程.
官方话的定义是:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
系统资源实际上是CPU,内存等为这个进程分配的时间
进程在内存中运行,它需要硬盘上的一段代码之类的存在,来执行其任务;执行任务中可能会产生各种数据要保存;另外,操作系统也希望了解进程的状态,以便进行调度和管理.
基于以上需求,进程一般由如下三部分组成:
-
进程控制块(PCB):PCB是进程的一部分,存在于内存中,是进程中最重要的部分.
- PCB不断存储着进程的状态,当前处理器各寄存的值等,以便于操作系统对进程进行调度和管理.
-
程序段(text segment):程序段是进程的一部分,包含进程运行所需的机器指令。运行时,程序段会被加载到内存中供 CPU 执行。
- 多个进程可以共享同一份程序段,也即,多个进程可以运行同一份代码.
-
数据段(data segment):数据段是进程的一部分,存在于内存中,用于存储进程运行时所需的各种数据.
- 数据段包含了进程运行所需的全局变量,静态变量等数据.
进程的状态与转换¶
电脑的CPU和内存等资源是有限的,所以,操作系统需要对进程进行调度和管理.进程在其生命周期中会经历不同的状态,这些状态包括:
-
运行态(Running):进程正在使用CPU执行其任务.如果是单核CPU,同一时间只能有一个进程处于运行态.
-
就绪态(Ready):进程获得了除CPU以外所有需要的资源,只要获得了CPU就可以运行.所有的就绪态进程组成一个就绪队列,等待CPU的调度.
-
阻塞态(Blocked):也称等待态.进程因为缺少某项资源(不包括CPU)而无法继续执行,只能等待.例如,进程需要等待I/O操作完成,或者等待某个信号量等. 阻塞的进程也会排成一个阻塞队列,有时也会根据不同的阻塞原因分成多个阻塞队列.
-
创建态(New):进程刚被创建,还没有进入就绪队列.一个进程的创建,需要先申请一个PCB,在PCB中初始化进程的各种信息,然后还需要等待分配所需的各种系统资源,最后才能进入就绪队列.
-
终止态(Terminated):进程完成了其任务,或者因为某种原因被强制终止,进入终止态.进程进入终止态后,操作系统会回收其所占用的资源,并将其PCB等信息从内存中删除.
为什么我们需要区分就绪态与阻塞态
在系统资源中,CPU资源和其他资源都不一样.CPU是不断轮转的,一个进程可能每次只能分到几毫秒的CPU时间片,然后就要把CPU让给其他进程使用.进程会经常在就绪态和运行态之间切换.
而阻塞态等待的资源,可能需要等待很长时间,例如等待用户输入,等待网络数据传输等.进程一旦进入阻塞态,就不会再自动变成就绪态,而是要等到所等待的资源变得可用时,操作系统才会把它从阻塞态变成就绪态.
需要注意的是,一个进程从运行态变成阻塞态,是因为它主动请求某项资源,而不是因为操作系统强制它放弃CPU.如果操作系统强制一个运行态进程放弃CPU,那么这个进程会变成就绪态,而不是阻塞态.
而一个进程从阻塞态变成运行态,往往是一个被动的过程,因为它等待的资源变得可用,操作系统才会把它变成就绪态,然后再调度它进入运行态.