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

这篇具有很好参考价值的文章主要介绍了【Linux从入门到精通】上下文概念详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

文章目录

 一、什么是上下文呢?

1、1 进程上下文

1、2 中断上下文

1、3 举例理解进程上下文和中断上下文

1、4 进程上下文和中断上下文的对比区别

二、结合实例理解上下文概念

2、1 时间片

2、1、1 时间片用完后等同是该进程发生了中断吗?

2、2 上下文数据

2、2、1 上下文和上下文数据的区别


🙋‍♂️ 作者:@Ggggggtm 🙋‍♂️

👀 专栏:Linux从入门到精通 👀

💥 标题:上下文概念详解 💥

 ❣️ 寄语:与其忙着诉苦,不如低头赶路,奋路前行,终将遇到一番好风景 ❣️

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

 一、什么是上下文呢?

  上下文是指程序或者系统当前所处的执行环境和状态,它包括了程序的状态、寄存器值、内存映射、文件描述符、信号处理器等信息。上下文是一个抽象的概念,它描述了程序或者系统的执行环境和运行状态。在操作系统中,上下文通常分为进程上下文中断上下文两种类型。

1、1 进程上下文

  进程上下文是指进程当前的执行环境和状态,包括了进程的状态、寄存器值、内存映射、文件描述符、信号处理器等信息。

  进程上下文是操作系统中用于管理进程的重要概念,它决定了进程的执行环境和运行状态。当一个进程被中断或者时间片用完时,操作系统会将当前进程的上下文数据保存到进程控制块(Process Control Block,PCB)中,并加载下一个进程的上下文数据。当下一个进程的时间片用完时,操作系统会将当前进程的上下文数据保存到PCB中,并加载下一个进程的上下文数据。这个过程会不断地重复,直到所有进程都执行完毕。

  这里引出了许多新的概念:进程中断时间片上下文数据。我们会在下文举实例将他们串联起来并对其进行解释。

1、2 中断上下文

  中断上下文是指中断处理程序当前的执行环境和状态,包括了中断处理程序的状态、寄存器值、中断向量、中断源等信息。当发生中断事件时操作系统会立即中断当前进程的执行转而执行中断处理程序。此时,中断处理程序需要保存当前进程的上下文数据,并加载中断处理程序的上下文数据。当中断处理程序执行完毕后,操作系统会恢复之前被中断的进程的上下文数据,并继续执行该进程。 

1、3 举例理解进程上下文和中断上下文

  假设有一个操作系统正在运行多个进程,其中一个进程正在执行一个计算任务,需要占用CPU资源。此时,一个外部设备发生了中断事件,需要操作系统立即响应并处理中断事件。

  在这个例子中,进程上下文是指当前正在执行计算任务的进程的执行环境和状态,包括了进程的状态、寄存器值、内存映射、文件描述符、信号处理器等信息。当中断事件发生时,操作系统需要保存当前进程的上下文数据,以便在下一次调度时,能够恢复进程的执行环境和状态。

  中断上下文是指中断处理程序当前的执行环境和状态,包括了中断处理程序的状态、寄存器值、中断向量、中断源等信息。当中断事件发生时,操作系统需要立即中断当前进程的执行,转而执行中断处理程序。此时,中断处理程序需要保存当前进程的上下文数据,并加载中断处理程序的上下文数据,以便能够正确地处理中断事件。

1、4 进程上下文和中断上下文的对比区别

  我们详细对比一下两者可能更容易理解:

  • 执行环境不同:进程上下文是指进程当前的执行环境和状态,包括了进程的状态、寄存器值、内存映射、文件描述符、信号处理器等信息;而中断上下文是指中断处理程序当前的执行环境和状态,包括了中断处理程序的状态、寄存器值、中断向量、中断源等信息。进程上下文和中断上下文的执行环境不同,进程上下文是进程在用户态下的执行环境,而中断上下文是中断处理程序在内核态下的执行环境
  • 触发方式不同进程上下文是在进程被中断或者时间片用完时,操作系统会将当前进程的上下文数据保存到进程控制块(Process Control Block,PCB)中,并加载下一个进程的上下文数据;而中断上下文是在发生中断事件时,操作系统会立即中断当前进程的执行,转而执行中断处理程序。
  • 保存位置不同进程上下文数据通常保存在进程控制块(PCB)中,而中断上下文数据通常保存在操作系统内存中的特定位置
  • 处理方式不同:进程上下文和中断上下文的处理方式也不同。在进程上下文中,操作系统需要保存当前进程的上下文数据,并加载下一个进程的上下文数据。在中断上下文中,操作系统需要保存当前进程的上下文数据,并加载中断处理程序的上下文数据。当中断处理程序执行完毕后,操作系统会恢复之前被中断的进程的上下文数据,并继续执行该进程。 

  总结:上下文是指程序或者系统当前所处的执行环境和状态,它包括了程序的状态、寄存器值、内存映射、文件描述符、信号处理器等信息。在操作系统中,上下文通常分为进程上下文和中断上下文两种类型。进程上下文是用于管理进程的重要概念,决定了进程的执行环境和运行状态;中断上下文是用于处理中断事件的重要概念,决定了中断处理程序的执行环境和处理方式。

  我们了解到上面的概念后,可能还是很模糊。毕竟概念都是抽象的。接下里会举一些例子再来解释和理解上述的概念。 

