👽 博客主页: ➡➡ <芝士盘盘>⬅⬅
❤️🔥💗💓一键三连:👍 点赞 ✌️ 收藏 👌 关注
👻小小勉励:继续hustle everyday,尽管好日子又delay
进程
1.了解什么是进程
进程实际上就是程序的实体,操作系统里对程序的抽象
例如:
当我们点开一个程序
我们知道,程序文件都是存储在硬盘上的,当我们点击运行程序时,操作系统会将程序中的核心数据加载到内存上,这时我们就可以在任务管理器上找到这个进程,如下图:
我们在任务管理器上看到的都是进程,无论是应用还是后台进程。
2.操作系统如何管理进程
PCB、描述和组织
操作系统通过PCB来描述和组织进程
PCB:
PCB即进程控制块,PCB实际上是一个结构体,包含了很多信息,其中的关键信息包含:
1.pid 进程的身份标识(同一时刻一台主机上的进程的pid是唯一的)
2.内存指针(创建进程需要空间,内存指针即标识了用了哪些空间)
3.文件描述符(每个进程,都可以打开一些文件。文件描述符表里面就记录了当前进程都打开了哪些文件)
描述:
我们知道了PCB包含了很多信息,在操作系统中,就是用PCB来描述一个进程的。
组织:
操作系统中会用数据结构来组织多个PCB,来达到增删查改的目的。这个数据结构通常会用双向链表来实现。
3.进程调度
我们知道一般来说CPU的核心不会很多,比如六核、八核。一个核心只能跑一个或者两个进程,我们之前也看到了,任务管理器中显示的进程非常之多,那我们该如何让CPU执行如此多的进程呢,这就涉及到了进程调度,在此之前,我们需要先搞清楚什么是并行和并发。
并行和并发
并行简单,就是假设有六个进程分别有六个CPU核心来执行,此时六个进程是同时进行处理的,这就是并行。
而并发就是在进程数大于核心数时,我们无法使全部进程都并行进行,我们需要让CPU处理以下这个进程,然后再处理一下那个进程,由于CPU的切换速度足够快,我们人类无法感知到CPU在多个进程中进行了切换,这就达到了我们看上去的同时进行,这个就叫做并发。
所谓的进程调度就是通过并行和并发的方式来执行多个进程。
注意两点:
并行和并发一般会统一都说并发,我们常常聊起的并发实际上包括了并行和并发
并行和并发使同时存在的,并不是CPU并发处理了就没有并行了。
进程调度的相关属性
这些属性都是为了进程调度而存在的,包括以下四个:
1.进程的优先级
这个属性就是建议操作系统先执行哪个进程,后执行哪个进程,注意,这里说的是建议,不是命令,真正先操作哪个进程还是由操作系统本身决定的。
2.进程的状态
进程的状态有很多,最典型的就是就绪态和阻塞态,就绪态就是时刻准备着,随时都可以上CPU进行处理,阻塞态就是进程需要等待某个进程完成后才能进行处理,否则不行。
3.进程的记账信息
进程的记账信息简单来说就是CPU处理这个进程的时间总和,当一个进程处理时间过少时,就会提醒操作系统,当然了最后执行与否还是由操作系统自己决定的,也有可能他就是不执行,像我们经常会遇到的问题,程序卡了,让你选择等待响应还是退出程序。
4.进程的上下文
CPU在这么不同的进程上反复横跳,进程的上下文就是记录此次CPU处理这个进程处理到哪里了,以便下次返回来继续执行的时候不会搞错。具体实现就是在CPU切出进程时,上下文会记录此时CPU中处理结果寄存器的值,在CPU切回的时候上下文会将存储的值加载到CPU的寄存器中。
4.虚拟地址空间
我们知道,是进程就会消耗空间,当很多个进程同时进行的时候,难免可能会重叠使用空间,这时一个进程崩溃就可能会导致多个进程的崩溃,所以我们应该保证进程的隔离性和独立性,在操作系统中就是使用的虚拟地址空间来实现这一目的的。
进程操作指针指向内存的时候需要经过MMU映射,当p成了野指针的时候,MMU就会知道挡墙访问的是一个有问题的地址,就会向操作系统报错,操作系统就会让进程终止运行。
进程引进了隔离性,让系统更稳定,但是为了多个进程之间进行配合,操作系统又引入了“进程间通信”,在进程和进程之间搞一个公共资源,多个进程之间通过公共资源来进行通信。