VPS参考测评推荐
专注分享VPS主机优惠信息
衡天云优惠活动
华纳云优惠活动
荫云优惠活动

linux中的上下文是什么?

主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情!
我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作

linux中的上下文是什么?

本教程运行环境:linux7.3系统,Dell G3电脑。

1.什么是语境?Linux是一个多任务操作系统,它支持的任务同时运行的数量远远大于CPU的数量。当然,这些任务并不是真正的同时运行,而是系统在短时间内依次给它们分配CPU,给用户造成很多任务同时运行的错觉。

在每个任务运行之前,CPU需要知道任务加载到哪里,从哪里开始运行。也就是说,系统需要提前为他设置CPU寄存器和程序计数器(PC)。

CPU:它是内置在CPU中的一个很小但速度极快的内存。

程序计数器:用于存储CPU正在执行的指令的位置或下一条要执行的指令的位置。

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

什么是上下文:我们通常所说的CPU上下文是CPU在运行任何任务之前必须依赖的环境,包括CPU寄存器和程序计数器。

上下文切换:就是保存上一个任务的CPU上下文(即CPU寄存器和程序计数器),然后将新任务的上下文加载到这些寄存器和程序计数器中,最后跳转到程序计数器指向的新位置运行新任务。

2.上下文切换详细介绍根据CPU切换任务的不同,可以分为进程上下文切换、线程上下文切换和中断上下文切换。

我们先来了解下上下文切换涉及到的两个知识点:系统调用和进程运行状态。

流程的运行状态:

根据Linux权限级别,进程的运行空间分为内核空间和用户空间。运行在这两个空间的进程状态分别称为内核状态和用户状态。

内核空间(Ring 0):权限最高,可以直接访问所有资源(读文件,)

分配内存、IO操作、创建子进程...都是内核操作。这也表明当IO操作频繁时,系统参数会很高。

用户(环3):只能访问受限资源,不能直接访问内存等硬件设备。您必须通过系统调用进入内核才能访问这些特权资源。

典型的用户态空间程序有:Shells、数据库、web服务器、PHP程序、Java程序...

在linux系统中使用top命令查看cpu时,可以看到两项:user和system,分别对应用户态和内核态占用的cpu资源。

如上所述,我们的web服务是以用户模式运行的,没有文件io的权限。当我们需要读取文件时,就涉及到系统调用。

系统调用:

用户态到内核态的转换需要通过系统调用来完成。例如,当查看一个文件时,需要执行多个系统调用:打开、读取、写入、关闭等。系统调用的过程如下:

将原始用户状态的指令位置保存在CPU寄存器中;

为了执行内核代码,CPU寄存器需要更新到内核状态指令的新位置,最后跳转到内核状态运行内核任务;

系统调用后,CPU寄存器需要恢复原来保存的用户状态,然后切换到用户空间继续处理;

因此,系统调用的过程实际上涉及两次CPU上下文切换。

进程上下文切换?当进程的执行终止时,它之前称赞过的CPU会被释放,然后等待时间片的下一个进程会从就绪队列中取出;

当一个进程的时间片用完,会被系统挂起,切换到其他进程等待CPU运行;

如果一个进程需要大量的系统资源(比如内存不足),它将被挂起,系统将调度其他进程执行。

当一个更高优先级的进程(系统运行进程)需要一个时间片时,为了保证更高优先级的进程能够执行,当前进程将被挂起;

如果当前进程中有睡眠功能,也会暂停;

线程的上下文切换?对于操作系统来说,线程是最小的执行单元,进程是最小的资源管理单元。说白了,内核中所谓的任务调用,其实就是一个线程;但是,进程只为线程提供虚拟内存、全局变量和其他资源。所以,对于场景和过程,我们可以这样理解:

当一个进程只有一个线程时,可以认为一个进程等于一个线程。

当一个进程有多个线程时,这些线程将共享父进程的资源(即共享相同的资源,如虚拟内存和全局变量)。当上下文切换时,不需要修改这些资源。

另外,线程也有自己的私有数据,比如栈和寄存器,在上下文切换时也需要保存。

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

前后线程属于不同的进程,因为资源不共享,所以切换过程和进程上下文切换一样;

前后线程属于同一个进程。因为虚拟内存是共享的,所以在切换时,虚拟内存的这些资源会保持不变,只需要切换线程的私有数据、寄存器等非共享数据。

中断上下文切换?中断会中断进程的正常调度和执行。当中断其他进程时,有必要保存进程的当前状态。中断后,进程仍然可以从其原始状态恢复。

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

总结

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

无论哪种情况导致上下文切换,您都应该知道:

CPU上下文切换是保证Linux系统正常运行的核心功能之一。一般不需要我们特别关注。

但是过多的上下文切换会在寄存器、内核栈、虚拟内存等数据的存储和恢复上消耗CPU时间,从而缩短进程的实际运行时间,导致系统整体性能的大幅下降。

推荐:《linux视频教程》以上是Linux中什么是context的详细内容。更多请关注主机参考其他相关文章!

这几篇文章你可能也喜欢:

本文由主机参考刊发,转载请注明:linux中的上下文是什么? https://zhujicankao.com/88405.html

【腾讯云】领8888元采购礼包,抢爆款云服务器 每月 9元起,个人开发者加享折上折!
打赏
转载请注明原文链接:主机参考 » linux中的上下文是什么?
主机参考仅做资料收集,不对商家任何信息及交易做信用担保,购买前请注意风险,有交易纠纷请自行解决!请查阅:特别声明

评论 抢沙发

评论前必须登录!