二、结合实例理解上下文概念

  我们上篇文章讲到,我们所写的代码,运行的程序本质上都是在内存上创建进程。 我们将程序运行起来后,就会产生很多临时数据。临时数据是保存在和寄存器当中的。寄存器有很多种,都是存储不同的数据,如下图:

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

  假如我们内存中有若干个进程,如下图:

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

   CPU需要从内存中读取数据。我们知道,不是所有的进程都可以在很短的时间的运行完毕的。假如进程1需要10s才能运行完毕,那CPU是只读取进程1的数据而花费10s吗?现在我们的计算机中大多是只有一个CPU的。CPU花费10s只去读一个进程时,这就意味着其他的进程是不在运行的。事实是我们的计算机是同时可运行多个进程,如下图:【Linux从入门到精通】上下文概念详解

  那CPU到底是怎么读取数据的呢?这里我们引出时间片和上下文数据的概念。 

2、1 时间片

  时间片(Time Slice)是操作系统中用于实现多任务调度的一种技术。在多任务系统中,操作系统需要将CPU时间分配给多个进程或线程,让它们交替执行,以达到同时运行多个任务的效果。时间片就是将CPU时间划分为若干个小的时间段,每个时间段称为一个时间片,每个进程或线程在一个时间片内执行一定的指令,然后切换到下一个进程或线程,以此实现多任务调度。

  结合上面例子,我们通俗来讲:一个进程并不是一次就运行完毕的,时间片就是规定了每个程序的运行时间。时间片的大小通常是几十毫秒到几百毫秒之间,具体大小取决于操作系统的设计和实现。当一个进程的时间片用完以后,即使程序没有运行完毕,也不在运行该程序,而是加载下一个进程的数据。

2、1、1 时间片用完后等同是该进程发生了中断吗?

  我们知道当一个进程的时间片用完后,就不再执行该进程,操作系统会将CPU的执行权转移到另一个进程上 。那么当一个进程的时间片用完后,等同是该进程发生了中断而执行中断处理程序吗?

  在某种程度上,当一个进程的时间片用完后,可以看作是该进程发生了中断而执行中断处理程序。因为当一个进程的时间片用完后,操作系统会将CPU的执行权转移到另一个进程上,这个过程就类似于中断处理程序的执行。在这个过程中,操作系统需要保存当前进程的上下文数据并加载下一个进程的上下文数据,以便继续执行。这个过程和中断处理程序的执行过程非常相似,都需要保存当前上下文数据,并加载新的上下文数据。
  但是,需要注意的是,当一个进程的时间片用完后,操作系统并不会真正地执行中断处理程序。中断处理程序是在发生中断事件时才会被执行的,例如硬件故障或者用户按下了中断键。当一个进程的时间片用完后,操作系统只是将CPU的执行权转移到另一个进程上,这个过程并不是真正的中断处理程序。

  总结:当一个进程的时间片用完后,可以看作是该进程发生了中断而执行中断处理程序,但是这个过程并不是真正的中断处理程序。

2、2 上下文数据

  通过上面对时间片进行了解后,那么问题来了:进程1的时间片用完后,就不再执行进程1,操作系统会将CPU的执行权转移到进程上2,并没有运行完的进程1在CPU的寄存器上产生的许多临时数据需要我们保存下来吗?

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

  CPU的执行权再次回到进程1时,肯定不是从新开始运行进程1的。所以进程1的时间片用完后,所产生的许多临时数据是需要保存下的。而这个临时数据我们又称它为上下文数据。通俗讲,上下文数据就是进程执行时处理器的寄存器中的数据

  问题又来了: CPU和寄存器只有一套,进程有很多个,因此会产生很多份上下文数据(临时数据),进程的时间片用完后,上下文数据又保存在哪里呢?

  上下文数据保存在操作系统内存中的特定数据结构中,这个数据结构通常被称为上下文块(Context Block)或者上下文记录(Context Record)。上下文块包含了进程或者中断处理程序的所有上下文数据。上下文块又是保存在进程控制块(Process Control Block,PCB)中的。

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

   到这里我想大家应该知道为什么在计算机只有一个CPU的情况下,同时还能多进程运行。我们用户感受到的多个进程在同时运行,本质上是CPU的时间片的快速切换完成的

2、2、1 上下文和上下文数据的区别

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

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

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

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

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

