主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情! |
我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作 |
本教程运行环境: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上操作vi编辑器(Linux上的vi编辑器命令)
- Mondoze:住宅IP/原生IP/IDC IP,VPS低至$8.33/马来西亚服务器/AS152742/11.11促销
- torchbyte 罗马尼亚 VPS 起价为 20 美元/年,AMD Ryzen9+ NVMe 硬盘,免费 DDoS 防护
- zlidc(智联IDC):韩国原生IP云服务器,35.9美元/季度,4核/4G内存/50G SSD/300M优质网络@2.5T月流量
- 椰草云双11活动:香港云服务器81元/年,香港实体服务器199元/月(香港云服务商)
本文由主机参考刊发,转载请注明:linux中的上下文是什么? https://zhujicankao.com/88405.html
评论前必须登录!
注册