多线程 – 上下文切换中保存的内容?
在两个线程之间的上下文切换中精确保存和恢复的内容
>在同一个过程中 解决方法
这是一个相当复杂的问题,因为答案取决于许多事情:
>有问题的CPU >即使在同一个系列中也可能有很大差异,例如为SSE ??/ MMX操作添加的附加寄存器. >操作系统,因为它控制在上下文切换中触发的处理程序,并决定是否使用CPU的硬件(如果有)来辅助上下文切换. >例如Windows不使用可以为您做大量上下文切换存储的Intel硬件,因为它不存储浮点寄存器. >程序启用的任何优化,意识到自己的要求,并能够通知操作系统 >也许是指示它不使用FP寄存器,所以不要打扰他们 至少使用通用寄存器和程序计数器寄存器将需要保存(假设大多数现有的CISC / RISC风格的通用CPU的通用设计). 注意,尝试仅对上下文切换进行最小的努力是topic of some academic interest Linux显然在公共领域有更多的信息可用,尽管我的引用可能有点过时了. 这是一个task_struct,它包含与任务状态相关的大量字段以及任务所用的进程. 其中一个是thread_struct
每个架构定义它自己的thread_struct,它标识保存在交换机上的寄存器和其他值. 这通过存在允许多个飞行指令(通过超标量或管道相关的架构设计)的重命名寄存器而进一步复杂化.上下文swicth的恢复阶段可能会依赖CPU的流水线恢复到初始的空状态,这样在管道中还没有退出的指令没有任何效果,因此可以忽略.这使得CPU的设计变得更加困难. 进程和线程之间的区别在于,进程切换(总是意味着所有主流操作系统中的线程切换)将需要更新内存转换信息,IO相关信息和权限相关的结构. 这些将主要是指向更丰富的数据结构的指针,因此与线程上下文切换相关的成本将不会很高. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – 线程陷入getDeclaredConstructors的可能
- java – Android(在Scala中):StackOverflowErro
- 在Java中绘制一个漂亮的圆圈
- java – 总是返回登录界面
- java – 无法将db’/data/data/my.easymedi.cont
- java – 运算符”不能应用于’T’,’T’表示有界
- java – spring将两个验证注释合二为一
- 【spring-boot】快速构建spring-boot微框架的方法
- javax.inject.Singleton和javax.ejb.Singleton之
- java – 无法使用JDBC连接到Sql Server数据库