• 技术文章 >运维 >linux运维

    linux中的上下文是什么

    青灯夜游青灯夜游2022-11-10 20:09:31原创160

    在linux中,上下文又叫CPU上下文,是CPU运行任何任务前,必须依赖的环境,包括CPU寄存器和程序计数器;而上下文切换就是先把前一个任务的CPU上下文(也就是CPU寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。

    php入门到就业线上直播课:进入学习

    本教程操作环境:linux7.3系统、Dell G3电脑。

    1.什么是上下文?

    Linux是一个多任务的操作系统,它支持远大于CPU数量的任务同时运行,当然,这些任务实际上并不是真正的在同时运行,而是系统在很短的时间内,将CPU轮流分配给他们,给用户造成很多任务同时运行的错觉。

    在每个任务运行前, CPU 都需要知道任务从哪里加载,又从哪里开始运行。也就是说,需要系统事先给他设置好 CPU 寄存器和程序计数器(Program Counter,PC)

    综上所述,我们就有答案了

    什么是上下文:

    我们通常说的上下文又叫CPU上下文,是CPU运行任何任务前,必须依赖的环境,包括CPU 寄存器和程序计数器

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

    2.上下文切换详细介绍

    根据CPU切换运行任务的不同,又可以分为进程上下文切换线程上下文切换中断上下文切换

    我们先了解下面2个上下文切换涉及的知识点系统调用、进程运行态

    进程的运行态:

    Linux 按照特权等级,把进程的运行空间分为内核空间用户空间 。在这两种空间中运行的进程状态分别称为内核态用户态

    在linux系统使用top命令查看cpu时,能看到user和system两项,对应的就是用户态和内核态占用的cpu资源

    如上,我们的web服务是运行在用户态下的,对文件的io没有权限,当需要读取文件时,就涉及到系统调用

    系统调用:

    从用户态到内核态的转变,需要通过系统调用来完成。比如查看文件时,需要执行多次系统调用:open、read、write、close等。系统调用的过程如下:

    所以,一次系统调用的过程,其实是发生了两次 CPU 上下文切换。

    进程上下文切换?

    线程的上下文切换?

    对操作系统来说,线程是最小的执行单元,进程是最小的资源管理单元。说白了,所谓内核中的任务调用,实际上的调度对象是线程;而进程只是给线程提供了虚拟内存、全局变量等资源。所以,对于现场和进程,我们可以这么理解:

    综上,线程上下文切换有两种情况:

    中断上下文切换?

    中断处理会打断进程的正常调度和执行。在打断其他进程时,需要将进程当前的状态保存下来,中断结束后,进程仍然可以从原来的状态恢复运行。

    中断上下文切换并不涉及到进程的用户态。所以,即便中断过程打断了一个正处在用户态的进程,也不需要保存和恢复这个进程的虚拟内存、全局变量等用户态资源。中断上下文,其实只包括内核态中断服务程序执行所必须的状态,包括 CPU 寄存器、内核堆栈、硬件中断参数等。

    小结

    根据Tsuna的测试报告,每次上下文切换都需要几十纳秒到数微妙的CPU时间,这个时间还是相当可观的。

    不管是哪种场景导致的上下文切换,你都应该知道:

    相关推荐:《Linux视频教程

    以上就是linux中的上下文是什么的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    Linux系统运维及项目正式上线:点击学习

    专题推荐:linux
    上一篇:linux驱动程序运行在什么空间 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• linux什么命令可以过滤控制字符• linux tgz是什么格式• red hat linux是什么意思• linux o和a什么文件• linux使用什么实现虚拟内存
    1/1

    PHP中文网