gpt4 book ai didi

c - 在虚拟机中实现切换到新线程的上下文

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:40 26 4
gpt4 key购买 nike

对于作为虚拟机(用纯 C 编写)的(宠物)项目,我正在开发一种线程机制。一些注释可以更好地理解问题:

  • 虚拟机解释一系列字节码,或多或少类似于 x86 指令
  • 它有一组寄存器、堆栈、IP 等......它们都被分组到当前线程的执行上下文中。
  • 每个线程都有自己的执行上下文,所以它们不会弄乱其他线程的数据(但是在它们的本地堆栈中,它们有一部分全局堆栈被填满,直到线程开始自己的生命来自全局上下文的变量)。
  • VM 有一个执行上下文列表,代表每个线程,还有一个当前执行上下文。
  • 代码部分(byteode的字节)存放在共同的地方
  • 线程机制的实现是通过执行上下文循环并始终从当前线程的执行上下文的指令指针 (IP) 执行字节码(是的,目前它是一个伪造的多线程系统)。
  • 线程被(将)放入优先级队列,如果线程需要新的优先级,优先级队列总是会更新。
  • 当有(将有)一个新线程创建时,一个新的执行上下文被创建,VM 将用数据填充它,然后切换到它,这个线程将运行直到线程调度程序决定是时候切换到另一个线程。

现在问题来了:

线程调度程序应该根据什么来决定是时候自动切换到新线程(不考虑线程让出控制、线程完成或创建)?

我在考虑以下解决方案:

  • 在每个完整(CPU 级原子)指令完成时,线程调度程序将根据其优先级切换到下一个线程(完整指令:mov ax, 13 所以它总是会完成它, mov ax 后不会切换。
  • 每个线程都分配了一个特定的时间片,并在第一个完成的指令完成后切换到新线程

你有什么建议?

最佳答案

一些随机的想法...取决于创建 VM 的原因。如果它模拟了一些真实的或可想象的硬件,并且具有大约周期精度,则您必须遵循其规范(我想在这种情况下您不会问这个问题:))。否则,我会将 VM 的性能视为首要任务之一,因此,次要的解决方案听起来很合理,因为它看起来对缓存更友好。但我会考虑一些基于缓冲区大小的限制,而不是文字时间片,因为它再次更接近缓存效率。

关于c - 在虚拟机中实现切换到新线程的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23425887/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com