我必须用 C 语言构建一个双核处理器模拟器(它实际上是一个多级内存模拟、缓存 L1/L2、块替换等)。问题是,我很难找到一种同步内核的方法(我将其编程为线程)。有什么想法可以做一个全球时钟吗?我应该从线程更改为子进程吗?提前致谢
问问题
262 次
2 回答
1
这里有很多选择:由于您最终可能支持与多个线程的复杂交互,因此您可能需要考虑使用“虚拟时钟”和消息传递“总线”。这样,您将有更多时间专注于核心功能,而不是调试同步逻辑......
使用这种技术,您可以为每个“参与者”线程(最坏情况)构建一个状态机(参见此处),而不必担心互斥体/条件。一旦你有了这个基础,你就可以处理中途出现的案例(例如“我忘记了这个细节......不用担心,只需在此处添加一个状态......不必重新-shuffle我的互斥锁)。
此外,由于进行模拟都是关于“虚拟时间”的(因为您无法实时运行!),因此拥有基于“虚拟时钟”的基本架构可以将问题抽象到适当的级别。
于 2009-12-09T13:37:37.733 回答
0
你可以有一个时钟线程加上 N 个处理器线程。时钟线程可以显式调用每个处理器线程以进行 1 个处理步骤。每个处理器线程从时钟线程得到一个调用doStep()
;它迈出一步,然后将控制权返回给时钟线程。
您还可以随机化调用处理器线程以执行步骤的顺序,这样您就更有可能在客户端代码中发现错误。
于 2009-12-09T13:59:04.440 回答