详解上下文切换
2024-08-12 13:53:20
  1. xxx

    进程上下文切换是在进程级别进行的切换,意味着CPU从执行一个进程切换到执行另一个进程。因为进程具有独立的地址空间,所以在切换时需要保存和恢复较多的上下文信息,成本较高。
    线程上下文切换是在线程级别进行的切换,意味着CPU从执行一个线程切换到执行同一进程中的另一个线程。因为线程共享进程的地址空间,在切换时只需要保存和恢复较少的上下文信息,所以成本较低。

所以,从上面这段我是不是可以这么理解:

无论是进程上下文切换,线程上下文切换,协程上下文切换。都会涉及到CPU的上下文切换,内存堆栈的上下文切换(包括内核态虚拟地址空间和用户态虚拟地址空间)、内存管理上下文、调度信息、线程本地存储(TLS)。唯一的区别在于切换的数据量的多少是不同的。

  1. 协程的切换也要涉及CPU寄存器上下文的切换,而用户态无法操作CPU寄存器,也是需要在内核态执行,那么,凭什么说协程切换不涉及内核态呢。

  2. 那么,寄存器到底可不可以在用户态清零或者进行上下文切换!

  3. 下面是GPT说的:

    用户态程序不能直接操作CPU寄存器的上下文切换。寄存器的保存和恢复必须在内核态完成,操作系统负责在进程或线程切换时处理这些操作。用户态的协程切换虽然涉及到寄存器的状态保存和恢复,但这些操作是通过用户态的调度机制来实现的,不直接涉及到内核态。

踏马的这个逻辑,CPU寄存器上下文切换要涉及内核态,协程切换要涉及CPU寄存器上下文切换。最后你跟我说协程切换不涉及内核态,这尼玛什么什么意思?“杀人者非我也,兵也?”

所以,CPU是存在内核态的寄存器的?但是,最起码的PC寄存器得变吧。

进程上下文切换涉及进程级资源,线程上下文切换仅涉及线程级资源,那么协程上下文切换仅涉及协程级资源。

参考文献

  1. https://www.cnblogs.com/xzy186/p/17330347.html

  2. goroutine切换那些事儿

  3. 《操作系统真相还原》

  4. 《x86汇编语言-从实模式到保护模式》

Prev
2024-08-12 13:53:20
Next