上篇文章(进程的基本概念)我们讲解了进程后,还留下了一个上下文数据概念还没有解释。本篇文章会对上下文概念进行详解。在理解上下文概念时,同时会引出很多新的概念。我们都会对此进行详细解释,希望本篇文章会对你有所帮助。
文章目录
一、什么是上下文呢?
1、1 进程上下文
1、2 中断上下文
1、3 举例理解进程上下文和中断上下文
1、4 进程上下文和中断上下文的对比区别
二、结合实例理解上下文概念
2、1 时间片
2、1、1 时间片用完后等同是该进程发生了中断吗?
2、2 上下文数据
2、2、1 上下文和上下文数据的区别
🙋♂️ 作者:@Ggggggtm 🙋♂️
👀 专栏:Linux从入门到精通 👀
💥 标题:上下文概念详解 💥
❣️ 寄语:与其忙着诉苦,不如低头赶路,奋路前行,终将遇到一番好风景 ❣️
一、什么是上下文呢?
上下文是指程序或者系统当前所处的执行环境和状态,它包括了程序的状态、寄存器值、内存映射、文件描述符、信号处理器等信息。上下文是一个抽象的概念,它描述了程序或者系统的执行环境和运行状态。在操作系统中,上下文通常分为进程上下文和中断上下文两种类型。
1、1 进程上下文
进程上下文是指进程当前的执行环境和状态,包括了进程的状态、寄存器值、内存映射、文件描述符、信号处理器等信息。
进程上下文是操作系统中用于管理进程的重要概念,它决定了进程的执行环境和运行状态。当一个进程被中断或者时间片用完时,操作系统会将当前进程的上下文数据保存到进程控制块(Process Control Block,PCB)中,并加载下一个进程的上下文数据。当下一个进程的时间片用完时,操作系统会将当前进程的上下文数据保存到PCB中,并加载下一个进程的上下文数据。这个过程会不断地重复,直到所有进程都执行完毕。
这里引出了许多新的概念:进程中断、时间片、上下文数据。我们会在下文举实例将他们串联起来并对其进行解释。
1、2 中断上下文
中断上下文是指中断处理程序当前的执行环境和状态,包括了中断处理程序的状态、寄存器值、中断向量、中断源等信息。当发生中断事件时,操作系统会立即中断当前进程的执行,转而执行中断处理程序。此时,中断处理程序需要保存当前进程的上下文数据,并加载中断处理程序的上下文数据。当中断处理程序执行完毕后,操作系统会恢复之前被中断的进程的上下文数据,并继续执行该进程。
1、3 举例理解进程上下文和中断上下文
假设有一个操作系统正在运行多个进程,其中一个进程正在执行一个计算任务,需要占用CPU资源。此时,一个外部设备发生了中断事件,需要操作系统立即响应并处理中断事件。
在这个例子中,进程上下文是指当前正在执行计算任务的进程的执行环境和状态,包括了进程的状态、寄存器值、内存映射、文件描述符、信号处理器等信息。当中断事件发生时,操作系统需要保存当前进程的上下文数据,以便在下一次调度时,能够恢复进程的执行环境和状态。
中断上下文是指中断处理程序当前的执行环境和状态,包括了中断处理程序的状态、寄存器值、中断向量、中断源等信息。当中断事件发生时,操作系统需要立即中断当前进程的执行,转而执行中断处理程序。此时,中断处理程序需要保存当前进程的上下文数据,并加载中断处理程序的上下文数据,以便能够正确地处理中断事件。
1、4 进程上下文和中断上下文的对比区别
我们详细对比一下两者可能更容易理解:
- 执行环境不同:进程上下文是指进程当前的执行环境和状态,包括了进程的状态、寄存器值、内存映射、文件描述符、信号处理器等信息;而中断上下文是指中断处理程序当前的执行环境和状态,包括了中断处理程序的状态、寄存器值、中断向量、中断源等信息。进程上下文和中断上下文的执行环境不同,进程上下文是进程在用户态下的执行环境,而中断上下文是中断处理程序在内核态下的执行环境。
- 触发方式不同:进程上下文是在进程被中断或者时间片用完时,操作系统会将当前进程的上下文数据保存到进程控制块(Process Control Block,PCB)中,并加载下一个进程的上下文数据;而中断上下文是在发生中断事件时,操作系统会立即中断当前进程的执行,转而执行中断处理程序。
- 保存位置不同:进程上下文数据通常保存在进程控制块(PCB)中,而中断上下文数据通常保存在操作系统内存中的特定位置。
- 处理方式不同:进程上下文和中断上下文的处理方式也不同。在进程上下文中,操作系统需要保存当前进程的上下文数据,并加载下一个进程的上下文数据。在中断上下文中,操作系统需要保存当前进程的上下文数据,并加载中断处理程序的上下文数据。当中断处理程序执行完毕后,操作系统会恢复之前被中断的进程的上下文数据,并继续执行该进程。
总结:上下文是指程序或者系统当前所处的执行环境和状态,它包括了程序的状态、寄存器值、内存映射、文件描述符、信号处理器等信息。在操作系统中,上下文通常分为进程上下文和中断上下文两种类型。进程上下文是用于管理进程的重要概念,决定了进程的执行环境和运行状态;中断上下文是用于处理中断事件的重要概念,决定了中断处理程序的执行环境和处理方式。
我们了解到上面的概念后,可能还是很模糊。毕竟概念都是抽象的。接下里会举一些例子再来解释和理解上述的概念。
二、结合实例理解上下文概念
我们上篇文章讲到,我们所写的代码,运行的程序本质上都是在内存上创建进程。 我们将程序运行起来后,就会产生很多临时数据。临时数据是保存在和寄存器当中的。寄存器有很多种,都是存储不同的数据,如下图:
假如我们内存中有若干个进程,如下图:
CPU需要从内存中读取数据。我们知道,不是所有的进程都可以在很短的时间的运行完毕的。假如进程1需要10s才能运行完毕,那CPU是只读取进程1的数据而花费10s吗?现在我们的计算机中大多是只有一个CPU的。CPU花费10s只去读一个进程时,这就意味着其他的进程是不在运行的。事实是我们的计算机是同时可运行多个进程,如下图:
那CPU到底是怎么读取数据的呢?这里我们引出时间片和上下文数据的概念。
2、1 时间片
时间片(Time Slice)是操作系统中用于实现多任务调度的一种技术。在多任务系统中,操作系统需要将CPU时间分配给多个进程或线程,让它们交替执行,以达到同时运行多个任务的效果。时间片就是将CPU时间划分为若干个小的时间段,每个时间段称为一个时间片,每个进程或线程在一个时间片内执行一定的指令,然后切换到下一个进程或线程,以此实现多任务调度。
结合上面例子,我们通俗来讲:一个进程并不是一次就运行完毕的,时间片就是规定了每个程序的运行时间。时间片的大小通常是几十毫秒到几百毫秒之间,具体大小取决于操作系统的设计和实现。当一个进程的时间片用完以后,即使程序没有运行完毕,也不在运行该程序,而是加载下一个进程的数据。
2、1、1 时间片用完后等同是该进程发生了中断吗?
我们知道当一个进程的时间片用完后,就不再执行该进程,操作系统会将CPU的执行权转移到另一个进程上 。那么当一个进程的时间片用完后,等同是该进程发生了中断而执行中断处理程序吗?
在某种程度上,当一个进程的时间片用完后,可以看作是该进程发生了中断而执行中断处理程序。因为当一个进程的时间片用完后,操作系统会将CPU的执行权转移到另一个进程上,这个过程就类似于中断处理程序的执行。在这个过程中,操作系统需要保存当前进程的上下文数据,并加载下一个进程的上下文数据,以便继续执行。这个过程和中断处理程序的执行过程非常相似,都需要保存当前上下文数据,并加载新的上下文数据。
但是,需要注意的是,当一个进程的时间片用完后,操作系统并不会真正地执行中断处理程序。中断处理程序是在发生中断事件时才会被执行的,例如硬件故障或者用户按下了中断键。当一个进程的时间片用完后,操作系统只是将CPU的执行权转移到另一个进程上,这个过程并不是真正的中断处理程序。总结:当一个进程的时间片用完后,可以看作是该进程发生了中断而执行中断处理程序,但是这个过程并不是真正的中断处理程序。
2、2 上下文数据
通过上面对时间片进行了解后,那么问题来了:进程1的时间片用完后,就不再执行进程1,操作系统会将CPU的执行权转移到进程上2,并没有运行完的进程1在CPU的寄存器上产生的许多临时数据需要我们保存下来吗?
CPU的执行权再次回到进程1时,肯定不是从新开始运行进程1的。所以进程1的时间片用完后,所产生的许多临时数据是需要保存下的。而这个临时数据我们又称它为上下文数据。通俗讲,上下文数据就是进程执行时处理器的寄存器中的数据。
问题又来了: CPU和寄存器只有一套,进程有很多个,因此会产生很多份上下文数据(临时数据),进程的时间片用完后,上下文数据又保存在哪里呢?
上下文数据保存在操作系统内存中的特定数据结构中,这个数据结构通常被称为上下文块(Context Block)或者上下文记录(Context Record)。上下文块包含了进程或者中断处理程序的所有上下文数据。上下文块又是保存在进程控制块(Process Control Block,PCB)中的。
到这里我想大家应该知道为什么在计算机只有一个CPU的情况下,同时还能多进程运行。我们用户感受到的多个进程在同时运行,本质上是CPU的时间片的快速切换完成的。
2、2、1 上下文和上下文数据的区别
学到这里,有很多同学分不清楚上下文和上下文数据的概念了。在这里给大家对比理解一下两者的概念区别。
上下文是指程序或者系统当前所处的执行环境和状态,它包括了程序的状态、寄存器值、内存映射、文件描述符、信号处理器等信息。上下文是一个抽象的概念,它描述了程序或者系统的执行环境和运行状态。
上下文数据是指具体的上下文信息,它包括了程序或者系统的状态、寄存器值、内存映射、文件描述符、信号处理器等具体数据。上下文数据是上下文的具体表现形式,它是程序或者系统当前状态的具体描述。
举个例子,当一个进程正在执行一个计算任务时,它的上下文包括了进程的状态、寄存器值、内存映射、文件描述符、信号处理器等信息。这些信息构成了进程的上下文,描述了进程的执行环境和运行状态。而这些具体的信息,就是进程的上下文数据。
总而言之,上下文和上下文数据是两个不同的概念,它们之间存在一定的区别。上下文是指程序或者系统当前所处的执行环境和状态,是一个抽象的概念;而上下文数据是指具体的上下文信息,包括了程序或者系统的状态、寄存器值、内存映射、文件描述符、信号处理器等具体数据,是上下文的具体表现形式。