首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在虚拟机中实现对新线程上下文的切换

在虚拟机中实现对新线程上下文的切换
EN

Stack Overflow用户
提问于 2014-05-02 10:24:39
回答 1查看 185关注 0票数 2

对于一个(宠物)项目,它是一个虚拟机(用纯C编写),我正在开发一个线程机制。为了更好地理解这个问题,几个注意事项:

  • 虚拟机解释一个字节码序列,大致类似于x86指令。
  • 它有一组寄存器,堆栈,IP等等.它们都分组到当前线程的执行上下文中。
  • 每个线程都有自己的执行上下文,因此它们不会处理其他线程的数据(但是在它们的本地堆栈中,它们有一部分全局堆栈被填充,直到线程使用全局上下文中的变量开始自己的生命)。
  • VM有一个表示每个线程的执行上下文列表,并且还有一个当前的执行contex。
  • 代码部分(字节码的字节)存储在公共位置。
  • 线程机制被实现为循环遍历执行上下文,并且总是从当前线程的执行上下文的指令指针(IP)执行字节码(是的,它现在是一个假多线程系统)。
  • 线程(将被)放在优先级队列中,如果线程需要新的优先级,则总是更新线程。
  • 当有一个新线程创建时,一个新的执行上下文被创建,VM将用数据填充它,然后切换到它,这个线程将运行,直到线程调度器决定是时候切换到另一个线程。

现在出现了一个问题:

基于线程调度程序应该确定的是什么,是时候自动切换到一个新线程了(不考虑线程产生控制,线程已经完成或创建了)?

我在想以下解决办法:

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

你有什么建议?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-02 19:25:12

一些随机的想法..。取决于创建VM的原因是什么。如果它以循环精度来模拟一些真实的或可想象的硬件,那么您必须遵循它的规范(我想在这种情况下您不会问这个问题:)。否则,我会认为VM的性能是最高优先级之一,因此,第二个类似的解决方案听起来是合理的,因为它看起来更适合缓存。但是,与文字时间切片不同,我会考虑一些基于缓冲区大小的限制,因为它同样更接近于缓存效率。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23425887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档