0


【Linux从入门到精通】上下文概念详解

上篇文章(进程的基本概念)我们讲解了进程后,还留下了一个上下文数据概念还没有解释。本篇文章会对上下文概念进行详解。在理解上下文概念时,同时会引出很多新的概念。我们都会对此进行详细解释,希望本篇文章会对你有所帮助。

🙋‍♂️ 作者:@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 上下文和上下文数据的区别

学到这里,有很多同学分不清楚上下文和上下文数据的概念了。在这里给大家对比理解一下两者的概念区别。

上下文是指程序或者系统当前所处的执行环境和状态,它包括了程序的状态、寄存器值、内存映射、文件描述符、信号处理器等信息。上下文是一个抽象的概念,它描述了程序或者系统的执行环境和运行状态。

上下文数据是指具体的上下文信息,它包括了程序或者系统的状态、寄存器值、内存映射、文件描述符、信号处理器等具体数据上下文数据是上下文的具体表现形式,它是程序或者系统当前状态的具体描述。

举个例子,当一个进程正在执行一个计算任务时,它的上下文包括了进程的状态、寄存器值、内存映射、文件描述符、信号处理器等信息。这些信息构成了进程的上下文,描述了进程的执行环境和运行状态。而这些具体的信息,就是进程的上下文数据。

总而言之,上下文和上下文数据是两个不同的概念,它们之间存在一定的区别。上下文是指程序或者系统当前所处的执行环境和状态,是一个抽象的概念;而上下文数据是指具体的上下文信息,包括了程序或者系统的状态、寄存器值、内存映射、文件描述符、信号处理器等具体数据,是上下文的具体表现形式。

标签: linux 内存 进程

本文转载自: https://blog.csdn.net/weixin_67596609/article/details/130669576
版权归原作者 Ggggggtm 所有, 如有侵权,请联系我们删除。

“【Linux从入门到精通】上下文概念详解”的评论:

还没有评论