Linux是一个多任务操作系统,通过CPU上下文切换实现任务的并发执行。进程上下文切换涉及用户态和内核态的切换,而线程上下文切换只涉及私有数据和寄存器的切换。中断上下文切换是为了响应硬件事件。过多的上下文切换会降低系统性能。
本文从.NET高级调试的角度分析了Windows中线程上下文切换的问题,通过观察线程栈和寄存器上下文,发现用户线程拥有两个线程栈,分别为用户态栈和内核态栈。调用线程执行Sleep(1)后,还会保存现场,保存在内核态线程栈的InitialStack ~ KernelStack之间。这个分析加深了对操作系统的理解。
完成下面两步后,将自动完成登录并继续当前操作。