什么是进程
进程是操作系统对一个正在运行的程序的一种抽象。简单来说,一个正在运行的程序就是一个“进程”,没有跑起来的程序就不算是一个进程。
“进程”(process)也可以叫做“任务”(task)。那么举栗子来了解什么是“进程”:Ctrl+Alt+Delete打开任务管理器,可以看到有下面这些进程,这些进程正在运行:
![](https://img-blog.csdnimg.cn/img_convert/b08059efbaa8467a8ea771988a227f4f.png)
其中每个进程都会对应一些资源,在操作系统内部,进程又是操作系统进行资源分配的基本单位。
进程是一个重要的软件资源,由操作系统内核直接负责的。那么操作系统对于进程是如何管理的呢?主要分为两步:描述+组织
操作系统如何管理进程?
两步走:描述+组织
- 描述
如何描述,也就是说清楚有哪些属性特征。进程的属性特征是使用结构体(C语言的结构体,因为操作系统基本都是用C语言/C++来写的)来描述的。对于这个结构体我们对它起了一个特殊的名字:PCB(进程控制块)。每一个 PCB 对象,就代表着一个实实在在运行着的程序,也就是进程。❗注意:这里的PCB是一个结构体,而不是一个硬件板。
- 组织
简单来说,就是通过多个数据结构将多个基本单位串接起来。操作系统通过这种数据结构,例如线性表、搜索树等将 PCB 对象组织起来,方便管理时进行增删查改的操作。
例如:通过双向链表(并非一个简单地双向链表)将多个PCB串在一起。
(1)创建一个进程,其实质上就是建立一个PCB这样的结构体对象,将它插入到链表中。
(2)销毁一个进程,实质上就是将链表上的PCB节点删除掉。
(3)在任务管理器中查看这些进程,实质上就是将这个PCB链表遍历一遍。
PCB里边描述了哪些进程的特征?
进程的唯一标识 —— pid。也是进程的身份标识符,唯一的数字。
内存指针 —— 指向了自己的内存是有哪些。
文件描述符表 —— 硬盘上的文件等其他资源。
进程调度的相关属性
4.1进程的状态
首先先了解3个基本的状态:
就绪态:随叫随到,进程已经准备好了,随时都可以去CPU上执行。
运行态:正在运行的进程。
阻塞态:由于某种原因,进程无法回到CPU中运行,比如进程在执行密集的IO操作、读写数据。
4.2优先级
进程也是有优先级的,操作系统在调度进程的时候并不是在一碗水端平,而是根据优先级高低来绝对先调度谁,后调度谁。
4.3上下文
操作系统在进行进程切换的时候就需要把进程执行的“中间状态”记录下来,并且保存起来,下次该进程回到CPU执行的时候就会恢复到之前的状态,继续往下执行。此过程就相当于是“存档,读档”,上下文本质上就是我们存档的内容。进程的上下文,就相当于是各个寄存器的值,寄存器就是CPU内置的存储数据的模块,保存的就是程序运行过程中计算的结果。保存上下文,就是把CPU寄存器的值记录并保存在内存中,也就是PCB中。恢复上下文就是把内存中这些记录的寄存器的值恢复回去。
4.4记账信息
操作系统会统计每个进程在CPU上的占用时间,和执行的指令条数,根据这些来决定下一阶段该如何调度。这就是记账信息。
以上就是PCB的核心属性,想要了解PCB更多的属性还请读者自行了解。