首页 > 编程知识 正文

上下文切换的作用(简述进程上下文切换的时机)

时间:2023-05-06 04:06:09 阅读:96380 作者:2723

要理解CPU上下文切换,我们先来看看这个问题。

Linux是一个多任务操作系统,但是为什么它支持超过CPU数量的任务同时运行呢?

其实很简单。这些任务并不是真的同时运行,而是因为系统在短时间内将CPU依次分配给它们,所以大家可能会误以为多任务同时运行。

欢迎关注作者,优质文章在这里等你。

上下文切换原理

CPU上下文切换(有时称为进程切换或任务切换)意味着CPU从一个进程或线程切换到另一个进程或线程。

上下文是指在某个时间点上,CPU寄存器和程序计数器的内容。

寄存器是CPU内部的少量快速内存(对应CPU外部相对较慢的RAM主存)。寄存器可以通过快速访问公共值(通常是运算的中间值)来提高计算机程序的运行速度。程序计数器是一个特殊的寄存器,用来指示CPU在指令序列中的执行位置。存储的值是正在执行的指令或下一条要执行的指令的位置,具体取决于具体的系统。

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

这些保存的上下文存储在系统内核中,并在重新调度和执行任务时再次加载。这样可以保证任务的原始状态不受影响,任务给大家的感觉就是还在持续运行。

上下文切换只能在内核模式下发生。内核模式是CPU的特权模式,只有内核运行,可以访问所有内存和其他系统资源。其他程序,如应用程序,最初以用户模式运行,但它们可以通过系统调用运行一些内核代码。

在类似Unix的系统中,系统调用指的是活动进程(运行在CPU上的进程)对内核提供的服务的请求,如输入/输出(I/O)和进程创建(创建新的进程)。

这两种模式(用户模式和内核模式)在类Unix系统中的共存意味着当系统调用发生时,CPU需要切换到内核模式。这应该叫做模式切换,而不是上下文切换,因为当前的进程没有改变。

上下文切换是多任务操作系统的一个必要特征。多任务操作系统是指多个进程在一个CPU中运行而不互相干扰,看起来是同时运行的。这种并行的错觉是由于上下文的高速切换。当进程主动放弃其CPU时间或系统分配的时间片用完时,就会发生上下文切换。

00-1010上下文切换分为三种类型:

上下文切换分类

CPU的时间片会公平的分配给每个进程。当一个进程的时间片用完时,会被系统挂起,切换到其他进程等待CPU运行。当系统资源不足时,直到资源满足,进程才能运行,然后进程将被挂起,其他进程将被系统调度运行。当一个进程通过睡眠等方法主动挂起自己时,它也会被重新调度。当较高优先级的进程运行时,当前进程将被挂起,较高优先级的进程将首先执行。

一. 进程上下文切换

当一个进程只有一个线程时,可以认为该进程等于该线程。当一个进程有多个线程时,这些线程共享相同的资源,如虚拟内存和全局变量。在上下文切换期间,不需要修改这些资源。

前后线程属于不同的进程。此时,由于资源不共享,切换过程与进程上下文切换相同。前后线程属于同一个进程。众所周知,同一个进程中的线程共享资源。此时由于虚拟内存是共享的,切换时虚拟内存的这些资源保持不变,只需要切换线程、寄存器等非共享数据的私有数据。在这种情况下,线程上下文切换比进程间切换消耗更少的资源,所以这也是多线程相对于更多进程的优势。00-1010上下文切换有时由硬件中断触发。硬件中断是指硬件设备(如键盘、鼠标、调试解调器和系统时钟)向内核发送的信号,表示发生了一个事件(如按键、鼠标移动、从网络连接接收到的数据)。

00-1010一般情况下,上下文切换在几百到10,000的范围内,上下文切换超过10,000,很可能会遇到性能问题。我们需要详细了解。

资源切换时,意味着进程在等待资源,可能会出现I/O问题。非自愿上下文切换是指进程被强制调度,也就是在争夺CPU;中断数高表示CPU被中断处理程序占用。您可以通过/proc/中断查看。高频上下文切换会在寄存器、内核栈、虚拟内存等数据的存储和恢复中消耗CPU时间,影响进程的真实运行时间,影响系统服务。只有了解了CPU上下文切换的原理,才能在以后设计系统时妥善处理类似的问题。

00-1010对大厂建筑设计、BAT面试问题分享、编程语言理论或网圈趣闻轶事感兴趣。欢迎关注作者。是的,干货在这里。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。