什么是保存的背景下开关?
-
21-08-2019 - |
题
什么是确切地保存和恢复的情况下开关之间的两个线程
- 在同样的过程
- 两个进程之间
解决方案
这是相当复杂的问题,因为答复(s)都依赖许多事情:
- CPU问题
- 它可以显着变化,甚至在同一个家庭为例外的注册增加了对SSE/试试吧操作。
- 操作系统,由于它控制的处理程序的触发一个背景下开关,并决定是否CPU的硬件(如果有的话)协助下开关使用或没有。
- 例如Windows不使用英特尔硬件,可以做很多的方面开关存储你,因为它不存储浮点登记册。
- 任何优化启用一个程序认识到它自己的要求和能够通知的操作系统这个
- 也许是要表明,它不是使用FP寄存器所以,不要打扰它们
- 在结构有相当大的注册文件,如最RISC设计有相当大的好处,知道你只需要一小部分的这些寄存器
在最低限度在使用通用登记和登记程序计数将需要保存(假定的通用设计的最新CISC/RISC风格的通用Cpu).
请注意,试图要做的只有最少量的努力有关的一个方面是一个开关 专题的某些学术兴趣
Linux显然具有更多的信息可在这在公共领域,虽然我引用可能会有点过时了。
有一个'task_struct',其中包含的各个领域的工作有关的任务的状态,以及该进程的任务。
其中之一是'thread_struct'
/*CPU特定的状态这一任务*/
-结构thread_struct程;
有关信息高速缓存TLS描述,调试器、
错误信息、浮点虚拟86模式或IO权限。
每个结构定义了它自己的thread_struct其标识登记册和其他价值观保存在一个开关。
这是进一步复杂,存在通过重新命名册,允许多个航班指示(无论是通过超标量或管道有关的建筑设计).还原阶段的背景下swicth将很可能依赖的CPU是管道正在恢复在最初的空状态,这样的指令尚未退休的在管道中没有任何效果,因此可以被忽略。这使得设计的CPU,困难得多。
之间的差异的过程和一个线程,这一进程开关(其中总是意味着一线开关的所有主要操作系统)将需要更新存储器翻译信息,IO相关的信息和权限相关的结构。
这些主要指针,以更加丰富的数据结构因此将不会是一个显着的成本有关的线背景下开关。
其他提示
当时的背景下交换线程之间的相同的过程中,所有非挥发性的通用寄存器的流线保存和那些新的线是恢复;易失性的注册需要保存的只有如果当前线执行已中断的中断。寄存器的任何共同处理器使用的线(例如浮点处理),还应保存和恢复 如果切换线程之间的2过程中,除了需要什么一个正常的上下文转换、存储器和IO管理有关的变化也应完成;例如记忆的保护需要的过程是通过使用网页表和一页的目录表和每个进程都有一个独特的网页地址目录表,这已经被改变当处理改变。
这取决于OS你使用,但肯定的你必须要保存内容的所有寄存器(包括反的指令)和载入登记册的线你交换。
唯一的区别是涉及到我心灵的关于交换机之间的两个线上相同的过程是您不松散的内容L1和MMU的高速缓存。
我不确定,但如果我没有记错的话,也存储器工作组是交换。