聊一聊 C# 线程切换后上下文都去了哪里
原文中文,约10400字,阅读约需25分钟。发表于: 。一:背景 1. 讲故事总会有一些朋友问一个问题,在 Windows 中线程做了上下文切换,请问被切的线程他的寄存器上下文都去了哪里?能不能给我挖出来?这个问题其实比较底层,如果对操作系统没有个体系层面的理解以及做过源码分析,其实很难说明白,这篇我们就从.NET高级调试的角度试着分析一下吧。二:寄存器上下文去哪了 1. 用户线程的两态空间用C#代码创建的线程在操作系统层面上来说属于 用户态线程,这种...
本文从.NET高级调试的角度分析了Windows中线程上下文切换的问题,通过观察线程栈和寄存器上下文,发现用户线程拥有两个线程栈,分别为用户态栈和内核态栈。调用线程执行Sleep(1)后,还会保存现场,保存在内核态线程栈的InitialStack ~ KernelStack之间。这个分析加深了对操作系统的理解。