大家好 我是积极向上的湘锅锅💪💪💪
进程
1、 基础知识
进程是什么?
我们所编译的代码可执行文件只是储存在硬盘的静态文件,运行的时候加载到内存,CPU执行内存中指令,这个运行的程序叫做 进程
比如有个.c的文件在硬盘,那我想将它跑起来,那就需要编译之后变成二进制可执行文件,编译好之后需要一个运行环境,那就是需要加载到内存,最后需要CPU去执行这个文件,最终这个运行中的可执行文件就称为进程
总结:进程是对运行时程序的封装,操作系统进行资源调度和分配的基本单位
并发与并行
这个也是老生常谈的话题了
- 并发:对于单核CPU而言,在短时间内执行多个进程叫做并发
- 并行:对于多核CPU而言,同时执行多个进程叫做并行
而对于并发来说,CPU需要从一个进程切换到另一个进行,这个过程需要保持过程的状态信息
2、进程的状态
某个进程在某个时刻所处的状态除了创建和结束还有以下三个状态:
- 就绪态:暂时停止运行,等待CPU的调度
- 运行态:该时刻进行占用CPU
- 阻塞态:该进程在等待某一事件发生而暂停运行,比如IO
而对于阻塞状态,我们知道阻塞态的进程还是占据着物理内存,而在虚拟内存管理的操作系统中,不会让你站着茅坑不拉屎,所以会将阻塞态的进程的物理内存空间换出到硬盘,等需要再次运行的时候,再从硬盘换入到物理内存,这个状态叫做 挂起态
而我们知道就绪态也是在占用着物理内存,所以挂起态也分为以下俩种:
阻塞挂起状态: 进程在硬盘,等待某一事件发生
就绪挂起状态:进程也在硬盘,但只要进入内存,马上运行
注意:
- 只有就绪态和运行态可以切换,其他都是单向转换,就绪态的进程通过调度算法从而获得CPU时间,转为运行状态
- 运行态缺少需要的资源会转换为阻塞状态,而这个资源不包括CPU时间,缺少CPU时间会从运行态转换为就绪态
3、CPU的上下文切换
在了解进程的上下文切换的之前,知晓CPU的上下文切换是十分有必要的
什么是CPU的上下文?
① CPU 寄存器,是 CPU 内置的容量小、但速度极快的内存。
② 程序计数器,则是用来存储 CPU 正在执行的指令位置以及即将执行的下一条指令位置。
CPU 寄存器和程序计数器都是 CPU 在运行任何任务时必须的依赖环境,因此也被叫做 CPU 上下文
什么会有CPU的上下文切换?
我们知道进程都是放在内存中,由CPU去运行,但是CPU不会一次性会把任务执行完,它会记录任务目前的状态,然后去加载其他任务