Hi~朋友,关注置顶防止错过消息
摘要
进程的概念
什么是进程?
我们编写的代码在运行时会被加载到内存中,接着CPU会执行程序中的每一条指令,该程序就被成为进程。
并发和并行?
单核CPU虽然在某个瞬间只能运行一个进程,但在1秒钟内有可能会交替运行多个进程,这就是并发。
并行是指多核CPU同时运行多个进程。
进程的状态
为什么会有挂起状态?
如果我们的系统中存在大量阻塞状态的进程,这些进程会占用着很多物理内存空间,所以在操作系统中,我们通常会把阻塞状态的进程的物理内存空间换出到磁盘,等到再次需要运行时,再从硬盘换出到物理内存。
此时我们需要一个新的状态来描述进程没有实际占据物理内存空间的情况,该状态就是挂起状态。
进程的控制结构
操作系统中,使用进程控制块(PCB)数据结构来描述进程。
PCB中包含哪些信息?
如何保存PCB?
操作系统中的PCB通常以链表的方式进行组织,把相同状态的进程链在一起,组成队列。
除了链表的实现方式,还有索引的组织方式:将同一状态的进程组织在一个索引表中,索引表项指向对应的PCB,不同状态对应不同的索引表。
进程的控制
操作系统允许一个进程创建子进程,而且允许子进程继承父进程所拥有的资源,当子进程被终止时,其在父进程处继承的资源需要还给父进程。
创建进程
阻塞进程
当进程需要等待某一事件完成时,它可以调用阻塞语句把自己阻塞等待,阻塞的进程只能由另一个进程将它唤醒。
唤醒进程
终止进程
终止进程的方式主要有:
CPU上下文切换
在运行每一个任务时,CPU都需要知道任务从哪里加载,从哪里运行,因此操作系统需要先帮助CPU设置好CPU寄存器和程序计数器。
CPU寄存器和程序计数器是运行任何任务(任务主要包括进程、线程和中断)必须依赖的环境,这些环境就成为CPU上下文。
CPU上下文的切换就是把当前在运行的任务的CPU上下文保存起来,然后加载新任务的上下文到寄存器和程序计数器,然后跳转到程序计数器所指定的位置开始运行新任务。
保存下来的上下文信息,会在任务重新分配给CPU运行时进行重新加载,这样就能保证任务原来的状态不受影响。
根据任务的不同,CPU上下文切换分为:
进程的上下文切换
多个进程之间是共享CPU的,为了让不同的进程可以在CPU上执行,就需要在进程之间进行切换,一个进程切换成另一个进程运行,称之为线程的上下文切换。
进程是由内核管理和调度的,因此进程的切换只能发生在内核态。
进程上下文切换的资源
上下文信息保存在哪?
通常需要保存的上下文信息都存储在进程的PCB中,当需要运行A进程时,就从A进程的PCB中获取上下文,然后加载到CPU中,这样A进程就可以运行了。
上下文的切换场景