【操作系统基础】进程切换 进程调度 PCB 进程队列 中断过程

并发的进程切换

要了解并发进程的切换,首先要清楚知道什么是并发的进程!!
并发的进程最主要的特点就是走走停停的状态,从运行的开始到结束不是一步运行到底的,是走走,然后cup被调度走就停停,等到需要进程继续执行的时候,又可以被分配到cpu资源,然后走走;如此反复,知道进程运行结束!


在这里插入图片描述


(单cpu的讨论)如上图的两个进程process1和process2,虚线部分表示进程停止,实线部分表示进程运行,当process1停的时候,process2就运行,此时这个过程就是进程切换。


我们需要关注的两个问题:
1.❓ 是什么导致了进程切换?

中断。

2. ❓进程切换要做什么?

进程切换的时机有主动和被动离开cpu;
主动:比如:IO语句,系统调用;
被动:比如:高优先级进程,时间片到期;
进程切换就是和中断很基本一样的方式,而进程之所以能够被切换,也是有中断处理程序在执行,让进程能够切换,所以说中断处理程序也是一个很特殊的中断,它能够让进程发生切换。
总的来说:进程切换就是要执行中断处理程序咯,还有做的事情和中断做的事情。

在这里插入图片描述


中断技术

在这里插入图片描述
在这里插入图片描述
理解上面的图:

当发生某个事件时,意味着进程不能继续执行了,那么cpu就不会为进程服务了;
然后引起中断的事件,也就是使得进程不能继续运行的事件,它就会被执行;
当中断事件执行完毕后,会返回原程序继续执行,也就是回到进程继续执行;


运行的进程在用户态,而进行中断的事件是在内核态;而中断的过程就是一种陷阱机制,也就是说,从用户态陷入内核态执行内核态的进程,当执行完毕中断事件后,又会回到用户态继续执行原进程。


中断源

❓进程发生中断的原因是来自什么?
在这里插入图片描述

中断分为两种:

  1. 一种是外中断(我们通常叫为interruption);外中断特点是异步中断,就是随机中断,它的中断源是不可预知的,即对于进程来说是不知道什么时候会发生中断;
  2. 一种是内中断(也就是异常exception);内中断时同步中断,指程序执行过程中发生的中断,不是外部引起的,是程序自身引起的
    这两种都是中断;

中断的过程

在这里插入图片描述
中断的过程:
是从用户态陷入内核态的一个过程:在从用户态陷入内核态之前:会先保存进程上下文的内存信息;
然后再进入内核态,进入内核态要知道中断源是什么,然后处理中断源;
然后处理中断程序结束后,就会选择进程来恢复上下文信息,就继续执行恢复后的进程;
❓什么是进程上下文的信息呢

就是该进程的对cpu使用的时间,进程的计算结果等其他和进程的关键的信息,由于这个信息很多,所以用一个抽象的说法,上下文信息,主要是为了中断事件结束后,还能回到原来中断时候的地方继续执行进程。举个例子:比如你家里写作业,有5到题要写,写着一半,你妈妈突然喊你曲吃饭,此时,你就需要去吃饭,而在你的大脑中,会记住你作业做到哪里的位置,这样等吃完饭回来后,你还可以从上次没写完的那个地方开始写作业。你记住写作业写到哪里的位置就是上下文信息啦。


特权指令和非特权指令

特权指令:就是运行在内核态的一些指令:
常见的特权指令有:如下图的;其中我们要讲的进程切换也是运行在内核态的特权指令
在这里插入图片描述
❓cpu怎么知道要执行的指令是特权指令还是非特权指令?

靠的是硬件来完成:硬件中有个个双模式dual mode的bit位:0 表示内核模式,1表示用户模式;


用户态和内核态的模式切换:
中断是从用户态切换到内核态的唯一途径!!!
一旦发生中断,就会有模式切换的过程,就是用户态到内核态的切换!!!
在这里插入图片描述
下图:从中断的时刻开始,到中断处理程序的过程的开始中:就是模式切换的过程
在这里插入图片描述


进程的切换

一个进程要被切换,肯定是处于运行状态才有资格被切换,进程被切换了意味着进程要离开cpu,离开cup的原因就有两种:一种是主动离开,一种是被动离开;比如主动离开的是执行IO设备啊等其他原因,被动离开的是进程时间片到了等其他原因;那么进程离开cpu就去哪了呢? 进程离开cpu就会到等待状态,或者就绪状态
在这里插入图片描述
进程切换和中断有什么关系呢?


进程控制块–PCB

每个进程都有一个PCB,这个PCB我们成为进程控制块,其实就是一个数据结构的代码。这个数据结构的代码保存了进程的控制信息;
在这里插入图片描述
对于一个完整的进程来说:是包含PCB和进程的实体(进程实体就是进程运行时候所需要的数据,代码,变量等信息)。


进程在物理内存的存放

进程在物理内存存放并不是连续的存放的,是离散的存放的。
比如一个进程1:包含PCB和stack heap data text等信息,都是离散的在内存存放的;


而离散存放的目的为了减少连续存放带来内存碎片等问题;
同时离散存放也带来的问题是:必须要有一个表来记录这些进程离散的信息,来找到一个进程的实体;(者都是内存管理的问题,以后再讲)


进程队列

❓操作系统是如何管理进程呢?
是通过进程队列的数据结构管理的,进程队列会有就绪态的队列,和等待态的队列,一般来说,等待态的队列分为很多种,这是为方便管理每种不同的设备而设置的。
在这里插入图片描述
对于进程队列来说:管理的进程都是进程的PCB,而不是整个进程的上下文(PCB+进程实体)
这是因为进程的PCB已经包含了进程的其他信息,可以通过PCB找到进程实体的信息,而且进程的PCB相对进程实体来说,也比较小,而进程实体可能会很大,频繁的入队出队,会消耗大量的cpu资源管理,这样并不好。

进程调度

进程调度,简单的说就是进程在各个进程队列中跑来跑去,被操作系统调去就绪队列呀,或者等待队列,或者运行态,或者运行结束!
在这里插入图片描述
比如一个新创建的进程,一开始就会被调度到就绪队列中,然后cpu就会在某个时间调度该进程进入运行态,如果是一直运行结束就结束进程了,如果是发生中断那么又会被调度到等待队列或者就绪队列中。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呋喃吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值