到了这里,关于【Linux从入门到精通】上下文概念详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Linux性能优化实践——CPU上下文

    Linux性能优化实践——CPU上下文

    Linux是一个多任务操作系统,它支持远大于CPU数量的任务同时运行。这些任务不是真正意义上的并行运行,而是系统在短时间内,将CPU轮流分配给它们,造成任务同时运行的错觉。 CPU需要知道任务从哪里加载,从哪里开始运行是通过设置好的CPU寄存器和程序计数器(Program C

    2024年02月13日
    浏览(18)
  • 从零开始理解Linux中断架构(10)---上下文切换长征路

    有了前面章节的一大堆的铺垫,我们现在考虑一个路径比较长的任务切换: 当前 用户态进程 10#,在中断发生后,被切换到了 用户态进程 15#。        这里将使用异常执行流的概念来解释切换过程。理解了最长的那个切换,其他的任务切换:通过系统调用引起的任务切换,

    2024年02月11日
    浏览(23)
  • linux通过grep根据关键字查找日志文件上下文

    grep -C 10 keyword catalina.out 显示file文件中匹配keyword字串那行以及上下10行 grep -B 10 keyword catalina.out 显示keyword及前10行 grep -A 10 keyword catalina.out 显示keyword及后10行 grep -C 10 keyword catalina.out aaa.txt grep -o keyword catalina.out | wc -l grep -c keyword catalina.out grep -V

    2024年02月16日
    浏览(43)
  • Linux_进程的优先级&&环境变量&&上下文切换&&优先级队列

    Linux_进程的优先级&&环境变量&&上下文切换&&优先级队列

    什么是优先级? 指定一个进程获取某种资源的先后顺序 本质是进程获取cpu资源的优先顺序 为什么要有优先级 进程访问的资源(CPU)是有限的 操作系统关于调度和优先级的原则:分时操作系统,基本的公平,如果进程因为长时间不被调整,就造成了饥饿问题 Linux的优先级特

    2024年04月09日
    浏览(11)
  • [元带你学: eMMC协议 31] eMMC Context(上下文) ID 详解 | eMMC 并行数据标识与隔离详解

    [元带你学: eMMC协议 31] eMMC Context(上下文) ID 详解 | eMMC 并行数据标识与隔离详解

    依JEDEC eMMC及经验辛苦整理,原创保护,禁止转载。 专栏 《元带你学:eMMC协议》 内容摘要 全文 5000 字, 主要内容 eMMC 为什么要引入 Context? Context 是什么? 如何使用Context 上下文? Context 上下文配置怎么做? 上下文 ID 应用局限 系统层和芯片组对 Context ID 支持情况 应用层软

    2024年02月11日
    浏览(53)
  • K8s进阶6——pod安全上下文、Linux Capabilities、OPA Gatekeeper、gvisor

    K8s进阶6——pod安全上下文、Linux Capabilities、OPA Gatekeeper、gvisor

    什么是安全上下文? 安全上下文(Security Context):K8s对Pod和容器提供的安全机制,可以设置Pod特权和访问控制。 官网参考链接 限制维度: 自主访问控制(Discretionary Access Control):基于用户ID(UID)和组ID(GID),来判定对对象(例如文件)的访问权限。 安全性增强的 Lin

    2024年02月11日
    浏览(13)
  • 【python】flask执行上下文context,请求上下文和应用上下文原理解析

    【python】flask执行上下文context,请求上下文和应用上下文原理解析

    ✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN新星创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开

    2024年03月26日
    浏览(11)
  • 超长上下文处理:基于Transformer上下文处理常见方法梳理

    超长上下文处理:基于Transformer上下文处理常见方法梳理

    原文链接:芝士AI吃鱼 目前已经采用多种方法来增加Transformer的上下文长度,主要侧重于缓解注意力计算的二次复杂度。 例如,Transformer-XL通过缓存先前的上下文,并允许随着层数的增加线性扩展上下文。Longformer采用了一种注意力机制,使得token稀疏地关注远距离的token,从而

    2024年02月13日
    浏览(11)
  • 无限上下文,多级内存管理!突破ChatGPT等大语言模型上下文限制

    无限上下文,多级内存管理!突破ChatGPT等大语言模型上下文限制

    目前,ChatGPT、Llama 2、文心一言等主流大语言模型,因技术架构的问题上下文输入一直受到限制,即便是Claude 最多只支持10万token输入,这对于解读上百页报告、书籍、论文来说非常不方便。 为了解决这一难题,加州伯克利分校受操作系统的内存管理机制启发,提出了MemGPT。

    2024年02月06日
    浏览(17)
  • CPU上下文切换

    CPU 上下文切换,就是先把前一个任务的 CPU 上下文(也就是 CPU 寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。 CPU 的上下文切换就可以分为几个不同的场景,也就是进程上下文切换、

    2024年02月14日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包