1、什么是进程
- 进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。
-
一个程序跑起来,就称为进程
-
.exe叫做可执行文件,双击这个文件,操作系统就会把这个文件中的核心数据加载到内存中,同时在系统中生成一个进程。比如qq.exe文件双击之后,就成为一个进程
-
在任务管理器中,进程下面运行的都是进程,这里还包括自动运行的后台进程。
注意:
- 程序没有运行,单单一个可执行程序,就是静态的,运行起来,变成一个进程,才是动态的;
- 运行的程序多了,变成了进程,进程多了,就会占用CPU和内存资源,你才会觉得电脑卡顿。只是存储在硬盘上,电脑不会卡顿;
- 交换分区:很多操作系统内存空间不够的时候,会使用一部分硬盘空间,作为“交换分区”如果你C盘空间没了,影响到交换分区的使用,这个时候是可能会电脑出现卡顿;
2、进程控制模块(PCB)
2.1 什么是进程控制模块
1、计算机内部要管理任何现实事物,都需要将其抽象成一组有关联的、互为一体的数据,所以我们引入PCB的概念。
2.2 描述与组织
1、同一时刻,系统中的进程,有很多心,这么多的进程,操作系统,就得给他们安排好,涉及到描述与组织的概念。
2、描述:详细的表示清楚,一个进程有哪些属性/信息,我们使用结构体也就是PCB来进行描述,一个结构体里面包含一个进程的各种信息。
3、组织:通过一定的数据结构,把若干个用来描述的实体,给放到一起,并且进行增删改查;系统中通常会使用双向链表这样的结构来把这些PCB给组织在一起。
2.3 创建与销毁
1、创建一个进程,本质上就是创建PCB,并且加入到链表上。
2、销毁一个进程,本质上就是从链表上删除对应的PCB节点。查看任务管理器的进程列表,本质上就是在遍历这个链表
2.4 PCB中关键信息
2.4.1 pid(进程的身份标识)
一个主机同一时刻,这些进程的pid是唯一的,可以通过pid来确定一个进程;不同主机的pid可以不同。
2.4.2 内存指针
- 一个可执行文件,双击后开始运行,操作系统把文件中的核心数据加载到内存中;
- 既然要创建进程,势必要给进程分配内存空间,然后这个内存空间上就有很多区域:有的用来放指令,有的用来放数据......;
- 内存指针明确描述哪块内存是干啥用的,描述的是进程持有的内存资源(区别于文件描述符表)
2.4.3 文件描述符表
- 每个进程,都可以打开一些文件(文件其实是存储在硬盘上的数据);
- 文件描述符表里面就记录了当前进程都打开了哪些文件(打开了之后就可以后续针对这些文件进行读写操作了);
- 文件描述符表是描述进程持有的文件资源。
2.4.4 进程调度
1、进程调度不是PCB中的信息,只是接下来介绍的相关属性,与进程调度相关,所以这里补充一下进程调度的知识
2、因为CPU资源有限,需要合理安排资源,这里就涉及到了进程调度相关信息。
3、在多任务的操作系统中,所谓的进程调度,就是通过"并行"和"并发"的方式让计算机可以"同时"执行多个进程(任务)
4、并行执行:
每个CPU核心上,都可以独立的运行一个进程(运行进程的相关指令),多个CPU核心,就可以同时独立的运行多个进程。
5、并发执行:
一个CPU核心,先运行一下进程1,再运行进程2,再运行进程3.....;只要微观上切换的足够快,宏观上看起来就好像是3个进程同时运行一样。
2.4.5 进程状态
1、就绪状态:CPU调度某个进程,能够随叫随到就是就绪状态
2、阻塞状态:CPU调度某个进程,不能够随叫随到就是就绪状态
3、阻塞状态的进程,就无法被调度到CPU上执行;就绪状态的进程,才能上CPU来执行。
2.4.6 进程优先级
1、进程谁先谁后,有主次之分,都有自己的优先级;
2、系统调度的时候,会根据优先级,来给进程安排时间,优先级高的,就多安排些时间;
3、创建进程的时候,可以通过一些系统调用来干预优先级的,但是你给他设置一个高优先级,但是其他进程也都是高优先级,你设置的这个不一定先执行。
2.4.7 进程上下文
1、进程在CPU上执行了一会之后,要切换给别的进程,就需要保存当前运行的中间结果(存档),下次再轮到他执行的时候,就恢复之前的中间结果(读档),继续往下执行;
2、对于进程来说,上下文就是CPU中的寄存器的值(寄存器的值就包含了运行的中间结果,需要把这些结果保存到PCB的上下文信息中(内存))
2.4.8 进程记账信息
1、记账信息记录:每个进程在CPU上执行了多久,统计信息,起到辅助调度的效果;
2、执行进程的时候,虽然有优先级,但是还是不希望让有的进程完全捞不着CPU,通过记账信息,可以使进程调度更加均衡,避免有进程完全捞不到CPU执行。
3、总结(重要)
- 内存指针和文件描述符表描述不同的资源。进而得出以下结论:
- 进程是操作系统分配资源的基本单位,每个进程,以进程为单位,操作系统给它安排资源,进程内部再自己安排资源。