进程和进程调度
目录
1.进程的引入
2.进程的概念
3.操作系统如何管理进程
4.PCB
4.1 PCB的理解
4.2 PCB的一些关键属性
5.进程调度
1.进程的引入
进程是操作系统中一个非常重要的概念。先来理解什么是操作系统。
相信大家对于操作系统并不陌生,比如目前常见的操作系统有:Android系统、IOS系统、Windows系统、Linux系统以及鸿蒙系统等。那么,操作系统究竟是什么?
操作系统是一组做计算机资源管理的软件的统称。简单理解它就是一个“大管家”,专门搞管理工作的,并给各种应用程序提供一个稳定的运行环境。这些应用程序在工作过程中,是不会发生相互干扰的,即使某一个应用程序发生一些问题(bug)也不会影响其他应用程序的正常运行。
想要完成这种稳定的运行环境,就需要进程,进程就是专门辛辛苦苦搞工作的“奋斗者”。
2.进程的概念
上面提到,进程就是专门辛辛苦苦搞工作的“奋斗者”。所以,进程就是操作系统对一个正在运行的程序的一种抽象,简而言之,就是把进程看作程序的一次运行(或者一个运行起来的程序就是一个进程)。
3.操作系统如何管理进程
进程为什么需要管理?
可以假设有一个班级的学生,学生有各种信息包括学号、姓名、性别、联系方式、家庭住址等等,如果只是十几个学生,班主任可以记住每位同学的信息。但是如果人数很多,班主任就很难记住他们的全部信息,所有这时候就需要管理,通过一些方法保存学生的各种信息。
操作系统也是如此,在现代的计算机中,同一时间跑百八十个进程是非常常见的,所以操作系统就需要对这些进程进行管理。操作系统依靠进程控制块(Process Control Block,PCB)对进程进行管理(关于 PCB 在后文讲)。
所以,操作系统要先描述一个进程是什么样的(就行在Java中描述一个类一样),使用 PCB 描述这个进程的核心属性,然后把通过数据结构把这些进程组织起来,比如 Linux 这样的操作系统就是使用数据结构中的链表把多个 PCB 给连接到一起的,这就创建了一个新的进程。如果要销毁一个进程,对于链表形式就是把这个进程的 PCB 在链表上找到,必然会进行删除即可。最后是查看进程列表,会先遍历链表,取出链表上的每个元素,然后把一些关键信息显示出来。(不同的操作系统连接 PCB 时使用的数据结构不一样,这里只是以 Linux 为例)
4.PCB
4.1 PCB的理解
前文提到 PCB ,PCB 是什么呢?
计算机内部要管理的任何事物,都需要将其抽象成一组有关联的、互为一体的数据。在Java中我们会通过类来描述这一特征。所以,PCB 也是这样的,它可以理解成一个巨大的结构体,里面存放很多种属性,相当于它描述的是一个类的属性。这样,每一个 PCB 对象,其实就代表这一个实实在在的正在运行的程序,也就是进程。
4.2 PCB的一些关键属性
1. PID :指进程的 id,进程的身份标识符。
2.内存指针:一个 PCB 对象,其实就是一个进程,那么进程需要执行的指令依赖的是什么?在电脑上,每一个应用程序对应一个 .exe 文件,当双击这个文件时,就创建了一个进程,此时操作系统就会把 .exe 中的指令和数据读取出来,加载到内存中,这些指令在运行过程中,依赖的就是数据,所以进程的运行过程中,需要依赖内存资源。
3.文件描述符表:进程运行过程中,是需要和硬盘进行交互的,硬盘上的数据,就是以文件的形式来组织的,而进程在读写文件的时候,就需要进行“打开文件”操作,比如 C语言 上的 “fopen”,每次打开一个文件,就会把这个文件的信息保存到文件描述符表中,表里的每个项,就对应着一个已经打开了的文件。当然,操作系统中,会把很多的资源与抽象成文件来表示,不一定的硬盘,还有可能是网卡等。所以进程的运行,也会依赖硬盘、网卡等资源,同时,进程的运行,它所执行的指令都是依靠 CPU 的,进程也需要消耗 CPU 。
所以,进程是操作系统进行资源分配的基本单位!
4.进程状态
5.进程优先级
6.进程上下文
7.进程记账信息
其中,进程状态、进程优先级、进程上下文、进程记账信息是进程调度的关键组成部分,在下文详细介绍。
5.进程调度
什么是进程调度?进程调度就是操作系统在进程管理过程中,要完成的重要工作。
1.进程状态
进程状态有很多种,但在这里主要介绍两种最经典的,也就是就绪状态和阻塞状态。
(1)就绪状态:进程可以随叫随到,随时到CPU上进行执行,就叫就绪状态
(2)阻塞状态:进程当前不适合到CPU上进行执行,叫做阻塞状态。
比如:你有三个爱好,打篮球、听音乐和敲代码,如果晚上你睡不着并且非常想找一件事情做缓解失眠状态,但是球馆已经关门了,也就是不能打篮球,所以你可以听音乐或者敲代码,也可以同时进行听音乐和敲代码,这个时候,听音乐和敲代码就属于就绪状态,而打篮球就属于阻塞状态。
2.进程优先级
进程并不是单一的,在百八十个进程中,它们占用的CPU资源也不会一样,也就是到CPU上执行的集合不是均等的,所以有一些进程的优先级更高一些,会吃到更多的CPU资源。
比如,在你看来听音乐的爱好大于敲代码,那么你会先选择听音乐。
3.进程上下文
进程上下文是指在进程调度过程中,一个进程执行一次,CPU上的寄存器就会保存当前的运行状态,过了一段时间后,进程回到CPU上执行,是回到上次执行结束的状态。
比如:在以前玩的一些离线小游戏,就是不需要联网也可以玩的,当时就有一个存档的功能,当你要退出游戏的时候,就可以就进行存档,等到下次登录游戏的时候,就会回到上次的存档记录。
4.进程记账信息
进程记账信息就是一个统计功能,统计每个进程在CPU上运行了多久。前面提到进程优先级,在那么多的线程里,可能有一些进程是小透明,但是又不能没有没有这些进程,所以这些线程有一定时间都没有得到CPU资源时,就会给他们分配一些资源。
比如:你一直喜欢听音乐和敲代码,过了一段时间,你发现已经很久没有打篮球了,你就会想着去打篮球。
进程是操作系统进行资源分配的基本单位,是操作系统实现多任务稳定运行的基础,通过合理的资源分配确保系统高效运转。
进程是“重量级的”,有没有“轻量级的呢”?答案肯定是有的,线程就是“轻量级”。线程是什么呢?,欲知后事如何,且听下回分解!